当前位置:首页 >> 信息与通信 >>

毕业设计——基于单片机的数字电压表的设计


毕业设计

基于单片机的数字电压表的设计
【摘要】 本设计主要用于测量 0-5V 的直流电压,把连续的模拟量(直流输入电压)转换成 离散的数字形式,并利用数码管进行显示。整个系统主要由控制电路、基准电源、A/D 转换电路、测试电路和显示电路等几部分组成。 通过 AT89C52 单片机实现系统控制功能,利用单片机的 P1 口、P3.0-P3.3 口控制 4 位 LED 数码管实现动态显示,P3.5 端口用作控制单路/循环显示转换按钮,P3.6 端口用 作单路显示时的通道选择, 端口用作 A/D 转换数据读入, 端口用作 ADC0809 的 A/D P0 P2 转换控制,A/D 转换电路主要由 ADC0809 模/数转器件片完成。 此外,设计的数字电压表在实现单路测量的基本功能之外,还可以方便进行多路电 压的同时测量,通过按键选择实现单一或多路循环显示。 【关键词】 :AT89C52、ADC0809、A/D 转换、数据处理、控制显示

ABSTRACT The design is mainly used for measuring 0-5V DC voltage, the continuous analog (DC input voltage) into a discrete digital form, and the use of digital control to display. The entire circuit is mainly by the control circuit, reference power, A / D converter circuit, the test circuit and display circuit composed of several parts. AT89C52 MCU through the system control functions, the use of the microcontroller port P1, P3.0-P3.3 Port 4-bit LED digital control of dynamic display, P3.5 port as a single display / cycle through the Convert button, P3.6 displayed as a single port channel selection, P0 port for A / D converter data read, P2 port for the ADC0809 A / D conversion control; A / D converter circuit mainly by the ADC0809 analog / digital switch device to complete piece. In addition, the design of the digital voltmeter single measurement in the realization of the basic functions, it can also facilitate the simultaneous measurement of multiple voltage by selection for a single or multiple buttons to cycle. 【KEY WORD】: AT89C52, ADC0809, A / D conversion, data processing, control and display

毕业设计

目录 引言 ...................................................................... 1 一、方案论证 .............................................................. 1 (一)控制芯片 .......................................................... 1 (二)显示部分 .......................................................... 2 二、总体设计思想 .......................................................... 2 三、硬件电路的设计 ........................................................ 2 (一)硬件设计原理 ...................................................... 2 (二)AT89C52 单片机的概述 .............................................. 3 1.AT89C52 单片机组成 .............................................. 3 2.AT89C52 单片机引脚结构 .......................................... 4 3.AT89C52 单片机的最小系统 ........................................ 5 (1)时钟电路 ................................................... 5 (2)复位电路 ................................................... 6 (三)A/D 转换电路 ...................................................... 6 1.A/D 转换器工作过程 .............................................. 6 2.A/D 转换电路 .................................................... 8 (四)数码显示电路 ...................................................... 9 四、系统的程序设计 ....................................................... 10 (一)软件设计思想框图 ................................................. 10 (二)子程序原理和框图 ................................................. 11 1.显示子程序 ..................................................... 11 2.A/D 转换子程序 ................................................. 12 五、调试及性能分析 ....................................................... 14 (一)测量与调试 ....................................................... 14 (二)性能分析 ......................................................... 14 六、总结 ................................................................. 16 附录一数字电压表总原理图 ............................................. 17 附录二源程序 ......................................................... 18 附录三 PCB 图 ......................................................... 23 附录四实物图 ......................................................... 24 参考文献 ................................................................. 25 致谢 ..................................................................... 26

毕业设计

引言

