1、 单片机课程设计报告基于 at89c51 的数字电压表设计设计课题: 专业班级: 学生姓名: 指导教师: 设计时间: 基于 AT89C51 单片机数字电压表的设计基于 AT89C51 单片机的数字电压表设计摘要数字电压表是常用的对电子电路进行检测的较精密仪器之一。本文的设计思想是一种基于单片机的数字电压表设计方式。该设计主要由三个模块组成:A/D 转换模块、数据处理主控模块和显示模块。A/D 转换模块主要由芯片 ADC0808 来完成,它负责将采集到的模拟量转换为相应的数字量传送到数据处理模块(单片机)。数据处理主控模块由单片机 AT89C51 来完成,它负责将 ADC0808 传送过来的数字
2、量经过一定的数据处理,产生相对应的显示码传送到显示模块进行显示。此外,它还控制芯片ADC0808 的工作。经过仿真软件结果表明本设计中的电压表电路简单,所用元件较少,成本低且测量精度高。此电压表可以测量 05V 的模拟输入电压值,并通过一个四位一体的共阴数码管显示出来。关键词:数字电压表,单片机,A/D 转换,AT89C51,ADC0808目 录第 1 章 绪论 .1第 2 章 系统整体设计思路及方案 .22.1 设计题目 22.2 设计思路 22.3 设计方案 2第 3 章 数字电压表的硬件设计 .33.1 单片机主控制模块的设计 33.1.1 AT89C51 性能简介 .33.1.2 AT
3、89C51 各引脚功能 .33.1.3 AT89C51 的复位电路和时钟电路 .53.2 A/D 转换电路设计 63.2.1 ADC0808 的主要特性 .73.2.2 ADC0808 各引脚功能 .73.3 显示电路的设计 83.4 总体电路设计 .10第 4 章 数字电压表的软件设计 114.1 设计流程图 .114.2 各子程序简介 .12第 5 章 软件调试 135.1 软件调试 .135.2 误差分析 .13结论 .15参考文献 .16附录 程序截图及解释 17基于 AT89C51 单片机数字电压表的设计1第 1 章 绪论在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压
4、量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。数字电压表(Digital Voltmeter)简称 DAM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,有精度高、抗干扰能力强、集成方便,还可与 PC 进行实时通信等优点。目前,由各种单片机和 A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等领域,显示出了它极强的生命力。与此同时,由 DVM 扩展而成的各种通用及
5、专用数字仪表仪器,也把电量及非电量技术提高到崭新水平。新型数字电压表以其高准确度、高可靠性、高分辨率、高性价比等优良特性备受人们的青睐。本文是以简易数字直流电压表的设计为研究内容,本系统主要包括三大模块:转换模块、数据处理模块及显示模块。其中,A/D 转换采用 ADC0808 对输入的模拟信号进行转换,控制核心 AT89C51 再对转换的结果进行运算处理,最后驱动输出装置 LED 显示数字电压信号。厦门工学院 课程设计(论文)0第 2 章 系统整体设计思路及方案2.1 设计题目基于单片机 AT89C51 数字电压表的设计2.2 设计思路(1)根据设计题目,选择 AT89C51 单片机为核心控制
6、器件。(2)A/D 转换采用 ADC0808 实现,连接单片机的 P1 口和 P3 口的四位引脚。(3)电压显示采用 4 位一体的 LED 数码管。(4)LED 数码管的段码输入由端口 P0 产生;位码输入用端口 P2 产生。2.3 设计方案本设计选择 AT89C51 单片机作为核心控制器件。A/D 转换采用 ADC0808 来实现。输入采用 05V 的直流电压源,电压显示采用 4 位一体的 LED 数码管,LED 数码管的段码输人由端口 P0 输出,位码输人由端口 P2 输出。硬件电路设计由 6 个部分组成: A/D 转换电路,AT89C51 单片机系统,LED显示系统、时钟电路、复位电路以
7、及测量电压输入电路。硬件电路设计如图 2-1 所示。 图 2-1 系统设计框图时钟电路 复位电路A/D 转换 测量电压显示系统统AT89C51 P1 P3 P0P2P1 基于 AT89C51 单片机数字电压表的设计1第 3 章 数字电压表的硬件设计3.1 单片机主控制模块的设计3.1.1 AT89C51 性能简介AT89C51 是美国 ATMEL 公司生产的低电压,高性能 CMOS8 位单片机,片内含有 4KB 的可反复擦写的只读程序存储器和 128 字节的随机存储器。该器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容,由于将多功能 8
8、位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器,它为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51 功能性能:与 MCS-51 成品指令系统完全兼容; 4KB 可编程闪速存储器;寿命:1000 次写/擦循环;数据保留时间: 10 年;全静态工作:0-24MHz;三级程序存储器锁定;128*8B 内部 RAM;32 个可编程 I/O 口线;2个 16 位定时/计数器;5 个中断源;可编程串行 UART 通道;片内震荡器和掉电模式。3.1.2 AT89C51 各引脚功能AT89C51 提供以下标准功能:4KB 的 Flash 闪速存储
9、器,128B 内部RAM,32 个 I/O 口线,两个 16 位定时/计数器,一个 5 向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路,同时,AT89C51 可降至 0Hz 静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止 CPU 的工作,但允许 RAM,定时/ 计数器,串行通信口及中断系统继续工作,掉电方式保存RAM 中的内容,但震荡器停止工作并禁止其他所有工作直到下一个硬件复位。AT89C51 采用 PDIP 封装形式,引脚配置如图 3-1 所示。厦门工学院 课程设计(论文)2图 3-1 AT89C51 引脚图AT89C51 芯片的各引脚功能为:P0 口:这组引脚
10、共有 8 条,P0.0 为最低位。这 8 个引脚有两种不同的功能,分别适用于不同的情况,第一种情况是 89C51 不带外存储器,P0 口可以为通用I/O 口使用,P0.0-P0.7 用于传送 CPU 的输入/输出数据,这时输出数据可以得到锁存,不需要外接专用锁存器,输入数据可以得到缓冲,增加了数据输入的可靠性;第二种情况是 89C51 带片外存储器,P0.0-P0.7 在 CPU 访问片外存储器时先传送片外存储器的低 8 位地址,然后传送 CPU 对片外存储器的读/写数据。P0 口为开漏输出,在作为通用 I/O 使用时,需要在外部用电阻上拉。P1 口:这 8 个引脚和 P0 口的 8 个引脚类
11、似, P1.7 为最高位,P1.0 为最低位,当 P1 口作为通用 I/O 口使用时,P1.0-P1.7 的功能和 P0 口的第一功能相同,也用于传送用户的输入和输出数据。P2 口:这组引脚的第一功能与上述两组引脚的第一功能相同即它可以作为通用 I/O 口使用,它的第一功能和 P0 口引脚的第二功能相配合,用于输出片外存储器的高 8 位地址,共同选中片外存储器单元,但不像 P0 口那样传送存储器的读/写数据。P3 口:这组引脚的第一功能和其余三个端口的第一功能相同,第二功能为控制功能,每个引脚并不完全相同,如下表 3-1 所示:基于 AT89C51 单片机数字电压表的设计3表 3-1 P3 口
12、各位的第二功能P3 口各位 第二功能P3.0 RXT(串行口输入)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(片外数据存储器读允许)Vcc 为+5V 电源线,GND 接地。ALE:地址锁存允许线,配合 P0 口的第二功能使用,在访问外部存储器时,89C51 的 CPU 在 P0.0-P0.7 引脚线去传送随后而来的片外存储器读 /写数据。在不访问片外存储器时,89C51 自
13、动在 ALE 线上输出频率为 1/6 震荡器频率的脉冲序列。该脉冲序列可以作为外部时钟源或定时脉冲使用。EA:片外存储器访问选择线,可以控制 89C51 使用片内 ROM 或使用片外ROM,若 EA=1,则允许使用片内 ROM, 若 EA=0,则只使用片外 ROM。PSEN:片外 ROM 的选通线,在访问片外 ROM 时,89C51 自动在 PSEN线上产生一个负脉冲,作为片外 ROM 芯片的读选通信号。RST:复位线,可以使 89C51 处于复位(即初始化)工作状态。通常 89C51复位有自动上电复位和人工按键复位两种。XTAL1 和 XTAL2:片内震荡电路输入线,这两个端子用来外接石英晶
14、体和微调电容,即用来连接 89C51 片内 OSC(震荡器)的定时反馈回路。3.1.3 AT89C51 的复位电路和时钟电路单片机中 CPU 每执行一条指令,都必须在统一的时钟脉冲的控制下严格按时间节拍进行,而这个时钟脉冲是单片机控制中的时序电路发出的。CPU 执行一条指令的各个微操作所对应时间顺序称为单片机的时序。MCS-51 单片机芯片内部有一个高增益反相放大器,用于构成震荡器,XTAL1 为该放大器的输入端,XTAL2 为该放大器输出端,但形成时钟电路还需附加其他电路。厦门工学院 课程设计(论文)4单片机 AT89C51 的时钟电路如图 3-2 所示,主要由电容 C1- C3、电阻R1、
15、晶振 X1 等组成。AT 89C51 的 18 脚(XTAL2)和 19 脚(XTAL1)接时钟电路,其中 19 脚是 AT89C51 内部振荡器倒相放大器的输入端,用于接外部晶振和微调电容的一端;18 脚是 AT89C51 内部振荡器倒相放大器输出端,用于接外部晶振和微调电容的另一端。图 3-2 AT89C51 的时钟电路图单片机在启动运行时都需要复位,使 CPU 和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51 单片机有一个复位引脚 RST,采用施密特触发输入。当震荡器起振后,只要该引脚上出现 2 个机器周期以上的高电平即可确保时器件复位。复位完成后,如果 R
16、ST 端继续保持高电平,MCS-51 就一直处于复位状态,只要 RST 恢复低电平后,单片机才能进入其他工作状态。图 3-3 是 51 系列单片机统常用的复位电路。图 3-3 AT89C51 的复位电路3.2 A/D 转换电路设计 现实世界的物理量都是模拟量,能把模拟量转化成数字量的器件称为模/数转换器(A/D 转换器),A/D 转换器是单片机数据采集系统的关键接口电路,按照各种 A/D 芯片的转化原理可分为逐次逼近型,双重积分型等等。双积分式A/D 转换器具有抗干扰能力强、转换精度高、价格便宜等优点。与双积分相比,基于 AT89C51 单片机数字电压表的设计5逐次逼近式 A/D 转换的转换速
17、度更快,而且精度更高,如 ADC0809、ADC0808 等,它们通常具有 8 路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送到单片机进行分析和显示。一个 n 位的逐次逼近型 A/D转换器只需要比较 n 次,转换时间只取决于位数和时钟周期,逐次逼近型 A/D转换器转换速度快,因而在实际中广泛使用。3.2.1 ADC0808 的主要特性ADC0808 是 CMOS 单片型逐次逼近式 A/D 转换器,带有使能控制端,与微机直接接口,片内带有锁存功能的 8 路模拟多路开关,可以对 8 路 0-5V 输入模拟电压信号分时进行转换,由于 ADC0808 设计时考虑到若干种模/
18、数变换技术的长处,所以该芯片适应于过程控制,微控制器输入通道的接口电路,智能仪器和机床控制等领域。ADC0808 是分辨率为 8 位的、以逐次逼近原理进行模/数转换的器件。其内部有一个 8 通道多路开关,它可以根据地址码锁存译码后的信号,只选通 8路模拟输入信号中的一个进行 A/D 转换。ADC0808 是 ADC0809 的简化版本,功能基本相同。一般硬件仿真时采用 ADC0808 进行 A/D 转换,实际使用时采用 ADC0809 进行 A/D 转换。 3.2.2 ADC0808 各引脚功能图 3-4 ADC0808 引脚图ADC0808 芯片有 28 条引脚,采用双列直插式封装,其引脚图
19、如图 3-4 所示。下面说明各个引脚功能:IN0-IN7(8 条):8 路模拟量输入线,用于输入和控制被转换的模拟电压。厦门工学院 课程设计(论文)6ALE:地址锁存允许输入线,高电平有效,当 ALE 为高电平时,为地址输入线,用于选择 IN0-IN7 上那一条模拟电压送给比较器进行 A/D 转换。ADDA,ADDB,ADDC:3 位地址输入线,用于选择 8 路模拟输入中的一路,其对应关系如表 3-2 所示:表 3-2 ADC0808 通道选择表地址码 C B A 对应的输入通道 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 IN0 IN1 I
20、N2 IN3 IN4 IN5 IN6 IN7 START:START 为“启动脉冲”输入法,该线上正脉冲由 CPU 送来,宽度应大于 100ns,上升沿清零 SAR,下降沿启动 ADC 工作。EOC: EOC 为转换结束输出线,该线上高电平表示 A/D 转换已结束,数字量已锁入三态输出锁存器。OE:数据输出允许信号,输入,高电平有效。当 A/D 转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。 REF+、REF-:参考电压输入量,给电阻阶梯网络供给标准电压。Vcc、GND: Vcc 为主电源输入端,GND 为接地端,一般 REF+与 Vcc 连接在一起,REF-与 GND 连接
21、在一起.CLK:时钟输入端。3.3 显示电路的设计LED 是发光二极管显示器的缩写。LED 由于结构简单、价格便宜、与单片机接口方便等优点而得到广泛应用。LED 显示器是由若干个发光二极管组成显示字段的显示器件。在单片机中使用最多的是七段数码显示器。在应用系统中,设计要求不同,使用的 LED 显示器的位数也不同,因此就生产了位数,尺寸,型号不同的 LED 显示器供选择,在本设计中,选择 4 位一体的数码型 LED 显示器,简称 “4-LED”。本系统中前一位显示电压的整数位,即个位,后三位显示电压的小数位。基于 AT89C51 单片机数字电压表的设计74-LED 显示器引脚如图 3-5 所示,
22、是一个共阴极接法的 4 位 LED 数码显示管,其中 a, b,c ,e,f,g 为 4 位 LED 各段的公共输出端,1、2、3、4 分别是每一位位数选端,DP 是小数点引出端,4 位一体 LED 数码显示管的内部结构是由 4 个单独的 LED 组成,每个 LED 的段输出引脚在内部都并联后,引出到器件的外部。图 3-5 4 位 LED 引脚本设计中 LED 和单片机的连接如图 3-6,图中可以看出,本设计用单片机的 P0.0P0.7 作为 LED 显示的片选端口,P2 端口作为 LED 的位选信号。图 3-6 显示电路连接图3.4 总体电路设计经过以上的设计过程,可设计出基于单片机的简易数
23、字电压表硬件电路原厦门工学院 课程设计(论文)8理 图如图 3-7 所示。图 3-7 设计电路总图此电路的工作原理是:+5V 模拟电压信号通过变阻器 RV1 分压后由 IN0 进入 ADC0808,经过 A/D 转换后,读取转换后的采样值,通过公式:电压= 采样值/采样精度*参考电压,将通过公式计算后的数字量经过其输出通道 A0-A7 传送给 AT89C51 芯片的 P1 口,AT89C51 负责把接收到的数字量经过数据处理,产生正确的显示段码通过 P0 口传送给共阴数码管, P2.0、P2.1、P2.2、P2.3 产生位选信号控制数码管的亮灭。AT89C51 通过 P3.4 给 ADC080
24、8 的 CLOCK 提供时钟信号,当给单片机的P3.0 输出一个正脉冲,利用其下降沿可启动 AD 转换,由 P3.2 检测 A/D 转换是否完成,转换完成后,通过 P3.1 使输出允许控制端 OE 置为高电平,允许单片机读取转换数据,将转换结果送给共阴数码管显示出来。第 4 章 数字电压表的软件设计4.1 设计流程图主程序主要完成信号存储、信号处理、A/ D 转换以及调用显示等。主程流程如图 4-1 所示:程序首先从 ORG0000H 开始,然后无条件件跳转至主程序的首地址开始,初始化后,先调用模数转换程序进行输入信号的数字基于 AT89C51 单片机数字电压表的设计9化,然后调用显示子程序将
25、处理后的数字输出,一次数据结束后,循环执行调用的两个子程序。图 4-1 主程序流程图A/D 转换子程序如图 4-2 所示:首先进行开始模数转化,执行后,如果检测到转化没有完成则继续转化,如果转化完成,执行下一条指令,将取得模数转化结果并转换为工程量,然后显示转换结果,此为一次模数转换,如此循环可转换下一组数据,全部转换完毕后,结束。图 4-2 A/D 转换子程序流程图4.2 各子程序简介初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等。A/D 转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元。显示子程序采用动态扫描实现四位数码管的数
26、值显示,在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器 0 方式 2 产生 40ms 定时,通过软件延时程序来实现 10ms 的延时。厦门工学院 课程设计(论文)10第 5 章 软件调试5.1 软件调试软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。Proteus 软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真。Proteus 支持的微处理芯片包括 8051 系列、AVR 系列、PIC 系列、HC11 系列及Z80 等等。Proteus 可以完成单片机系统原理图电路绘制、 PCB 设
27、计,更为显著的特点是可以与 u Visions3 IDE 工具软件结合进行编程仿真调试。本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真我采用的是 Proteus 软件,程序方面,采用的是 C 语言,用 Keil 软件将程序写入单片机。5.2 误差分析由于单片机 AT89C51 为 8 位处理器,当输入电压为 5.00V 时,ADC0808输出数据值为 255(FFH),因此单片机最高的数值分辨率为 0.0196V(5/255)。这就决定了电压表的最高分辨率只能到 0.0196V,从下表可看到,测试电压以接近 0.01V 的幅度变化。本文的数字电压表可以测量 0-5V 的电压值,最大分
28、辩率为 0.001V。通过基于 AT89C51 单片机数字电压表的设计11仿真测量结果可得到简易数字电压表与“标准”数字电压表对比测试表。本次设计的电压表误差分析采用多次测量求绝对差值的方法,并把各组数据列成表格,这样能更加清晰地看出误差的波动范围及大小,如下表 5-1 所示:表 5-1 误差分析从上表可以看出,简易数字电压表测得的值和标准电压值偏差在 0-0.02V,这可以通过校正 ADC0808 的基准电压来解决。因为该电压表设计时直接用 5V 的供电电源作为电压,所以电压可能有偏差。标准电压(V)0.00 0.50 1.00 1.50 2.00 2.50 3.00 3.50 4.00 4
29、.50 5.00测量电压(V)0.00 0.509 1.000 1.509 2.000 2.490 3.000 3.490 4.000 4.490 5.000绝对误差(V)0 0.009 0 0.009 0 0.010 0 0.010 0 0.010 0厦门工学院 课程设计(论文)12结论经过近段时间的努力,基于 AT89C51 单片机的数字电压表设计基本完成。但设计中仍然存在许多不足之处。这次设计是我第一次设计电路,并用 Proteus实现了仿真。在这过程中,我对电路设计,单片机的使用等都有了新的认识。通过这次设计学会了 Proteus 和 Keil 软件的使用方法,掌握了从系统的需要、方案
30、的设计、功能模块的划分、原理图电路图的仿真的设计流程,积累了不少经验。基于单片机的数字电压表使用性强、结构简单、成本低、外接元件少。在实际应用工作应能好,测量电压准确,精度高。系统功能、指标达到了论文的预期要求,本文设计主要实现了简易数字电压表测量一路电压的功能,详细说明了从原理图的设计、电路图的仿真再到软件的调试。通过本次设计,我对单片机这门课有了进一步的了解。无论是在硬件连接方面还是在软件编程方面。本次设计采用了 AT89C51 单片机芯片,设计中还用到了模/数转换芯片 ADC0808,以前在学单片机课程时只是对其理论知识有了初步的理解。通过这次设计,对它的工作原理有了更深的理解。在调试过
31、程中遇到很多问题,硬件上的理论知识学得不够扎实,对电路的仿真方面也不够熟练。总之这次电路的设计和仿真,基本上达到了设计的功能要求。在以后的实践工作中,我将继续努力学习电路设计方面的理论知识,并理论联系实际,争取在电路设计方面能有所提升。基于 AT89C51 单片机数字电压表的设计13参考文献1王瑾.基于 Proteus 的数字电压表仿真设计J.电子设计工程,20132赵兆.基于 FPGA 的瞬变电磁数据采集系统的设计J.自动化与仪器仪表,2016(03)3高荣杰,章海亮,龚亮明,等.基于 PROTEUS 的单片机 AD 转换仿真J.计算机与现代化,2009(11).4胡健.单片机原理及接口技术
32、.北京:机械工业出版社,2004 年 10 月5王毓银.数字电路逻辑设计.高等教育出版社,2005 年 12 月6宋凤娟,孙军,李国忠.基于 89C51 单片机数字电压表设计J .工业控制计算机,2007/047谢维成、杨加国.单片机原理与应用及 C51 程序设计实例.电子工业出版社,2006 年 3 月8李广弟.单片机基础.北京航空航天大学出版社,2007 年 5 月9姜志海,黄玉清等著.单片机原理及应用M.北京:电子工业出版社.2005 年7 月 10魏立峰.单片机原理及应用技术.北京大学出版社,2005 年11周润景.Protues 在 MCS-51&ARM7 系统应用百例.第一版.北京:电子工业出版社 2006 年12边春远等著.MCS-51 单片机应用开发实用子程序M.北京:人民邮电出版社.2005/913苗红霞.单片机实现数字电压表的软硬件设计J .河海大学常州分校学报,2002,(03).厦门工学院 课程设计(论文)1414于殿泓、王新年.单片机原理与程序设计实验教程.西安电子科技大学出版社,2007/5基于 AT89C51 单片机数字电压表的设计15附录 程序截图及解释