2012-2013-1《单片机接口与技术》课程设计
学院: 专业: 班级: 姓名: 学号:
数字电表
一.前言
传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便。目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。
二.题目分析
数字电压表,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。利用单片机ATS51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。
三.硬件设计
1.流程图
2.总体电路图
此电路的工作原理是:+5V模拟电压信号通过变阻器VR1分压后由ADC08009的IN0通道进入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低电平),经过模/数转换后,产生相应的数字量经过其输出通道D0-D7传送给ATC51芯片的P1口,ATC51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码传送给四位LED,同时它还通过其四位I/O口P2.0、P2.1、P2.2、P2.3产生位选信号控制数码管的亮灭。此外,ATC51还控制ADC0809的工作。其中,单片机ATC51通过定时器中断从P2.4输出方波,接到ADC0809的CLOCK,P2.6发正脉冲启动A/D转换,P2.5检测A/D转换是否完成,转换完成后,P2.7置高从P1口读取转换结果送给LED显示出来[3]。
四.软件流程设计
1. 程序设计总方案
根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图
开始 初始化 调用A/D转换子程序 调用显示子程序 结束
2. 系统子程序设计 (1) 初始化程序
所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定[9]。
(2)A/D转换子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图
开始 启动转换 A/D转换结束? 输出转换结果 数值转换 显示 结束
(3)显示子程序
显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms[10]。
在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。
3.主程序
A_DPORT EQU 8000H ;0809通道0地址
Z8279 EQU 08701H ;8279 状态/命令口地址 D8279 EQU 08700H ;8279 数据口地址 LEDMOD EQU 00H ;左边输入 八位字符显示 ;外部译码键扫描方式,双键互锁 LEDFEQ EQU 2FH ;扫描速率
LEDCLS EQU 0C1H ;清除显示 RAM
LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址 READKB EQU 40H ;读 FIFO RAM 地址 0 的命令字
S1 EQU 78H S2 EQU 79H S3 EQU 7AH S4 EQU 7BH TD EQU 7CH FLAG EQU 7DH ORG 0000H LJMP MAIN ORG 0003H LJMP INT_0 ORG 0013H LJMP INT_1 ORG 0040H
;*************************************************************************************** MAIN:
MOV SP,#60H MOV R0,#70H CLR TD CLR FLAG SETB IT1 SETB EX1 SETB EA LP0:
MOV DPTR,#A_DPORT LCALL INIT8279 LCALL TEST
LCALL DISPLAY LJMP LP0 NOP NOP NOP
LJMP MAIN
;**************************************************************************************** INT_1:
CLR EA CLR EX1 PUSH ACC MOV A,FLAG CPL A
MOV FLAG,A SETB EA SETB EX1
POP ACC RETI
;***********************数据采集***********要求R0=#70H****MOV A,R1********CPL A********* TEST:
PUSH 3 MOV R3,#8
MOV R7,#0FFH ;初始化 SETB IT0 SETB EA
SETB EX0 ;INT0 允许 MOV DPTR,#A_DPORT A_D:
MOVX @DPTR,A ;启动 A_D NOP NOP
CJNE R7,#00H,$ ;等待 A_D 转换结束 MOV @R0,A ;数据输出 INC R0
MOV R7,#0FFH ;清读数标志 DJNZ R3,A_D MOV R0,#70H POP 3 RET
;****************************************************** INT_0:
CLR EA CLR EX0
MOVX A,@DPTR ;读 A_D 数据 NOP NOP
MOV R7,#00H ;置读数标志 INC DPTR SETB EA SETB EX0 RETI
;************************************************************************ INIT8279: ;8279初始化子程序 PUSH DPH ;保存现场 PUSH DPL PUSH ACC
LCALL DELAY ;延时 MOV DPTR ,#Z8279
MOV A,#LEDMOD ;置8279工作方式
MOVX @DPTR,A
MOV A,#LEDFEQ ;置键盘扫描速率 MOVX @DPTR,A
MOV A,#LEDCLS ;清除 LED 显示 MOVX @DPTR,A
POP ACC ;恢复现场 POP DPL POP DPH RET
DELAY: ;延时子程序 PUSH 0 ;保存现场 PUSH 1 MOV 0,#0H DELAY1:
MOV 1,#0H DJNZ 1,$
DJNZ 0,DELAY1
POP 1 ;恢复现场 POP 0 RET
;******************************************************* ;显示字符子程序 ;输入: R4,位置 R5,值 DISLED:
PUSH DPH ;保存现场 PUSH DPL PUSH ACC
MOV A,#LEDWR0 ;置显示起始地址 ADD A,R4 ;加位置偏移量 MOV DPTR,#Z8279
MOVX @DPTR,A ;设定显示位置
MOV DPTR,#LEDSEG ;置显示常数表起始位置 MOV A,R5
MOVC A,@A+DPTR ;查表 MOV DPTR,#D8279
MOVX @DPTR,A ;显示数据 POP ACC ;恢复现场 POP DPL POP DPH RET
;******************************************************************** DISPLAY:
MOV A,FLAG
CJNE A,#0FFH,DISP1
DISP2:
MOV R0,#70H CLR TD PUSH 3 MOV R3,#8 LP2:
MOV A,R0 ADD A,TD MOV R0,A LCALL ZCBCD MOV A,S1 ADD A,#16 MOV R5,A MOV R4,#07
LCALL DISLED MOV R5,S2 MOV R4,#06
LCALL DISLED MOV R5,S3 MOV R4,#5
LCALL DISLED MOV R5,S4 MOV R4,#4 LCALL DISLED MOV R5,TD MOV R4,#1 LCALL DISLED MOV A,TD INC A ANL A,#07 MOV TD,A LCALL DELAY11 DJNZ R3,LP2 CLR TD POP 3
MOV R0,#70H RET DELAY11:
PUSH 5 PUSH 6 PUSH 7
MOV R5,#200 B2:
MOV R6,#20
B3:
MOV R7,#248 DJNZ R7,$ DJNZ R6,B3 DJNZ R5,B2 POP 7 POP 6 POP 5 RET
;******************************* DISP1:
PUSH 3
MOV R3,#10 MOV R0,#70H LP1:
LCALL GETKEY
CJNE A,#0FFH,CONT MOV A,B
CJNE A,#30H,CONT LCALL CLEAR_T CONT:
MOV A,R0 ADD A,TD MOV R0,A LCALL ZCBCD MOV A,S1 ADD A,#16 MOV R5,A MOV R4,#07
LCALL DISLED MOV R5,S2 MOV R4,#06
LCALL DISLED MOV R5,S3 MOV R4,#5
LCALL DISLED MOV R5,S4 MOV R4,#4 LCALL DISLED MOV R5,TD MOV R4,#1 LCALL DISLED LCALL DELAY10 DJNZ R3,LP1
POP 3
MOV R0,#70H RET DELAY10:
PUSH 5 PUSH 6 PUSH 7
MOV R5,#5 D2:
MOV R6,#20 D3:
MOV R7,#248 DJNZ R7,$ DJNZ R6,D3 DJNZ R5,D2 POP 7 POP 6 POP 5 RET
;************************************************************** CLEAR_T:
PUSH ACC MOV A,TD INC A
ANL A,#07 MOV TD,A MOV R3,#10 POP ACC RET
;************************************************************ ZCBCD:
MOV A,@R0 MOV B,#51 DIV AB MOV S1,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 S2,A 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 S3,A MOV A,B CLR F0 SUBB A,#1AH MOV F0,C MOV A,#10 MUL AB MOV B,#51 DIV AB
JB F0,LOOP4 ADD A,#5 LOOP4:
MOV S4,A RET
;********************************************************* ;读取键盘子程序
;输入: 无 ; 输出: B: 读到的键码 A: 按键的标志 GETKEY:
PUSH DPH ;保存现场 PUSH DPL PUSH PSW
MOV DPTR,#Z8279
MOVX A,@DPTR ;读8279状态 ANL A,#07H ;屏蔽D7-D3
JNZ GETVAL ;判断是否有键输入 MOV A,#0H ;置标志(无键输入) SJMP NKBHIT GETVAL:
MOV A,#READKB ;读 FIFO RAM 命令 MOVX @DPTR,A
MOV DPTR,#D8279
MOVX A,@DPTR ;读键
ANL A,#3FH ;屏蔽 SHIFT 和 CTRL 键 MOV DPTR,#KEYCODE ;键码表起始地址 MOVC A,@A+DPTR ;查表
MOV B,A ;置返回键值
MOV A,#0FFH ;置标志(有键输入) NKBHIT:
POP PSW ;恢复现场 POP DPL POP DPH RET
;********************************************************* ;LED显示常数表 LEDSEG:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ; 0,1,2,3,4,5,6,7' DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ; 8,9,A,B,C,D,E,F' DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH ;0,1,2,3,4,5, ;键盘键码表 KEYCODE:
DB 30H,31H,32H,33H,34H,35H,36H,37H ; 0,1,2,3,4,5,6,7' DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH ; 8,9,A,B,C,D,E,F' END
总结
1. 当IN0口输入电压值为0V时,显示结果如图,测量误差为0V。
2.当IN0输入电压值为1.50V时,显示结果如图。测量误差为0.01V。
3. 当IN0口输入电压值为3.50V时,显示结果。测量误差为0.01V。
因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。 可以通过校正ADC0808的基准电压来解决。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务