数字电压表(Digital Voltmeter)简称 DVM,它是采用数字化测量技术,把连续的 模拟量(直流输入电压)转换成离散的数字形式并加以显示的仪表。传统的指针式电压 表功能单一、精度较低,不能满足数字化时代的需求。采用以单片机为平台开发的数字 电压表,具有精度高、抗干扰能力强,可扩展性强、集成方便,可与 PC 进行实时通信 等方面的优点,能够在很大程度上优化测量结果,提高使用者的工作效率。数字化电压 表的广泛应用,符合和满足了现代化测量技术的需要。 目前,由各种单片机和 A/D 转换器构成的数字电压表,已被广泛用于电子及电工测 量、工业自动化仪表、自动测试系统等多智能化测量领域,并且显示出强大的作用和生 命力。与此同时,由 DVM 扩展而成的各种通用及专用数字仪器仪表,也把电子测量以及 相关联的非电子测量技术提高到了一个崭新的水平。 新型数字电压表以及由电压表扩展而成的各种通用及专用仪表以其高准确度、高可 靠性、高性能分析、高分辨率、高性价比等优良特性,给使用者带来了轻松便捷的操作 和高效良好的性能分析能力,赢得了广大使用者的青睐。 在新兴科学技术不断涌现的今天和未来,随着数字化时代的进程,随着测试需求的 多样化和复杂化,电子测试测量的仪器系统也朝着以软件为核心的模块化方向发展,并 且必将得到广泛的应用。 本设计的硬件是通过 51 系列单片机控制 ADC0809 A/D 转换器进行信号接收和转换, 并将转换后的信号输送至单片机,通过单片机进行处理,并控制数码管显示,是关于单 片机内部定时器、并行 I/O 口、中断系统等相关功能,以及 LED 显示、A/D 转换器、译 码器、驱动器、基准电源等的综合性研究。软件设计包括显示扫描子程序、1ms 延时子 程序、通道选择子程序、ADC0809 转换子程序。经过测量设计原理和显示方式的深度变 革,使测量结果通过数码形式的直观显示,有效避免了因使用传统测量仪表时的视差和 视觉疲劳等一些不良因素造成的测量误差, 在极大的程度上提高了使用者的工作效率和 作业的精确性,进而对提高工程项目的质量有非常大的帮助。 一、方案论证 (一)控制芯片 方案一: 选用专用电压转换芯片 INC7107 实现电压的测量和显示。 缺点是测量的精 度比较低,信号的转换在芯片内部完成,不可控制,灵活性差。优点是价格低廉。 方案二:选用单片机 AT89C52 和 A/D 转换芯片 ADC0809 实现电压的转换和控制, 用 4 位数码管显示出最后的转换结果。测量转换的精度高,通过控制转换和显示电路, 实现单路或多路电压同时测量。 基于设计功能方面考虑,方案二为较佳选择。 (二)显示部分
1

毕业设计

方案一:选用 4 位 8 段 LED 共阳数码管,与单片机口的 I/O 连接进行控制,动态显 示测量结果。优点是价格比较便宜,并且可以满足测量精度的要求。 方案二: 通过 LCD1602 显示测量结果。 虽然 1602 可以显示数字和字符的内容丰富, 但是器件引脚较多,并且价格比较昂贵。 基于综合考虑,选择方案一。 经过控制芯片和显示器件的综合类比分析, 设计的数字电压表认定通过 ATC89C52 单片机控制 ADC0809 模/数转换器件, 利用 4 位数码管显示测量结果的方案为最佳方案。 二、总体设计思想 设计的数字电压表由模拟电路和数字电路两部分组成, 数字电路部分主要包括系统 控制和运算显示模块,模拟电路部分主要由基础电源、信号采集和测量等部分构成。 总体设计思想为:AT89C52 单片机是数字电压表系统的控制核心。将需要测量的模 拟信号(直流电压)直接输送到 A/D 转换电路进行 A/D 转换,由单片机对转换后的信 号进行数据处理, 最终将处理后的数字信号经过显示驱动电路和数码管显示进行测量结 果的直观显示。设计的数字电压表除了可以同时进行多路模拟信号的测量外,也可以通 过通道选择电路对单片机进行控制,用来实现信号的单路测量和多路测量的切换。数字 电压表的系统框图如图 2.1 所示。
模数转换器 单片机 AT89C52 通道选择

模拟信号

显示驱动
图 2.1 系统框图

数码管显示

三、硬件电路的设计 (一)硬件设计原理 设计的数字电压表主要用于测量 0-5V 的直流电压,通过单片机控制 A/D 转换器将 连续的模拟信号转换成离散的数字信号,并对转换后的信号进行运算比较,最终通过数 码管显示测量结果。整个电路主要由控制电路、A/D 转换电路、数码显示电路、复位电 路、选择电路、基准电源、测试电路等几部分组成。 设计的数字电压表是基于 AT89C52 单片机和 A/D 转换器件的应用基础之上, AT89C52 单片机和 A/D 转换模块是本次设计的核心,通过单片机控制 A/D 转换器,实现对模拟信 号的接收和转换:P0 口连接 A/D 转换器的数字端口,作 A/D 转换器数据读入端,接收转 化后的数字信号并进行处理; 单片机的 P1 口、 P3.0-P3.3 口作为 4 位 7 段 LED 数码管显

2

毕业设计

示控制端,P3.5 端口用作单路/循环显示转换控制按钮,P3.6 端口用作单路显示时选择 显示的通道。 数字电压表硬件设计方案框图如 3.1 所示。

图 3.1 数字电压表硬件逻辑框图

