内容正文:
任务一 制作数字显示电压表(2)
单片机技术及应用
同步精品课堂
高等教育出版社第 4 版
1
学会绘制 A/D 转换模块电路原理图
掌握焊接 A/D 转换模块电路的方法
编写实现数字显示电压表功能的程序
完成仿真调试程序,观察电压表显示效果
绘制 A/D 转换模块电路原理图和流程图
编写数字显示电压表的程序
理解A/D转换模块电路的工作原理和连接方式
调试程序以确保电压表准确显示电压值
在电子测量领域,数字显示电压表是常用的测量工具。
今天我们将利用串行 A/D 转换器 ADC0832、单片机最小系统和动态显示电路板制作一个量程为 0 - 5V 的数字显示电压表。
任务一 制作数字显示电压表 - 任务实施
绘制 A/D 转换模块电路原理图
① 启动 Protel DXP 2004,新建一个电路原理图文件,文件名为 “A/D 转换模块电路原理图”。
任务一 制作数字显示电压表 - 任务实施
② 在元件库 “Miscellaneous Connectors.IntLib” 中查找 “Header 2”(1 个电源插座) 和 “Header 3”(1 个 I/O 口插座),拖入工作窗口。
③ 在元件库 “TI Converter Analog to Digital.IntLib” 中查找 ADC0832,拖入工作窗口。
绘制 A/D 转换模块电路原理图
任务一 制作数字显示电压表 - 任务实施
④ 绘制如图所示的电路。
⑤ 保存该文件。
绘制 A/D 转换模块电路原理图
任务一 制作数字显示电压表 - 任务实施
① 根据 A/D 转换模块电路元件清单 (见表),选取元件,用万用表检测元件的好坏。
焊接 A/D 转换模块电路 - 元件选取与检测
名称 标号 规格 数量
电位器 RP1 100kΩ 1
I/O 口插座 P1 3 针 1
电源插座 P2 2 针 1
A/D 转换器 U1 8 脚 1
DIP 插座 - 8 脚 1
任务一 制作数字显示电压表 - 任务实施
② 绘制元件布局图,在万能电路板上按布局图依次进行元件的排列、插装。
③ 按工艺要求焊接元件,背面用直径为 0.5 - 1mm 的导线连接,直到所有的元件连接并焊完为止。焊接顺序为按键 → 电阻 →I/O 口插座 → 电源插座 → 连接导线。
焊接独立式键盘模块(焊接元件)
任务一 制作数字显示电压表 - 任务实施
根据数字显示电压表电路原理图,用最小系统电路板、数码动态显示电路板和 A/D 转换模块电路板,搭接数字显示电压表电路,如图所示。
搭接电路
任务一 制作数字显示电压表 - 任务实施
① 启动流程图绘图软件 Diagram Designer,新建一个文件,文件名为 “数字显示电压表主函数.DDD”,设置图纸大小为 A4。
② 从右侧的标准框图符号库中拖取所需的框图符号,调整其大小和位置。
③ 在框图中输入文本。
④ 用指向线连接框图符号。
⑤ 保存该文件。
绘制流程图 - 主函数流程图
任务一 制作数字显示电压表 - 任务实施
(1)主函数流程图如图所示
绘制流程图 - 主函数流程图
任务一 制作数字显示电压表 - 任务实施
(2) A/D 转换函数流程图如图所示。
绘制流程图 - 主函数流程图
任务一 制作数字显示电压表 - 任务实施
① 启动 Keil uVision2,新建一个工程文件 “数字显示电压表.uV2”。
② 新建一个 C51 源程序文件 “数字显示电压表.C”。
编程 - 新建工程与源程序文件
uchar A_D() {
uchar i, dat;
CS = 1; // 1个转换周期开始
CLK = 0; // 为第1个脉冲作准备
CS = 0; // CS置0,片选有效
DIO = 1;
CLK = 1;
CLK = 0;
DIO = 1; // DIO置1,规定的起始信号
CLK = 1; // 第1个脉冲
CLK = 0; // 第1个脉冲的下降沿,此前DIO必须是高电平
DIO = 1; // DIO置1,通道选择信号
CLK = 1; // 第2个脉冲,第2、3个脉冲下降沿之前,DIO必须
CLK = 0; // 发送输入两位数据用于选择通道,这里选通道CHO
DIO = 0; // DIO置0,选择通道0
任务一 制作数字显示电压表 - 任务实施
编程(新建工程与源文件)
② 新建一个 C51 源程序文件 “数字显示电压表.C”。
CLK = 1; // 第3个脉冲
CLK = 0; // 第3个脉冲下降沿
DIO = 1; // 第3个脉冲下降沿之后,输入端DIO失去作用,应置1
CLK = 1; // 第4个脉冲
for (i = 0; i < 8; i++) { // 高位在前
CLK = 1;
CLK = 0;
dat <<= 1;
dat |= (uchar)DIO;
}
CS = 1; // 片选无效
return dat; // 返回读出的A/D转换数据}
该函数实现了 ADC0832 的 A/D 转换操作,通过控制时钟信号和数据信号选择通道并读取转换结果。
任务一 制作数字显示电压表 - 任务实施
编程 - 代码分析 - 延时函数
void delay(unsigned int k) {
unsigned int i, j;
for (i = 0; i < k; i++) {
for (j = 0; j < 125; j++) {;}
}}
该函数用于实现毫秒级的延时,在显示和其他操作中起到控制时间的作用。
任务一 制作数字显示电压表 - 任务实施
编程 - 代码分析 - 显示子程序
该函数实现了数码管的动态显示,根据不同的位选择显示内容,并添加小数点。
void disp(void) {
uchar i, j;
for (i = 0; i <= 3; i++) {
P2 = POS[i];
j = buf[i];
if (i == 3) {
P0 = ① ; // 在第4位数码管的右下角加小数点
} else {
P0 = ② ; // 其他位正常显示
}
delay(4);
}}
任务一 制作数字显示电压表 - 任务实施
编程 - 代码分析 - 主程序
主程序循环调用 A/D 转换函数获取转换结果,计算电压值并更新显示缓冲区,最后调用显示子程序进行显示。
void main(void) {
unsigned char AD_val;
unsigned int digital_v;
while (1) {
AD_val = A_D();
digital_v = ③ ;
buf[0] = digital_v % 10;
buf[1] = digital_v % 100 / 10;
buf[2] = digital_v % 1000 / 100;
buf[3] = digital_v / 1000;
disp();
}}
任务一 制作数字显示电压表 - 任务实施
仿真调试程序 - 新建仿真文件与选择元件
① 启动仿真软件 Proteus 7.4,新建一个仿真文件 (数字显示电压表.DSN)。
② 单击元件选择按钮 “P”,从元件库中选择需要的元件。
③ 根据电路原理图绘制仿真电路图 (省略复位和时钟电路,如图所示),添加电源和地端 (VCC、GND),修改元件标号和标称值。
④ 双击芯片 AT89S51,在弹出的对话框中加载 HEX 文件 (数字显示电压表.HEX),修改时钟频率为 12 MHz。
⑤ 单击仿真按钮,用鼠标修改 RP1 的值,观察数码管显示的电压值的变换,如图 所示。
⑥ 按 Ctrl + S 组合键保存该文件。
随堂检测1
编程时,A/D 转换函数中,通道选择信号对应的操作是( )
A. DIO=0
B. DIO=1
C. CS=0
D. CS=1
【答案】B
【解析】在 A/D 转换函数中,DIO 置 1 为通道选择信号,所以选 B。
随堂检测2
简述制作数字显示电压表中编程的步骤。
答案:
① 启动 Keil uVision2,新建一个工程文件 “数字显示电压表.uV2”。
② 新建一个 C51 源程序文件 “数字显示电压表.C”,根据程序流程图,
将 C51 源程序代码补充完整。
③ 编译该程序,生成 HEX 文件。
随堂检测3
简述绘制 A/D 转换模块电路原理图的步骤
答案:
① 启动 Protel DXP 2004,新建一个电路原理图文件,文件名为 “A/D 转换模块电路原理图”。
② 在元件库 “Miscellaneous Connectors.IntLib” 中查找 “Header 2”(1 个电源插座) 和 “Header 3”(1 个 I/O 口插座),拖入工作窗口。
③ 在元件库 “TI Converter Analog to Digital.IntLib” 中查找 ADC0832,拖入工作窗口。
④ 自制电位器 RP1,存入自制元件库中,将电位器拖入工作窗口。
⑤ 绘制规定的电路。
⑥ 保存该文件。
1
讨论如何优化数字显示电压表的电路设计,提高其稳定性。分析在实际应用中,数字显示电压表可能存在的安全隐患及解决办法。
1. 绘制 A/D 转换模块电路原理图
任务一 制作数字显示电压表(2)
2. 焊接 A/D 转换模块电路
元件选取与检测
元件布局与插装
焊接元件
启动与新建文件
查找与拖入元件
绘制电路
保存文件
主函数流程图
新建文件
拖取框图与输入文本
连接框图与保存文件
2. A/D 转换函数流程图
3. 搭接电路
4. 绘制程序流程图
5. 编程
6.仿真调试程序
感谢观看
25
$$