1、目 录0. 前言11.基于单片机的多路数字电压表的基本理论12. 方案设计23. 硬件电路的工作原理23.1单片机电路模块23.2 A/D转换器电路模块43.3数码管显示电路模块53.4 按键处理电路模块54. 软件编程64.1 主程序64.3 显示子程序95. 系统调试和结果分析106. 结论及进一步设想10参考文献11附录1 元件清单12课设体会13沈阳航空航天大学课程设计论文 基于单片机的多路数字电压表的设计基于单片机的多路数字电压表的设计高文超 沈阳航空航天大学自动化学院摘要:本次设计了一个多路数字电压表,该电压表测量范围在05V之间。它主要利用A/D转换器,对多路电压值进行采样,得到
2、相应的数字量,然后按照数字量与模拟量的比例关系得到对应的模拟电压值,通过显示设备显示出来。系统过程就是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示。由于采用高性能的单片机芯片为核心,同时利用LED数码管为显示设备,这样就使显示清晰直观、读数准确,大大地减少了因人为因素所造成的测量误差事件,大大的提高了测量的精确度。关键词:单片机;数字电压表;ADC08090. 前言单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU)。随着单片机技术的飞速发展,各种单片机蜂拥而至,单片机技术已成为一个国家现代化科
3、技水平的重要标志。 单片机可单独地完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征。单片机控制系统能够取代以前利用复杂电子线路或数字电路构成的控制系统,可以软件控制来实现,并能够实现智能化。现在单片机控制范畴无所不在,例如通信产品、家用电器、智能仪器仪表、过程控制和专用控制装置等等,单片机的应用领域越来越广泛。本次课程设计的课题是“基于单片机的多路数字电压表的设计”。主要考核我们对单片机技术,编程能力等方面的情况。观察独立分析、设计单片机的能力,以及实际编程技能。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强
4、、集成方便。通过单片机,采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表,使测得的结果更为精准。本课题主要解决A/D转换、数据处理及显示控制等三个模块。控制系统采用AT89C52单片机,A/D转换采用ADC0809。1.基于单片机的多路数字电压表的基本理论基于单片机的多路数字电压表的主要原理是利用A/D转换器实现其功能,其过程为如下:先用A/D转换器对各路电压值进行采样,得到相应的数字量,再按数字量与模拟量成比例关系运算得到相应的模拟电压值,然后把模拟值通过数码管显示出来。设计时假设待测的输入电压为8路,电压值的范围为05v,要求能在4位LED数码上轮流显示或单路
5、显示。测量的最小分辨率为0.019v。根据系统的功能要求,控制系统采用AT89C52单片机,A/D转换器。当输入电压为5V时,输出的数据值为255(0FFH),因此最大分辨率为0.0196V(5/255)。ADC0809具有8路模拟量输入端口,通过3位地址输入端能从8路中选择一路进行转换。如每隔一段时间依次轮流改变3位地址输入端的地址,就能依次对8路输入电压进行测量。LED数码管显示采用软件译码动态显示。通过按键选择可8路循环显示,也可以单路循环。单路显示可通过按键选择所要显示的通道数。2. 方案设计输入电路A/D转换器单片机89C52LED数码显示基于单片机的多路数字电压表电路的基本组成如图
6、1所示。图1 基于单片机的多路数字电压表电路的原理框图根据设计要求,采用的方案如下。硬件部分实现数据的采集、编译,A/D转换以及显示的功能,包括单片机电路模块、A/D转换器模块、数码管显示电路模块、按键处理电路模块;软件部分实现控制芯片,使各部件能够正常的运行,同时实现仿真的功能,主要设计思想是利用Proteus软件进行仿真,通过仿真得到实验的结果。3. 硬件电路的工作原理3.1单片机电路模块本次课设单片机采用高性能的89C52系列芯片,如图2所示,图2 AT89C52芯片图其具体管脚说明如下:P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,
7、被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为
8、输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些
9、特殊功能口,如下表所示: 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(外部数据存储器读选通);P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变
10、的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。3.2 A/D转换器电路模块ADC08
11、09具有8路模拟量输入通道IN0-IN7,通过3位地址输入端C、B、A(引脚23-25)进行选择,如图3所示。引脚22为地址锁存控制端ALE,当输入为高电平时,C、B、A引脚输入的地址锁存于ADC0809内部是锁存器中,经内部译码电路译码选中相应的模拟通道。引脚6为启动转换控制端START,当输入一个2s宽的高电平脉冲时,就启动ADC0809开始对输入通道的模拟量进行转换。引脚7为A/D转换器,当开始转换时,EOC信号为低电平,经过一段时间,转换结束,转换结束信号EOC输出高电平,转换结果存放于ADC0809内部的输出数据寄存器中。引脚9脚为A/D转换数据输出允许控制端OE,当OE为高电平时,
12、存放于输出数据锁存器中的数据通过ADC0809的数据线D0D7输出。引脚10为ADC0809的时钟信号输入端CLOCK。在连接时,ADC0809的数据线D0D7与AT89C52的P0口相连接,ADC0809的地址引脚、地址锁存端ALE、启动信号START、数据输出允许控制端OE分别与AT89C52的P2口相连接,转换结束信号EOC与AT89C52的P3.7相连接。时钟信号输入端CLOCK信号,由单片机的地址锁存信号ALE得到。图3 A/D转换器电路图3.3 数码管显示电路模块LED数码管采用动态扫描方式连接,通过AT89C52的P1口和P3.0P3.3口控制。P1口为LED数码管的字段码输出端
13、,P3.0P3.3口为LED数码管的位选码输出端,通过三极管驱动并反相。如图4所示。图4 数码管显示电路图3.4 按键处理电路模块S1和S2是两个按键开关,如图5所示,分别与单片机的P3.5和P3.6相连接。S1用于单路显示或多路循环显示转换控制,S2用于单路显示时的通道选择。图5 按键处理电路图4. 软件编程多路数字电压表的系统软件程序由主程序、A/D转换子程序和显示子程序组成。4.1 主程序主程序包含初始化部分、调用A/D转换子程序和调用显示程序,如图6所示。初始化部分包含存放通道数据缓冲区初始化和显示缓冲区初始化。另外,对于单路显示和循环显示,系统设置了一个标志位00H控制。初始化时00
14、H位设置为0,默认为循环显示,当它为1时改变为单路显示。00H位通过单路/循环按键控制。初始化调用A/D转换子程序调用显示子程序开始图 6 主程序流程框图程序源如下:#include #include #include /调用_nop_()延时函数#define ad_con P2 /0809控制口#define addata P0 /0809数据入口#define disdata P1 /数码管显示#define uchar unsigned char#define uint unsigned intuchar number=0x00; /存放单通道显示时的当前通道数sbit ALE=P23
15、; /0809地址锁存信号sbit START=P24; /启动信号sbit OE=P25; /输出允许通道sbit KEY1=P35; /循环或单路选择按键sbit KEY2=P36; /通道选择按键sbit EOC=P37; /转换结束信号sbit DISX=disdata7;/小数点位sbit FLAG=PSW0; /循环或单路显示标志位Uchar code dis_711=0x3F,0x06,0x5B,0X4F,0x66,0x6D,0x7D,0x07,0x7E,0x6F,0x00;/数码管的字段码uchar code scan_con4=0xF1,0xF2,0xF4,0xF8;/4个L
16、ED数码管的位选Uchar data ad_data8=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;/0809的8个通道转换数据缓冲区uchar data dis5=0x00,0x00,0x00,0x00,0x00;/显示缓冲区/*主函数*/ main() P0=0xff; /初始化端口 P2=0x00; P1=0xff; P3=0xff; while(1) test();/测量转换数据 scan();/显示数据 /*1秒延时*/delay1ms(uint t)uint i,j;for (i=0;it;i+)for (j=0;j120;j+);4.2 A/D
17、转换子程序A/D转换子程序用于对ADC0809的8路输入模拟电压进行A/D转换,并将转换的数值存入8个相应的存储单元中,如图7所示。A/D转换子程序每隔一定时间调用一次,即隔一段时间对输入电压采样一次。开始启动一次转换否A/D转换结束EOC=1?) 取数据(OE=0)0808地址通道加1否地址数小于8开始图7 A/D转换器子程序框图程序源如下:test() uchar m; uchar s=0x00; /初始通道位0 ad_con=s;/第一通道地址送0809控制口 for(m=0;m8;m+) ALE=1;_nop_();_nop_();ALE=0;/锁存通道地址 START=1;_nop_
18、();_nop_();START=0;/启动转换 _nop_();_nop_();_nop_();_nop_(); while(EOC=0);/等待转换结束 OE=1;ad_datam=addata;OE=0;/读取当前通道转换数据 s+;ad_con=s;/改变通道地址 ad_con=0x00;/通道地址恢复初值 4.3 显示子程序LED数码管采用软件译码动态扫描方式。在显示子程序中包含多路循环显示和单路显示程序。多路循环显示把8个存储单元的数值依次取出送到4位数码管上显示,每一路显示1秒。单路显示程序只对当前选中的一路数据进行显示。每路数据显示需经过转换变成十进制BCD码,放于4个数码管的
19、显示缓冲区中。单路显示或多路循环显示通过标志位00H控制。在显示控制程序中加入了对单路或多路循环按键和通道选择按键的判断。程序如下:keytest()if (KEY1=0) /检测循环或单路选择按键是否按下FLAG=!FLAG; /标志位取反,循环,单路显示却换 while(KEY1=0);if(FLAG=1) /单路循环时,检测通道选择按键是否按下if(KEY2=0) number+; if(number=8) number=0; while(KEY2=0); 5. 系统调试和结果分析采用Keil uVision2编译器进行源程序编译及仿真调试,同时进行硬件电路板的设计制作,完成好程序后进行
20、软硬件联调,最后进行端口电压的对比测试,要求测试对比中标准电压值采用数字万用表测得。测试对比表如表1所列。表中标准电压值采用数字万用表测得。表1 基于单片机的多路数字电压表与数字电压表对比测试表标准电压值/V简易电压表测得值/V绝对误差/V0.000.000.000.150.17+0.020.850.86+0.011.001.02+0.021.251.26+0.011.751.76+0.011.892.00+0.022.322.33+0.012.652.65+0.01基于单片机的多路数字数字电压表与“标准”数字电压表测得的绝对误差应在0.02V以内,满足设计要求,达到了设计的目的。6. 结论及
21、进一步设想通过实验仿真,比较标准电压值与设计的数字电压表测得的电压值,发现它们的绝对误差均在0.02V以内,这与采用8位A/D转换器所能到达到的理论误差精度相一致,在一般的应用场合完全可以满足要求。但是由于存在着单片机为8位处理器,当输入电压为5.00 V时,ADC0809输出数据值为255(FFH),单片机最高的数值分辨率只能为0.0196 V的原因,还存在着不能满足高精度测量的缺陷,可以通过采用更高位的A/D转换器来进一步改善,得到更加精确的数据。此外,从表1中可以看出,简易数字电压表测得的值基本上均比标准电压值偏大0.01-0.01 V。这可以通过校正ADC0809的基准电压来解决。因为
22、该电压表设计时直接用5 V的供电电源作为基准电压,所以电压有可能有偏差。另外,还可以用软件编程来校正测量值。参考文献1 刘复华. 单片机及其应用系统. 北京:清华大学出版社,19922 李斌,董慧颖. 可重组机器人研究和发展现状. 沈阳工业学院学报,2000,19(4):23-273 张国勋,缩短ICL7135A/D采样程序时间的一种方法J. 电子技术应用,1993,第一期.4 高峰,单片微型计算机与接口技术M.北京:科学出版社,2003.5 .杨恢先,黄辉先.单片机原理及应用M.北京:人民邮电出版社,20066 李广弟.单片机基础.北京航空航天大学出版社19947 何立民.单片机应用系统设计
23、.北京航空航天大学出版社1990附录1 元件清单元件名称型号数量A/D转换器ADC08081单片机芯片AT89C521电容10p2电容10u1与门74LS2451JK触发器74LS1131滑动电阻器1数字电压表1晶振CRYSTAL1LED显示器1电阻4.7k4电阻12k2开关2课设体会通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。这次实习让我受益匪浅,无论从知识上还是其他的各个方面。上课的时候的学习从来没有接触过真正的单片机,只是从理论的角度去理解枯燥乏味。但在实习中模拟使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。在这次课程设计中又让我体会到了合作与团结的力量,当遇到不会或是设计不出来的地方,我们就会相互讨论或者帮助。团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的,有了团结会有更多的理念、更多的思维、更多的情感。在此,衷心的感谢老师在本次课设中对我指导,如果没有老师的指导与帮助,自己是不能顺利完成这次课设任务的,老师的帮助指导让自己对单片机有了一个更加深刻的理解,谢谢老师对我的帮助。2010年7月 23日完成第13页