#简易数字电压表的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、简易数字电压表的设计
l .功能要求
简易数字电压表可以测量0~5V 的8路输入电压值,并在四位LED 数码管上轮流显示或单路选择显示。

测量最小分辨率为0.019 V ,测量误差约为土0.02V 。

2.方案论证
按系统功能实现要求,决定控制系统采用A T89C52单片机,A /D 转换采用ADC0809。

系统除能确保实现要求的功能外,还可以方便地进行8路其它A /D 转换量的测量、远程测量结果传送等扩展功能。

数字电压表系统设计方案框图如图1-1。

3.系统硬件电路的设

简易数字电压测量电
路由A /D 转换、数据处
理及显示控制等组成,电
路原理图如图1-2所示。

A /D 转换由集成电路0809完
成。

0809具有8路模拟输人
端口,地址线(23~25脚)可决定对哪一路模拟输入作A /D 转换,22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存,6脚为测试控制,当输入一个2us 宽高电平脉冲时,就开始A /D 转换,7脚为A /D 转换结束标志,当A /D 转换结束时,7脚输出高电平,9脚为A /D 转换数据输出允许控制,当OE 脚为高电平时,A /D 转换数据从该端口输出,10脚为0809的时钟输入端,利用单片机30脚的六分频晶振频率再通过14024二分频得到1 MHz 时钟。

单片机的P1、P3.0~P3.3端口作为四位LED 数码管显示控制。

P3.5端口用作单路显示/循环显示转换按钮,P3.6端口用作单路显示时选择通道。

P0端口作A /D 转换数据读入用,P2端口用作0809的A /D 转换控制。

4.系统程序的设计 (1)初始化程序
系统上电时,初始化程序将70H ~77H 内存单元清0,P2口置0。

(2)主程序
在刚上电时,系统默认为循环显示8个通道的电压值状态。

当进行一次测量后,将
图1-1 数字电压表系统设计方案
显示每一通道的A /D 转换值,每个通道的数据显示时间为1s 左右。

主程序在调用显示子程序和测试子程序之间循环,主程序流程图见图1-3。

(3)显示子程序 显示子程序采用动态扫描法实现四位数码管的数值显示。

测量所得的A /D 转换数据放在70H ~77H
内存单元中,测量数据在显示时需转换成为十进制
BCD 码放在78H ~7BH 单元中,其中7BH 存放通道标志数。

寄存器R3用作8路循环控制,R0用作显示数据地址指针。

(4)模/数转换测量子程序
模/数转换测量子程序用来控制对ADC0809八路模拟输入电压的A /D 转换,并将对应的数值移入70H ~77H 内存单元。

其程序流程见图1-4。

5.调试及性能分析 (1)调试与测试
采用WaveE2000编译器进行源程序编译及仿真调试,同时进行硬件电路板的设计制作, 烧好程序后进行软硬件联调,最后进行端口电压的对比测试,测试对比表见表1-1。

表中标准电压值采用UT56数字万用表测得。

从表中可以看出,简易数字电压表与“标准”数字电压表测得的绝对误差均在0.02 V 以内,这与采用8位A /D 转换器所能达到的理论误差精度相一致,在一般的应用场合可完全满足要求。

表1-1 简易数字电压表与“标准”数字电压表对比测试表
图1-3 主程序流程
●由于单片机为8位处理器,当输入电压为5.00 V 时,输出数据值为255(FFH ),因此单片机最大的数值分辨率为0.0196V (5/255)。

这就决定了该电压表的最大分辨率(精度)只能达到0.0196 V 。

测试时电压数值的变化一般以0.02的电压幅度变化,如要获得更高的精度要求,应采用12位、13位的A /D 转换器。

●简易电压表测得的值基本上均比标准值偏大0.01~0.02V 。

这可以通过校正ADC0809的 基准电压来解决,因为该电压表设计时直接用7805的供电电源作为基准电压,电压可能有偏差。

另外可以用软件编程来校正测量值。

●ADC0809的直流输入阻抗为1M Ω,能满足一般的电压测试需要。

另外,经测试 ADC0809可直接在2 MHz 的频率下工作,这样可省去分频器14024。

6.控制源程序清单
以下是简易数字电压表的单片机控制源程序。

;*************************************** ;* 简易数字电压表 * ;*************************************** ;测量电压最大值为5V ,显示最大值为5.00V
;70H ~77H 存放采样值,78H ~7BH 存放显示数据,依次为个位、十位、百位、通道标志位 ;P3.5作单路显示—循环显示转换按键用,P3.6作单路显示时选择通道按键用。

