第四组 简易数字电压表的设计.docx
《第四组 简易数字电压表的设计.docx》由会员分享,可在线阅读,更多相关《第四组 简易数字电压表的设计.docx(29页珍藏版)》请在冰豆网上搜索。
第四组简易数字电压表的设计
简易数字电压表的设计
作者:
任灵金巧咪王舜
指导老师:
徐武雄
摘要
本系统采用ATMEL公司的AT89S52单片机为核心,用HD7279来控制键盘和显示部分,通过ADC0809来实现模拟和数字电压的转换,再通过数码管来显示电压值及选择的通道值,还用了系统除了能确保实现要求的功能,测量0-5v的8路输入电压值,并能在四位LED数码管上显示,最高位显示通道号,通道采样可由0-7号键分别来选择模拟通道0-7号来选择外,还可以方便地进行8路其他A/D转换的测量、远程测量结果传送等扩展功能。
目录
一、系统设计部分3
1.设计要求3
2.总体框图3
二、方案论证3
1.方案选择3
2.方案比较3
3.方案论证4
三、硬件设计(电路的设计)4
1.系统电路4
⑴电路组成4
⑵电路功能4
⑶电路工作原理4
2.键盘和显示控制模块4
⑴模块组成4
⑵模块功能5
3.模拟数字转换模块6
⑴模块组成6
⑵模块功能6
4.单片机控制模块7
⑴模块组成7
⑵模块功能7
四、软件设计(程序的编写)7
五、系统测试13
1.测试仪表13
2.测试方法13
3.测试结果及分析13
六、总结14
七、附录14
八、参考文献19
一、系统设计部分
1.设计要求
设计的功能要求是:
测量0—5V的8路输入电压值,并在四位LED数码管上显示,最高位显示通道号,通道采样由按键来选择(0号…7号键分别来选择模拟通道0…7)。
2.总体框图
按系统功能实现要求,决定控制系统采用AT89S52单片机,A/D转换采用ADC0809,系统除能确保实现要求的功能外,还可以方便地进行8路其他A/D转换的测量、远程测量结果传送等扩展功能。
数字电压表系统设计方案框图如下(图1):
图1:
数字电压表的总体框图
二、方案论证
.键盘和显示控制模块的两种不同的方案如下:
1.方案选择
方案一:
采用逻辑门电路及开关去实现
方案二:
使用芯片HD7279
2.方案比较
方案一:
采用逻辑门电路及开关去实现,比如使用74LS244去驱动显示部分,但实现起来比较复杂且不稳定、不方便。
方案二:
使用芯片HD7279(串行接口8位LED数码管及64位键键盘智能控制芯片),单片机可以方便的对它进行适时的控制,功能极其的强大,所以是首选的芯片。
3.方案论证
经过上面的比较,选择方案二。
此外,控制模块和数字转换模块才用一种方法,即:
单片机控制模块使用的是ATMEL公司的AT89S52;模拟数字转换模块使用的是ADC0809芯片。
三、硬件设计(电路的设计)
1.系统电路
⑴电路组成
简易数字电压表测量电路由A/D转换器ADC0809,数据处理控制(单片机89S52),显示控制(HD7279和数码显示管)和分频器14024等组成。
⑵电路功能
测量0—5V的8路输入电压值,并在四位LED数码管上显示,最高位显示通道号。
⑶电路工作原理
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转换控制。
2.键盘和显示控制模块
⑴模块组成
本模块使用的是HD7279芯片。
HD7279典型的应用电路图如图2所示:
图2
⑵模块功能
HD7279是具有串行接口的,可以同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可以连接多达64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。
本系统中,只用了它64键中的8个,以及用了8个显示管中的4个,而且非常方便的跟单片机系统连接起来,从而可以达到设计的功能要求,所以在键盘和显示模块中,我们选用了HD7279芯片。
3.模拟数字转换模块
⑴模块组成
本模块采用的是芯片ADC0809。
⑵模块功能
ADC0809是8位逐次比较式A/D转换芯片,具有8路模拟量输入通道。
其内部逻辑结构如图3所示:
CLK
START
D0
D1
D2
D3
D4
D5
D6
D7
VCC
GND
EOC
ALE
C
B
A
IN7
IN6
IN5
IN4
IN3
IN2
IN0
IN1
VREF(-)
VREF(+)
图3
图中,8路模拟开关用于选通8个模拟通道,允许8路模拟量分时输入,并公用一个A/D转换器进行转换。
IN0~IN7为8路模拟量输入器,模拟输入电压的范围是0~5V,对应的数字量为00H~FFH,转换时间为100us,ADDA、ADDB、ADDC为通道地址线,用于选择通道。
其通道寻址如表1所示。
ALE是通道地址锁存信号,其上升沿时,把ADDA、ADDB、ADDC地址状态地址锁存器中。
VREF(+)、VREF(—)接基准电源,在精度要求不太高的情况下,供电电源就可用作基准电源。
START是启动引脚,其上脉冲的下降沿启动一次新的A/D转换。
EOC是转换结束信号,可用于向单片机申请中断或供单片机查询。
CLK是时钟端,典型的时钟频率为640kHz。
DB0~DB7是数字量输出。
4.单片机控制模块
⑴模块组成
单片机控制模块使用的芯片是ATMEL公司生产的AT89S52。
⑵模块功能
使用该芯片很容易实现对其他模块的控制,所以整个系统的工作核心还是单片机控制模块,通过对单片机AT89S52写入程序,可以方便的用软件来控制整个过程,而且由于AT89S52中有一个可以反复擦写的FLASH,所以可以很方便的修改程序。
四、软件设计(程序的编写)
软件程序如下:
;*********************************
;变量定义
;*********************************
BIT_COUNTDATA03FH
TIMERDATA03EH
TIMER1DATA03DH
TIMER2DATA03CH
TIMER3DATA03BH
TIMER4DATA03AH
SEG_NUMDATA039H
SEG_CNTDATA038H
LAST_SEGDATA037H
DATA_INDATA020H
DATA_OUTDATA021H
;*********************************
;输入输出引脚定义
;*********************************
CSBITP1.4
CLKBITP1.5
DATBITP1.2
KEYBITP1.3
ORG00H
AJMPSTART
ORG03H
AJMPINT00;外部中断0
ORG08H
;*****************************************
;主程序
;*****************************************
START:
MOVSP,#50H
MOVP1,#11011011B;初始化p1端口
MOVR0,30H;r0为存放采集到的数据
SETBIT0;设置外部
SETBEA;cpu开放中断
SETBEX0;允许外部中断0
MAIN:
MOVDATA_OUT,#10111111B;测试指令
LCALLSEND
MOVDATA_OUT,#10100100B;复位指令
LCALLSEND;发送该字节到HD7279
lCALLDEMO_DELAY
lCALLDEMO_DELAY
lCALLDEMO_DELAY
lCALLDEMO_DELAY
MOVDATA_OUT,#10001000B;闪烁指令
LCALLSEND
MOVDATA_OUT,#11110111B;最高位为闪烁位(4)
LCALLSEND
MOVDATA_OUT,#10010011B;下载数据但不译码好处是可以自己选择字型
LCALLSEND
MOVDATA_OUT,#00001000B
LCALLSEND
SETBCS;不选中
JBKEY,MAIN;无键按下的时候返回
MOVDATA_OUT,#00010101B;有键按下,读键码
LCALLSEND
LCALLRECEIVE
SETBCS
MOVR6,#08H
MOVDPTR,#TABLE
L3:
MOVA,#00H
MOVCA,@A+DPTR;存放的是已经定义好的键值
MOVB,DATA_IN
;DJNZR6,L2
;JMPMAIN;为零就跳到开始继续(没有找到)
L2:
CJNEA,B,L1
JMPL4
L1:
INCDPTR
DJNZR6,L3
JMPMAIN
L4:
MOVDATA_OUT,#10000011B;下载方式0且译码
LCALLSEND
SUBBA,#18H
MOVDATA_OUT,A;发送数据
LCALLSEND
SETBCS
;开始启动ADC0809
MOVDPTR,#0FEF8H;进入地址为Int0
MOVX@DPTR,A;驱动ADC0809启动,因为用的是M0VX指令
;JBIE0;发现有外部中断
DELAY:
MOVR7,#02;启动时延时25ms,因为这是HD7279的特点
D2:
MOVR4,#25
D3:
MOVR3,#248
DJNZR3,$
DJNZR4,D3
DJNZR7,D2
SJMP$;中断等待
INT00:
MOVR2,#08H
MOVDPTR,#0FEF8H
MOVXA,@DPTR;读取转换后的数字量
MOV@R0,A
INCDPTR
INCR0
DJNZR2,INT00
CLREA;已经转换完就关闭
CLREX0;禁止外部中断0
MOVA,@R0;将转换后的数据放入A中
LCALLL5
MOVR1,#05
DISP1:
LCALLDISP
DJNZR1,DISP1
JMPMAIN
MOVDPTR,#0FE8FH
MOVX@DPTR,A;再次启动ADC0809
RETI
L5:
CLRC
MOVR5,#00H
MOVR4,#00H
MOVR3,#08H
NEXT:
RLCA
MOVR2,A
MOVA,R5
ADDCA,R5
DAA
MOVR5,A
MOVA,R4
ADDCA,R4
MOVR4,A
MOVA,R2
DJNZR3,NEXT
L6:
MOVA,R5
ADDA,R5
DAA
MOVR5,A
MOVA,R4
ADDCA,R4
DAA
MOVR4,A
RET
DISP:
MOVA,R5
ANLA,#0FH
ORLA,#10H
MOVDATA_OUT,#10000000B
LCALLSEND
ANLA,#01111111B;去DP点
MOVDATA_OUT,A
LCALLSEND
LCALLDELAY1
MOVA,R5
ANLA,#0F0H
SWAPA
ORLA,#20H
MOVDATA_OUT,#10000000B
LCALLSEND
MOVDATA_OUT,A;DP点
LCALLSEND
LCALLDELAY1
MOVA,R4
ANLA,#0FH
ORLA,#40H
MOVDATA_OUT,#10000000B
LCALLSEND
ANLA,#01111111B;去DP点
MOVDATA_OUT,A
LCALLSEND
LCALLDELAY1
CLRA
RET
SEND:
MOVBIT_COUNT,#08
CLRCS;选中HD7279
ACALLLONG_DELAY
SEND_LOOP:
MOVC,DATA_OUT.7
MOVDAT,C
SETBCLK;启动
MOVA,DATA_OUT
RLA
MOVDATA_OUT,A
ACALLSHORT_DELAY
CLRCLK
ACALLSHORT_DELAY
DJNZBIT_COUNT,SEND_LOOP
CLRDAT
RET
RECEIVE:
MOVBIT_COUNT,#08
SETBDAT
ACALLLONG_DELAY
RECEIVE_LOOP:
SETBCLK
ACALLSHORT_DELAY
MOVA,DATA_IN
RLA
MOVDATA_IN,A
MOVC,DAT
MOVDATA_IN.0,C
CLRCLK
ACALLSHORT_DELAY
DJNZBIT_COUNT,RECEIVE_LOOP
CLRDAT
RET
LONG_DELAY:
MOVTIMER,#25
DJNZTIMER,$
RET
SHORT_DELAY:
MOVTIMER,#4
DJNZTIMER,$
RET
DELAY1:
MOVR7,#02;启动时延时5ms,因为这是HD7279的特点
D12:
MOVR4,#05
D13:
MOVR3,#248
DJNZR3,$
DJNZR4,D13
DJNZR7,D12
RET
DEMO_DELAY:
MOVTIMER1,#50;延时约50MS
DEMO_DELAY_1:
MOVTIMER,#250
DEMO_DELAY_2:
NOP
NOP
DJNZTIMER,DEMO_DELAY_2
DJNZTIMER1,DEMO_DELAY_1
RET
TABLE:
DB18H,19H,1AH,1BH,1CH,1DH,1EH,1FH
END
五、系统测试
1.测试仪表
采用TOP2005编译器进行源程序编译及仿真调试,采用UT51数字万用表测试电压值。
2.测试方法
采用直接测试的方法。
用TOP2005编译器进行源程序编译及仿真调试,烧好程序后进行软硬件调试,最后进行端口电压的对比测试。
3.测试结果及分析
简易数字电压表与“标准”数字电压表对比测试表
标准/V
0.00
0.15
0.85
1.00
1.25
1.75
1.98
2.32
2.65
简易电压表测得值/V
0.00
0.17
0.86
1.02
1.26
1.76
2.00
2.33
2.66
绝对误差/V
0.00
+0.02
+0.01
+0.02
+0.01
+0.01
+0.02
+0.01
+0.01
标准误差/V
3.00
3.45
3.55
4.00
4.50
4.60
4.70
4.81
4.90
简易电压表测得值/V
3.01
3.47
3.56
4.01
4.52
4.62
4.72
4.82
4.92
绝对误差/V
+0.01
+0.02
+0.01
+0.01
+0.02
+0.02
+0.02
+0.01
+0.02
从表中可以看出,简易数字电压表与“标准”数字电压表测得的绝对误差均在0.02V以内,这与采用8位A/D转换器所能达到的理论误差精度相一致,在一般的应用场合可完全满足要求。
六、总结
整个系统本着简单可靠的原则完成了本设计任务,达到了设计的基本功能要求,但在性能及成本上还有待改进。
七、附录
1.关于89S52
⑴引脚图:
⑵引脚功能:
①P0口——8位漏极开路的双向I/O口
当使用片外存储及外扩I/O口时,P0口作为低字节地址/数据复用线在编程时P0口可用于接收指令代码字节,在程序校验是,P0口可输出指令字节(延时需要加外部上拉电阻)P0口可驱动8个TTL负载
②P1口——8位准双向I/O口,具有内部上拉电阻
P1口是为用户准备的I/O口双向口,在编程和校验时,可用做输入低8位地址,用做输入时,应先将输出锁存器置1,P1口可驱动4个TTL负载
③P2口——8位、2准双向I/O口,具有内部上拉电阻
当使用片外存储或外扩I/O口时,P2口输出高8位地址。
在编程/校检时,P2口可接收高字节地址和某些控制信号。
P2口也可作普通I/O口使用。
用做输入时,应先将输出锁存器置1。
P2口可驱动4个TTL负载。
④P3口——8位、准双向I/O口,具有内部上拉电阻。
P3口可作为普通I/O口。
用做输入时,应先将输出锁存器置1。
在编程/校检时,P3口接收某些控制信号。
它可驱动4个TTL负载。
P3口还提供各种代替功能,如表3.2所列。
P3口替代功能
引脚
替代功能
说明
P3.0
RXD
串行数据接收
P3.1
TXD
串行数据发送
P3.2
INT0
外部中断0申请
P3.3
INT1
外部中断1申请
P3.4
T0
定时器0外部事件计数输入
P3.5
T1
定时器1外部事件计数输入
P3.6
WR
外部RAM写选通
P3.7
RD
外部RAM读选通
⑤RST------复位输入,高电平有效。
在振荡器稳定工作时,在RST脚施加两个机器周期(即24个晶振周期)以上的高电平,将器件复位。
⑥EA/VPP------外部程序存储器访问允许信号EA(ExternalAccessEnable)。
当EA信号接地时,对ROM的读操作限定在外部程序存储器,地址为0000H~FFFFH;当EA接VCC时,对ROM的读操作从内部程序存储器开始,并可延续至外部程序存储器。
在编程时,该引脚可接编程电压(AT89C51的VPP为5V或12V;AT89C51的VPP为12V)。
在编程校验时,该引脚可接VCC.。
⑦PSEN-----外部程序存储器读选通信号PSEN(ProgramStoreEnable)在系统扩展时,ALE的下降沿将P0口输出的低8位地址锁存在外接的地址存储器中,以实现地字节地址,和数据的分时传送.此外,ALE端连续输出正脉冲,频率为晶振频率的1/6,可用作外部定时脉冲使用.但要注意,每次访问外ROM时要丢失一个ALE脉冲.在编程期间,该引脚输入编程脉冲(PROG)。
⑧XTAL1------片内振荡器反向放大器和时钟发生线路的输入端.使用片内振荡器时,连接外部石英晶体和微调电容.
⑨XTAL2------片内振荡器反向放大器的输入端,当使用片内振荡器时,外接石英晶体和微调电容.当使用片内振荡器时,引脚XTAL1接收外振荡器信号,XTAL2悬空。
⑩VCC-----电源电压输入引脚,GND-----电源地。
⑶芯片简介:
AT89S52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。
2.关于ADC0809
⑴引脚图:
⑵引脚功能:
①IN7-IN0:
8路模拟电压的输入范围是0-5V。
②ADDA-ADDC:
地址输入信号,译码后选择模拟量中的一路进行A/D转换。
③ALE:
地址锁存允许输入信号,上升沿有效,信号有效时锁存地址信号,并启动译码电路,选中一路模拟量输入。
④START:
启动转换输入信号,正脉冲有效。
信号的上升沿复位内部寄存器,下降沿启动控制逻辑,开始A/D转换。
⑤EOC:
转换结束输出信号,该信号的下降沿,表示转换正在进行,EOC变为高电平时,表示转换结束。
⑥OE:
输出允许信号,高电平有效,信号有效时,转换结果送到数据输出线。
⑦D0-D7:
8位数字信号输出。
⑧CLOCK:
外部时钟输入,始终最高频率为640kHz,当频率为640kHz,转换时间约为100us.
⑨VREF(+)、VREF(-):
基准电压,单记性输入时,VREF(+)接+5V,VREF(-)接地.
⑩VCC:
电源电压,接+5V,GND:
信号接地端.
⑶ADC通道地址选择表:
ADDCADDBADDA
选择的通道
000
IN0
001
IN1
010
IN2
011
IN3
100
IN4
101
IN5
110
IN6
111
IN7
⑷芯片简介:
ADC0809是8位逐次比较式A/D转换芯片,具有8路模拟量输入通道允许8路模拟量分时输入,并公用一个A/D转换器进行转换。
IN0-IN7为8路模拟量输入端,模拟量输入范围是0-5V,对应的数字量是00H-FFH,转换的时间为100us。
ADDA、ADDB、ADDC为通道地址线,用于选择通道。
ALE是通道地址锁存信号,其上升沿时,把ADDA、ADDB、ADDC地址状态送入地址锁存器中。
VREF(+)、VREF(-)接基准电源,在精度要求不太高的情况下,供电电源就可用作基准电源。
START是启动引脚,其上脉冲的下降沿启动一次新的A/D转换。
EOC是转换结束信号,可用于向单片机申请中断或供单片机查询。
CLK是时钟端,典型的时钟频率为640kHz。
DB0-DB7是数字量输出。
3.关于HD7279A
⑴引脚功能:
①1、2脚(VDD)接正电源;3、5脚(NC)悬空;4脚(VSS)接地
②26脚(CLKO)振荡输出端
③28脚(RESET)复位端
④6脚(CS)片选输入端,此引脚为低电平时,可向芯片发送指令及读取键盘数据
⑤7脚(CLK)同步时钟输入端,向芯片发送数据及读取键盘数据时,此