此数字电压表,利用A/D转换原理将被测模拟量转换成数字量,并通过控制系统用数字方式显示测量结果。本设计采用AT89C51单片机,ADC0809进行模/数转换,能够测量8路0~5V的输入电压值,可用四位LED数码管轮流或单路显示测量结果。其最小分辨率约为0.019V,测量误差小于0.02V。
一、系统简介
本系统分为主控电路、显示电路、A/D转换电路、键盘控制电路、电源电路及复位电路等,系统框图如右图所示。
二、硬件电路设计
本系统采用AT89C51单片机作为控制核心,对8路模拟电压信号经8位A/D转换芯片ADC0809转换成数字信号后,送单片机进行处理,然后通过数码管显示其电压值。电路原理见上图。
ADC0809有8路模拟输入口IN0~IN7,通过地址线(23)~(25)脚选择其中一路进行A/D转换。
(22)脚为地址锁存控制,高电平有效。⑥脚为测试控制,当输入一个2μs正脉冲时,启动A/D转换。⑦脚为A/D转换结束标志,当A/D转换结束时,⑦脚输出高电平。⑨脚为A/D转换数据输出允许控制端,当⑨脚为高电平时,A/D转换数据从MSB2-1~MSB2-8输出。⑩脚为时钟输入端,利用单片机ALE脚的六分频再通过74LS74构成的四分频得到500kHz时钟。
AT89C51的P2、P0.4~P0.7口作为数码管显示控制,采用动态显示方式显示测量的数字电压值和通道号。P0.0口用作单路显示/循环显示转换按钮,P0.1口用作单路显示时通道选择按钮。
P1口作A/D转换数据输入,P3.0-P3.6口用作ADC0809的控制。
三、系统软件设计
本系统软件由显示控制子程序、显示数据处理子程序、8路电压采集子程序、键盘处理子程序等组成,采用汇编语言编程。
1.主程序流程如左图所示。
2.显示控制子程序
测量的A/D转换数据放在RAM70H~77H中,测量数据转换成的BCD码放在7AH~7DH中。
20H.0为显示方式标志位,21H存放通道标志数。R4用作8路循环控制,R0用作显示通道原始数据地址指针,R1为处理后的四位显示数据地址指针。程序通过测试20H.0来确定采用8路循环显示还是单通道显示。循环显示时每通道显示约2s。数字电压值是通过查表方式采用动态扫描法实现的。其程序流程如中图所示。
3.键盘处理子程序
本设计采用2个功能键和1个硬复位键。2个功能键接在P0.0与P0.1口上。对功能键的处理采用测试端口并设置标志的方法,使用了延时去抖处理。键盘按下时,还可以显示通道号码,松开后才显示测量电压值。循环显示时,通道号显示为“0”;单通道显示号码为0~8。
4.八路电压采集子程序
单片机为ADC0809提供所需的控制时序,采集到的八路电压数据分别存放在单片机RAM70H~77H中。程序流程如下图。
5.显示数据处理子程序
放在AT89C5170H~77H中的对应电压值数据必须转换成相应的BCD码后才能送数码管显示。由于本系统中ADC0809的参考电压VREF=VCC,所以最大测量电压5V所对应的二进制数就是FFH,而每伏电压对应的二进制数为33H。其处理方法是,用转换后的数据除以33H,得到的商即为电压值的个位数。余数×5后再除以33H得到的商×2即为电压值的十分位数。所余之数×2后再进行一次×5÷33H得到的商×2即为电压值的百分位数。同理可得到千分位数。最后进行四舍五入处理,若千分位处理后的余数大于19H即千分位加1。四舍五入处理后需要对各位进行进位调整。调整后的个位、十分位、百分位、千分位分别存入7AH~7DH中。