; *************************************** ;* 主程序和中断程序入口 * ;*************************************** ORG 0000H LJMP START ORG 0003H
RETI
图1-4 A/D 转换测量程序流程
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
RETI
; ***************************************
;* 初始化程序中的各变量*
;*************************************** CLEARMEMIO:CLR A
MOV P2, A
MOV R0, #70H
MOV R2, #0DH LOOPMEM: MOV @R0, A
INC R0
DJNZ R2, LOOPMEM
MOV 20H, #00H
MOV A, #0FFH
MOV P0, A
MOV P1, A
MOV P3, A
RET
;***************************************
;* 主程序*
;*************************************** START: LCALL CLEARMEMIO ;初始化MAIN: LCALL TEST ;测量一次
LCALL DISPLAY ;显示数据一次
AJMP MAIN
NOP ;PC值出错处理
NOP
NOP
LJMP START
; ***************************************
;* 显示控制程序*
;***************************************
DISPLAY: JB 00H, DISP11 ;标志位为1,则转单路显示控制子程序MOV R3, #08H ;8路信号循环显示控制子程序
MOV R0, #70H ;显示数据初址70H~77H
MOV 7BH, #00H ;显示通道路数初值
DISLOOP1:LCALL TUNBCD ;显示数据转为三位BCD码存入7AH、79H、78H MOV R2, #0FFH ;每路显示时间控制在4ms×255,约1s DISLOOP2:LCALL DISP ;调四位显示程序
LCALL KEYWORK1 ;按键检测
DJNZ R2, DISLOOP2
INC R0 ;显示下一路
INC 7BH ;通道显示数加1
DJNZ R3, DISLOOP1
RET
DISP11: MOV A, 7BH ;单路显示控制子程序
SUBB A, #01H
MOV 7BH, A
ADD A, #70H
MOV R0, A
DISLOOP11:LCALL TUNBCD ; 显示数据转为三位BCD码存入7AH、79H、78H MOV R2, #0FFH ; 每路显示时间控制在4ms×255,约1s DISLOOP22:LCALL DISP ; 调四位显示程序
LCALL KEYWORK2 ; 按键检测
DJNZ R2, DISLOOP22
INC 7BH ;通道显示数加1
RET
; ***************************************
;* 显示数据转换为三位BCD码子程序*
;***************************************
; 显示数据转为三位BCD码存入7AH、79H、78H(最大值为5.00V)
TUNBCD: MOV A, @R0 ;255/51=5.00V运算
MOV B, #51
DIV AB
MOV 7AH, A ;个位数放入7AH
MOV A, B ;余数大于19H,F0为1,乘法溢出,结果加5
CLR F0
SUBB A, #1AH
MOV F0, C
MOV A, #10
MUL AB
MOV B, #51
DIV AB
JB F0, LOOP2
ADD A, #5
LOOP2: MOV 79H, A ;小数后第1位放入79H
MOV A, B
CLR F0
SUBB A, #1AH
MOV F0, C
MOV A, #10
MUL AB
MOV B, #51
DIV AB
JB F0, LOOP3
ADD A, #5
LOOP3: MOV 78H, A ;小数后第2位放入78H
RET
;***************************************
;* 显示子程序*
;***************************************
;共阳显示子程序,显示内容在78H~7BH
DISP: MOV R1, #78H ;共阳显示子程序,显示内容在78H、7BH MOV R5, #0FEH ;数据在P1输出,列扫描在P3.0~P3.3 PLAY: MOV P1, #0FFH
MOV A, R5
ANL P3, A
MOV A, @R1
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV P1, A
JB P3.2, PLAY1 ;小数点处理
CLR P1.7 ;小数点显示(显示格式为xx.xx)
PLAY1: LCALL DL1MS
INC R1
MOV A, P3
JNB ACC.3, ENDOUT
RL A
MOV R5, A
MOV P3, #0FFH
AJMP PLAY
ENDOUT: MOV P3, #0FFH
MOV P1, #0FFH
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH;段码表;***************************************
;* 延时程序*
;***************************************
DL10MS: MOV R6, #0D0H ;10ms延时子程序
DL1: MOV R7, #19H
DL2: DJNZ R7, DL2
DJNZ R6, DL1
RET
;
DL1MS: MOV R4, #0FFH ;513+513=1ms
LOOP11: DJNZ R4, LOOP11
MOV R4, #0FFH
LOOP22: DJNZ R4, LOOP22
RET
;***************************************
;* 电压测量(A/D)子程序*
;***************************************
;一次测量数据8个,依次放入70H~77H单元中
TEST: CLR A ;数/模转换子程序
MOV P2, A
MOV R0, #70H ;转换值存放首址
MOV R7, #08H ;转换8次控制
LCALL TESTART ;启动测试
WAIT: JB P3.7, MOVD ;等A/D转换结束信号
AJMP WAIT
;
TESTART: SETB P2.3 ;测试启动
NOP
NOP
CLR P2.3
SETB P2.4
NOP
NOP
CLR P2.4
NOP
NOP
NOP
NOP
RET
;
MOVD: SETB P2.5 ;取A/D转换数据MOV A, P0
MOV @R0, A
CLR P2.5
INC R0
MOV A, P2 ;通道地址加1
INC A
MOV P2, A
CJNE A,#08H,TESTEND ;等8路A/D转换结束TESTEND:JC TESTCON
CLR A ;结束恢复端口
MOV P2, A
MOV A, #0FFH
MOV P0, A
MOV P1, A
MOV P3, A
RET
;
TESTCON:LCALL TESTART
AJMP WAIT
;***************************************
;* 按键检测子程序*
;***************************************
KEYWORK1:JNB P3.5, KEY1
KEYOUT: RET
;
KEY1: LCALL DISP ;延时消抖用
JB P3.5, KEYOUT
WAIT11: JNB P3.5, WAIT12
CPL 00H
MOV R2, #01H
MOV R3, #01H
RET
;
WAIT12: LCALL DISP ;键释放等待时显示用AJMP WAIT11
;
KEYWORK2:JNB P3.5, KEY1
JNB P3.6, KEY2
RET
;
KEY2: LCALL DISP ;延时消抖用
JB P3.6, KEYOUT
WAIT22: JNB P3.6, WAIT21
INC 7BH
MOV A, 7BH
CJNE A,#08H,KEYOUT11
KEYOUT11:JC KEYOUT1
MOV 7BH, #00H
KEYOUT1:RET
;
WAIT21: LCALL DISP ;键释放等待时显示用AJMP WAIT22
;
END。

相关文档
最新文档