毕业设计(论文)-基于AT89C51的简易数字电压表设计.doc_第1页
毕业设计(论文)-基于AT89C51的简易数字电压表设计.doc_第2页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于at89c51的简易数字电压表设计摘要:本文介绍了一种基于单片机的简易数字电压表的设计。该设计主要由三个模块组成:a/d转换模块,数据处理模块及显示模块。a/d转换主要由芯片adc0808来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。数据处理则由芯片at89c51来完成,其负责把adc0808传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着adc0808芯片工作。该系统的数字电压表电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。此数字电压表可以测量0-5v的1路模拟直流输入电压值,并通过一个四位一体的7段数码管显示出来。 关键词:单片机;数字电压表;a/d转换the design of simple digital voltmeter based on single-chip microcontrollerabstract:this paper which introduces a kind of simple digital voltmeter is based on single-chip microcontroller design. the circuit of the voltage meter is mainly consisted of three mould pieces: a/d converting mould piece, a/d converting is mainly completed by the adc0808, it converts the collected analog data into the digital data and transmits the outcome to the manifestation controlling mould piece. data processing is mainly completed by the at89c51 chip, it processes the data produced by the adc0808 chip and generates the right manifestation codes, also transmits the codes to the manifestation controlling mould piece. also, the at89c51 chip controls the adc0808 chip to work. the voltmeter features in simple electrical circuit, lower use of elements, low cost, moreover, its measuring precision and reliability. the voltmeter is capable of measuring voltage inputs from 1 route ranging from 0 to 5 volt, and displaying the measurements though a digital code tube of 7 pieces of led.key words:single-chip microcontroller; digital voltmeter; a/d converter目录1 引言12设计原理及要求12.1数字电压表的实现原理12.2数字电压表的设计要求13系统硬件设计23.1设计思路23.2设计过程33.3 at89c51的功能介绍33.3.1简单概述33.3.2主要功能特性43.3.3 at89c51的引脚介绍43.4 adc0808的引脚及功能介绍43.4.1芯片概述53.4.2 引脚简介53.4.3 adc0808的转换原理53.5 74ls373芯片的引脚及功能63.5.1芯片概述63.5.2引脚介绍73.6 led数码管的控制显示73.6.1 led数码管的模型73.6.2 led数码管的接口简介83.7硬件电路图94系统软件程序的设计94.1 主程序94.2 a/d转换子程序104.3 中断显示程序145电压表的调试及性能分析155.1 调试与测试155.2分析性能17参考文献18致 谢191 引言随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成cpu、存储器、定时器计数电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。 数字电压表(digitalvoltmeter)简称dvm,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。与此同时,由dvm扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。本章重点介绍单片a/d 转换器以及由它们构成的基于单片机的数字电压表的工作原目前,由各种单片a/d 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力理。本设计at89c51单片机的一种电压测量电路,该电路采用adc0808本文介绍一种基于a/d转换电路,测量范围直流 05v 的4路输入电压值,并在四位led数码管上显示或单路选择显示。测量最小分辨率为0.019v,测量误差约为正负0.02v。2设计原理及要求本设计是利用单片机at89c51与adc0808设计一个数字电压表,测量05v之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。2.1数字电压表的实现原理 adc0808是8位的a/d转换器。当输入电压为5.00v时,输出的数据值为255(0ffh),因此最大分辨率为0.0196(5/255)。adc0808具有8路模拟量输入端口,通过3位地址输入端能从8路中选择一路进行转换。如每隔一段时间依次轮流改变3位地址输入端的地址,就能依次对8 路输入电压进行测量。led数码管显示采用软件译码动态显示。通过按键选择可对8路循环显示,也可单路显示,单路显示可通过按键选择显示的通道数。2.2数字电压表的设计要求可以测量05v范围内的3路直流电压值。在4位led数码管上轮流显示各路电压值或单路选择显示,其中3位led数码管显示电压值,显示范围为0.00v5.00v,1位led数码管显示路数,3路分别为0-2。要求测量的最小分辨率为0.02v。3系统硬件设计3.1设计思路 多路数字电压表应用系统硬件电路由单片机、a/d转换器、数码管显示电路和按键处理电路组成,由于adc0808在进行a/d转换时需要有clk信号,本试验中adc0808的clk直接由外部电源提供为500khz的方波。由于adc0808的参考电压vrefvcc,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值(d/256*vref) adc0808采用逐次逼近法转换,把模拟电压转换成16进制的d,由于是对直流电压05v进行采集,所以d对应的电压为v0,我们的目的就是要把v0显示在led显示器上,因为单片机不好进行小数点计算,所以有:v0=2*d扩大了100倍,扩大100倍后的结果高八位放寄存器b,低八位放寄存器a,分寄存器b为0或不为0的情况进行存取数据,得到的结果个位放入r0,十位放入r1,通过查表使之显示在led显示器。时钟电路 复位电路a/d转换电路测量电压输入显示系统at89c51 p1 p2 p2 p0 图3-1总体框图3.2设计过程简易数字电压测量电路由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的时钟输入端,由外部信号源提供。单片机的p1、p3.0-p3.3端口作为四位led数码管现实控制。p3.5端口用作单路显示/循环显示转换按钮,p3.6端口用作单路显示时选择通道。p0端口作a/d转换数据读入用,p2端口用作0808的a/d转换控制。3.3 at89c51的功能介绍3.3.1简单概述at89c51是一种带4k字节闪存可编程可擦除只读存储器(fperomflash programmable and erasable read only memory)的低电压、高性能cmos 8位微处理器,俗称单片机。at89c51是一种带2k字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集和输出管脚相兼容。由于将多功能8位cpu和闪烁存储器组合在单个芯片中,atmel的at89c51是一种高效微控制器,at89c2051是它的一种精简版本。at89c51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图3-2所示。 图3-2 at89c51芯片模型3.3.2主要功能特性(1) 4k字节可编程闪烁存储器。 (2) 32个双向i/o口;1288位内部ram 。(3) 2个16位可编程定时/计数器中断,时钟频率0-24mhz。 (4) 可编程串行通道。 (5) 5个中断源。 (6) 2个读写中断口线。 (7) 低功耗的闲置和掉电模式。(8) 片内振荡器和时钟电路。3.3.3 at89c51的引脚介绍89c51单片机多采用40只引脚的双列直插封装(dip)方式,下面分别简单介绍。(1)电源引脚电源引脚接入单片机的工作电源。vcc(40引脚):+5v电源。gnd(20引脚):接地。(2)时钟引脚xtal1(19引脚):片内振荡器反相放大器和时钟发生器电路的输入端。xtal2(20引脚):片内振荡器反相放大器的输出端。图3-3 电源接入方式3)复位rst(9引脚)在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。(4)/vpp(31引脚)为外部程序存储器访问允许控制端。当它为高电平时,单片机读片内程序存储器,在pc值超过0fffh后将自动转向外部程序存储器。当它为低电平时,只限定在外部程序存储器,地址为0000hffffh。vpp为该引脚的第二功能,为编程电压输入端。3.4 adc0808的引脚及功能介绍3.4.1芯片概述adc0808是一种典型的a/d转换器。它是由8位a/d转换器,一个8路模拟量开关,8位模拟量地址锁存译码器和一个三态数据输出锁存器组成; +5v单电源供电,转化 时间在100us左右;内部没有时钟电路,故需外部提供时钟信号。芯片模型如图3-4所示。图3-4 adc0808芯片模型3.4.2 引脚简介 (1) in0in7:8路模拟量输入端。(2) d0d7:8位数字量输出端口。(3) start:a/d转换启动信号输入端。(4) ale:地址锁存允许信号,高电平有效。(5) eoc:输出允许控制信号,高电平有效。(6) oe: 输出允许控制信号,高电平有效。(7) clk:时钟信号输入端。(8)a、b、c:转换通道地址,控制8路模拟通道的切换。a、b、c分别与地址线或数据线相连,三位编码对应8个通道地址端口,a、b、c=000111分别对应in0in7通道的地址端口。3.4.3 adc0808的转换原理adc 0808 采用逐次比较的方法完成a/d转换,由单一的+5v电源供电。片内带有锁存功能的8路选1的模拟开关,由a、b、c的编码来决定所选的通道。adc0809完成一次转换需100s左右,它具有输出ttl三态锁存缓冲器,可直接连接到at89c51的数据总线上。通过适当的外接电路,adc0808可对05v的模拟信号进行转换。图3-5 adc0808与单片机的连接 3.5 74ls373芯片的引脚及功能3.5.1芯片概述74ls373是一种带有三态门的8d锁存器,其在本设计中是锁存p0口的低8位地址,芯片模型如图3-6所示。图3-6 74ls373芯片模型3.5.2引脚介绍(1) d0d7:8位数据输入线;(2) q0q7:8位数据输出线(3) g:数据输入锁存选通信号。当加到该引脚的信号为高电平时,外部数据选通到内部锁存器,负跳变时,数据锁存到锁存器中。(4):数据输出允许信号,低电平有效。当该信号为低电平时,三态门打开,锁存器中的数据输出到数据输出线上,当该信号为高电平时,输出线为高阻态。74ls373用作地址锁存器时,应使oe为低电平,此时锁存使能端c为高电平时,输出q1q8状态与输入端d18状态相同;当c发生负的跳变时,输入端d1d8数据锁入q1q8。51单片机的ale信号可以直接与74ls373的c连接。在mcs-51单片机系统中,常采用74ls373作为地址锁存器使用,其连接方法如上图所示。其中输入端d1d8接至单片机的p0口,输出端提供的是低8位地址,g端接至单片机的地址锁存允许信号ale。输出允许端oe接地,表示输出三态门一直打开。图3-7 74ls373与单片机连接3.6 led数码管的控制显示3.6.1 led数码管的模型led数码管模型如图3-8所示。图3-8 led数码管模型3.6.2 led数码管的接口简介led 的段码端口ag分别接至at89c51的p1.0p1.7口,位选端14分别接至p3.5、p3.4、p3.1、p3.0,如图3-9所示。图3-9 led与at89c51的硬件连线3.7硬件电路图用protues软件仿真设计的电路如图3-10所示。图3-10 仿真电路4系统软件程序的设计多路数字电压表系统软件程序主要有主程序、a/d转换子程序和中断显示程序组成。4.1 主程序主程序包含初始化部分、调用a/d转换子程序和相应外部0中断显示电压数值程序,初始化部分包含存放通道的缓冲区初始化和显示缓冲区初始化。另外,对于单路显示和循环显示,系统设置了一个标志位00h控制,初始化时00h位设置为0,默认为循环显示,当它为1时改变为单路显示控制,00h位通过单路、循环按键控制。流程图如图4-11所示。 开始 显示子程序 a/d转换子程序 初始化图4-11主程序流程图主程序:void main()uchar value4;while(1)ad_shift(ad_get();value_shift(value);display(value);4.2 a/d转换子程序a/d转换子程序用于对adc0808的4路输入模拟电压进行a/d转换,并将转换的数值存入4个相应的存储单元中,a/d转换子程序每隔一定时间调用一次,即隔一段时间对输入电压采样一次,如图4-12所示。启动转换a/d转换结束?输出转换结果数值转换显示结束开始图4-12 a/d转换流程图子程序:#include#define uchar unsigned char#define uint unsigned int#define ad_data p1/ad0808 数据输出端#define led_port p0/数码管段#define led_pos p3 /数码管位sbit start=p25; sbit oe=p27; sbit eoc=p26; sbit ale=p22;uint dctemp=0; /电压临时数据uchar code led_seg10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar code pos4=0x01,0x02,0x04,0x08;void delay(uchar t) /延时函数uchar i,j,k;for(i=0;it;i+)for(j=0;j20;j+)for(k=0;k20;k+); uchar ad_get()uchar dcdata;start=0;ale=1; /因为模拟输入只采用一路,地址段直接接地,使用in0作为输入端start=1;start=0;ale=0;while(eoc=0);oe=1;dcdata=ad_data;oe=0;delay(10);return dcdata; void ad_shift(uchar dcdata) uchar i;float dc=0;for(i=0;i8;i+)if(dcdata&1i)dc+=(1i)*19.6;dctemp=(int)dc; void value_shift(uchar value)value0=dctemp/1000;value1=dctemp/100%10;value2=dctemp/10%10;value3=dctemp%10;void display(uchar value)uchar i;for(i=0;i4;i+)led_pos=posi; /位控制if(i=0)led_port=led_segvaluei+0x80;/段码elseled_port=led_segvaluei; delay(1);void main()uchar value4;while(1)ad_shift(ad_get();value_shift(value);display(value);4.3 中断显示程序设计中采用中断的方式来读取转换完成的数据能节省cpu的资源当系统设置好后,一旦数据转换完成,便会进入外部中断0,然后在中断中读取转换的数值,处理数据并送数码管显示输出。 led 数码管采用软件译码动态扫描的方式。在中断程序中包含多路循环显示程序和单路显示程序,多路循环显示程序把4个存储单元的数值依次取出送到4个数码管上显示,每一路显示一秒。单路显示程序只对当前选中的一路数据进行显示。每路数据显示时需经过转换变成十进制bcd码,放于4个数码管显示缓冲区中。单路或多路循环显示通过标志位00h控制。在显示控制程序中加入了对单路或多路循环按键的判断。数字量送p1口取段码地址p3.1=1?调用循环显示程序调用单路显示程序显示的是第4路重新调用显示程序nyny图4-13中断显示程序流程图中断程序:uchar ad_get()uchar dcdata;start=0;ale=1; /因为模拟输入只采用一路,地址段直接接地,使用in0作为输入端start=1;start=0;ale=0;while(eoc=0);oe=1;dcdata=ad_data;oe=0;delay(10);return dcdata; 5电压表的调试及性能分析5.1 调试与测试本设计应用proteus6及keil51软件,首先根据自己设计的电路图用proteus6软件画出电路模型,关于这个软件的使用通过查一些资料和自己的摸索学习;然后我们用keil51软件对所编写的程序进行编译、链接,如果没有错误和警告便可生成程序的hex文件,将此文件加到电路图上使软硬件结合运行,最后进行端口电压的对比测试,测试的第一路对比见图5-14中标准电压值采用proteus6软件中的模拟电压表测得。图5-14数字电压表与标准电压表的比较从图中可以看出,简易数字电压表与“标准”数字电压表测得的绝对误差均在0.02v以内,这与采用8位a/d转换器所能达到的理论误差精度相一致,在一般的应用场合可以完全满足要求。(1)当in0口输入电压值为0.05v时,显示结果如图5-15所示,测量误差为0.1v。图5-15(2)当in0输入电压值为1.50v时,显示结果如图5-16所示,测量误差为0.04v。图5-16(3) 当in0口输入电压值为3.50v时,显示结果如图5-17,测量误差为0.06v。图5-175.2分析性能通过以上仿真测量结果可得到简易数字电压表与“标准”数字电压表对比测试表,如下表5-1所示:表5-1 简易数字电压表与“标准”数字电压表对比测试表标准电压值/v简易电压表测量值/v绝对误差/v0.000.000.000.500.520.021.001.000.001.501.510.012.002.020.022.502.500.003.003.000.003.503.510.014.004.000.004.995.000.01由于单片机at89c51为8位处理器,当输入电压为5.00v时,adc0808输出数据值为255(ffh),因此单片机最高的数值分辨率为0.0196v(5/255)。这就决定了电压表的最高分辨率只能到0.0196v,从上表可看到,测试电压一般以0.01v的幅度变化。 从上表可以看出,简易数字电压表测得的值基本上比标准电压值偏大0-0.01v,这可以通过校正adc0808的基准电压来解决。因为该电压表设计时直接用5v的供电电源作为电压,所以电压可能有偏差。当要测量大于5v的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。17江苏农林职业技术学院毕业论文(设计)参考文献 1 孙肖子.电子设计指南m.北京:高等教育出版社,2006. 2 康华光.电子技术基础m.北京:高等教育出版

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论