单片机八路数字电压表设计.docx
《单片机八路数字电压表设计.docx》由会员分享,可在线阅读,更多相关《单片机八路数字电压表设计.docx(21页珍藏版)》请在冰豆网上搜索。
单片机八路数字电压表设计
简易数字电压表的设计
摘要
随着电子科学技术的发展,电子测量成为广大电子工作者必须掌握的手段,对测量的精度和功能的要求也越来越高,而电压的测量甚为突出,因为电压的测量最为普遍。
传统的模拟电压表,已有百年的发展历史,虽然经过改进,但是仍然远远不能满足测量的需要。
近几十年来随着电子技术的发展,经常需要测量高精度的电压,因此数字电压表应运而生,发展的数度很快。
数字电压表作为数字仪表的基础和核心,毫无疑问是电子测量最重要的环节。
电压表是测量仪器中不可缺少的设备,目前广泛应用的是采用专用集成电路实现的数字电压表。
在测量仪器中,电压表是必须的,而且电压表的好坏直接影响到测量精度。
具有一个精度高、转换速度快、性能稳定的电压表才能符合测量的要求。
为此,我们设计了数字电压表,本系统以AT89C51单片机为核心,以逐次逼近式A/D转换器ADC0808、七段数码管为主体,设计了一款简易的数字电压表,能够测量0.00~5.00V的直流电压,最小分辨率为0.02V。
关键词:
AT89C51单片机;电压测量;A/D转换;七段数码管
引言
数字电压表的基本工作原理是利用A/D转换电路将待测的模拟信号转换成数字信号,通过相应换算后将测试结果以数字形式显示出来的一种电压表。
较之于一般的模拟电压表,数字电压表具有精度高、测量准确、读数直观、使用方便等优点。
在测量仪器中,电压表是必须的,而且电压表的好坏直接影响到测量精度。
具有一个精度高、转换速度快、性能稳定的电压表才能符合测量的要求。
为此,我们设计了数字电压表,此作品主要由A/D0808转换器和单片机AT89C51构成,A/D转换器在单片机的控制下完成对模拟信号的采集和转换功能,最后由数码管显示采集的电压值。
电压表的数字化测量,关键在于如何把随时连续变化的模拟量转化成数字量,完成这种转换的电路叫模数转换器(A/D)。
数字电压表的核心部件就是A/D转换器,由于各种不同的A/D转换原理构成了各种不同类型的DVM。
一般说来,A/D转换的方式可分为两类:
积分式和逐次逼近式。
积分式A/D转换器是先用积分器将输入的模拟电压转换成时间或频率,再将其数字化。
根据转化的中间量不同,它又分为U-T(电压-时间)式和U-F(电压-频率)式两种。
逐次逼近式A/D转换器分为比较式和斜坡电压式,根据不同的工作原理,比较式又分为逐次比较式及零平衡式等。
斜坡电压式又分为线性斜坡式和阶梯斜坡式两种。
在高精度数字电压表中,常采用由积分式和比较式相结合起来的复合式A/D转换器。
本设计以AT89C51单片机为核心,以逐次比较型A/D转换器ADC0808、七段数码管为主体,构造了一款简易的数字电压表,能够实现自动和手动测量8路0.00~5.00V的直流电压,最小分辨率为0.02V。
1硬件设计
1.1单片机控制模块设计
单片机控制模块的作用是为控制各单元电路的运行并完成数据的换算或处理,主要由单片机、时钟电路、复位电路组成。
1.1.1时钟电路
单片机工作的时间基准是由时钟电路提供的,在单片机的XTAL1和XYAL2两个管脚接一只晶振及两只电容就构成了单片机的时钟电路,电路中电容器
和
对振荡频率有微调作用,通常取(30±10)pF石英晶体选择6MHz或12MHz都可以。
时钟电路如图1-1所示。
图1-1 系统时钟电路
1.1.2AT89C51芯片功能简介
主要功能:
1.8位CPU;
2.片振荡器频率围1.2-12MHZ;
3.128字节片数据存储器;
4.4KB片程序存储器
5.程序存储器寻址围64KB;
6.片外数据存储器寻址围64KB;
7.21字节专用寄存器;
8.4个8位并行I/O口:
P0P1P2P3;
9.1个全双工串行I/O口;
10.2个16位定时器/计数器;
11.中断系统有5个中断源,可编程为2个优先级;
12.111条指令;
13.有很强的位寻址、位处理能力;
14.片单总线结构;
15.单一+5V电源。
MCS-51系列单片机是双列直插式封装的40引脚芯片。
如图1-3。
图1-3AT89C51引脚图
VCC:
电源
GND:
地
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX)。
P2口:
P2口是一个具有部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVXDPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的部上拉发送1。
在使用8位地址(如MOVXRI)访问外部数据存储器时,P2口输出P2锁存器的容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89C51特殊功能(第二功能)使用,在flash编程和校验时,P3口也接收一些控制信号。
RST:
复位输入。
晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出96个晶振周期的高电平。
特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。
DISRTO默认状态下,复位高电平有效。
ALE/PROG:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。
这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。
否则,ALE将被微弱拉高。
这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN:
外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。
当AT89C51从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
EA/VPP:
访问外部程序存储器控制信号。
为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。
为了执行部程序指令,EA应该接VCC。
在flash编程期间,EA也接收12伏VPP电压。
XTAL1:
振荡器反相放大器和部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
1.2逐次逼近式A/D转换模块设计
逐次逼近型A/D转换器属于直接型A/D转换器,它能把输入的模拟电压直接转换为输出的数字代码,而不需要经过中间变量。
主要由比较器、环形分配器、控制门、寄存器与D/A转换器组成。
1.ADC0808引脚功能
图1-4 ADC0808引脚图
IN0~IN7:
8路模拟量输入。
A、B、C:
3位地址输入,2个地址输入端的不同组合选择八路模拟量输入。
ALE:
地址锁存启动信号,在ALE的上升沿,将A、B、C上的通道地址锁存到部的地址锁存器。
D0~D7:
八位数据输出线,A/D转换结果由这8根线传送给单片机。
OE:
允许输出信号。
当OE=1时,即为高电平,允许输出锁存器输出数据。
START:
启动信号输入端,START为正脉冲,其上升沿清除ADC0808的部的各寄存器,其下降沿启动A/D开始转换。
EOC:
转换完成信号,当EOC上升为高电平时,表明部A/D转换已完成。
2.ADC0808部结构图
逐次逼近型A/D转换器ADC0808由八路模拟开关、地址锁存与译码器、比较器、D/A转换器、寄存器、控制电路和三态输出锁存器等组成。
其部结构如图1-5所示。
图1-5 ADC0808部结构
1.3七段数码管简介
7段LED数码管,是在一定形状的绝缘材料上,利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。
如图1-6。
LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
右图是共阴和共阳极数码管的部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。
将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。
以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。
当然,LED的电流通常较小,一般均需在回路中接上限流电阻。
假如将"b"和"c"段接上正电源,其它端接地或悬空,那么"b"和"c"段发光,此时,数码管显示将显示数字“1”。
而将"a"、"b"、"d"、"e"和"g"段都接上正电源,其它引脚悬空,此时数码管将显示“2”。
依此类推。
图1-67段LED数码管
1.4路数电压显示转换控制电路
在电路中电压示数是循环显示的,也可以固定显示,转换的自动和手动模式转换可以通过转换开关按钮来控制。
按下转换开关后电压路数固定要想读取相应的电压值可以按下相应的控制按钮来切换。
如下图1-7显示
图1-7单路数字电压表实现电路
1.5A/D转换电路总体设计
利用AT89C51和ADC0809附加一些外围电路设计出可以采样模拟信号并将其转换成数字电压值在数码管上显示出来,从而可实现测量电压的功能,实现电路如图1-8。
图1-8数字电压表实现电路
2软件设计
根据硬件电路编写相应的程序,实现电压的采集、转换、处理、显示几个功能,从而实现测量电压的效果。
另外利用外部中断一实现通道的手动和自动之间的转换,这是本软件设计的思想。
具体程序参见附录一。
主设计流程如图2-1。
要实现的功能有:
1.可以测量0~5V围的8路直流电压值。
2.在4位LED数码管上轮流显示各路电压值或单路选择显示,其中3位LED数码管显示电压值,显示围为0.00V~5.00V,1位LED数码管显示路数,8路分别为1-8。
3.测量最小分辨率为0.02V。
图2-1数字电压表程序设计流程
3PROTEUS软件仿真
3.1PROTEUS软件简介
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
③提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。
④具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
3.1.1ProteusISIS的启动
双击桌面上的ISIS6Professional图标或者单击屏幕左下方的“开始”→“程序”→“Proteus6Professional”→“ISIS6Professional”,出现如图3-1所示屏幕,表明进入ProteusISIS集成环境。
图3-1启动时的屏幕
3.1.2ProteusISIS的工作界面
ProteusISIS的工作界面是一种标准的Windows界面,如图3-2所示。
包括:
标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。
图3-2ProteusISIS的工作界面
3.2KEIL简介
1.系统概述
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
下面详细介绍KeilC51开发系统各部分功能和使用。
2.KeilC51单片机软件开发系统的整体结构
C51工具包的整体结构,如图
(1)所示,其中uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及A51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
使用独立的Keil仿真器时,注意事项
(1)仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。
(2)仿真器上的复位按钮只复位仿真芯片,不复位目标系统。
(3)仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。
3.3利用ProteusISIS仿真与调试
1.将所设计的硬件电路用Proteus画出来,联好各个引脚,图如图1-7。
2.在keil里面将编写的程序编译并调试好,没有错误后生成一个*.hex的文件。
3.在Proteus中将keil中生成的*.hex的文件软件下载到AT89C51芯片中,保存并运行,看结果是否正确,有问题的话继续调试软硬件,直到结果与预期的基本一致。
仿真结果举例如图3-3、3-4。
转换的自动和手动模式转换可以通过按钮SB1和SB0来切换。
图3-3用ProteusISIS的数字电压表仿真(通道七)
图3-4用ProteusISIS的数字电压表仿真(通道二)
总结
做了一周的课程设计,我基本上圆满的完成了课设的相关任务,达到了课程设计的技术要求,相信这对以后也是有帮助的。
通过课程设计这一实践环节,我对这个学期以来所学到知识有了更深层的理解,而且自己分析问题和解决实际问题的能力也有一定的提高。
同时在这个过程中我也发现了自己许多的不足,包括对所学的基础知识理解不是很透彻,以至于电路设计了很长时间,最后还得连夜赶着写论文。
还有对理论知识的运用不很灵活,常常在一个问题想半天,结果还是换一个角度好一点。
本设计以AT89C51单片机为控制核心,通过集成摸数转换芯片ADC0808将被测信号转换成数字信号,经单片机部程序处理后,由七段数码管显示测量结果。
仿真测试表明,系统性能良好,测量读数稳定易读、更新速度合理,直流电压测量围为0.00~5.00V,最小分辨率为0.02V,满足任务书指标要求。
但是,该系统也存在一定程度的不足,例如:
输入电压易发生干扰不稳定,且驱动能力可能存在不足,需在被测信号的输入端加上一部分驱动电路,比如将量程转换电路改成带放大能力的自动量程转换电路,将幅值较小的信号经适当放大后再测量,可显著提高精度。
认真的做完这次课程设计实践后,我自己感觉在这些都有了很大的提高。
但由于时间原因,这次课程设计没能达到自己预想那么好,但所幸的是功夫不负有心人,所有功能指标都已基本实现了。
在接下来的时间里,我会继续把它做好。
最后我还总结出了一个结论,当认真的投入到一项工作中时,不但会得到许多收获,还会感觉到很大的乐趣。
参考文献
[1]徐爱钧.智能化测量控制仪表原理与设计(第二版).:
航空航天大学,2004
[2]吴金戌,庆阳,郭庭吉.8051单片机实践与应用.:
清华大学,2002
[3]黄智伟.全国大学生电子设计竞赛训练教程.:
电子工业,2004
[4]汪德彪.MCS-51单片机原理及接口技术(第一版).:
电子工业,2003
[5]刚毅,喜元.单片机原理与应用设计.:
电子工业,2008
附录 系统源程序
WIN1EQU30H
WIN2EQU31H
WIN3EQU32H
WIN4EQU33H
BBCEQU35H
STBITP2.5
OEBITP2.7
CLOCKBITP2.4
ORG0000H
LJMPSTART
ORG000BH
LJMPSTT0
ORG001BH
LJMPSTT1
ORG0030H;初始化子程序
INIT:
MOVWIN1,#00H;存储单元清零
MOVWIN2,#00H
MOVWIN3,#00H
MOVWIN4,#00H
MOVTMOD,#12H;定时器初始化
MOVTH0,#245
MOVTL0,#245
MOVTH1,#3CH
MOVTL1,#0B0H
MOVR1,#20
MOVR0,#0
MOVIE,#8AH
SETBTR0
RET
;主程序
START:
LCALLINIT
LOOP:
MOVA,#0F0H
MOVP3,A
MOVA,P3
ORLA,#0FH
CPLA
JZLOOP
LCALLDELAY
MOVA,#0F0H
MOVP3,A
MOVA,P3
MOVR4,A
ORLA,#0FH
CPLA
JZLOOP
MOVA,#0FH
MOVP3,A
MOVA,P3
ORLA,R4
MOV34H,A
MOVR5,#00H
LOOP1:
MOVA,R5
MOVDPTR,#TAB1
MOVCA,A+DPTR
CJNEA,34H,LOOP2
CJNEA,#1BH,LOOP3
LJMPWAT
LOOP3:
MOVP1,R5
LJMPWAIT1
LOOP2:
INCR5
LJMPLOOP1
WAT:
MOVP1,R5
SETBTR1
WAIT1:
CLRST;启动AD转换
SETBST
CLRST
MOVR7,#60H;延时等待转换结束
DJNZR7,$
SETBOE
MOVBBC,P0
CLROE
ZH:
MOVA,BBC;将转化结果变为可显示的BCD码存入相应的单元
MOVB,#51
DIVAB
MOVWIN3,A;个位存放在32H
MOVA,B
MOVB,#02H
MULAB
MOVR3,A
ANLA,#0FH
MOVWIN2,A
MOVA,R3
SWAPA
ANLA,#0FH
MOVWIN1,A
LCALLEXP0;小数点后第二位存放在30
LCALLEXP01
LJMPLOOP
STT1:
MOVTH1,#3CH
MOVTL1,#0B0H
DJNZR1,SS
MOVR1,#20
INCR0
MOVA,R0
CJNEA,#8,LP1
MOVR0,#0
LP1:
MOVP1,R0
SS:
RETI
STT0:
CPLCLOCK
RETI
;显示子程序
EXP0:
MOVDPTR,#TAB;显示子程序
MOVA,WIN3
MOVCA,A+DPTR
CLRP2.3
ADDA,#80H
MOVP1,A
LCALLDELAY
SETBP2.3
MOVA,WIN2
MOVCA,A+DPTR
CLRP2.2
MOVP1,A
LCALLDELAY
SETBP2.2
MOVA,WIN1
MOVCA,A+DPTR
CLRP2.1
MOVP1,A
LCALLDELAY
SETBP2.1
RET
EXP01:
MOVWIN4,R0
MOVA,WIN4
MOVCA,A+DPTR
CLRP2.0
MOVP1,A
LCALLDELAY
SETBP2.0
RET
DELAY:
MOVR7,#100
DJNZR7,$
RET
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
TAB1:
DB36H,35H,33H,2EH,2DH,2BH,1EH,1DH,1BH
END