两路输入的数字电压表设计_第1页
两路输入的数字电压表设计_第2页
两路输入的数字电压表设计_第3页
两路输入的数字电压表设计_第4页
两路输入的数字电压表设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

目录1前言 页1前言传统的指针式电压表功能单一、精度低,并不能满足数字化时代的需求,采用单片夹的数字电压表,由于其精度高,抗干扰能力强,可扩展性强,还能与PC机进行实时通信。目前,由各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,展现出其强大的生命力。数字电压表是众多数字化仪表的核心与基础,电压表的数字化是将连续的模拟量转换成不连续的离散的数字形式并加以显示,这有别于传统的以指针加刻度盘进行读书的方法,避免了读书的视差和视觉疲劳。目前数字电压表的内部核心器件是A/D转换器,转换器的精度很大程度上影响着数字电压表的准确度,本文的A/D转换器采用的是ADC0808对输入模拟信号进行转换,控制核心AT89C51再对转换的结果进行运算和处理,最后驱动输出装置显示数字电压信号。数字电压表的设计和开发,已经有多种类型和款式。传统的数字电压表同样有其独特的优势,它们适合在现场做手工测量,要完成远程测量并要对测量数据做进一步处理,传统数字电压表是无法完成的。然而基于PC通信的数字电压表,既可以完成测量数据的传递,又能借助PC,做测量数据的处理。所以这种类型的数字电压表无论在功能和实际上,都具有传统数字电压表无法比拟的特点,这使得它的开发和应用具有良好的前景。

2单片机概述2.1AT89C51芯片简介AT89C51是MCS-51系列单片机的产品,包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在分别加以说明。2.1.1中央处理器中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作完成运算和控制输入输出功能等操作。AT89C51的引脚图如图2-1所示。图2-1AT89C51引脚图

2.1.2数据存储器图2-1AT89C51引脚图图2-2AT89C51内部结构图AT89C51内部有128个8位用户数据存储单元和128个专用寄存器单元,他们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。内部结构示意图如图2-2所示图2-2AT89C51内部结构图

2.1.3管脚说明(P0-P3口)P0口:P0口具有两种功能。第一,P0口可以作为通用I/O口接口使用,P0.7-P0.0用于传送CPU的输入/输出数据。输出数据时可以得到锁存,不需外接专用锁存器,输入数据可以得到缓冲。第二,P0.7-P0.0在CPU访问片外存储器时用传送片外存储器的低8位地址,然后传送CPU对片外存储器的读写。P1口:P1口的功能和P0口的第一功能相同,仅用于传递I/O输入/输出数据。P2口:P2口的第一功能和上述两组引脚的第一功能相同,可以作为I/O口使用。它的第二功能和P0口引脚的第二功能相配合,作为地址总线用于输出片外存储器的高8位地址。P3口: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外部RAM写选通信号P3.7–RD外部RAM读选通信号2.2时钟电路和复位电路单片机的时钟信号用来提供单片机各种操作的时间基准:复位操作则使单片机的片内电路初始化,使单片机从一种确定的状态开始运行。2.2.1时钟电路单片机的时钟信号通常用两种电路形式得到:内部振荡和外部振荡方式。在引脚XTAL1和XTAL2外部晶体振荡器或陶瓷谐振器,构成了内部振荡方式。由于单片机内部有一个高增益反向放大器,当外接晶振后,就构成了自积振荡,并产生振荡时钟脉冲。晶振通常选用6MHZ、12MHZ、或24MHZ。单片机的时序单位:振荡周期:晶振的振荡周期,又称时钟周期,为最小的时序单位。状态周期:振荡频率经单片机内的二分频器分频后提供给片内CPU的时钟周期因此一个状态周期包含两个振荡周期。机器周期:一个机器周期由6个状态周期和12个振荡周期组成是计算机执行一种基本操作的时间单位。指令周期:执行一条指令所需的时间。一个指令周期由1-4个机器周期组成,依据指令的不同而不同。2.2.2复位电路AT89C51单片机复位需要一个长达24个时时钟周期的高电平才能复位,复位的作用就是使程序的指针指向地址0,每个程序都是从地址0开始执行,所以复位的概念就是让程序从头开始执行。单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值。如图2-3为复位电路原理图。图2-3复位电路原理图

2.3ADC0808简介图2-3复位电路原理图为了满足多种需要,目前国内外各半导体器件生产厂家设计并生产出了多种多样的ADC芯片。仅美国AD公司的ADC产品就有几十个系列、近百种型号之多。从性能上讲,它们有的精度高、速度快,有的则价格低廉。从功能上讲,有的不仅具有A/D转换的基本功能,还包括内部放大器和三态输出锁存器,有的甚至还包括多路开关、采样保持器等,已发展为一个单片机的小型数据采集系统。ADC0808则是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。ADC0808是CMOS单片型逐次逼近式A/D转换器,它有8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器。如图2-4为ADC0808内部逻辑电路图。图2-4ADC0808内部逻辑电路图