单片机是制作在一块集成电路芯片上的计算机,它包括中央处理器(CPU)、用 RAM 构成的数据存储器、用 ROM 构成的程序存储器、定时器/计数器、各种 I/O 接口、时钟 电路和中断系统等,它们通过地址总线(AB)、数据总线(DB)和控制总线(CB)连接 起来,通过 I/O 口线与外部设备及外围芯片连接,以及单片机系统中的系统操作软件和 用户应用软件,实现对整个电路系统的控制作用。 (二)AT89C52 单片机概述 1.AT89C52 单片机组成

图 3.2 AT89C52 单片机组成结构图

设计采用的 AT89C52 单片机是 MCS-51 系列单片机的一个型号,它是由 ATMEL 公司 生产的。 AT89C52 单片机内包含有 1 个 8 位的 CPU、1 个片内振荡器及时钟电路、8KB 的 ROM 程序存储器、256B 的 RAM 数据存储器、3 个 16 位的定时器/计数器、可寻址 64KB
3

毕业设计

外部数据存储器和 64KB 外部程序存储空间的控制电路、4 个 8 位并行 I/O 端口、2 个可 编程全双工串行口、6 个中断源、两个优先级嵌套中断结构。AT89C52 单片机组成结构 如图 3.2 所示。 2.AT89C52 单片机引脚结构 (1)电源引脚 Vcc(40 脚):接+5V 电源。 Vss(20 脚):接地。 (2)时钟引脚 XTAL1(19 脚):内部振荡电路反向放大电路的输入端,外接晶体的一个引脚。 当采用外部振荡器时,此引脚接地。 XTAL2(18 脚):内部振荡电路反向放大电路的输出端,外接晶体的另一端。 当采用外部振荡器时,此引脚接外部电源。 (3)I/O 口引脚 P0 口(P0.0-P0.7):P0.7 是最高位,P0.0 是最低位,有两种功能如下。 通用 I/O 口:无片外存储器时,P0 口可以做为通用 I/O 口使用; 地址/数据口:在访问外部存储器时,用作地址总线的低 8 位和数据总线。 P1 口(P1.0-P1.7):P1.7 是最高位,P1.0 是最低位,仅用作 I/O 口。 P2 口(P2.0-P2.7):P2.7 是最高位,P2.0 是最低位,有两种功能如下。 通用 I/O 口:无片外存储器时,P2 口可以做为通用 I/O 口使用; 地址口:在访问外部存储器时,用作地址总线的高 8 位。 P3 口(P3.0-P3.7):P3.7 是最高位,P3.0 是最低位,有两种功能如下。 通用 I/O 口:用于串行口、中断源输入、计数器、片外 RAM 选通。 (4)控制引脚 引脚图如图 3.3 所示。

图 3.3 AT89C52 的引脚图

①RST/VPD(9 脚)
4

毕业设计

RST 为 RESET,VPD 为备用电源。该引脚为单片机的上电复位或掉电保护端。当振荡 器工作时,RST 引脚出现两个机器周期以上高电平,将使单片机复位。当 VCC 发生故障, 该引脚可接上备用电源为内部 RAM 供电,以保证 RAM 中的数据不丢失。 ②ALE/PROG(30 脚) 地址锁存有效信号输出端。ALE 在每个机器周期内输出两个脉冲。在访问片外程序 存储器期间,下降沿由于控制 P0 输出的低 8 位地址;在不访问片外程序存储器期间, 可作为对外输出的时钟脉冲或用于定时目的。 ③PSEN(29 脚) 片外程序存储器选通信号输入端,低电平有效。当从外部程序存储器读取指令或常 数期间,该信号在每个机器周期两次有效,以通过数据总线 P0 口读回指令或常数。在 访问片外程序存储器期间,PSEN 信号将不再出现。 ④EA/VPP(31 脚) 外部程序存储器地址允许输入端/编程电压输入端。当 EA 接高电平时,CPU 执行片 内 ROM 指令,但当 PC 值超过 0FFFH 时,将自动转去执行片外 ROM 指令;当 EA 接低电平 时,CPU 只执行片外 ROM 指令。 3. AT89C52 单片机的最小系统

图 3.4 AT89C52 最小系统

(1)时钟电路 单片机的时钟信号用来提供单片机内部各种操作的时间基准, 时钟电路用来产生单 片机工作所需要的时钟信号。 单片机内部有一个高增益的反相放大器, 其输入端 XTAL1 和 XTAL2 用于外接晶体和 电容,以构成自激振荡器,其发出的脉冲直接送入内部的时钟电路,内接电路如图 3.5 所示。外部时钟方式是把外部已有的时钟信号引入到单片机内,如图 3.6 所示。本设计 的数字电压表采用的是内部时钟电路。
5

