基于AT89C51单片机的数字电压表的设计
基于AT89C51单片机的数字电压表的设计
徐金鑫
南京信息工程大学滨江学院电子工程系,南京 210044
摘要:本文中数字电压表的控制系统采用AT89C51单片机,A/D转换器采用ADC0808为主要硬件,LED动态显示模块、电源模块,实现数字电压表的硬件电路与软件设计。该系统能完成电压量的采集、A/D转换、手动量程切换、实时显示采集到电压量。
关键字:单片机; 数字电压表;AT89C51;ADC0808
1引言
数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。本章重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原理。本报告介绍了基于AT89C51单片机为核心的、以ADC0808数模转换芯片采样、以液晶屏显示的具有电压测量功能的具有一定精度的数字电压表。
1 数字电压表
1.1 电压表的发展概况
电压测量是电子测量的一个重要内容。随着电子技术的发展,对电压测量提出了一系列的要求,主要可概括为:第一应有足够宽的电压测量范围;第二应有足够高的测量准确度;第三应有足够高的输入阻抗;第四应具有高的抗干扰能力。
电压测量仪器总的可分为两大类:即模拟式和数字式的。模拟式电压表是指针式的。用磁电式电流表作为指示器,并在电流表表盘上以电压(或db)刻度。数字式电压表首先将模拟量通过模/数(A/D)变换器变成数字量,然后用电子计数器计数,并以十进制数字显示被测电压值。模拟式电压表由于电路简单、价廉,特别是在测量高频电压时,其测量准确度不亚于数字电压表,因此,在电压测量中仍将占有重要地位。数字式电压表在近年来已成为极其精确,灵活多用的电子仪器,并且价格正在逐渐下降。数字式电压表能很好地与其它数字仪器相交接,因此在电压测量系统的发展中是非常重要的。讨论数字式电压表的主要内容可归结为电压测量的数字化方法。模拟量的数字化测量,其关键是如何把随时间作连续变化的模拟量变换成数字量,完成这种变换的电路叫模/数变换器。所以,数字式电压表可以简单理解为模/数变换。
1.2 数字电压表的简介
数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。
2 单片机的介绍
2.1 单片机简介
单片机全称为单片机微型计算机(Single Chip Microsoftcomputer)。从应用领域来看,单片机主要用来控制,所以又称为微控制器(Microcontroller Unit)或嵌入式控制器。单片机是将计算机的基本部件微型化并集成在一块芯片上的微型计算机。
2.2 单片机的发展史
(1) 4位单片机
1975年,美国德克萨斯仪器公司首次推出4位单片机TMS-1000;此后,各个计算机公司竞相推出四位单片机。日本松下公司的MN1400系列,美国洛克威尔公司的PPS/1系列等。四位单片机的主要应用领域有:PC机的输入装置,电池充电器,运动器材,带液晶显示的音/视频产品控制器,一般家用电器的控制及遥控器,电子玩具,钟表,计算器,多功能电话等。
(2) 8位单片机
1972年,美国Intel公司首先推出8位微处理器8008,并于1976年9月率先推出MCS-48系列单片机。在这以后,8位单片机纷纷面市。例如,莫斯特克和仙童公司合作生产的3870系列,摩托罗拉公司生产的6801系列等。随着集成电路工艺水平的提高,一些高性能的8位单片机相继问世。例如,1978年摩托罗拉公司的MC6801系列及齐洛格公司的Z8系列,1979年NEC公司的UPD78XX系列。这类单片机的寻址能力达64KB,片内ROM容量达4--8KB,片内除带有并行I\O口外,还有串行I\O口,甚至还有A\D转化器功能。8位单片机由于功能强,被广泛用于自动化装置、智能仪器仪表、智能接口、过程控制、通信、家用电器等各个领域。
(3) 16位单片机
1983年以后,集成电路的集成度可达几十万只管/片,各系列16位单片机纷纷面市。这一阶段的代表产品有1983年Intel公司推出的MCS-96系列,1987年Intel推出了80C96,美国国家半导体公司推出的HPC16040,NEC公司推出的783XX系列等。16位单片机主要用于工业控制,智能仪器仪表,便携式设备等场合。
(4) 32位单片机
随着高新技术只智能机器人,光盘驱动器,激光打印机,图像与数据实时处理,复杂实时控制,网络服务器等领域的应用与发展,20世纪80年代末推出了32位单片机,如Motorlora公司的MC683XX系列,Intel的80960系列,以及近年来流行的ARM系列单片机。32位单片机是单片机的发展趋势,随着技术的发展及开发成本和产品价格的下降,将会与8位单片机并驾齐驱。
(5) 64位单片机
近年来,64位单片机在引擎控制,智能机器人,磁盘控制,语音图像通信,算法密集的实时控制场合已有应用,如英国Inmos公司的Transputer T800是高性能的64位单片机。
2.3 单片机的特点
(1) 单片机的存储器ROM和RAM时严格区分的。ROM称为程序存储器,只存放程序,固定常数,及数据表格。RAM则为数据存储器,用作工作区及存放用户数据。
(2) 采用面向控制的指令系统。为满足控制需要,单片机有更强的逻辑控制能力,特别是单片机具有很强的位处理能力。
(3) 单片机的I/O口通常时多功能的。由于单片机芯片上引脚数目有限,为了解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的方法,引脚处于何种功能,可由指令来设置或由机器状态来区分。
(4) 单片机的外部扩展能力很强。在内部的各种功能部件不能满足应用的需求时,均可在外部进行扩展,与许多通用的微机接口芯片兼容,给应用系统设计带来了很大的方便。
2.4 AT89C51单片机介绍
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存 储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
图2.4 AT89C51单片机
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
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(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。\
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器 时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时, /EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
3 硬件设计
3.1 单片机芯片
3.1.1 AT89C51
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器, AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。2.4有AT89C51的介绍。
3.1.2 管脚接法
VCC:供电电压我们接+5V。
GND:接地。
P0口:在这个设计中我们将AT89C51做为BCD码的输出口与LED显示器相连。由于P0口输出驱动电路中没有上拉电阻,所以我们在外接电路上接上拉电阻。
P1口:把AT89C51中的P1口与ADC0808的输出端相连,做为数字信号的接收端。
P2口:我们把P2口做为位码输出口,以P2.0—2.3输出位控线与LED显示器相连.
P3口:利用P3.0,P3.1,P3.2,P3.4,P3.5,P3.6分别与ADC0808的OE,EOC,START/ALE,A,B,C端相连。
XTAL1 ,XTAL2:外接一振荡电路。
3.2 A/D转换器
3.2.1 ADC0808
A/D转换器是模拟量输入通道中的一个环节,单片机通过A/D转换器把输入模拟量变成数字量再处理。
随着大规模集成电路的发展,目前不同厂家已经生产出了多种型号的A/D转换器,以满足不同应用场合的需要。如果按照转换原理划分,主要有3种类型,即双积分式A/D转换器、逐次逼近式A/D转换器和并行式A/D转换器。目前最常用的是双积分和逐次逼近式。
双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点,比如ICL71XX系列等,它们通常带有自动较零、七段码输出等功能。与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0808、ADC0809等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送入单片机进行分析和显示。
本设计中,由于对精度没做很大要求,我们采用逐次逼近式A/D转换ADC0808,如图3.2。精度为0.02,所以四位LED显示中的最后一位我们设置为V。
3.2.2 ADC0808管脚说明和接法
IN0~IN7:为模拟量的输入口,我们选取IN3口为入口,外接可变电阻,通过改变阻值来控制模拟量的输入。
A、B、C:3位地址输入,2个地址输入端的不同组合选择八路模拟量输入。这里我们将A,B接高电平,C为低电平。
图3.2.2 ADC0808
ALE:地址锁存启动信号,在ALE的上升沿,将A、B、C上的通道地址锁存到内部的地址锁存器。
D0~D7:八位数据输出线,A/D转换结果由这8根线传送给单片机。
OE:允许输出信号。当OE=1时,即为高电平,允许输出锁存器输出数据。
START:启动信号输入端,START为正脉冲,其上升沿清除ADC0808的内部的各寄存器,其下降沿启动A/D开始转换。
EOC:转换完成信号,当EOC上升为高电平时,表明内部A/D转换已完成。
CLK:时钟输入信号,选用频率500KHZ。
3.3 电压显示电路
设计中采用的是4段LED数码管来显示电压值。LED具有耗电低、亮度高、视角大、线路简单、耐震及寿命长等优点,它由4个发光二极管组成,其中3个按‘8’字型排列,另一个发光二极管为圆点形状,位于右下角,常用于显示小数点。把4个发光二极管连在一起,公共端接高电平,叫共阳极接法,相反,公共端接低电平的叫共阴极接法,我们采用共阴极接法。当发光二极管导通时,相应的一段笔画或点就发亮,从而形成不同的发光字符。其8段分别命名为dp g f e d c b a。例如,要显示“0”,则dp g f e d c b a分别为:00111111B;若要显示多个数字,只要让若干个数码管的位码循环为高电平就可以了。
根据设计要求,显示电路需要至少4位LED数码管来显示电压值,我们再多加一位用来显示电压单位“V”,则有7位LED循环显示。利用单片机的I/O口驱动LED数码管的亮灭,设计中由P0口驱动LED的段码显示,即显示字符,由P2口选择LED位码,即选择点亮哪位LED来显示。
图3.3 四段LED数码管
另外,一般I/O接口芯片的驱动能力是很有限的,在LED显示器接口电路中,输出口所能提供的驱动电流一般是不够的尤其是设计中需要用到多位LED,此时就需要增加LED驱动电路。驱动电路有多种,常用的是TTL或MOS集成电路驱动器,在本设计中采用了ADC0808芯片驱动电路。
3.4 硬件系统的整体
AD采样
图3.4 硬件系统整体框图
4 软件设计
4.1 软件总体框架设计
在编写汇编语言时,先存放数码管的段码,再存放转换后的数据,选取通道并设值.再将AD转换结果转换成BCD码,通过换算LED上显示.。
在换算中,利用关系得到LED上个位,十位,百位的显示,然后设置小数点。
图4-1流程图
在系统上电开始测量前,要用万用表的电压档对被测电压进行估测,然后再测。由于ADC0808进行A/D转换时需要有CLK信号,而此时的ADC0808的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0808使用。因此产生CLK信号的方法就得用软件来产生了。
由于ADC0808的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值 (D/256*VREF)。
4.2 程序设计
CLK BIT P3.5;定义CLK
ORG 0000H
LJMP MAIN ;转入主程序
ORG 0013H
LJMP AGA ;;中断TNT1,用于读取转换后的数据
ORG 001BH
LJMP WQ ;T1中断入口,用于产生时钟和显示
;主程序;
ORG 0030H
MAIN: MOV TMOD,#10H ;工作方式1
MOV TH1,#(65536-200)/256 ;产生500HZ
MOV TL1,#(65536-200)%256
SETB EA ;开总中断.
SETB ET1 ; 开T1中断
SETB TR1 ;启动T1
SETB EX1 ;开外部中断1
SETB IT1 ; 边沿触发
MOV DPTR ,#1FFFH ;指向通道INC0
MOVX @DPTR,A ;启动转换
LOOP: LCALL DISPLAY ;调用显示程序.
SJMP LOOP
外部1中断,;显示数据转为3位BCD码子程序
显示数据转为3位BCD码存入33H,34H,35H(最大值约为5.00V)
AGA: MOV DPTR,#1FFF
MOVX A,@DPTR ;读取转换后的数据.
MOV B,#51 ;255÷51=5.00V运算
DIV AB
MOV 33H,A ; ;个位数放入33H
MOV A,B ; ;余数大于19H,F0为1,乘法溢出,结果加5
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 34H,A ; ;小数后第一位放入34H
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,#5H
LOOP3: MOV 35H,A ; ;小数后第二位放入35H
MOVX @DPTR,A ; 启动转换
RETI
显示程序
DISPLAY: MOV R1,#33H ;指向显示数据首址
MOV R0,#0FEH ;扫描控制字初值
PLAY: MOV A,R0 ;扫描字放入A
MOV P2,A ;从P2口输出
MOV A,@R1 ;取显示数据到A
MOV DPTR,#TAB ;取段码表地址
MOVC A,@A+DPTR ;查显示数据对应段码
CJNE R0,#0FEH,PAP ; 查看是第一位否.
ORL A,#80H ;是,则取小数点.
PAP: MOV P1,#0FFH ;防闪烁.
MOV P1,A ;段码放入P1口
LCALL DL1MS ;显示1MS
INC R1 ;指向下一地址
MOV A,R0 ;扫描控制字放入A
JNB ACC.2,ENDOUT ;ACC.3=0时一次显示结束
RL A ; A中数据循环左移
MOV R0,A ; 放回R5内
AJMP PLAY ; 跳回PLAY循环
ENDOUT: RET
TAB: DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH
;;;;;;;;;;;;;;;;;;; 延时程序;1MS延时程序,LED显示程序用;;;;;;;;;;;;;;;;;;
DL1MS: MOV R6,#14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
;;T1定时器中断服务程序,用于给ADC0808产生时钟周期;;;
WQ: MOV TH1,#(65536-200)/256
MOV TL1,#(65536-200)%256
CPL CLK ;取反.
RE: RETI
END
4.3 仿真图和仿真结果分析
4.3.1 仿真图
在该设计中,利用Proteus软件进行仿真。Proteus是英国Labcenter公司开发的电路分析与仿真软件。运行于Windows操作系统上,可以仿真、分析(SPICE)数字电路、模拟电路、数模混合电路,是目前唯一能实现对51、PIC、AVR、HC11、ARM等处理器的仿真软件。
图4.3.1 仿真图
4.3.2 仿真结果分析
程序运行后,通过调节划线变阻器的电阻值来测量分压,如图4.2示,数码管与万用电压表显示数据基本统一。经测试,数据误差不超过0.01V.
5 结束语
通过本次课程设计,我学到了许多书本上无法学到的知识,也深刻体会到单片机技术应用领域的广泛。不仅让我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。本设计涉及到《电机学》、《单片机原理及应用》、《微型计算机控制技术》、《模拟电子技术》等学科。让我对专业知识有了更深的理解。
在本次课程设计过程中,我学会了在网络上查找有关本设计的各硬件的资源,其中包括:数字电压表原理、AT89C51单片机及其引脚说明、ADC0808引脚图及其引脚功能等,为本次课程设计提供了一定的资料。
这次课程设计,使我对单片机有了更为深入的了解,对一个课题如何画流程图,编程序等,有了一定的认识,进一步加强了自己的动手能力和运用专业知识的能力,从中学习到如何去思考和解决问题,以及如何灵活地改变方法去实现设计方案。特别是使我深刻体会到的是软件和硬件结合的重要性,以及两者的联系和配合作用。同时明白了办事只要有信心,有毅力,找对方法,就会成功!
致谢
首先我要感谢我的指导老师梅永老师,在老师的耐心帮助下,我才能完成这篇论文。一次次的错误,梅永老师都很耐心的教我如何改正,为此耽误了老师很多私人时间,在此向老师表示十分感谢!其次在程序的设计与编写中我也得到了许多同学的帮助,在此我向他们表示衷心的感谢!
参考文献
[1] 刘湘涛.江世明.单片机原理与应用[M]. 北京:电子工业出版社,2006.
[2] 何立民.单片机初级教程[M]. 北京:北京航空航天大学出版社,1999.
[3] 周航慈.单片机程序设计基础[M]. 北京:北京航空航天大学出版社,2004.
[4] 谢自美. 电子线路设计·实验·测试[M]. 武汉:华中理工大学出版社,1992.
[5] 付家才. 单片机控制工程实践技[M]. 北京:化学工业出版社 2004.
[6] 周向红. 51系列弹片机应用与实践教程.北京航空航天大学出版
社,2008
[7] 胡辉. 单片机原理与应用.中国水利水电出版社,2007
[8] 徐瑞华. 单片机原理与接口技术.人民邮电出版社,2008
[9] 潘永雄. 新编单片机原理与应用.西安电子科技大学出版社,2008
[10] 王法能.单片机原理及应用.科学出版社,2004 [11] 刘 勇.数字电压.电子工业出版社,2004 [12] 赵伟军.PROTEL99SE教程.人民邮电出版社,2004 [13] 黄强.模拟电子技术.科学出版社,2003
[14] 徐爱钧.《智能化测量控制仪表原理与设计》(第二版)[M].北京:北京航空航天大学出版社,2004
[15] 吴金戌,沈庆阳,郭庭吉.《8051单片机实践与应用》[M].北京:清华大学出版社,2002
[16] 张国勋,《缩短ICL7135A/D采样程序时间的一种方法》[J].《电子技术应用》,1993第一期
[17] 高峰,《单片微型计算机与接口技术》 [M].北京:科学出版社,2003
The Design of Electronic Locks Based on Microcomputer AT89C51
Xujinxin
Nanjing University of Information Science & Binjiang college,210044
ABSTRACT
In this paper a digital voltage meter control system using AT89C51MCU, A / D converter with ADC0808as main hardware, LED dynamic display module, power supply module, digital voltage meter to achieve hardware circuit and software design. The system can complete the voltage volume collection, A / D conversion, a manual switch range, real-time display the collected voltage.
Keywords : SCM, digital voltage meter, AT89C51, ADC0808.
附录1:
硬件原理图
附录2
原件清单
基于AT89C51单片机的数字电压表的设计.doc