数字电压表设计报告.pdf
湖南科技大学信息与电气工程学院课程设计报告课程设计报告课课程程单片机原理及应用单片机原理及应用题题目:目:数字电压表数字电压表专专业:业:班班级:级:姓姓名:名:学学号:号:任务书任务书题题目目时时 间安排间安排目目 的:的:要要 求:求:总体方案实现:总体方案实现:指导教师评语:指导教师评语:评分等级:评分等级:【】指导教师签名:指导教师签名:1 1 数字电压表的概述数字电压表的概述数字电压表(Digital Voltmeter)简称 DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与 PC 进行实时通信。目前,由各种单片 A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。与此同时,由 DVM 扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原理。数字电压表的诞生打破了传统电子测量仪器的模式和格局。它显示清晰直观、读数准确,采用了先进的数显技术,大大地减少了因人为因素所造成的测量误差事件。数字电压表是把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式,并加以显示的仪表。数字电压表把电子技术、计算技术、自动化技术的成果与精密电测量技术密切的结合在一起,成为仪器、仪表领域中独立而完整的一个分支,数字电压表标志着电子仪器领域的一场革命,也开创了现代电子测量技术的先河。本设计采用了以单片机为开发平台,控制系采用AT89C52 单片机,A/D 转换采用 ADC0809。系统除能确保实现要求的功能外,还可以方便进行 8 路其它 A/D 转换量的测量、远程测量结果传送等扩展功能。简易数字电压测量电路由A/D 转换、数据处理、显示控制等组成。模拟式电压表具有电路简单、成本低、测量方便等特点,但测量精度较差,特别是受表头精度的限制,即使采用 0.5 级的高灵敏度表头,读测时的分辨力也只能达到半格。再者,模拟式电压表的输入阻抗不高,测高内阻源时精度明显下降。数字电压表作为数字技术的成功应用,发展相当快。数字电压表(Digital VoIt Me-ter,DVM),以其功能齐全、精度高、灵敏度高、显示直观等突出优点深受用户欢迎。特别是以 A/D 转换器为代表的集成电路为支柱,使 DVM 向着多功能化、小型化、智能化方向发展。DVM 应用单片机控制,组成智能仪表;与计算机接口,组成自动测试系统。目前,DVM 多组成多功能式的,因此又称数字多用表(Digital Multi Meter,DMM)。DVM 是将模拟电压变换为数字显示的测量仪器,这就要求将模拟量变成数字量。这实质上是个量化过程,即将连续的无穷多个模拟量用有限个数字表示的过程,完成这种变换的核心部件是 A/D 转换器,最后用电子计数器计数显示,因此 DVM 的基本组成是 A/D 转换器和电子计数器。DVM 最基本功能是测直流电压,考虑到仪器的多功能化,可将其他物理量,如电阻、电容、交流电压、电流等,都变成直流电压,因此,还应有一个测量功能选择变换器,它包含在输入电路中。DVM 对直流电压直接测量时的测量精度最高,其他物理量在变换成直流电压时,受功能选择变换器精度的限制,测量精度有所下降。2 2、工作原理、工作原理系统采用 12M 晶振产生脉冲做 8031 的内部时钟信号,通过软件设置单片机的内部定时器 T0 产生中断信号。利用中断设置单片机的 P2.4 口取反产生脉冲做 8031 的时钟信号。通过键盘选择八路通道中的一路,将该路电压送入ADC0809 相应通道,单片机软件设置ADC0809 开始 A/D 转换,转换结束 ADC0809 的 EOC 端口产生高电平,同时将ADC0809 的 EO端口置为高电平,单片机将转换后结果存到片内RAM。系统调出显示子程序,将保存结果转化为 0.00-5.00V 分别保存在片内 RAM;系统调出显示子程序,将转化后数据查表,输出到 LED显示电路,将相应电压显示出来,程序进入下一个循环。3 3、系统结构框图、系统结构框图时 钟电 路单片机LED显 示电 路复 位电 路A/D转 化测 量电 压 输入 电路4 4、80318031 的结构及其功能的结构及其功能在本次课题设计中我们选择了8031芯片。8031 和 8051是最常见的mcs51系列单片机,是 inter 公司早期的成熟的单片机产品,应用范围涉及到各行各业,下面介绍一下它的引脚图等资料。4.14.180318031 内部结构及其功能概述内部结构及其功能概述8031 引脚功能(1)主电源引脚 Vss 和 Vcc Vss 接地 Vcc 正常操作时为+5 伏电源(2)外接晶振引脚 XTAL1和 XTAL2 XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。XTAL2内部振荡电路反相放大器的输出端。是外接晶体的另一端。当采用外部振荡器时,此引脚接外部振荡源。(3)控制或与其它电源复用引脚RST/VPD,ALE/,和/Vpp RST/VPD 当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位在 Vcc 掉电期间,此引脚可接上备用电源,由 VPD 向内部提供备用电源,以保持内部 RAM中的数据。ALE/正常操作时为 ALE 功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,ALE 引脚以不变的频率(振荡器频率的)周期性地发出正脉冲信号。因此,它可用作对外输出的时钟,或用于定时目的。但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE 端可以驱动(吸收或输出电流)八个LSTTL 电路。对于 EPROM 型单片机,在 EPROM 编程期间,此引脚接收编程脉冲(功能)外部程序存储器读选通信号输出端,在从外部程序存储取指令(或数据)期间,在每个机器周期内两次有效。同样可以驱动八 LSTTL 输入。/Vpp、/Vpp 为内部程序存储器和外部程序存储器选择端。当/Vpp 为高电平时,访问内部程序存储器,当/Vpp 为低电平时,则访问外部程序存储器。对于 EPROM 型单片机,在 EPROM 编程期间,此引脚上加 21 伏 EPROM 编程电源(Vpp)。8031 引脚功能:Vcc:+5V 电源电压。Vss:电路接地端。P0.0P0.7:通道 0,它是 8 位漏极开路的双向 I/O 通道,当扩展外部存贮器时,这也是低八位地址和数据总线,在编程校验期间,它输入和输出字节代码,通道0 吸收/发出二个 TTL负载。P1.0P1.7:通道 1 是 8 位拟双向 I/O 通道,在编程和校验时,它发出低8 位地址。通道 1 吸收/发出一个 TTL 负载。P2.0P2.7:通道 2 是 8 位拟双向 I/O 通道,当访问外部存贮器时,用作高8 位地址总线。通道 2 能吸收/发出一个 TTL 负载。P3.0P3.7:通道 3 准双向 I/O 通道。通道 3 能吸收/发出一个 TTL 负载,P3 通道的每一根线还有另一种功能: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,外部数据存贮器读脉冲。RST/VpD:引脚 9,复位输入信号,振荡器工作时,该引脚上2 个机器周期的高电平可以实现复位操作,在掉电情况下(Vcc 降到操作允许限度以下),后备电源加到此引脚,将只给片内 RAM 供电。ALE/PROG:引脚 30,地址锁存有效信号,其主要作用是提供一个适当的定时信号,在它的下降沿用于外部程序存储器或外部数据存贮器的低8 位地址锁存,使总线 P0 输出/输入口分时用作地址总线(低 8 位)和数据总线,此信号每个机器出现 2 次,只是在访问外部数据存储器期间才不输出 ALE。所以,在任何不使用外部数据存贮器的系统中,ALE 以 1/6 振荡频率的固定速率 输出,因而它能用作外部时钟或定时,8751 内的 EPROM 编程时,此端输编程脉冲信号。PSEN:引脚 29,程序选通有效信号,当从外部程序存贮器读取指令时产生,低电平时,指令寄存器的内容读到数据总线上。EA/VPP:引脚 31,当保持 TTL 高电平时,如果指令计数器小于 4096,8051 执行内部 ROM的指令,8751 执行内部 EPROM 的指令,当使 TTL 为低电平时,从外部程序存贮器取出所有指令,在 8751 内的 EPROM 编程时,此端为 21V 编程电源输入端。XTAL1:引脚 18,内部振荡器外接晶振的一个输入端,HMOS 芯片使用外部振荡源时,此端必须 接地。XTAL2:引脚 19,内部振荡器外接晶振的另一个输入端,HMOS 芯片使用外部振荡器时,此端用于输入外部振荡信号。5 5、显示器、显示器本次设计中有显示模块,常用的显示器件比较多,有数码管,LED 点阵,1602 液晶,12864液晶等。数码管是最常用的一种显示器件,它是由几个发光二极管组成的8 字段显示器件,其特点是价格非常的便宜,使用也非常的方便,显示效果非常的清楚。小电流下可以驱动每光,发光响应时间极短,体积小,重量轻,抗冲击性能好,寿命长。但数码管只能是显示09 的数据。不能够显示字符。这也是数码管的不足之处。经过性能的比较和根据本设计的要求以及价格的考虑,选择数码管显示器。单位数码管如图 4.4 所示。6 6、模数(、模数(A/DA/D)芯片)芯片ADC0809ADC0809A/D 转换器是模拟量输入通道中的一个环节,单片机通过 A/D 转换器把输入模拟量变成数字量再处理。此次设计的是利用逐次逼近式ADC0809 进行模数转换。ADC0809 是 8 位逐次逼近型 A/D 转换器,它是由一个 8 路的模拟开关、一个地址锁存译码器、一个 A/D 转换器和一个三态输出锁存器组成。多路开关可选通8 个模拟通道,允许 8 路模拟量分时输入,共用A/D 转换器进行转换。些 A/D 转换器是的特点是 8 位精度,属于并行口,如果输入的模拟量变化大快,必须在输入之前增加采样电路。综合上述,逐次逼近型 A/D 转换既兼顾了转换速度,又具有一定的精度,这里选用的是逐次逼近型的 A/D 转换芯片 ADC0809。图 4.6ADC0809 内部结构图 4.7ADC0809 引脚图7 7、82798279 接口芯片接口芯片8279 的功能及工作原理8279 是 Intel 公司生产的通用可编程键盘和显示器 IO 接口部件。利用 8279,可实现对键盘显示器的自动扫描,并识别键盘上闭合键的键号,不仅可以大大节省CPU 对键盘显示器的操作时间,从而减轻 CPU 的负担,而且显示稳定,程序简单,不会出现误动作,由于这些优点,8279 芯片日益被设计者所采用。82798279 的引脚及内部结构的引脚及内部结构 (1)IO 控制和数据缓冲器双向的三态数据缓冲器将内部总线和外部总线 DBoDB7,用于传送 CPU 和8279 之间的命令,数据和状态。CS为片选信号。当CS为低电平时,CPU 才选中 8279 读写。A。用以区分信息的特性。当A。为1 时,CPU 写入 8279 的信息为命令,CPU从 8279 读出的信息为 8279 的状态。当 A。为 0 时,IO 信息都为数据。图 1 8279 的引脚图 (2)控制逻辑控制与定时寄存器用以寄存键盘及显示器的工作方式,锁存操作命令,通过译码产生相应的控制信号,使 8279 的各个部件完成一定的控制功能。定时控制含有一些计数器,其中有一个可编程的 5 位计数器,对外部输入时钟信号进行分频,产生 100kHz 的内部定时信号。外部时钟输入信号的周期不小于 500ns。(3)扫描计数器扫描计数器有两种输出方式。一种为外部译码方式(也称编码方式),计数器以二进制方式计数,4 位计数状态从扫描线 SL。SL3输出,经外部译码器译码出 16 位扫描线,另一种为内部译码方式(也称译码方式),即扫描计数器的低二位经片内译码器译码后从 SL。一 SL3输出。(4)键输入控制这个部件完成对键盘的自动扫描,锁存 RL。RL7的键输入信息,搜索闭合键,去除键的抖动,并将键输入数据写入内部先进先出(FIFO)的存储器 RAM。(5)FIFO RAM 和显示缓冲器 RAM8279 具有 8 个先进先出(FIFO)的键输入缓冲器,并提供 16 个字节的显示缓冲器 RAM。8279 将段码写入显示缓冲器 RAM,8279 自动对显示器扫描,将其内部显示缓冲器 RAM 中的数据在显示器上显示出来。IRQ 为中断请求输出线,高电平有效。当 FIFO RAM缓冲器中存有键盘上闭合键的编码时,IRQ 线升高,向 CPU 请求中断,当 CPU 将缓冲器中的输入键的数据全部读取时,中断请求线下降为低电平;SHIFT、CNTLSTB 为控制键输入线,由内部拉高电阻拉成高电平,也可由外部控制按键拉成低电平。RL。RL7为反馈输入线,作为键输入线,由内部拉高电阻(或称为上拉电阻)拉成高电平,也可由键盘上按键拉成低电平。SL。SL3为扫描输出线,用于对键盘显示器扫描。OUT B。-3、OUTA。-3为显示段数据输出线,可分别作为两个半字节输出,也可作为 8 位段数据输出口,此时 OUTB。为最低位,OUTA3为最高位。BD 为消隐输出线,低电平有效,当显示器切换时或使用显示消隐命令时,将显示消隐。RESET 为复位输入线,高电平有效。当RESET 输入端出现高电平时,8279 被初始复位。8 8、硬件原理图、硬件原理图9 9、c c 语言程序编写语言程序编写#include#include#include#define A_DPORT XBYTE0 x8100/0809 通道 0 地址#define DATXBYTE0 xFF80/8279 数据口地址#define COMXBYTE0 xFF82/8279 状态/命令口地址#define uchar unsigned char#define uint unsigned intbit bdata bz=0;/定义标志long int val;uchar idata diss4=0,0,0,0;/显示缓冲区uchar code ledseg=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/LED显示常数表void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/-8279 初始化子程序-void init8279()COM=0 x00;/置 8279 工作方式COM=0 x2f;/置键盘扫描速率COM=0 xc1;/清除 LED 显示delay(200);/等待清除结束/-显示函数-void disled(d)uchar idata*d;uchar i;COM=0 x80;for(i=0;i4;i+)COM=i+0 x80;DAT=ledseg*d;d+;if(i=3)DAT=ledseg*d|0 x80;/-显示缓冲区内容显示-void disp(void)disled(diss);/-显示处理-void display(long second)diss0=second%10;/低位先存diss1=second/10%10;diss2=second/100%10;diss4=second/1000;disp();main()IT0=1;EX0=1;EA=1;delay(100);/延时init8279();while(1)A_DPORT=val;/启动 A_Dwhile(bz=0);/等待 A_D 转换结束display(val);delay(10);bz=0;/清读数标志void int_0(void)interrupt 0val=A_DPORT;/读 A_D 数据val=val*5000/256;bz=1;/置读数标志