毕业设计

图 3.5 内部方式时钟电路

图 3.6 外部方式时钟电路

(2)复位电路 单片机复位时,使 CPU 和系统中的其他功能部件恢复为初始状态,就像计算机的重 启,并从这个状态开始工作。要实现复位操作,必须是 RES 引脚至少保持两个机器周期 (24 个振荡器周期)的高电平。CPU 在第二个机器周期内执行内部复位操作,以后每一 个机器周期重复一次,直至 RES 端电平变低。复位期间不产生 ALE 及 PSEN(非)信号,即 ALE=1 和 PSEN(非)=1。这表明单片机复位期间不会有任何取指操作。当 RES 引脚返回 低电平后,CPU 从 0000H 地址开始执行程序。

图 3.7 上电复位

图 3.8 按键复位

单片机常见的复位电路主要有上电复位电路和按键复位电路。上电复位电路如图 3.7 所示,由 RC 构成微分电路,在上电瞬间,产生一个微分脉冲,其宽度若大于两个机 器周期,单片机将复位。为了保证微分脉冲宽度足够大,RC 时间常数应大于两个机器周 期,一般取 22uF 电容、1KΩ 电阻。按键复位电路如图 3.8 所示,该电路除具有上电复 位功能外,若要复位,必须按下图中的 REST 键,R1、C2 仍构成微分电路,使 RST 端产 生一个微分脉冲复位,复位完毕 C2 经 R2 放电,等待下一次按下复位按钮。本设计的数 字电压表采用的是按键复位方式。 (三)A/D 转换电路 1.A/D 转换器工作过程 A/D转换器实际上是将模拟信号转换成数字量的装置,其转换过程主要包括采样、 量化、编码三个步骤。 (1)采样、量化部分 采样就是周期性地测量一种连续信号或连续过程信号,测量的周期称为采样周期 Ts,采样周期的倒数称为采样频率
f s ? 1 Ts
6

(3-1)

毕业设计

在对模拟信号进行模数转换时, A/D转换器从启动变换到转换完成需要一定的转换。 当输入信号频率较高时,由于转换时间的存在,会造成较大的转换误差。为了防止这种 现象的产生,必须在A/D 转换开始时将信号电平保持住。A/D转换器输出数字量的大小 只能是某个规定的最小单位的整数倍, 即必须把采样电压转化为这个最小数值单位的整 数倍,这个转化过程叫做量化,所取的最小数量单位叫做量化单位,其大小等于输出的 数字信号最低有效位1所代表的数量大小。把量化的结果用代码表示出来称为编码。采 样保持电路能将采样后的模拟信号暂时存储起来,保持一个采样周期。 (2)量化、编码部分 量化编码部分是A/D转换器的核心组成部分。所谓量化,就是采用一组数码来逼近 离散模拟信号的幅值,将其转换为数字信号。将采样信号转换为数字信号的过程称为量 化过程。执行量化动作的装置为A/D 转换器。 在实际应用中,串行 A/D 转换芯片具有占用单片机的引脚资源少,可以简化单片机 系统,降低成本的优点,所以串行工作方式的 A/D 转换器在单片机系统中有着广泛的应 用。其内部有一个 8 通道多路开关,它可以根据地址码锁存译码后的信号,只选通 8 个 单断模拟输入信号中的一个进行 A/D 转换。 ADC0809 是最常用的 8 位 A/D 转换器, 属于逐次逼近型。 ADC0809 由单一+5V 电源供 电,片内带有锁存功能的 8 路模拟电子开关,可对 0~+5V 八路的输入电压信号分时进 行转换,输出具有 TTL 三态锁存缓冲器,直接与 MCS-51 系列单片机数据总线相连,通 过适当的外接电路,还可对 0~+5V 的双极性模拟信号进行 A/D 转换。 ADC0809 片内集成了 8 路模拟多路开关、地址锁存与译码、8 位 A/D 转换器以及 8 位三台输出锁存器四部分组成。ADC0809 内部组成结构框图如图 3.9 所示。

图 3.9 ADC0809 内部组成结构框图 7

毕业设计

2.A/D 转换电路 ADC0809 双列直插式封装的引脚配置如图 3.10 所示。

图 3.10 ADC0809 引脚图

