8路输入模拟信号数值显示电路
功能
1.8路输入模拟信号数值显示电路
2.可以测量0~5CV的8路输入电压值,并在4位LED数码管上轮流显示或单路选择
3.显示。
测量最小分辨率为0.019V,测量误差约为0.02V。
方案
按系统功能实现要求,决定控制系统采用A T89C52单片机,A/D转换采用ADC0809。
系统除能确保实现要求的功能外,还可以方便地进行8路其他A/D转换量的测量、远程测量结果传送等扩展功能。
数字电压表系统设计方案框图如图。
系统硬件电路的设计
8路输入模拟信号数值显示电路电路由A/D转换、数据处理及显示控制等组成,电路原理图如图所示。
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二分频得到1MHz时钟。
单片机的P1、P3.0~P3.3端口作为四位LED数码管显示控制。
P3.5端口用作单路显示/循环显示转换按钮,P3.6端口用作
单路显示时选择通道。
P0端口作A/D转换数据读入用,P2端口用作0809的A/D转换控制。
主程序
在刚上电时,系统默认为循环显示8个通道的电压值状态。
当进行一次测量后,将显示每一通道的A/D 转换值,每个通道的数据显示时间为1S左右。
主程序在调用显示子程序和测试之程序之间循环,主程序流程图见图。
开始
初始化
调用A/D转换子程序
调用显示子程序
主程序流程图
显示子程序
显示子程序采用动态扫描法实现四位数码管的数值显示。
测量所得的A/D转换数据放在70H~77H内存单元中,测量数据在显示时需转换成10进制BCD码放在78H~7BH单元中,其中7BH存放通道标志数。
寄存器R3用作8路循环控制,R0用作显示数据地址指针。
控制源程序清单
以下是简易数字电压表的单片机控制源程序:
主程序和中断程序入口
ORG 0000H
LJMP START
ORG 0003H
RETI
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 @R0A
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
NOP
NOP
NOP LJMP START;
显示控制程序
DISPLAY: JB 00H,DISP11
MOV R3.#08H
MOV R0,#00H
MOV 7BH,#00H DISLOOP1: LCALL TUNBCD
MOV R2,#0FFH
DISLOOP2: LCALL DISP
LCALL KEYWORK1
DJNZ R2,DISLOOP2
INC R0
INC 7BH
DJNZ R3,DISLOOP1
RET
DISP11: MOV A,7BH
SUBB A,#01H
MOV 7BH,A
ADD A,#70H
MOV R0,A DISLOOP11: LCALL TUNBCD
MOV R2,#0FFH DISLOOP22: LCALL DISP
LCALL KEYWORK2
DJNZ R2,DISPLOOP22
INC 7BH
RET;
显示数据转为三位BCD码子程序TUNBCD MOV A,@R0
MOV B,#51
DIV AB
MOV 7AH,A
MOV A,B
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
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUN AB
MOV B,#51
DIV AB
JB F0,LOOP3
ADD A,#5
LOOP3 MOV 78H,A
RET;
显示子程序
DISP: MOV R1,#78H
MOV R5,#0FEH
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
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,82H,80H,90H,0FFH;
延时程序
DL10MS: MOV R6,#0D0H
DL1 MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET;
DL1MS: MOV R4,#0FFH;
LOOP11: DJNZ R4,LOOP11
MOV R4,#0FFH
LOOP22: DJNZ R4,LOOP22
RET;
电压测量(A/D)子程序
TERT: CLR A
MOV P2,A
MOV R0,#70H
MOV R7,#08H
LCALL TESTART
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
MOV A,P0
MOV @R0,A
CLR P2.5
INC R0
MOV A,P2
INC A
MOV P2,A
CJNE A,#08H,TESTEND; TESTEND: JC TESTCON
CLR A;
MOV P2,A
MOV A,#0FFH
MOV P0,A
MOV P1,A
MOV P3,A
RET;
TESTCON : LCALL TESTART
LJMP 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;
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,78H
CJNE A,#08H,KEYOUT11
KEY0UT11: JC KEYOUT1
MOV 7BH,#00H
KEYOUT1: RET;
WAIT21: LCALL DISP
AJMP WAIT22;
END
心得
通过本次的课程设计,知道了学好单片机的重要性。
每个程序的设计流程相当复杂,没好好掌握根本没法理解。
通过查阅资料,终于完成了本次设计,相当不容易。
在以后的生活中也许还有很多类似的工作,所以说掌握技术是非常重要的,这样才能在工作中显得游刃有余。
学习是个漫长的过程,得靠平时积累。
本次的设计为以后设计奠定了一个基础。