ADC0808芯片有28条引脚,采用双列直插式封装,引脚图如图2-5所示。图2-4ADC0808内部逻辑电路图各引脚功能如下:IN0-IN7:8路模拟量输入端OUT1–OUT8:8位数字量输出端ALE:地址锁存允许信号,输入,高电平有效START:A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使ADC0808复位,下降沿启动A/D转换)。EOC:A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。CLK: 时钟脉冲输入端。要求时钟频率不高于640khz。VREF(+)和VREF(-):参考电压输入端。ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。图2-5ADC0808引脚图

2.4数码管显示原理图2-5ADC0808引脚图数码管是一种半导体发光器件,可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点的发光二极管单元DP(decimalpoint),其基本单元是发光二极管。数码管是一类价格便宜、使用简单,通过对其不同的管脚输入相对的电流,使其发亮,从而显示出数字能够显示时间、日期、温度等所有可用数字表示的参数的器件。数码管常用段数一般为7段,有的另加一个小数点,还有一种数码管是类似于3位“+1”型。数码管位数有半位,1,2,3,4,5,6,8,10位等等……数码管根据LED的接法不同分为共阴极和共阳极两类,了解数码管的这些特性,数码管对编程是很重要的,因为不同类型的数码管,除了数码管的硬件电路有差异外,数码管编程方法也是不同的。数码管的发光原理是一样的,只是数码管的电源极性不同而已。数码管颜色有红,绿,蓝,黄等几种。数码管被广泛用于仪表,时钟,车站,家电等场合。选用数码管时要注意产品尺寸颜色,功耗,亮度,波长等。其原理图如图2-6所示。图2-6数码管原理图图2-6数码管原理图从图中可以看出来,数码管共有a、b、c、d、e、f、g、dp这么8个段,而实际上,这8个段的每一段都是一个LED小灯,所以一个数码管就是由8个LED小灯组成的。数码管的上边有2个com,这是数码管的公共端。为什么有2个呢,一方面是2个可以起到对称的效果,刚好是10个引脚,另外一个方面,公共端通过的电流较大,我们初中就学过,并联电路电流之和等于总电流,用2个com可以把公共电流平均到2个引脚上去,降低单条线路承受的电流。数码管分为共阳极和共阴极两种,共阴极数码管就是8只LED小灯的阴极是连接在一起的,阴极是公共端,由阳极来控制单个小灯的亮灭。同理,共阳极数码管就是阳极接在一起。数码管内部结构的示意图,如图2-7所示。图2-7数码管内部结构示意图

3系统总体方案及硬件设计图2-7数码管内部结构示意图3.1设计目的及要求3.1.1设计目的运用单片机的基础知识,依据课程设计内容,综合所学课程,能够完成从硬件电路图设计,掌握工程设计方法,开发及设计工具的使用方法,完成课程设计。加深对单片机知识的理解,并灵活运用,将各种知识综合运用。通过这一设计实践过程,锻炼动手能力和分析、解决问题的能力。3.1.2设计任务及要求设计电压表并实现简单测量。具有以下基本功能:可以测量0~5V的8路输入电压值;可在四位LED数码管上实现轮流显示;超过预设值时,蜂鸣器进行报警测量误差为±0.02V;带有一定的扩展功能3.2系统框图图3-1双路数字电压表系统框图A/D采样ADC0808LED数码显示AT89C51双路数字电压表主要包括信号采样系统、单片机控制系统、电压值显示模块。信号采样主要由ADC0808负责,单片机控制系统主要由AT89C51来完成,而电压值显示模块由4位LED数码管来实现。系统大致图3-1双路数字电压表系统框图A/D采样ADC0808LED数码显示AT89C51

系统总原理图图3-2系统总原理图图3-2系统总原理图4程序流程图本设计采用C51语言编写,是一种以单片机为核心的电压表测量仪表,它能测量电压量,并且测量结果能够通过数码管显示,从而具有一定的智能性。由于单片机的有效输入/输出信号均为数字信号,而对于整个系统的前向通道有效信号均应为模拟信号,所以在设计过程中必然包括模拟量转换为数字量的设计,根据所需采用ADC0808芯片作为转换电路。第一步:设置端口地址,程序开始,输入模拟量。第二步:ADC0832初始化,一个转换周期开始第三步:软件滤波第四步:数据转换,读取八位数据。第五步:转换通道,从第三步开始再次执行。图4-1程序流程图开始数据转换软件滤波ADC0808初始化显示结果各个模块电路的软件设计,能够将采集到的模拟量转换为数字量并显示。根据双路数字电压表系统的设计要求,对系统软件进行分析,画出了系统的主程序流程图如图4-1所示。图4-1程序流程图开始数据转换软件滤波ADC0808初始化显示结果