ADC0809 具有 8 路模拟量输入通道 IN0---IN7,通过 3 位地址输入端 C、B、A 进行选 择,用于选通 8 路模拟输入中的一路。 地址锁存控制端 ALE,当输入为高电平时,C、B、A 引脚输入的地址锁存于 ADC0809 内部的锁存器中,经内部译码电路译码选中相应的模拟通道。 启动转换控制端 START,其上升沿用于清除 ADC 内部寄存器,下降沿用于启动控制 内部逻辑,使 ADC0809 开始对输入通道的模拟量进行转换。 A/D 转换器,当开始转换时,EOC 信号为低电平,经过一段时间,转换结束,转换 结束信号 EOC 输出高电平,转换结果存放于 ADC0809 内部的输出数据寄存器中。 OE 为 A/D 转换数据输出允许控制端,当 OE 为高电平时,才能打开输出三态门,将 存放于输出数据锁存器中的数据通过 ADC0809 的数据线 D0-D7 输出。 ADC0809 的时钟信号输入端 CLOCK,它的频率决定了 A/D 转换器的转换速度。在此, 它的频率不能高于 640kHz,对应的转换速度为 100us。

图 3.11 A/D 转换电路

REF(+)和 REF(-)是 D/A 转换器的参考电压输入线,要求 REF(-)不得为负值,
8

毕业设计

REF(+)不得高于 Vcc,并且 1/2[REF(+)+ REF(-)]与 1/2Vcc 之差不得大于 0.1V。 Vcc 为+5V 电源,GND 为接地端。 在连接时,ADC0809 的数据线 D0-D7 端与 AT89C52 单片机的 P0 口相连接,ADC0809 的地址引脚、地址锁存端 ALE、启动信号 START、数据输出允许控制端 OE 与 AT89C52 的 P2 口相连接,转换结束信号 EOC 与 AT89C52 的 P3.7 口相连接。时钟信号输入端 CLOCK 信号,由单片机的地址锁存信号 ALE 得到,通过软件实现。通过 SW1 和 SW2 轻触按钮开 关给单片机提供选择信号,由单片机控制 ADC0809 地址输入端,选中相应的模拟通道进 行测量。ADC0809 与单片机的连接电路如图 3.11 所示。 (四)数码显示电路 数码管显示分为动态显示和静态显示两种方式。所谓静态显示,就是当数码管显 示某一个字符时,相应的发光二极管恒定的导通或截止。这种显示方式,优点是编程简 单,显示亮度高,缺点是每一位都需要有一个 8 位输出口控制,所以占用的硬件较多, 所以一般用于数码管比较少的场合。 数码管动态显示是单片机中应用最为广泛的一种显示方式之一, 动态驱动是将所有 数码管的 8 个显示段“a,b,c,d,e,f,g,dp”的相同端连接在一起,另外为每个数码管的公 共极 COM 增加位选通控制电路,位选通由各自独立的 I/O 线控制,当单片机输出字形 码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于 单片机对位选通 COM 端电路的控制,所以只要将需要显示的数码管的选通控制打开, 该位就显示出字形,没有选通的数码管就不会亮。 通过分时轮流控制各个 LED 数码管的 COM 端, 就使各个数码管轮流受控显示。 在 轮流显示过程中,每位元数码管的点亮时间为 1~2ms,由于人的视觉暂留现象及发光 二极体的余辉效应,虽然实际上各位数码管并非同时点亮,但只要扫描的速度足够快, 给人的印象就是一组稳定的显示数据, 不会有闪烁感, 达到和静态显示同样的显示效果。 动态显示能够节省大量的 I/O 口,而且功耗更低。 设计的数字电压表要求可以同时测量 8 路 0-5V 的直流电压,测量最大分辨率为 0.0196V,并要求最高位用于显示测量电压的地址范围,所以要求数码管至少采用 4 位 显示的数码管。

图 3.12 4 位共阳数码管内部引脚分布图 9

毕业设计

为了方便和减少设计的复杂度, 设计采用的是 4 位共阳数码管来进行测量结果的显 示,数码管的内部结构及引脚分布如图 3.12 所示。数码管每位的 8 个 LED 阳极连接到 一个公共端口 COM,分别为 COM1,COM2,COM3,COM4,把每位相同位置 LED 段的阴极连接 到一个公共端口,分别为 a,b,c,d,e,f,g,dp 口。 如果采用静态显示方式,则需要 4×8=32 个 I/O 口,应用时必须增加扩展芯片和较 多驱动器进行驱动,这将很大程度上增加了硬体电路设计的复杂性。若采用静态显示的 方式,只需要 12 个 I/O,其中 8 个 I/O 用于连接每位数码管的 8 位显示段,作为数据端 口;另外 4 个 I/O 口用于连接每位数码管显示段的公共端,作为扫描端口,控制数字显 示。数码显示电路如图 3.13 所示。

图 3.13 数码管动态显示电路

