简易数字电压表设计.docx
- 文档编号:30098644
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:25
- 大小:135.28KB
简易数字电压表设计.docx
《简易数字电压表设计.docx》由会员分享,可在线阅读,更多相关《简易数字电压表设计.docx(25页珍藏版)》请在冰豆网上搜索。
简易数字电压表设计
摘要
根据8051单片机的内部结构特点本文提出以MCS-51单片机为核心的电压测量系统。
该系统以8051和ADC0809核心内件,能够在单片机的控制下监测八路的输入电压值,用8位串行A/D转换器进行0-5V量程自动转换,并且测量的电压值可通过三位数码管显示同时用一位数码管显示选择通道。
整个系统的设计过程中主要采用了模块化的设计方法,完成了硬件电路的设计及软件程序的编写,还详细的给出了相关的硬件框图和软件流程图,通过最终硬件电路的调试,使该系统能够在要求的条件下达到正常的测量及显示功能。
单片机8051是整个系统的核心,实现输入端的分路选择,模数转换后数据的处理及在数码管上数据的显示等功能。
正文着重给出了软硬件系统的各部分电路,介绍了该系统的工作原理,MCS-51单片机特点,8051的功能和应用,ADC0809的功能和应用等。
关键词:
MCS-51单片机;8051;ADC0809;数码管
简易数字电压表设计
1总体设计
本设计主要以ATMEL公司生产的AT89S51为主控芯片来实现简易数字电压表的基本功能:
1.可以测量0~5V范围内的8路直流电压值。
2.在4位LED数码管上轮流显示各路电压值或单路选择显示,其中3位LED数码管显示电压值,显示范围为0.00V~5.00V,1位LED数码管显示路数,8路分别为0-8。
3.测量最小分辨率为0.02V。
设计中以8个滑动变阻器来模拟输入的电压信号,经ADC0809模数转换芯片处理,通过三个路数选择开关来确定将哪路采集数据送入单片机中处理,进而通过数码管显示出相应的电压测量值
2硬件设计及其工作原理
本次课程设计是以AT89C51单片机为控制核心,以A/D转换器ADC0808为数据采样系统,实现被测电压的数据采样;用共阴数码管显示结果的简易数字电压表,能够实现8路0.00~5.00V的直流电压,最小分辨率为0.02V。
2.1.1单片机AT89C51
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及引脚排列如图1所示:
图1AT89C51单片机引脚图
AT89C51引脚介绍:
4个8位的I/O引脚,P0,P1,P2,P3
P0口(P0.0-P0.7):
8位双向三态I/O口线,既可作普通I/O口,也可作数据/低8位地址总线。
P1口(P1.0-P1.7):
8位准双向三态I/O口线,作普通I/O口。
P2口(P2.0-P2.7):
8位准双向三态I/O口线,既可作普通I/O口,也可作数据/高8位地址。
表1P3口引脚第二个功能
P3口(P3.0-P3.7):
8位准双向三态I/O口线,既可作普通I/O口,另外每个引脚还有第二个功能。
如下表所示:
端口引脚
第二功能
P3.0
RXD
P3.1
TXD
P3.2
INT0
P3.3
INT1
P3.4
T0
P3.5
T1
P3.6
WR
P3.7
RD
P3口还接收一些用于闪烁存储器编程和程序校验的控制信号。
RST:
复位输入。
当震荡器工作时,RET引脚出现两个机器周期以上的高电平将使单片机复位。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE以时钟震荡频率的1/16输出固定的正脉冲信号,因此它可对输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲时,闪烁存储器编程时,这个引脚还用于输入编程脉冲。
如果必要,可对特殊寄存器区中的8EH单元的D0位置禁止ALE操作。
这个位置后只有一条MOVX和MOVC指令ALE才会被应用。
此外,这个引脚会微弱拉高,单片机执行外部程序时,应设置ALE无效。
PSEN:
程序储存允许输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器读取指令时,每个机器周期两次PSEN有效,即输出两个脉冲。
在此期间,当访问外部数据存储器时,这两次有效的PSEN信号不出现。
EA/VPP:
外部访问允许。
欲使中央处理器仅访问外部程序存储器,EA端必须保持低电平。
需要注意的是:
如果加密位LBI被编程,复位时内部会锁存EA端状态。
如EA端为高电平,CPU则执行内部程序存储器中的指令。
闪烁存储器编程时,该引脚加上+12V的编程允许电压VPP,当然这必须是该器件是使用12V编程电压VPP。
XTAL1:
震荡器反相放大器及内部时钟发生器的输入端。
XTAL2:
震荡器反相放大器的输出端。
VCC:
电源电压
GND:
地
2.1.2芯片ADC0808
本电路采用芯片ADC0808来进行模数转换。
其引脚图如图2所示。
图2ADC0808引脚图
利用ADC0808作为AD数据采样器件,ADC0808是CMOS单片型逐次逼近式A/D转换器它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近。
ADC0808的工作过程是:
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
ADC0808各个管脚功能:
IN0~IN7:
8路模拟量输入端。
ADDA、ADDB、ADDC:
3位地址输入线,用于选通8路模拟输入中的一路
D0~D7:
8位数字量输出端。
ALE:
地址锁存允许信号,输入,高电平有效。
START:
A/D转换启动信号,输入,高电平有效。
EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
REF(+)、REF(-):
基准电压。
2.2数字电压表电路设计
2.2.1处理器电路
主处理器采用AT89C51单片机,外接A/D转换电路,控制电路和显示电路。
其工作原理是从ADC0808中采集电压的数字量并把它转换为十进制量,将其在LED上显示出来。
单片机还接受控制电路的控制,以改变显示模式和切换测试通道。
图3单片机系统电路
2.2.2A/D转换电路
本次设计共采集八路模拟电压值,占用IN0、IN1、IN2、IN3、IN4、IN5、IN6、IN7单个通道。
时钟为500kHz的矩形波。
正负基准电压分别为+5V和0V。
EOC通过一非门与P3.2相连,以中断的方式通知单片机转换完成。
以P3.6控制START和ALE,控制其开始转换和地址锁存。
以P3.7控制模数转换器的输出。
电路图如图4所示。
图4A/D转换电路
2.3控制电路
控制电路主要的作用是控制显示模式和切换测试通道。
按键式开关接单片机
外部中断1,主要功能是切换通道;开关SW1接P2.0口,通过查询的方式来间接控制LED是按通道循环显示电压还是只显示某一通道的值。
其电路图如图5所示。
图5控制电路
2.4显示电路
图4控制电路
本显示电路采用共阴极4位8段数码管。
段码由单片机的P0口控制,位码由P3.0、P3.1、P3.4、P3.5四个端口控制。
很明显采用的是动态显示方式。
其中第一位显示通道数,后三位显示电压值,有两位小数。
电路图如图6所示。
图6显示电路
2.5整体电路图设计
整体电路如下图所示,左上角的八组变化电压分时输入ADC0808经AT89C51控制进行模数转换将转换的数值用数码管显示出来。
控制电路控制是否自动循环显示及手动循环显示。
电路图如图6所示。
图7系统总电路图
3数字电压表软件设计
3.1程序总体设计
依据电路原理图,数据的采集和通道的切换是通过外部中断的方式处理的。
外部中断0处理对ADC08080转换后的数据采集以及存储,外部中断1处理显示的通道的切换。
而显示模式是通过对P2.7查询来确定。
故程序流程图如图8所示。
图9和图10是外部中断0和外部中断1的的流程图。
开始
中断及其他数据初始化
P2.7置位
否
P2.7=0?
是
下一通道
启动A/D转换
调用显示子程序
外部中断1入口
外部中断0入口
图8程序流程图
保护现场
保护现场
切换通道
将通道数放入30H
将通道数放入30H
将转换后的电压放入31H、32H、33H
启动A/D转换
还原现场
还原现场
还原现场
中断返回
中断返回
图9外部中断0流程图
图10外部中断1流程图
3.2程序各个模块设计
3.2.1主程序
程序执行的起点,包括对两个外部中断源的初始化,初始测试通道,设置每个通道每次显示的时间的长短。
然后让程序处于循环显示中,并在每个通道显示结束之后检查P2.7以决定显示模式。
P2.7为低电平时循环显示。
主要程序如下所示:
ORG0000H
LJMPMAIN
ORG0003H
LJMPZD0;外部中断0地址
ORG0013H
LJMPZD1;外部中断1地址
MAIN:
SETBIT0
SETBEA
SETBEX0
SETBIT1
SETBEX1;中断设置
MOVR1,#00H;初始测试端口地址
XH:
MOVR4,#50H
SETBP2.7;允许输入
JBP2.7,TAD;检测显示模式(循环与否)
INCR1
CJNER1,#08H,TAD
MOVR1,#00H
TAD:
MOVA,#00H
MOVX@R1,A;启动A/D转换
LCALLSHOW;调用显示程序
DJNZR4,TAD
LJMPXH
3.2.2外部中断0服务程序
外部中断0主要完成从ADC0808中取转换后的二进制数,然后再将该数字转为对应的电压数值,分别存入到RAM的31H、32H、33H单元中,通道数放在30H单元。
PINT0:
PUSHACC;外部中断0
MOVXA,@R1;主要功能是存入转换值,存在RAM30,31,32,33单元
MOV30H,R1;通道存在30H
MOVB,#51
DIVAB
MOV31H,A
MOVA,B
MOVB,#2
MULAB
MOVB,#10
DIVAB
MOV32H,A
MOVA,B
MOV33H,A
POPACC
RETI
3.2.3外部中断1服务程序
外部中断1的功能是将通道的值加1,并且保证其值小于8然后启动A/D转换,以此完成对显示通道的切换。
PINT1:
PUSHACC;外部中断1
INCR1;完成通道数加1功能
CJNER1,#08H,OUT
MOVR1,#00H
OUT:
MOVX@R1,A
POPACC
RETI
3.2.4显示子程序和延时子程序
数码管的显示为动态显示方式。
即对P1口分时复用。
每位显示后都调用延时子程序,保证延时一定的时间以让人眼产生视觉暂留。
显示时分别取出RAM中30H到33H中数据取表,再送出显示。
SHOW:
MOVDPTR,#TAB1;显示子程序
MOVA,30H
MOVCA,@A+DPTR
MOVP1,A
CLRP3.0
LCALLDELAY
SETBP3.0
MOVDPTR,#TAB2
MOVA,31H
MOVCA,@A+DPTR
MOVP1,A
CLRP3.1
LCALLDELAY
SETBP3.1
MOVDPTR,#TAB1
MOVA,32H
MOVCA,@A+DPTR
MOVP1,A
CLRP3.4
LCALLDELAY
SETBP3.4
MOVDPTR,#TAB1
MOVA,33H
MOVCA,@A+DPTR
MOVP1,A
CLRP3.5
LCALLDELAY
SETBP3.5
RET
DELAY:
MOVR6,#5;延时子程序
D1:
MOVR7,#250
DJNZR7,$
DJNZR6,D1
RET
3.2.5制表程序
本程序定义了2段数据
TAB1和TAB2。
TAB1为不带小数点0到9的数码管显示的字节,TAB2定义的是带小数点的0到5的显示字节,以保证在数码管第二位显示出小数点,因此只有31H单元的数据在TAB2取值。
其程序段如下:
TAB1:
DB3FH,06H,5BH,4FH,66H;TAB1不带小数点,TAB2带小数点
DB6DH,7DH,07H,7FH,6FH
TAB2:
DB0BFH,86H,0DBH,0CFH,0E6H,0EDH
4PROTEUS仿真及数据测试
将汇编程序经Keil编译后生成的.HEX文件装入到AT89C51中对其仿真,将Switch开关闭合,数码管将循环显示八个通道的电压值;将Switch开关打开,Button按钮控制通道切换。
分别将滑动变阻器位于不同位置得到不同阻值分别在数码上显示出来。
现按动button两次,断开switch开关,即始终选择显示一号通道电压值,并将该路电压调到最大值5V,得到如下仿真图:
图11仿真图
由图11中可看出,最左端1号数码管显示第1号通路,当前通路电压值为5V,符合预期要求;
现闭合switch开关,应该是有八路电压值循环显示,结果如下图:
图12八路电压值循环显示仿真图
在不改变电阻值的情况下,上述数值循环显示,本数字电压表测量的误差都在0.02V以内,精度高,反应快,可以完成对多路电压的测试。
5总结
本次课程设计我对AT89C51单片机、ADC0808芯片、数码管显示电路和模数转换电路及相关程序的编写进行了认真的学习,也对单片机技术有了更进一步的熟悉,实际操作和课本上的知识有很大联系,但又高于课本,一个看似很简单的功能,要动手把它设计出来就比较困难了,但是我们学习的理论知识很多但由于平时练习很少,所以将它们用于实际的应用比较困难。
因此平时我们要把课本上所学到的知识和实际联系起来。
通过本次单片机的设计,不但巩固了所学知识,也是我们把理论与实践从真正意义上结合起来,增强了学习的综合能力还还锻炼了我们的团队协作精神,提高了创新能力。
在此过程中,我查找了大量的资料,在不懈的努力下,培养了独立思考、动手操作的能力。
同时学到了很多在书本上所没有学到过的知识。
我对单片机编程也有了进一步的认识和了解。
比如在程序设计思想上。
以前没有一个整体的概念。
经过试验中的自我摸索,掌握了模块化编程的思想,将大的程序分化为小的模块,最后把各小的模块串接起来,组成大的程序,实现整体的设计功能。
此次课设我对ProtuesISIS的丰富的电子器件和网络标号的画图方式也有了进一步的了解和学习。
同时,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单片机更是如此,程序只有在经常写与读的过程中才能提高,这就是这次课程设计的最大收获。
附录1程序清单
ORG0000H
LJMPMAIN
ORG0003H
LJMPPINT0;外部中断0地址
ORG0013H
LJMPPINT1;外部中断0地址
MAIN:
SETBIT0
SETBEA
SETBEX0
SETBIT1
SETBEX1;中断设置
MOVR1,#00H;初始测试端口地址
AA:
MOVR4,#50H
SETBP2.7;允许输入
JBP2.7,AAA;检测显示模式(循环与否)
INCR1
CJNER1,#08H,AAA
MOVR1,#00H
AAA:
MOVA,#00H
MOVX@R1,A;启动a/d转换
LCALLSHOW;调用显示程序
DJNZR4,AAA;每一路显示50次
LJMPAA
PINT0:
PUSHACC;外部中断0
MOVXA,@R1;主要功能是存入转换值,存在RAM30,31,32,33单元
MOV30H,R1;通道存在30H
MOVB,#51
DIVAB
MOV31H,A
MOVA,B
MOVB,#2
MULAB
MOVB,#10
DIVAB
MOV32H,A
MOVA,B
MOV33H,A
POPACC
RETI
PINT1:
PUSHACC;外部中断1
INCR1;完成通道数加1功能
CJNER1,#08H,OUT
MOVR1,#00H
OUT:
MOVA,#00H
MOVX@R1,A
POPACC
RETI
SHOW:
MOVDPTR,#TAB1;显示子程序
MOVA,30H
MOVCA,@A+DPTR
MOVP1,A
CLRP3.0
LCALLDELAY
SETBP3.0
MOVDPTR,#TAB2
MOVA,31H
MOVCA,@A+DPTR
MOVP1,A
CLRP3.1
LCALLDELAY
SETBP3.1
MOVDPTR,#TAB1
MOVA,32H
MOVCA,@A+DPTR
MOVP1,A
CLRP3.4
LCALLDELAY
SETBP3.4
MOVDPTR,#TAB1
MOVA,33H
MOVCA,@A+DPTR
MOVP1,A
CLRP3.5
LCALLDELAY
SETBP3.5
RET
DELAY:
MOVR6,#5;延时子程序
D1:
MOVR7,#250
DJNZR7,$
DJNZR6,D1
RET
TAB1:
DB3FH,06H,5BH,4FH,66H;数据定义区
DB6DH,7DH,07H,7FH,6FH
TAB2:
DB0BFH,86H,0DBH,0CFH,0E6H,0EDH;
TAB1不带小数点,TAB2带小数点
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 数字 电压表 设计