数字式电压表的设计(LCD)

更新时间:2023-12-23 08:40:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数字式电压表的设计(LCD)

电子信息工程系

1 引言

课题的选择的

传统的指针式刻度电压表功能单一,精度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需求。采用单片机的数字电压表,将连续的模拟量如直流电压转化成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC 实时通信。数字电压表是诸多数字化仪表的核心与基础。以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。目前,由各种单片机和 A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域。显示出强大的生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新的水平。因此对数字电压表作全面深入的了解是很有必要的。

2 设计任务及可行性分析

2.1 系统设计要求

1、 可以测量0-5V的8路输入电压值;

2、 测量结果可在四位LED数码管上轮流显示后单路选择显示; 3、 测量最小分辨率为0.019V; 4、 测量误差约为+0.02V;

2.2 系统设计思路

1、 根据设计要求,选择AT89S51单片机作为核心控制器件。

2、 A/D 转换采用ADC0809 实现。与单片机的接口为 P0 口和 P2 端口的高四位引脚。

3、 电压显示采用4 位一体的LED 数码管。

4、 LED 数码管的段码输入,由并行端口 P1 产生;位码输入,由并行端口 P3 低三位产生。

1

显示模块 主控模块 A/D转换模块

图2.1设计思路框图

3 元器件介绍

3.1 单片机的选择

20世纪80年代以来,单片机的发展非常迅速,就通用单片机而言,世界上一些著名的计算机厂家已投放市场的产品就有50多个系列,数百个品种

尽管单片机的品种很多,但是在我国使用最多的还是Intel公司的MCS—51系列单片机和美国Atmel公司的89C52单片机

MCS—51系列单片机包括三个基本型8031、8051、8751 8031内部包括一个8位CPU、128个字节RAM,21个特殊功能寄存器(SFR)、4个8位并行I/O口、1个全双工串行口、2个16位定时器/计数器,但片内无程序存储器,需外扩EPROM芯片。比较麻烦,不予采用

8051是在8031的基础上,片内集成有4K ROM,作为程序存储器,是一个程序不超过4K字节的小系统。ROM内的程序是公司制作芯片时,代为用户烧制的,出厂的8051都是含有特殊用途的单片机。所以8051适合与应用在程序已定,且批量大的单片机产品中。也不予采用。

8751是在8031基础上,增加了4K字节的EPROM,它构成了一个程序小于4KB的小系统。用户可以将程序固化在EPROM中,可以反复修改程序。但其价格相对8031较贵。8031外扩一片4KB EPROM的就相当于8751,它的最大优点是价格低。随着大规模集成电路技术的不断发展,能装入片内的外围接口电路也可以是大规模的。也不予采用。

AT89S51是美国ATMEL公司生产的低功耗、高性能CMOS 8位单片机。图1-6和1-7分别为其实物图和内部总体结构图。AT89S51片内含有4k字节Flash闪速存储器,128字节内部 RAM,32个I/O 口线,看门狗(WDT),两个数据指针,两个16 位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许 RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存 RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。因此我选择AT89S51为系统的控制器。

2

3.2 A/D转换器的选择

A/D转换器大致分有三类:一是双积分A/D转换器,二是逐次逼近式A/D转换器,三是并行A/D转换器。

双积分A/D转换器通过两次积分将输入的模拟电压转换成时间或频率,然后由定时器/计数器获得数字值。它的优点是分辨率高,抗干扰性好,价格便宜,但转换速率低。

逐次逼近式A/D转换器是将采样输入信号与给定电压不断地进行比较,从逐次逼近寄存器的最高位开始,顺序地对寄存器的每一位将输入电压与内臵D/A转换器输出进行比较,一个时钟周期完成1位转换,进过n次比较而得到数字值。它的优点是精度、速度、价格适中、不存在延迟问题。适合于中速率而分辨率较高的场合。

并行A/D转换器是内部有多个比较器,只需要作一次比较就可完成转换。优点是它是所有A/D转换器中速度最快的,但价格也昂贵,分辨率却不是很高。