四、系统的程序设计 (一)软件设计思想框图 系统上电时,初始化程序主要用来执行 70H-77H 内存单元清 0 和 P2 口置 0 等准备 工作。 初始化后,单片机片选 A/D 转换器,然后发出信号启动 A/D 转换,此时单片机内部 定时器/计数器也开始工作,不断扫描 A/D 转换器结束端口有无结束信号。如果存在, 则启动信号采集,对 A/D 转换器数据输出口输出的数值进行存储,定时器/计数器重新 置零,准备下一次的采集,如果没有,则继续扫描等待。扫描结束后,进行数据处理, 同时进行下一次扫描。数据处理完之后,利用查表法将电压数值送到数码管显示器进行 显示。 在刚上电时,系统默认为循环显示 8 个通道的电压值状态。当进行一次测量后,将 显示每一通道的 A/D 转换值,每个通道的数据显示时间在 1s 左右。主程序在调用显示
10

毕业设计

子程序与测量子程序之间循环。程序的流程框图如图 4.1 所示。
开 始

初始化

调用 A/D 转换测量子程序

调用显示子程序

结 束

图 4.1 主程序框图

(二)子程序原理和框图 1.显示子程序 显示子程序采用动态扫描法实现 4 位 7 段数码管的数值显示。 测量所得的 A/D 转换 数据放在 70H-77H 内存单元中,测量数据在显示时须经过转换成为十进制 BCD 码放在 78H-7BH 单元中,其中 7BH 存放通道标志数。寄存器 R3 用作 8 路循环控制,R0 用作显 示数据地址指针。显示子程序流程图如图 4.2 所示。

图 4.2 显示子程序流程图

显示扫描子程序分析如下

void scan()
11

毕业设计

{ uchar k,n; int h; dis[3]=0x01; for(n=0;n<8;n++) { dis[2]=ad_data[n]/51; dis[4]=ad_data[n]%51; dis[4]=dis[4]*10; dis[1]=dis[4]/51; dis[4]=dis[4]%51; dis[4]=dis[4]*10; dis[0]=dis[4]/51; if(dis[2]>=4&&dis[1]>6&&dis[0]>=0) A=1; else A=0; for(h=0;h<500;h++) { for(k=0;k<4;k++) { Disdata=dis_7[dis[k]]; if(k==2) { DISX=0; } P3=scan_con[k]; delaylms(1); P3=0xff; } } dis[3]++; } } 2. A/D 转换测量子程序
12

//通道初值为 1 //每次显示 8 个数据 //测得值转换为 3 位 BCD 码,最大为 5.00V //余数暂存 //计算小数第一位

//计算小数第二位

//每个通道显示时间控制约为一秒 //4 位 LED 扫描控制

//P3.O-P3.3 控制数码管输出电平的高低

//通道值加 1

毕业设计

A/D 转换测量子程序用来控制对 ADC0809 的 8 路模拟输入电压的 A/D 转换,并将对 应的数值移入单片机 70H-77H 内存单元。A/D 转换测量子程序流程图如图 4.3 所示。

图 4.3 A/D 转换测量子程序流程图

A/D 转换子程序分析如下: void test() { uchar m; uchar s=0x00; ad_con=s; for(m=0;m<8;m++) { ALE=1; _nop_(); _nop_(); ALE=0; START=1; _nop_(); _nop_(); START=0; _nop_(); _nop_(); _nop_(); _nop_(); //延时 4US
13

//转换通道地址锁存

//开始转换命令

毕业设计

while(EOC==0); OE=1; ad_data[m]=addata; OE=0; s++; ad_con=s; } ad_con=0x00; } 五、调试及性能分析 (一)测量与调试

//等待转换结束

//取 A/D 值,地址加 1 //控制复位

采用 Keil 和 Proteus 软件进行程序编译及电路仿真调试, 利用 Protel 软件进行硬 件电路板的制作设计,通过 STC_ISP 软件将 Keil 程序编译时生成的 hex 文件烧录到单 片机内,组装好电路后进行硬件和软件的综合调试。调试无误后,进行测量,将测量电 压与标准电压表的测量结果进行对比分析。测量对比分析的结果如表 5-1 所示。
表 5-1 数字电压表与“标准”数字电压表测量对比

标准电压值/V 0.00 0.50 0.80 1.00 1.58 2.00 2.50 3.00 4.50

数字电压表测得值/V 0.00 0.51 0.81 1.01 1.58 2.01 2.51 3.32 4.52

绝对误差/V 0.00 +0.01 +0.01 +0.01 0.00 +0.01 +0.01 +0.02 +0.02