5仿真过程5.1KeiluVision仿真通过编译程序获得.hex文件,用于后续的Proteus仿真。仿真结果如下:图5-1KeiluVision仿真结果图图5-1KeiluVision仿真结果图5.2Proteus仿真在元器件都找到后,先进行排版再按照电路图连接,连接时应注意要使得线路连接清晰,最好使用线来连接元器件。仿真电路图如前面的图3-2所示。在电路连接好后,双击AT89C51后,在弹出的对话框中选择放入编译好生成的.hex文件。两路0~5V被测电压加到ADC0808的IN0和IN1通道,进行A/D转换,两路输入电压的大小可通过手动调节RV1和RV2来实现。本设计将1.25V和2.5V作为两路输入的报警值,当通道IN0和IN1的电压分别超过1.25V和2.50V时,对应二进制数值分别为0x40和0x80。当A/D转换结果超过该数值时,将驱动发光二极管D1闪烁与蜂鸣器发声,以表示超限。测得的电压交替显示在LED数码管上,同时也显示在两个虚拟电压表图标上,通过鼠标滚轮放大虚拟电压表图标,可清楚地看到输入电压测量结果。下图5-2为RV1阻值为0时的5V输入的仿真图。可见发光二极管D1已被点亮,蜂鸣器部位出现高电平,发出报警声。该电路的单路最大值为5V,且数码管显示结果存在误差。图5-2最大电压值仿真图图5-2最大电压值仿真图图5-3电压超限仿真图下图5-3为RV1负载电压为2.55V时的仿真图,其输出值2.52V已大于2.5V限定值。可见发光二极管D1已被点亮,蜂鸣器部位出现高电平,发出报警声。图5-3电压超限仿真图

下图5-4为RV1负载电压为2.50V时的仿真图,其输出值为2.48V小于限定值。可图5-4电压未超限仿真图见发光二极管D1未点亮,蜂鸣器部位为低电平图5-4电压未超限仿真图RV2负载的仿真与RV1相同,仅限定值不同,为1.25V。

6结论与总结通过本次设计,我获益匪浅。在和组员们的共同努力下,我收获的并非只是一份简简单单的设计报告,更多的却是设计过程当中的酸甜苦辣。下面针对这次设计,简要谈一下自己的心得体会。在刚开始设计这个课题时,有很多的地方感到很生疏,譬如,如何确定方案。后来经过一段时间的学习,基本了解了一些,明白了两路输入的数字电压表的一些功能以及实现这些功能的一些方法。当然,在设计中也遇到了很多问题,往往一些看似简单的功能,在实际操作过程中往往会产生一定的问题。但最后在老师的指点和建议下都顺利地解决了。在完成设计的过程中,我同样也意识到了自身的不足,以往所学的知识并不够扎实,只了解一些理论的知识,而实际应用能力很差,有待自我提升。在这期间,我学到了不少的东西,无论是知识还是与人交流、合作。任何看似简单如一的东西,每当你去深入挖掘时,必会发现不一样的世界。

7致谢在本文结束之际,首先,我要向付老师致以崇高的敬意与忠心的感谢。老师不仅在我们完成设计期间不断督促、鼓励我们,而且在此次设计当中,也给了我们很多的帮助与指导。老师严谨的治学态度、渊博的学识、对事业的兢兢业业、不断进取的精神,为我今后的生活及工作树立了良好的榜样。感谢同学以及伙伴们在学习和生活上对我的帮助与关心,愿我们能在剩下已不多的大学时光中,共同奋勇向前,不忘初心,牢记使命!最后,再次向老师和同学们表示衷心的感谢!

8参考文献[1]李广第,《单片机基础》北京航空航天大学出版社,1999[2]何立民,《单片机高级教程》北京航空航天大学出版社,2001[3]赵晓安,《MCS-51单片机原理及应用》天津大学出版社,2001[4]肖洪兵,《跟我学用单片机》北京航空航天大学出版社,2002[5]徐慧民,《单片机微型计算机原理接口与应用》北京邮电大学出版社,1996

9附录两路输入的数字电压表程序如下:#include<reg51.h>Unsignedchara[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,},b[4],c=0x01;sbitSTART=P2^4;sbitOE=P2^6;sbitEOC=P2^5;sbitadd_a=P2^2;sbitadd_b=P2^1;sbitadd_c=P2^0;sbitled=P2^7;sbitbuzzer=P2^3;voidDelay1ms(unsignedintcount) //延时函数{ unsignedinti,j; for(i=0;i<count;i++) for(j=0;j<120;j++);}voidshow() //显示函数{ unsignedintr; for(r=0;r<4;r++) { P1=(c<<r); P3=b[r]; if(r==2) //显示小数点 P3=P3|0x80; Delay1ms(1); }}voidmain(void){ unsignedintaddata=0,i; while(1){ add_a=0;add_b=0;add_c=0; //采集第一路信号 START=1; //根据时序启动ADC0808 START=0; while(EOC==0) { OE=1; } addata=P0; if(addata>=0x40) //大于1.25V时,则使用LED和蜂鸣器报警 { for(i=0;i<=100;i++) { led=~led; buzzer=~buzzer; } led=1; //控制二极管VD2闪烁,发出光报警信号 buzzer=1; //控制蜂鸣器发声,发出声音报警信号}else //否则取消报警{ led=0; //控制发光二极管VD2灭 buzzer=0; //控制蜂鸣器不发声} addata=addata*1.96;

温馨提示

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

最新文档

评论

0/150

提交评论