1、 课 程 设 计基于51数字电压表设计物理与电子信息学院电子信息工程1、课程设计要求使用单片机 AT89C52 和 ADC0832 设计一个数字 电压表,能够测量05V 之间的直流电压值,两位数码显示。在 单片机的作用下,能监测两路的输入电压值,用 8 位串行 A/D 转换器,8 位分辨率,逐次逼近型,基准电压为 5V;能用两位 LED 进行轮流显示或单路选择显示,显示精度 0.1 伏。2、 硬件单元电路设计AT89S52 单片机简介AT89S52 是一个低功耗,高性能 CMOS 8 位单片机,片内含 8k Bytes ISP(In-system programmable)的可反复擦写 100
2、0 次的 Flash 只读程序存储器,器件采用 ATMEL 公司的高密度、非易失性存 储技术制造,兼容标准数字电压表的设计1 MCS -51 指令系统及 80C51 引脚结构,芯片内集成了通用 8 位中央处理器和 ISP Flash 存储单元,功能强大的微型计算机的 AT89S52 可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S52 具有如下特点:40 个引脚,8k Bytes Flash 片内程序存储器,256 bytes 的随机存取数据存储器(RAM),32 个外部双向输入/输出(I/O)口,5 个中断优先级,2 层中断嵌套中断,2 个 16 位可编程定时计数器,2 个全双工
3、串行通信口,看门狗(WDT)电路,片内时钟振荡器。ADC0832 模数转换器简介ADC0832 是美国国家半导体公司生产的一种 8 位分辨率、双通道 A/D 转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用 ADC0832 可是使我们了解A/D 转换器的原理,有助于我们单片机技术 水平的提高。 图 1芯片接口说明: CS_ 片选 使能,低 电 平芯片使能。 CH0 模拟输入通道 0,或作为 IN+/-使用。 CH1 模拟输入通道 1,或作为 IN+/-使用。 数字电压表的设计2 GND 芯片参考 0 电位(地)。 DI 数据信号输入,
4、选择通道控制。 DO 数据信号 输出, 转换数据输出。 CLK 芯片时钟输入。 Vcc/REF 电源输入及参考 电压输入(复用)。单片机对 ADC0832 的控制原理:正常情况下 ADC0832 与单片机的接口应为 4 条数据线,分别是CS、CLK、DO、DI。但由于 DO 端与 DI 端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将 DO 和 DI 并联在一根数据线上使用。当 ADC0832 未工作时其 CS 输入端 应为高电平,此时芯片禁用,CLK 和 DO/DI 的电平可任意。当要进行 A/D 转换时,须先将 CS 使能端置于低电平并且保持低电平直到转换完全结束。此时
5、芯片开始转换工作,同时由处理器向芯片时钟输入端 CLK 输入时钟脉冲,DO/DI 端则使用 DI端输入通道功能选择的数据信号。在第 1 个时钟脉冲的下沉之前 DI 端必须是高电平,表示启始信号。在第 2、3 个脉冲下沉之前 DI 端应输入 2 位数据用于选择通道功能。当此 2 位数据为“1”、“0”时,只对 CH0 进行单通道转换。当 2 位数据为“1” 、“1”时,只对 CH1 进行单通道转换。当 2 位数据为“0” 、 “0”时,将 CH0 作为正输入端 IN+,CH1 作为负输入端 IN-进行输入。当 2 位数据为 “0”、“1”时,将 CH0 作为负输入端 IN-,CH1 作为正输入端
6、 IN+进行输入。到第 3 个脉冲的下沉之后 DI 端的输入电平就失去输入作用,此后 DO/DI 端则开始利用数据输出 DO 进行转换数据的读取。从第 4 个脉冲下沉开始由 DO 端输出转换数据最高位 DATA7,随后每一数字电压表的设计3 个脉冲下沉 DO 端输出下一位数据。直到第 11 个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第 11 个字节的下沉输出 DATD0。随后输出 8 位数据,到第 19 个脉冲时数据输出完成,也标志着一次 A/D 转换的结束。最后将 CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。ADC0
7、832 时序图:图二 数字电压表设计的结构框图和原理图数字电压表的设计4 图 3 结构框图AD 转换部分 AT89S52 数码管显示部分时钟电路复位电路数字电压表的设计5 图 4 电路原理图硬件电路实物图数字电压表的设计6 图 7 硬件实物图器件清单 表 1 器件清单所用器件名称 型号及大小 个数单片机开发板 AT89S52 一个滑动变阻器 10K 两个AD 转换器 ADC0832 一个LED 共阳 两个跳线插口 - 若干跳线 - 若干数字电压表的设计7 3. 软件单元电路设计数据处理子程序主要根据标度变换公式 1-1,把 0255 十进制数转换为 0.0V5.0V。主程序#include#d
8、efine uchar unsigned char#defineuint unsigned intsbitAD_CS = P11;sbitCLK = P12;sbitDIO = P10;uchar code table0=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x3f;/带小数点uchar code table1=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf;/不带小数点uchar Read_ADC(void);void display(void);void main(
9、void)while(1)数字电压表的设计8 display();uchar Read_ADC(void)uchar i = 0;uchar Value1 = 0;uchar Value2 = 0;AD_CS = 1;/关掉 AD;CLK = 0;DIO = 0;AD_CS = 0;/开启芯片DIO = 1;/开始位CLK = 0;CLK = 1; /上升沿DIO = 1;/单通道CLK =0;CLK = 1;DIO = 1;/通道选择位CLK = 0;CLK = 1;DIO = 1;/空闲位为数据输出做好准备 dio 要为高CLK = 0;CLK = 1;数字电压表的设计9 for(i =
10、0;i i;for(i = 0; i 8; i+) /读第二次数据if(DIO)Value2 |= 0x01 i;CLK = 1;CLK = 0;AD_CS = 1; /关掉芯片if(Value1 = Value2) /数据校准return Value1;elsereturn 0x00;void display(void)数字电压表的设计10 uchar i = 0;uchar a,b;i = Read_ADC();a=i*195/10000; /整数部分b=i*195/1000%10;/小数点后第一位P0=table0a;P2=table1b;4、课程设计总结通过这次设计,使我深入了解了 AT89S52 单片机和 ADC0832(AD 转换器)的结构和特点及数字电压表的工作原理,加深了对课本理论知识的理解,锻炼 了实践动手能力,理论知识与实践设计相结合,培养了创新开发的思维。在此次课程设计中,收获知识的同时,我还收获了阅历。在此过程中,我们通 过查找资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。 在此,非常感谢老师的帮助,没有老师的细心讲解,我们的成功会大打折扣。