目 录
摘要.................................................2 第一章 引言.........................................3 第二章 设计原理及要求...............................4 第三章 硬件设计思路及原理图.........................4 3.1 系统总体设计框图................................4 3.2 AD转换电路.....................................5 3.3 AT89C51的功能介绍..............................6 第四章 软件仿真电路设计............................10 4.1 设计思路.......................................10 4.2 仿真电路设计图.................................10 4.3 设计过程.......................................11 4.4 LED数码管的控制显示............................12 第五章 系统软件程序的设计..........................13 5.1 主程序设计.....................................13 5.2 A/D转换子程序..................................13 5.3 中断显示程序...................................14 第六章 电压表的调试及性能分析......................15 6.1 调试与测试.....................................15 6.2 性能分析.......................................16 程序................................................17 总结................................................22
第 1 页 共 22 页
燕山大学课程设计说明书
摘要
在电路设计中我们时常会用到电压表,过去大部分电压表还是模拟的,虽然精度较高但模拟电压表采用用指针式,里面是磁电或电磁式结构,所以响应较慢。为适应许多高速信号领域目前已广泛使用数字电压表。本设计是基于Atmel51单片机开发平台和自动控制原理的基础上实现的一种数字电压表系统。该系统采用Atmel89C52单片机作为控制核心,以ADC0809为数据采样系统,实现被测电压的数据采样;使用系列比较器检测输入电压的范围,并通过继电器阵列实现了输入量程的自动转换;使用共阴极数码管显示被测电压。
关键词: 单片机、电压检测、模数转换
第 2 页 共 22 页
燕山大学课程设计说明书
第一章 前言
电子电压表主要用于测量各种高、低频信号电压,它是电子测量中使用最广泛的仪器之一。根据测量结果的显示方式及测量原理不同,电压测量仪器可分为两大类:模拟式电压表(AVM)和数字式电压表(DVM)。模拟式电压表是指针式的,多用磁电式电流表作为指示器,并在表盘上刻以电压刻度。数字式电压表首先将模拟量经模数(A/D)转换器变成数字量,然后用电子计数器计数,并以十进制数字显示被测电压值。
众所周知,模拟电压表精度较高,曾经有很广阔的市场,现在依然有不少工程师依然在使用模拟电压表。的确模拟电压表在显示测量值方面精度校准,然而却也存在问题。模拟电压表采用用指针式,里面是磁电或电磁式结构,所以其响应速度较慢。
然而在高速发展的当今社会,高速信号处理的需求越来越多,由于模拟电压表响应速度较慢已经不适用与高速信号领域,取而代之的将是数字电压表。但数字电压表由于存在采样误差,精度不是很高。不过目前可以通过技术手段来缩小误差。使其精度达到与模拟电压表一样精确甚至更高。可见将来数字电压表必将取代模拟电压表。现在有越来越多的数字测量仪器的出现但原理皆与数字电压表殊途同归,因此研究数字电压表有着很大现实意义。
第 3 页 共 22 页
燕山大学课程设计说明书
第二章设计原理及要求
本设计是利用单片机AT89C51设计一个数字电压表,测量0-5V之间的直流电压值,四位数码显示。 2.1数字电压表的实现原理
ADC0808是8位的A/D转换器。当输入电压为5.00V时,输出的数据值为255(0FFH),因此最大分辨率为0.0196(5/255)。ADC0808具有8路模拟量输入端口,通过3位地址输入端能从8路中选择一路进行转换。如每隔一段时间依次轮流改变3位地址输入端的地址,就能依次对8 路输入电压进行测量。LED数码管显示采用软件译码动态显示。通过按键选择可对8路循环显示,也可单路显示,单路显示可通过按键选择显示的通道数。 2.2数字电压表的设计要求
可以测量0~5V范围内的直流电压值。在4位LED数码管上显示电压值,LED数码管显示电压值,显示范围为0.00V~5.00V。要求测量的最小分辨率为0.02V。
第三章硬件设计思路和原理图
3.1 系统总体设计框图
本系统采样Atmel89C51单片机作为控制核心,以ADC0808为数据采样系统,实现被测电压的数据采样;使用系列比较器检测输入电压的范围,用共阴极数码管显示结果。
第 4 页 共 22 页
燕山大学课程设计说明书
输入 电 压 电压检测 51单片机 显示电路 AD转换 3.2 AD转换电路
利用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路模拟量输入端。 2-1~2-8:8位数字量输出端。
ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路
ALE:地址锁存允许信号,输入,高电平有效。
第 5 页 共 22 页
燕山大学课程设计说明书
START: A/D转换启动信号,输入,高电平有效。 EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。 REF(+)、REF(-):基准电压。
Vcc:电源,单一+5V。 GND:地。
3.3 AT89C51的功能介绍
3.3.1简单概述
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C51是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如下图所示。
第 6 页 共 22 页
燕山大学课程设计说明书
3.3.2主要功能特性
(1) 4K字节可编程闪烁存储器。
(2) 32个双向I/O口;128×8位内部RAM 。 (3) 2个16位可编程定时/计数器中断,时钟频率0-24MHz。
(4) 可编程串行通道。 (5) 5个中断源。 (6) 2个读写中断口线。 (7) 低功耗的闲置和掉电模式。 (8) 片内振荡器和时钟电路。 3.3.3 AT89C51的引脚介绍
第 7 页 共 22 页
燕山大学课程设计说明书
89C51单片机多采用40只引脚的双列直插封装(DIP)方式,下面分别简单介绍。 (1)电源引脚
电源引脚接入单片机的工作电源。 Vcc(40引脚):+5V电源。 GND(20引脚):接地。 (2)时钟引脚
XTAL1(19引脚):片内振荡器反相放大器和时钟发生器电路的输入端。
XTAL2(20引脚):片内振荡器反相放大器的输出端。 (3)复位RST(9引脚)
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。 (4)EA/Vpp(31引脚)
EA为外部程序存储器访问允许控制端。当它为高电平时,
单片机读片内程序存储器,在PC值超过0FFFH后将自动转向外部程序存储器。当它为低电平时,只限定在外部程序存储器,地址为0000H~FFFFH。Vpp为该引脚的第二功能,为编程电压输入端。
(5)ALE/PROG(30引脚)
ALE为低八位地址锁存允许信号。在系统扩展时,ALE的负跳沿江P0口发出的第八位地址锁存在外接的地址锁存器,然后
第 8 页 共 22 页
燕山大学课程设计说明书
再作为数据端口。PROG为该引脚的第二功能,在对片外存储器编程时,此引脚为编程脉冲输入端。 (6)PSEN(29引脚)
片外程序存储器的读选通信号。在单片机读片外程序存储器时,此引脚输出脉冲的负跳沿作为读片外程序存储器的选通信号。
(7) pin39-pin32为P0.0-P0.7输入输出脚,称为P0口。
P0是一个8位漏极开路型双向I/O口。内部不带上拉电阻,当外接上拉电阻时,P0口能以吸收电流的方式驱动八个LSTTL负载电路。通常在使用时外接上拉电阻,用来驱动多个数码管。 在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,不需要外接上拉电阻。
(8)Pin1-Pin8为P1.0-P1.7输入输出脚,称为P1口,是一个带内部上拉电阻的8位双向I/0口。P1口能驱动4个LSTTL负载。 (9)Pin21-Pin28为P2.0-P2.7输入输出脚,称为P2口。
P2口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
(10)Pin10-Pin17为P3.0-P3.7输入输出脚,称为P3口。
P3口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载,这8个引脚还用于专门的第二功能。端口置
第 9 页 共 22 页
燕山大学课程设计说明书
1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接控制信息。
第四章 软件仿真电路设计
4.1设计思路
多路数字电压表应用系统硬件电路由单片机、A/D转换器、数码管显示电路和按键处理电路组成,由于ADC0808在进行A/D转换时需要有CLK信号,本试验中ADC0808的CLK直接由外部电源提供为500kHz的方波。由于ADC0808的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值(D/256*VREF) ADC0808采用逐次逼近法转换,把模拟电压转换成16进制的D,由于是对直流电压0~5V进行采集,所以D对应的电压为V0 ,我们的目的就是要把V0显示在LED显示器上,因为单片机不好进行小数点计算,所以有:V0=2*D扩大了100倍,扩大100倍后的结果高八位放寄存器B,低八位放寄存器A,分寄存器B为0或不为0的情况进行存取数据,得到的结果个位放入R0,十位放入R1,通过查表使之显示在LED显示器。
4.2仿真电路图
用Protues软件仿真设计的电路如图4-1所示。
第 10 页 共 22 页
燕山大学课程设计说明书
图4-1
4.3设计过程
简易数字电压测量电路由A/D转换、数据处理及显示控制等组成。电路原理图见附录2。A/D转换由集成电路0808完成。0808具有8路模拟输入端口,地址(23-25)脚可决定对哪路模拟输入作A/D转换,22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。6脚为测试控制,当输入一个2us宽高电平脉冲时,就开始A/D转换。7脚为A/D转换结束标志,当A/D转换结束时7脚输出高电平。9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。10脚为0808的时
第 11 页 共 22 页
燕山大学课程设计说明书
钟输入端,由外部信号源提供。单片机的P1、P3.0-P3.3端口作为四位LED数码管现实控制。P3.5端口用作单路显示/循环显示转换按钮,P3.6端口用作单路显示时选择通道。P0端口作A/D转换数据读入用,P2端口用作0808的A/D转换控制。
4.4 LED数码管的控制显示
LED数码管的模型
LED数码管模型如图4-6所示。
4-6 LED数码管模型 LED数码管的接口简介
LED 的段码端口A~G分别接至AT89C51的P0.0~P0.7口,位选端1~4分别接至P2.0、P2.1、P2.2、P2.3。
第 12 页 共 22 页
燕山大学课程设计说明书
第五章 系统软件程序的设计
多路数字电压表系统软件程序主要有主程序、A/D转换子程序和中断显示程序组成。
5.1 主程序
主程序包含初始化部分、调用A/D转换子程序和相应外部0中断显示电压数值程序,初始化部分包含存放通道的缓冲区初始化和显示缓冲区初始化。另外,对于单路显示和循环显示,系统设置了一个标志位00H控制,初始化时00H位设置为0,默认为循环显示,当它为1时改变为单路显示控制,00H位通过单路、循环按键控制。流程图如图4-1所示。
开始 初始化 调用A/D转换子程序 调用显示子程序 结束
图4.1数字式直流电压表主程序框图
5.2 A/D转换子程序
第 13 页 共 22 页
燕山大学课程设计说明书
A/D转换子程序用于对ADC0808的4路输入模拟电压进行A/D转换,并将转换的数值存入4个相应的存储单元中,A/D转换子程序每隔一定时间调用一次,即隔一段时间对输入电压采样一次。
5.3 中断显示程序
设计中采用中断的方式来读取转换完成的数据能节省CPU的资源
当系统设置好后,一旦数据转换完成,便会进入外部中断0,然后在中断中读取转换的数值,处理数据并送数码管显示输出。
LED 数码管采用软件译码动态扫描的方式。在中断程序中包含多路循环显示程序和单路显示程序,多路循环显示程序把4个存储单元的数值依次取出送到4个数码管上显示,每一路显示一秒。单路显示程序只对当前选中的一路数据进行显示。每路数据显示时需经过转换变成十进制BCD码,放于4个数码管显示缓冲区中。单路或多路循环显示通过标志位00H控制。在显示控制程序中加入了对单路或多路循环按键的判断。
第 14 页 共 22 页
燕山大学课程设计说明书
Y 数字量送P1口 取段码地址 Y P2.7=1? N 调用循环显示程序 显示的是第4路 N 重新调用显示程序 调用单路显示程序 图4-3中断显示程序流程图
第六章 电压表的调试及性能分析
6.1 调试与测试
本设计应用Proteus及KEIL软件,首先根据自己设计的电路图用Proteus软件画出电路模型,关于这个软件的使用通过查一些资
第 15 页 共 22 页
燕山大学课程设计说明书
料和自己的摸索学习;然后我们用KEIL软件对所编写的程序进行编译、链接,如果没有错误和警告便可生成程序的hex文件,将此文件加到电路图上使软硬件结合运行,最后进行端口电压的对比测试,测试的第一路对比见图6-1中标准电压值采用Proteus软件中的模拟电压表测得。
图6-1数字电压表与标准电压表的比较
从图中可以看出,简易数字电压表与“标准”数字电压表测得的绝对误差均在0.02V以内,这与采用8位A/D转换器所能达到的理论误差精度相一致,在一般的应用场合可以完全满足要求
6.2 性能分析
由于单片机为8位处理器,当输入电压为5.00V时,输出数据值为255(FFH)因此单片机最大的数值分辨率为0.0196V(5/255)。这就决定了该电压表的最大分辨率(精度)只能达到
第 16 页 共 22 页
燕山大学课程设计说明书
0.0196V。测试时电压数值的变化一般以0.02V的电压幅度变化,如要获得更高的精度要求,应采用12位、13位的A/D转换器。
简易数字电压表测得的值基本上均比标准值偏大0.01-0.02V。这可以通过校正0808的基准电压来解决,因为该电压表设计时直接用7805的供电电源作为基准电压,电压可能有偏差。另外可以用软件编程来校正测量值。
ADC0808的直流输入阻抗为1M欧姆,能满足一般的电压测试需要。另外,经测试ADC0808可直接在2MHz的频率下工作,这样可省去分频率14024。
程序
LED_0 EQU 30H LED_1 EQU 31H LED_2 EQU 32H
LED_3 EQU 33H ADC EQU 35H CLOCK BIT P2.4 ST BIT P2.5 EOC BIT P2.6 OE BIT P2.7 ORG 00H SJMP START ORG 0BH
LJMP INT_T0
第 17 页 共 22 页
燕山大学课程设计说明书
START: MOV LED_0, #00H MOV LED_1, #00H MOV LED_2, #00H MOV P2, #0FFH
MOV DPTR, #TABLE
MOV TMOD, #02H ;采用定时器2实现11 us的定时 MOV TH0, #245 MOV TL0, #00 MOV IE, #82H SETB TR0
WAIT: CLR ST;此语句到第三条语句为启动A/D转换 SETB ST CLR ST
JNB EOC, $ ;查询A/D转换是否结束 SETB OE ;允许输出
MOV ADC, P1 ; A/D转换结果存入ADC也即35H单元中 CLR OE ;关闭输出
MOV A, ADC ;A/D转换数据转BCD码 MOV B, #51 DIV AB
MOV LED_3, A;整数位存入LED_3也即33H单元中 MOV A, B
CLR F0 SUBB A,#1AH
第 18 页 共 22 页
燕山大学课程设计说明书
MOV F0,C MOV A,#10 MUL AB MOV B,#51 DIV AB JB F0,BCD1 ADD A,#5
BCD1:MOV LED_2, A;小数点后第一位存入LED_2也即32H单元中
MOV A, B CLR F0 SUBB A,#1AH MOV F0,C MOV A,#10 MUL AB MOV B,#51 DIV AB JB F0,BCD2 ADD A,#5
BCD2:MOV LED_1,A;小数点后第二位存入LED_1即31H单元中
MOV A, B CLR F0 SUBB A,#1AH MOV F0,C
第 19 页 共 22 页
燕山大学课程设计说明书
MOV A,#10 MUL AB MOV B,#51 DIV AB JB F0,BCD3 ADD A,#5
BCD3:MOV LED_0,A;小数点后第三位存入LED_0即30H单元中 LCALL DISP LJMP WAIT
INT_T0: CPL CLOCK ;给A/D转换器提供时钟 RETI
DISP: MOV A, LED_0
MOVC A, @A+DPTR;查询小数点后第三位段码 CLR P2.3
MOV P0, A;显示小数点后第三位 LCALL DELAY SETB P2.3 MOV A, LED_1
MOVC A,@A+DPTR ;查询小数点后第二位段码 CLR P2.2
MOV P0, A ;显示小数点后第二位 LCALL DELAY SETB P2.2 MOV A, LED_2
第 20 页 共 22 页
燕山大学课程设计说明书
MOVC A, @A+DPTR;查询小数点后第一位段码 CLR P2.1
MOV P0,A;显示小数点后第一位 LCALL DELAY SETB P2.1
MOV A, LED_3
MOVC A, @A+DPTR;查询整数位段码 CLR P2.0
ORL A, #80H ;显示小数点位 MOV P0, A;显示整数位 LCALL DELAY SETB P2.0 RET
DELAY: MOV R6, #10 ;延时5ms D1: MOV R7, #250 DJNZ R7, $ DJNZ R6, D1 RET
TABLE: DB 3FH, 06H, 5BH, 4FH, 66H DB 6DH, 7DH, 07H, 7FH, 6FH END
第 21 页 共 22 页
燕山大学课程设计说明书
总结
经过一周的努力终于设计成功,LED的显示结果和直接用数字电压表测试模拟量输入所得结果几乎一致,误差完全在合理的范围之内。由于仪器误差,LED显示最大值只能是4.9V,离标准最大值5.0V已经不远,达到预期目的,设计成功。
本设计参考了教材上第十一章89C51与ADC0809转换的接口连线,设计出电路图的连线,从并中理解了许多基本的知识和接线方法,在程序的设计与电压表调试的过程中中遇到了很多的问题,刚开始时四个数码管根本不显示,后来发现用的是共阳极的数码管,而设计是共阴极的,更换后数码管终于显示,但问题又出现了,单路显示和循环显示的开关不能控制电路的单路显示和循环显示,经过仔细地检查电路和修改程序,采用中断的方法,产生一次外部中断0,程序转移到单路显示,按一次单路显示开关,地址加一,转换的模拟通道相应的加一,如果按下循环按键就返回循环显示的程序,功夫不负有心人,最后终于调试成功。
在此再次向带领我们这次课程设计的老师说声:谢谢!
第 22 页 共 22 页
因篇幅问题不能全部显示,请点此查看更多更全内容