在转换精度、转换速率、以及经济上的考虑,该系统决定选用逐次逼近式A/D转换器的ADC0809型。ADC0809是典型的8位MOS型8通道逐次逼近式A/D转换器,每采集一次一般需100μs。

输入数字电压 输入电压 顺序脉冲 逐次逼近 电压 DAC 发生器 寄存器 比较器 图3.1 逐次逼近式A/D转换原理图

3.3 LED显示电路的选择

LED显示器是由N个LED显示块拼接成N位LED显示器。N个LED显示块有N跟位选线,根据显示方式的不同,位选线和段选线的连接方法也各不相同,段选线控制显示字符的字型,而位选线为各个LED显示块的公共端,它控制该LED显示位的亮、暗。LED显示器有静态显示和动态显示两种显示方式。 (1)LED静态显示方式:

LED显示器工作于静态显示方式时,各位的共阴极(或共阳极)连接在一起并接地(或+5V);每位的段选线(a~dp)分别与一个8位的锁存器输出相连。所以称为静态显示。各个LED的显示字符一经确定,相应锁存器的输出将维持不变,直到显示另一个字符为止。也正因此如此,静态显示器的亮度都较高。这种显示方式接口编程容易。付出的代价是占用口线较多,若用I/O接口,则要占用4个8位I/O口,若用锁存器接口,则要用4片74LS373芯片。如果显示器位数增多,则静态显示方式更是无法适应,因此在显示位数较多的情况下,一般都采用动态显示方式。 (2)LED动态显示方式:

在多位LED显示时,为了简化硬件电路,通常将所有位的段选线相应的并联在一起,有一个8位I/O口控制,形成段选线的多路复用。而各位的共阳极或共阴极分别由相应的I/O线控制,实现各位的分时选通。其中段选线占用一个8位I/O口,而位选线占用一个4位I/O口。由于各位的段选线并联,段码

3

的输出对各位来说都是相同的,因此,同一时刻,如果各位位选线都处于选通状态的话,4位LED将显示相同的字符。若要各位LED能够显示出与本位相应的显示字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线状态,而其他各位的位选线处于关闭状态,同时,段选线上输出相应位要显示字节的段码。在确定LED不同位显示的时间间隔,不能太短,因为发光二极管从导通到发光有一定的延时,导通时间太短,发光太弱人眼无法看清。但也不能太长,因为毕竟要受限于临界闪烁频率,而且此时间越长,占用CPU时间也越多,另外,显示位增多,也将占用大量的CPU时间,因此动态显示实质是一牺牲CPU时间来换取元件的减少。

所以,由于本系统涉及到4位显示输出,采用LED动态扫描显示方式。

3.4 所需元器件清单

表3.1所需元器件材料表

器件类型 器件名 数值 数量 单片机 A/D转换器 数码管 开关 电容 电解电容 电阻 排阻 变阻器 晶振 AT89S51 ADC0809 TSEG-MP*4-CC-BLUE 按键开关 C1、C2 C3 R1 RP1 RV1 X1 33uF 10uF 1K 200 1K 1MHz 1 1 1 1 2 1 1 1 1 1

4 数字式电压表的硬件设计

4.1 硬件电路设计概述

硬件电路设计主要包括:AT89S51单片机系统,A/D转换电路,显示电路。测量最大电压为5V,显示最大值为5.00V。本实验采用AT89S51单片机芯片配合ADC0809模/数转换芯片构成一个简易的数字电压表。

硬件电路设计由6个部分组成; A/D转换电路,AT89C51单片机系统,LED显示系统、时钟电路、复位电路以及测量电压输入电路。硬件电路设计框图如图1所示。

4

时钟电路 复位电路 AT89C51 P1 P2 P2 P0 A/D转换电路 测量电压输入 显示系统 图4.1 数字式电压表系统硬件设计框图

4.2 主要元器件的介绍

4.2.1 单片机AT89S51

AT89S51是美国ATMEL公司生产的低功耗、高性能CMOS 8位单片机。图4.2和4.3分别为其实物图和内部总体结构图。AT89S51片内含有4k字节Flash闪速存储器,128字节内部 RAM,32个I/O 口线,看门狗(WDT),两个数据指针,两个16 位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许 RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存 RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 4.2.1.1 主要性能参数

与MCS-51产品指令系列完全兼容;

4K字节在系统编程(ISP)Flash闪速存储器; 1000次擦写周期;

4.0~5.5 V工作电压范围; 全静态工作模式:0Hz~33MHz; 三级程序加密锁; 128字节内部RAM; 32个可编程I/O口线; 2个16位的定时/计数器; 6个中断源;

全双工串行UART通道; 低工耗空闲和掉电模式; 中断可从空闲模式唤醒系统; 看门狗(WDT)及双数据指针; 掉电标识和快速编程特性; 灵活的在系统编程

5

4.2.1.2 AT89S51的引脚

AT89S51芯片为40引脚双列直插式封装,其引脚排列如图4.2所示。

图4.2 AT89S51的引脚图

(1)VCC:电源电压; (2)GND:接地;

(3)P0口:P0口是一组8位漏极开路双向I/O口,每位引脚可驱动8个TTL逻辑门路。对P0口的管脚写“1”时,被定义为高阻抗输入。在访问外部数据存储器或程序存储器时,它可以被定义为数据总线和地址总线的低八位。在FLASH编程时,P0 口作为原码输入口;当FLASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。

(4)P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口的输出缓冲器可驱动4个TTL逻辑门电路。对P1口管脚写入“1”后,被内部上拉电阻拉高,可用作输入。P1口被外部下拉为低电平时,将输出电流,这是由于内部接有上拉电阻的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。P1口还具有第二功能,如表4.1所示。

表4.1 P1口的第二功能 端口引脚 第二功能 P1.5 P1.6 P1.7 MOSI(用于ISP编程) MISO(用于ISP编程) SCK(用于ISP编程) (5)P2口:P2口是一个内部提供上拉电阻的8位双向I/O口,P2口的输出缓冲器可驱动4个TTL逻辑门电路。对P2口管脚写入“1”后,被内部上拉

6

电阻拉高,可用作输入。P2口被外部下拉为低电平时,将输出电流,这是由于内部接有上拉电阻的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在访问8位地址外部数据存储器时,P2口线上的内容,在整个访问期间不改变。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

(6)P3口:P3口是一个内部提供上拉电阻的8位双向I/O口,P3口的输出缓冲器可驱动4个TTL逻辑门电路。对P3口管脚写入“1”后,被内部上拉电阻拉高,可用作输入。P3口被外部下拉为低电平时,将输出电流,这是由于内部接有上拉电阻的缘故。P3口除了一般I/O线的功能外,还具有更为重要的第二功能,如表4.2所示。P3口同时为FLASH编程和编程校验接收一些控制信号

表4.2 P3口的第二功能 端口引脚 第二功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INTO(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(定时器0外部输入) P3.5 T1(定时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)

(7) RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

(8) ALE//RPOG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上臵0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,臵位无效。

(9)/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的信号将不出现。

(10)/EA/VPP:当保持低电平时,则在此期间外部程序存储器

(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

AT89S51 有256 个字节的内部RAM,80H-FFH 高128 个字节与特殊功能寄存器(SFR)地址是重叠的,也就是高128字节的RAM 和特殊功能寄存器的地址是相同的,但物理上它们是分开的。

〃定时器0和定时器1:

AT89S51的定时器0和定时器1 的工作方式与AT89C51 相同。定时和计数功能由特殊功能寄存器TMOD的控制位C/T进行选择,这两个定时/计数器有4

7

种操作模式,通过TMOD的M1和M0选择。其中模式0、1和2都相同,模式3不同。

〃定时器2:

定时器2 是一个16 位定时/计数器。它既可当定时器使用,也可作为外部事件计数器使用,其工作方式由特殊功能寄存器T2CON的C/T2 位选择。定时器2 有三种工作方式:捕获方式,自动重装载(向上或向下计数)方式和波特率发生器方式,工作方式由T2CON 的控制位来选择。

定时器2 由两个8 位寄存器TH2 和TL2 组成,在定时器工作方式中,每个机器周期TL2 寄存器的值加1,由于一个机器周期由12 个振荡时钟构成,因此,计数速率为振荡频率的1/12。

在计数工作方式时,当T2 引脚上外部输入信号产生由1 至0 的下降沿时,寄存器的值加1,在这种工作方式下,每个机器周期的5SP2 期间,对外部输入进行采样。若在第一个机器周期中采到的值为1,而在下一个机器周期中采到的值为0,则在紧跟着的下一个周期的S3P1 期间寄存器加1。由于识别1 至0 的跳变需要2 个机器周期(24 个振荡周期),因此,最高计数速率为振荡频率的1/24。为确保采样的正确性,要求输入的电平在变化前至少保持一个完整周期的时间,以保证输入信号至少被采样一次。

〃可编程时钟输出:

定时器2 可通过编程从P1.0 输出一个占空比为50%的时钟信号。P1.0 引脚除了是一个标准的I/O 口外,还可以通过编程使其作为定时/计数器2 的外部时钟输入和输出占空比50%的时钟脉冲。当时钟振荡频率为16MHz 时,输出时钟频率范围为61Hz—4MHz。

〃UART:

AT89S51的工作方式与AT89C51工作方式相同。串口为全双工结构,表示可以同时发送和接收,它还具有接收缓冲,在第一个字节从寄存器读出之前,可以开始接收第二个字节。(但是如果第二个字节接收完毕时第一个字节仍未读出,其中一个字节将会丢失)。串口的发送和接收寄存器都是通过SFR SBUF进行访问的。写入SBUF的数据装入发送寄存器,对SBUF的读操作是对物理上分开的接收寄存器进行访问。

该串口有4种操作模式(模式0、模式1、模式2和模式3),在这4种模式中,发送过程是以任意一条写SBUF作为目标寄存器的指令开始的,模式0时接收通过设臵R0=0及REN=1初始化,其他模式下如若REN=1则通过起始位初始化。

〃中断:

AT89S51共有6 个中断向量:两个外中断(INT0 和INT1),3 个定时器中断(定时器0、1、2)和串行口中断。

这些中断源可通过分别设臵专用寄存器IE 的臵位或清0 来控制每一个中断的允许或禁止。IE 也有一个总禁止位EA,它能控制所有中断的允许或禁止。

定时器2 的中断是由T2CON 中的TF2 和EXF2 逻辑或产生的,当转向中断服务程序时,这些标志位不能被硬件清除,事实上,服务程序需确定是TF2 或EXF2 产生中断,而由软件清除中断标志位。

定时器0 和定时器1 的标志位TF0 和TF1 在定时器溢出那个机器周期的S5P2 状态臵位,而会在下一个机器周期才查询到该中断标志。然而,定时器2 的标志位TF2 在定时器溢出的那个机器周期的S2P2 状态臵位,并在同一个机

8

器周期内查询到该标志。

〃时钟振荡器:

AT89S51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1 和XTAL2 分别是该放大器的输入端和输出端。

这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路。

外接石英晶体(或陶瓷谐振器)及电容C1、C2 接在放大器的反馈回路中构成并联振荡电路。对外接电容C1、C2 虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,如果使用石英晶体,我们推荐电容使用30pF±10pF,而如使用陶瓷谐振器建议选择40pF±10F。

用户也可以采用外部时钟。采用外部时钟的电路。这种情况下,外部时钟脉冲接到XTAL1 端,即内部时钟发生器的输入端,XTAL2 则悬空。

由于外部时钟信号是通过一个2 分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。

〃Flash存储器的编程:

AT89S51单片机内部有8k字节的Flash PEROM,这个Flash 存储阵列出厂时已处于擦除状态(即所有存储单元的内容均为FFH),用户随时可对其进行编程。编程接口可接收高电压(+12V)或低电压(Vcc)的允许编程信号。低电压编程模式适合于用户在线编程系统,而高电压编程模式可与通用EPROM 编程器兼容。

〃数据查询:

AT89S51 单片机用Data Palling 表示一个写周期结束为特征,在一个写周期中,如需读取最后写入的一个字节,则读出的数据的最高位(P0.7)是原来写入字节最高位的反码。写周期完成后,所输出的数据是有效的数据,即可进入下一个字节的写周期,写周期开始后,Data Palling 可能随时有效。 〃Ready/Busy:字节编程的进度可通过“RDY/BSY 输出信号监测,编程期间,ALE 变为高电平“H”后,P3.4(RDY/BSY)端电平被拉低,表示正在编程状态(忙状态)。编程完成后,P3.4 变为高电平表示准备就绪状态。

〃程序校验:如果加密位LB1、LB2 没有进行编程,则代码数据可通过地址和数据线读回原编写的数据,采用如图12的电路。加密位不可直接校验,加密位的校验可通过对存储器的校验和写入状态来验证。

〃芯片擦除:利用控制信号的正确组合并保持ALE/PROG 引脚10mS 的低电平脉冲宽度即可将PEROM 阵列(4k字节)和三个加密位整片擦除,代码阵列在片擦除操作中将任何非空单元写入“1”,这步骤需再编程之前进行。 4.2.2 A/D转换芯片ADC0809

ADC0809是典型的8位8通道逐次逼近式A/D转换器,其实物如图1-3所示。它可以和微型计算机直接接口。ADC0809转换器的系列芯片是ADC0808,可以相互替换。

4.2.2.1 ADC0809内部逻辑结构

9

图4.3 ADC0809的内部逻辑结构图

ADC0809的内部逻辑结构如图4.7所示。图中多路模拟开关可选通8路模拟通道,允许8路模拟量分时输入,并共用一个A/D转换器进行转换。地址锁存与译码电路完成对A、B、C三个地址位进行锁存与译码,如表4.3所示。

表4.3 ADC0809通道选择表

C(ADDC) B(ADDB) A(ADDA) 选择的通道 0 0 0 IN0 0 0 1 IN1 0 1 0 IN2 0 1 1 IN3 1 0 0 IN4 1 0 1 IN5 1 1 0 IN6 1 1 1 IN7 4.2.2.2 ADC0809的引脚 ADC0809芯片为28引脚双列直插式芯片,其主要功能: (1)IN0~IN7:8路模拟量输入通道。

(2)A、B、C:模拟通道地址线。这3根地址线用于对8路模拟通道的选择,其译码关系如表4.3所示。其中,A为低地址,C为高地址,引脚图中为ADDA,ADDB和ADDC。

(3)ALE:地址锁存允许信号。对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。

(4)START:转换启动信号。START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。本信号有时简写为ST。

(5)D7~D0:数据输出线。为三态缓冲输出形式,可以和单片机的数据线直接相连。D0为最低位,D7为最高。

(6)OE:输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。

10

(7)CLK:时钟信号。ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。通常使用频率为500KHz的时钟信号。

(8)EOC:转换结束信号。EOC=0,正在进行转换;EOC=1,转换结束。使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。 (9)Vcc: +5V电源,GND:地。

(10)Vref:参考电压。参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型值为+5V(Vref(+)=+5V, Vref(-)=0V)。

4.2.2.3 ADC0809的工作原理

首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。

(注意:ALE信号常与START信号连在一起,这样连接可以在信号的前沿写入地址信号,在其后沿启动A/D转换,图4.4为ADC0809信号的时序配合图)。

图4.94 ADC0809信号的时序配合 4.2.3 4位一体7段LED数码管

本实验的显示模块主要由一个4位一体的7段LED数码管(SM410564)构成,用于显示测量到的电压值。它是一个共阳极的数码管,每一位数码管的原理图如图4.5所示。每一位数码管的a,b,c,d,e,f,g和dp端都各自连接在一起,用于接收AT89C52的P1口产生的显示段码。C1,C2,C3,C4引脚端为其位选端,用于接收AT89C52的P3口产生的位选码。

11

图4.5 一位数码管的原理图

图4.6 4位一体7段LED数码管图

4.3 控制电路模块

4.3.1 总电路

本课题实验主要采用AT89S51芯片和ADC0809芯片来完成一个简易的数字电压表,能够对输入的0~5 V的模拟直流电压进行测量,并通过一个4位一体的7段LED数码管进行显示,测量误差约为0.02 V。该电压表的测量电路主要由三个模块组成:A/D转换模块、数据处理模块及显示控制模块。A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量再传送到数据处理模块。数据处理则由芯片AT89S51来完成,其负责把ADC0809传送来的数字量经一定的数据处理,产生相应的显示码送到显示模块进行显示;另外它还控制着ADC0809芯片的工作。显示模块主要由7段数码管及相应的驱动组成,显示测量到的电压值。数字式电压表的设计的总电路图见附录一。

4.3.2 AT89S51的复位电路和时钟电路

AT89S51的复位电路如图4.7所示。当单片机一上电,立即复位;另外,如果在运行中,外界干扰等因素使单片机的程序陷入死循环状态或“跑飞”,就可以通过按键使其复位。复位也是使单片机退出低功耗工作方式而进入正常状态的一种操作。

12

图4.7 复位电路和时钟电路

电容C和电阻R1实现上电自动复位。增加按键开关S又可实现按键复位功能。一般取C=10uF,R1=1KΩ。

单片机中CPU每执行一条指令,都必须在统一的时钟脉冲的控制下严格按时间节拍进行,而这个时钟脉冲是单片机控制中的时序电路发出的。CPU执行一条指令的各个微操作所对应时间顺序称为单片机的时序。MCS-51单片机芯片内部有一个高增益反相放大器,用于构成震荡器,XTAL1为该放大器的输入端,XTAL2为该放大器输出端,但形成时钟电路还需附加其他电路。

本设计系统采用内部时钟方式,利用单片机内部的高增益反相放大器,外部电路简,只需要一个晶振和2个电容即可。

电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数,电路中,电容器C1和C2对震荡频率有微调作用,通常的取值范围是30±10pF,在这个系统中选择了33uF;石英晶振选择范围最高可选24MHz,它决定了单片机电路产生的时钟信号震荡频率,在本系统中选择的是12MHz,因而时钟信号的震荡频率为12MHz。

4.3.3 A/D转换电路

A/D转换由ADC0809完成。ADC0809具有8路模拟输入端口,地址线(23~25脚)可决定对哪一路模拟输入作A/D转换。22脚为地址控制,当输入为高电平时,对地址信号进行锁存。6脚为测试控制,当输入一个2μs宽高电平脉冲时,就开始A/D转换。7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平。9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。10脚为ADC0809的时钟输入端,利用单片机AT89S51的30脚的六分频晶振频率再通过14024二分频得到1MHz时钟。AT89S51与ADC0809的连接电路原理图如图4.8所示。

13

图4.8 AT89S51与ADC0809的连接电路原理图

AT89S51与ADC0809的连接必须注意处理好3个问题:

(1)在START端送一个100μs宽的启动正脉冲;

(2)获取EOC端上的状态信息,因为它是A/D转换的结束标志;

(3)给“三态输出锁存器”分配一个端口地址,也就是给OE端送一个地址译码器的输出信号。 4.3.4 显示电路

由于单片机的并行口不能直接驱动LED显示器,所以,在一般情况下,必须采用专用的驱动电路芯片,使之产生足够大的电流,显示器才能正常工作[7]。如果驱动电路能力差,即负载能力不够时,显示器亮度就低,而且驱动电路长期在超负荷下运行容易损坏,因此,LED显示器的驱动电路设计是一个非常重要的问题。

为了简化数字式直流电压表的电路设计,在LED驱动电路的设计上,可以利用单片机P0口上外接的上拉电阻来实现,即将LED的A-G段显示引脚和DP小数点显示引脚并联到P0口与上拉电阻之间,这样,就可以加大P0口作为输出口德驱动能力,使得LED能按照正常的亮度显示出数字。

系统采用动态显示方式驱动4个数码管工作,显示电路与单片机的P1口相连来显示采集到的电压值。如图4.9所示:

图4.9 显示电路原理图

14

5 数字式电压表的软件设计

5.1 系统程序设计总方案

根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图5.1所示。

开始 初始化 调用A/D转换子程序 调用显示子程序 结束

图5.1 数字式直流电压表主程序框图

5.2 系统子程序设计

5.2.1 初始化程序

所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设臵定时器的工作模式,初值预臵,开中断和打开定时器等。

5.2.2 A/D转换子程序

A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图5.2所示。

15

开始 启动转换 A/D转换结束? 输出转换结果 数值转换 显示 结束

图5.2 A/D转换流程图

5.2.3 显示子程序

显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设臵适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。

在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。其转换流程图如图5.3所示。

16

动态显示子程序 选择通道 显示缓冲区首地址送R0 指向右边第一位 取出要显示的数据 计算下一位位选码 查等显示数据的显示码 送7段码到P1口 IS延时处理 修改显示缓冲区地址 4位显示完成? N 返回 图5.2 显示子程序流程图

5.3 系统程序代码

根据数字式电压表的设计电路图及系统软件流程图所需系统软件的主程序代码见附录二。

6 数字式电压表的仿真与调试

6.1 软件调试

软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与u Visions3 IDE工具软件结合进行编程

17

仿真调试。

本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真我采用的是Proteus软件,而程序方面,采用的是汇编语言,用Keil软件将程序写入单片机。

6.2显示结果及误差分析

6.2.1 显示结果

1. 当IN0口输入电压值为0V时,显示结果如图6.1所示,测量误差为0V。

图6.1 输入电压为0V时,LED的显示结果

2.当IN0输入电压值为1.50V时,显示结果如图6.2所示。测量误差为0.01V。

18

图6.2 输入电压为1.50V时,LED的显示结果

3. 当IN0口输入电压值为3.50V时,显示结果如图6.3。测量误差为0.01V。

图6.3 输入电压为3.50V时,LED的显示结果

6.2.2 误差分析

通过以上仿真测量结果可得到简易数字电压表与“标准”数字电压表对比

19

测试表,如下表6.1所示:

表6.1 简易数字电压表与“标准”数字电压表对比测试表

标准电简易电压表绝对误差/V 压值/V 测量值/V 0.00 0.00 0.00 0.50 0.51 0.01 1.00 1.00 0.00 1.50 1.51 0.01 2.00 2.00 0.00 2.50 2.50 0.00 3.00 3.00 0.00 3.50 3.50 0.00 4.00 4.00 0.00 4.99 5.00 0.01

由于单片机AT89C51为8位处理器,当输入电压为5.00V时,ADC0808输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。这就决定了电压表的最高分辨率只能到0.0196V,从上表可看到,测试电压一般以0.01V的幅度变化。

从上表可以看出,简易数字电压表测得的值基本上比标准电压值偏大0-0.01V,这可以通过校正ADC0808的基准电压来解决。因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。

7 结 论

经过一段时间的努力,毕业论文-基于单片机的简易数字电压表基本完成。但设计中的不足之处仍然存在。这次设计是我第一次设计电路,并用Proteus实现了仿真。在这过程中,我对电路设计,单片机的使用等都有了新的认识。通过这次设计学会了Proteus和Keil软件的使用方法,掌握了从系统的需要、方案的设计、功能模块的划分、原理图的设计和电路图的仿真的设计流程,积累了不少经验。

基于单片机的数字电压表使用性强、结构简单、成本低、外接元件少。在实际应用工作应能好,测量电压准确,精度高。系统功能、指标达到了课题的预期要求、系统在硬件设计上充分考虑了可扩展性,经过一定的改造,可以增加功能。本文设计主要实现了简易数字电压表测量一路电压的功能,详细说明了从原理图的设计、电路图的仿真再到软件的调试。

通过本次设计,我对单片机这门课有了进一步的了解。无论是在硬件连接方面还是在软件编程方面。本次设计采用了AT89C51单片机芯片,与以往的单片机相比增加了许多新的功能,使其功能更为完善,应用领域也更为广泛。设计中还用到了模/数转换芯片ADC0808,以前在学单片机课程时只是对其理论知识有了初步的理解。通过这次设计,对它的工作原理有了更深的理解。在调试过程中遇到很多问题,硬件上的理论知识学得不够扎实,对电路的仿真方面也

20

不够熟练。

总之这次电路的设计和仿真,基本上达到了设计的功能要求。在以后的实践中,我将继续努力学习电路设计方面的理论知识,并理论联系实际,争取在电路设计方面能有所提升。

参考文献

[1]胡健.单片机原理及接口技术[M].北京:机械工业出版社,2004年10月 [2]王毓银.数字电路逻辑设计[M].高等教育出版社,2005年12月

[3]于殿泓、王新年.单片机原理与程序设计实验教程[M].西安电子科技大学出版社,2007年5月

[4]谢维成、杨加国.单片机原理与应用及C51程序设计实例[M].电子工业出版社,2006年3月

[5]李广弟.单片机基础[M].北京航空航天大学出版社,2007年5月

[6]姜志海,黄玉清等著.单片机原理及应用[M] .北京:电子工业出版社.2005年7月 [7]魏立峰.单片机原理及应用技术[M].北京大学出版社,2005年

[8]周润景.Protues在MCS-51&ARM7系统中的应用百例[M].第一版.北京:电子工业出版社,2006年

[9]边春远等著.MCS-51单片机应用开发实用子程序[M] .北京:人民邮电出版社,2005年9月.

[10]苗红霞.单片机实现数字电压表的软硬件设计[J] .河海大学常州分校学报,2002,(03).

[11]宋凤娟,孙军,李国忠.基于89C51单片机的数字电压表设计[J] .工业控制计算机,2007,(04).

21

附录一

数字式电压表设计的原理图

22

附录二

数字式电压表设计的源程序代码

LED_0 EQU 30H ;//百分位显示存储 LED_1 EQU 31H ;//十分位显示存储 LED_2 EQU 32H ;//个位显示存储 ADC EQU 35H CLOCK BIT P2.4 ST BIT P2.5 EOC BIT P2.6 OE BIT P2.7

ORG 00H SJMP MAIN ORG 0BH

LJMP INT_T0

MAIN: MOV LED_0, #00H ;//初始化 MOV P2, #0FFH MOV LED_1, #00H MOV LED_2, #00H

MOV DPTR, #TABLE

MOV TMOD, #02H ;//定时器T0 定时器工作模式,工作在方式1 MOV TH0,#245 ;//装入计数初值 MOV TL0,#00H MOV IE, #82H

SETB TR0 ;//置位定时器T0溢出中断请求标志位 HERE: CLR ST SETB ST

CLR ST

JNB EOC, $ ;//判断转换是否结束 SETB OE ;//允许输出转换的数字量

MOV ADC, P1 ;//转换的数字量存入ADC即35H中 CLR OE MOV A, ADC MOV B, #51 DIV AB

MOV LED_2, A MOV A, B MOV B, #5 DIV AB MOV LED_1, A MOV LED_0, B LCALL DISP

23

SJMP HERE

INT_T0: CPL CLOCK ;//提供时钟 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

MOVC A, @A+DPTR CLR P2.1

ORL A, #80H MOV P0, A LCALL DELAY SETB P2.1 RET

DELAY: MOV R6, #10 ;//50ms延时 D1: MOV R7, #250 DJNZ R7, $ DJNZ R6, D1 RET

TABLE: DB 3FH, 06H, 5BH, 4FH, 66H ;//数码管显示共阴极段码 DB 6DH, 7DH, 07H, 7FH, 6FH END

24

本文来源:https://www.bwwdw.com/article/ks75.html

Top