注:表中标准电压值采用 UT30B 数字万用表测得。 (二)性能分析 由于单片机为 8 位处理器, 当输入电压为 5.00V 时, ADC0809 输出数据值为 255 FFH) ( , 因此单片机最高的数值分辨率为 0.0196V(5/255)。这就决定了该电压表的最高分辨率 (精度)只能达到 0.0196 V,测试时电压一般以 0.02V 的幅度变化。如果要获得更高精 度的测量要求,则应采用更高位的 A/D 转换器件。 从表 5-1 中可以看出, 设计的数字电压表与 UT30B 数字万用表测得的绝对误差均在 0.02V 以内,这与采用 8 位 A/D 转换器所能到达的理论误差精度相一致,在一般的应用
14

毕业设计

场合可以满足使用要求。 另外, 设计的数字电压表测得的值基本上比用 UT30B 数字万用表测得的标准电压值 偏大 0.01-0.02 V。这可以通过校正 ADC0809 的基准电压来解决。因为该电压表设计时 的直接供电电源也同时作为 ADC0809 的基准电压,所以电压有可能有偏差。另外,还可 以根据测量误差,用软件编程方式校正测量值。 当要测量大于 5V 的直流电压时,可在测量信号的输入口使用分压电阻,通过计算 间接得到测量结果。也可以在程序中将计算程序的除数进行调整。但是随着量程增大, 测量的精度会降低。

15

毕业设计

总结 通过本次毕业设计,使我从实践中学到了更多的专业知识和加强了自身的能力培 养,巩固了我所学习的理论知识,使得我对单片机知识及应用有了更为深层的了解。此 外,更重要的是,锻炼了实践工作的能力,提高工程素养,学会将理论与实践相结合, 用理论指导实践,通过实践来验证和加深对理论的理解,使得自己在理论和实践上有新 的认识和提高,使综合应用能力和分析解决问题的能力得到提高。这些都是自己努力赢 得的宝贵财富,将会为以后的学习和工作打下了更加坚实的基础。

16

毕业设计

附录一 数字电压表原理图

17

毕业设计

附录二 程序清单 #include <reg52.h> #include <intrins.h> #define ad_con P2 #define addata P0 #define Disdata P1 #define uint unsigned int sbit ALE=P2^3; sbit START=P2^4; sbit OE=P2^5; sbit EOC=P3^7; sbit DISX=Disdata^7; sbit A=P2^7; sbit BO=P3^5; sbit CO=P3^6; uchar code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; //共阳 7 段 LED 段码表 0.1.2.3.4.5.6.7.8.9.不亮 uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; //11111110 //11111101 //11111011 //11110111 uchar data ad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //定义 8 个数据内存单元 uint data dis[5]={0x00,0x00,0x00,0x00,0x00}; //定义 4 个显示数据单元和 1 个数据存储单元 //*****1ms 延时子函数*****// void delaylms(uint t) { uint i,j; for(i=0;i<t;i++) for(j=0;j<120;j++)
18

//延时函数用 //A/D 控制口 //A/D 数据记入读入口 //显示数据段码输出口

#define uchar unsigned char //锁存地址控制位 //启动一次转换位 //0809 输出数据 控制位 //转换结束标志位 //LED 小数点

//4 位列扫描控制字

//t=1

毕业设计

; } //*****显示扫描子函数*****// void scan() { uchar k,n; int h; dis[3]=0x01; for(n=0;n<8;n++) { dis[2]=ad_data[n]/51; dis[4]=ad_data[n]%51; dis[4]=dis[4]*10; dis[1]=dis[4]/51; dis[4]=dis[4]%51; dis[4]=dis[4]*10; dis[0]=dis[4]/51; if(dis[2]>=4&&dis[1]>6&&dis[0]>=0) A=1; else A=0; for(h=0;h<500;h++) { for(k=0;k<4;k++) { Disdata=dis_7[dis[k]]; if(k==2) { DISX=0; } P3=scan_con[k]; delaylms(1); P3=0xff; } }
19

//通道初值为 1 //每次显示 8 个数据 //测得值转换为 3 位 BCD 码,最大为 5.00V //余数暂存 //计算小数第一位

//计算小数第二位

//每个通道显示时间控制约为一秒 //4 位 LED 扫描控制

//P3.O-P3.3 控制数码管输出电平的高低

毕业设计

dis[3]++; } } //*****通道选择函数*****// void tongdao(uint n) { uint m,i; dis[3]=n+1; dis[2]=ad_data[n]/51; dis[4]=ad_data[n]%51; dis[4]=dis[4]*10; dis[1]=dis[4]/51; dis[4]=dis[4]%51; dis[4]=dis[4]*10; dis[0]=dis[4]/51;

//通道值加 1

//测得值转换为 3 位 BCD 码,最大为 5.00V //余数暂存 //计算小数第一位

//计算小数第二位

if(dis[2]>=4&&dis[1]>6&&dis[0]>=0) A=1; else A=0; for(m=0;m<500;m++) { for(i=0;i<4;i++) { Disdata=dis_7[dis[i]]; if(i==2) { DISX=0; } P3=scan_con[i]; delaylms(1); P3=0xff; } } } //*****0809 转换子函数*****//
20

//每个通道显示时间控制约为一秒 //4 位 LED 扫描控制

//P3.O-P3.3 控制四个数码管的输出

毕业设计

void test() { uchar m; uchar s=0x00; ad_con=s; for(m=0;m<8;m++) { ALE=1; _nop_(); _nop_(); ALE=0; START=1; _nop_(); _nop_(); START=0; _nop_(); _nop_(); _nop_(); _nop_(); //延时 4US while(EOC==0); OE=1; ad_data[m]=addata; OE=0; s++; ad_con=s; } ad_con=0x00; } void main() { uint n,i,j; n=0; P0=0xff; P1=0x00; P2=0xff;
21

//转换通道地址锁存

//开始转换命令

//等待转换结束

//取 A/D 值,地址加 1 //控制复位

//初始化窗口

毕业设计

P3=0xff; i=BO; while(1) { test(); if(i==0) for(;;) { j=CO; if(j==0) { n++; } if(n>7) n=0; tongdao(n); if(i==0) break; } else { scan(); } } } //显示八个通道值一次 //测量转换一次

22

毕业设计

附录三 PCB 图

23

毕业设计

附录五 实物图

24

毕业设计

参考文献 [1] 刘训非 陈希.单片机技术及应用.清华大学出版社.2009.23-24 页 [2] 孙育才.MCS-51 系列单片微型计算机及其应用.东南大学出版社.第四版.256-257 页 [2] 孙津平.数字电子技术.西安电子科技大学出版设.2005. [3] 段庆纵 李福勤.电子线路 CAD.北京大学出版设.2009.

25


相关文章:
基于AT89C51单片机的数字电压表设计(毕业论文)
16 1 新疆师范大学 2013 届本科毕业生毕业设计 基于 AT89C51 单片机的数字电压表设计摘要:数字电压表是常用的对电子电路进行检测的较精密仪器之一。本文的设 计...
数字电压表设计毕业设计论文
河南理工大学毕业论文(设计)说明书 摘 要 数字电压表(Digital Voltmeter)简称 ...本设计基于 AT89C51 单片机的一种电压测量电路,该电路 A/D 转换采用 ADC...
数字电压表毕业论文--基于单片机的数字电压表设计_图文
数字电压表毕业论文--基于单片机的数字电压表设计 - 本科毕业设计论文 题目: 基于单片机的数字电压表设计 院、 系: 光电工程学院 光电信息工程 学科专业: 学学生:...
基于单片机的数字电压表设计_毕业设计论文
基于单片机的数字电压表设计_毕业设计论文 - 广东技术师范学院天河学院 《PLC 课程设计》报告 基于单片机的数字电压表设计 系班 别级 电气工程系 本自动化 2012 ...
基于单片机的数字电压表设计毕业设计论文_图文
2013 毕业设计论文 本科毕业设计论文 题目:基于单片机的数字电压表设计 2013 毕业设计论文 基于单片机的数字电压表设计 摘要 在日常维修、教学和科研中,电压表是不可...
基于单片机的数字电压表设计毕业设计论文_图文
基于单片机的数字电压表设计毕业设计论文 - 基于单片机的数字电压表设计 设计总说明 本文详细介绍了一种基于单片机的数字电压表设计方案。该设计方案主要 由四个模块...
基于单片机的简易数字电压表的设计毕业设计
基于单片机的简易数字电压表的设计毕业设计 - 毕业设计论文 基于单片机的数字电压表设计 系 电子信息工程系 杨野 专业 电子信息工程技术 姓名 基于单片机的数字电压表...
【最新版】基于单片机的数字电压表毕业设计论文_图文
【最新版】基于单片机的数字电压表毕业设计论文_工学_高等教育_教育专区。毕业论文,单片机论文,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,硕士论文,研究生...
基于单片机的简易数字电压表的设计毕业设计 精品
基于单片机的简易数字电压表的设计毕业设计 精品_高考_高中教育_教育专区。基于单片机的简易数字电压表的设计 摘要 本文介绍了一种基于单片机的简易数字电压表的设计。...
基于单片机的数字电压表毕业设计论文_图文
基于单片机的数字电压表毕业设计论文 - 目录摘要 ...
更多相关标签: