1、- -基于51单片机的数字电压表设计 二级学院 学院 专 业 自动化 班 级组 号组 员指导教师 目 录一课程设计任务书2 1.1 设计题目、目的2 1.2题目的根本要求和拓展功能2 1.3设计时间及进度安排2二设计容32.1 元器件选型32.2 系统方案确定32.3 51单片机相关知识42.4 AD转换器相关知识6三数字电压表系统设计73.1系统设计框图 8 3.2 单片机电路93.3 ADC采样电路103.4显示电路113.5供电电路和参考电压3.6 数字电压表系统电路原理图四 软件局部 4.1 主程序 4.2 显示子程序五 数字电压表电路仿真5.1 仿真总图 5.2 仿真结果显示六 系统
2、性能分析七 心得体会一 课程设计任务书智能仪表课程设计是自动化专业的专业实践课程。本课程的任务是通过设计完成功能的单片机系统,使学生掌握目前典型的自动化易表的一般设计要求和设计方法,掌握开发及设计工具的使用方法,通过这一实践过程,锻炼学生的动手能力和分析、解决问题的能力,培养对所学知识的综合应用能力。1、 设计的题目 简易数字电压表的设计 对简易数字电压表的设计,掌握目前自动仪表的一般设计要求,工程设计方法,开发及设计工具的使用方法。数字电压表简称DVM,数字电压表根本原理是将输入的模拟电压信号转化为数字信号,再进展输出显示。而A/D转换器的作用是将连续变化的模拟信号量转化为离散的数字信号,器
3、根本构造是由采样保持,量化,编码等几局部组成。因此AD转换是此次设计的核心元件。输入的模拟量经过AD转换器转换,再由驱动器驱动显示器输出,便得到测量的数字电压。2、根本功能要求:1. 可以选择测量测量8路0-5V的8路输入电压值;2. 可轮流显示或单路选择显示可选;3. 测量显示最小分辨率为0.01V;测量误差约为0.02V;4. 具有电压过低、过高声光报警功能,报警限可独立设置; 拓展功能:(1) :测量电压围扩大,可测量小电压和大电压;可测量显示0-2mA电流;(2) :带通讯功能,电压测量值可在PC机上显示;(3) :带实时存储记忆和复现功能;3、设计时间及进度安排: 1、学分: 3分
4、2、时间安排: 3周 方案安排:第17周 任务布置,确定分组。任务分析,方案,绘制原理图:第18周 进展设计方案确实认,提交原理图,元器件清单何预定价格,进展购置;第18周 硬件焊接,调试;软件编程,联合硬件的调试;第19周 撰写课程实际报告,分组验收辩论;二 设计容:2.1 元器件选型: A/D转换器芯片ADC0809,AT89C52单片机,1602液晶显示器;2.2 系统方案确定:按系统功能实现要求,决定控制系统采用AT89C52单片机,A/D转换采用ADC0809。系统除能确保实现要求的功能外,还可以方便地进展8路其他A/D转换量的测量、远程测量结果传送等扩展功能。数字电压表系统设计方案
5、框图如图。上电复位LED显示器AT89C52 P0 P2 P1 P3ADC0809串口通信电源电路按键电路晶振电路P0:地址数据低8位口 P1:普通I/O口 P2:地址高8位口 P3:特殊功能口晶振电路保证信号传输同步,串口通信是与外界进展信息交换的一种方式, 按键电路中一个按键是单路和轮流显示的选择,一个按键是单路时的通道选择。实现过程:当外部05V的模拟信号输入时,首先通过ADC8090转换模块进展转换,转换成数字信号并进入通道进展选择后,将信号传入AT89C52单片机时,单片机通过按键电路中的一个按键来选择单路还是8路,另一个按键作单路显示时选择通道,中选择完毕后将数据送入到显示器,通过
6、P3特殊功能口经三极管驱动输出控制位。2.3 51单片机相关知识51单片机是对目前所有兼容intel 8031指令系统的单片机的统称。该系列单片机的始祖是intel的8031单片机,后来随着技术的开展,成为目前广泛应用的为单片机之一。单片机是在一块芯片集成了CPU、RAM、ROM、定时器计数器和多功能I/O口等计算机所需要的根本功能部件的大规模集成电路,又称为MCU。51系列单片机包含以下几个部件:一个位CPU;一个片振荡器及时钟电路;4KB的ROM程序存储器;一个128B的RAM数据存储器;寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路;32条可编程的I/O口线;两个16位定
7、时计数器;一个可编程全双工串行口;个中断源、两个优先级嵌套中断构造。51系列单片机如下列图:图1 51单片机引脚图引脚功能:Vcc: 电源电压GND:地P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1时,可作为高阻抗输入端用。在外部数据存储器或程序存储器时,这组口线分时转换地址低8位和数据总线复用,在期间激活部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1口:P1是一个带部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动吸收或
8、输出电流4个TTL逻辑门电路。对端口写“1,通过部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入.flash编程和程序校验期间,P1接收低8位地址。P1.0/T2和输入P1.1/T2EX,P2口:P2是一个带有部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动吸收或输出电流4个TTL逻辑门电路。对端口P2写“1,通过部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流在
9、外部程序存储器或16位地址的外部数据存储器例如执行MOVXDPTR指令时,P2口送出高8位地址数据。在8位地址的外部数据存储器如执行MOVXRI指令时,P2口输出P2锁存器的容。P3口:P3口是一组带有部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动吸收或输出电流4个TTL逻辑门电路。对P3口写入“1时,它们被部上位电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片复
10、位。ALE/PROG:当外部程序存储器或数据存储器时,ALE地址锁存允许输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲PROG。如有必要,可通过对特殊功能存放器SFR区中的8EH单元的D0位置位,可制止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE制止位无效。PSEN:程序储存允许PSEN输出是外部程序存储器的读选通信号
11、,当AT89C52由外部程序存储器取指令或数据时,每个机器周期两次PSEN有效,即输出两个脉冲。在此期间,当外部数据存储器,将跳过两次RSEN信号。EA/VPP:外部允许。欲使CPU仅外部程序存储器地址为0000HFFFFH,EA端必须保持低电平接地。需注意的是:如果加密位LB1被编程,复位时部会锁存EA端状态。如EA端为高电平接Vcc端,CPU那么执行部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源VPP,当然这必须是该器件是使用12V编程电压VPP。XTAL1:振荡器反相放大器的及部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端。2.外部时钟:输入端
12、接在XTAL1 输出端接在XTAL2 晶体可以在1.2mhz-12mhz之间任选,电容可以在20-60uf之间选择。3.74ls244:是一个缓冲输入口,同时也是一个单向驱动器一减轻总线负担。4.mc14024:用与二进制计数。5.ADC0809:A/D转换器:2.4 AD转换器相关知识ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式转换器。其部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进展A/D转换。ADC0809是采样频率为8位的、以逐次逼近原理进展模数转换的器件。其部有一个8通道多路开关,它可以根据地址码锁存译码后的信
13、号,只选通8个单断模拟输入信号中的一个进展A/D转换。1主要特性18路8位AD转换器,即分辨率8位。 2具有转换起停控制端。 3转换时间为100s4单个5V电源供电 5模拟输入电压围05V,不需零点和满刻度校准。 6工作温度围为-4085摄氏度 7) 低功耗,约15mW。 2 部构造ADC0809是CMOS单片型逐次逼近式A/D转换器,部构造如图1322所示,它由8路模拟开关、地址锁存与译码器、比拟器、8位开关树型A/D转换器、逐次逼近存放器、逻辑控制和定时电路组成。3外部特性引脚功能 ADC0809芯片有28条引脚,采用双列直插式封装,如下图。下面说明各引脚功能。 IN0IN7:8路模拟量输
14、入端。2-12-8:8位数字量输出端。ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路 ALE:地址锁存允许信号,输入,高电平有效。 START: AD转换启动信号,输入,高电平有效。 EOC: AD转换完毕信号,输出,当AD转换完毕时,此端输出一个高电平转换期间一直为低电平。 OE:数据输出允许信号,输入,高电平有效。当AD转换完毕时,此端输入一个高电平,才能翻开输出三态门,输出数字量。CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。 REF+、REF-:基准电压。 Vcc:电源,单一5V。 GND:地。 ADC0809的工作过程是:首先输入3位地址,并使A
15、LE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比拟器。START上升沿将逐次逼近存放器复位。下降沿启动 AD转换,之后EOC输出信号变低,指示转换正在进展。直到AD转换完成,EOC变为高电平,指示AD转换完毕,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门翻开,转换结果的数字量输出到数据总线上。图2 ADC0909引脚三数字电压表系统设计3.1系统设计框图此次设计的是数字电压表,要求的电压围是05v,而设计扩展的量程为025v。系统设计主要包括四个局部:分别是电源模块、AD模数转换局部、51单片机最小系统局部、1602液晶显示局部。首先由单
16、片机初始化ADC0809模数转换芯片和1602液晶显示,当外接被测电压后,ADC0809将模拟电压信号转换为数字信号输入到单片机的I/O口,通过单片机处理后将电压的大小显示在1602液晶上面。如下是本次设计作品的框图:图3 系统框图 3.2 单片机电路单片机最小系统如下列图所示,各个引脚都已经标出,而且四个I/O口都已经用排阵引出,方便外接I/O扩展用。图4 单片机最小系统3.3 ADC采样电路由于ADC0809是带地址锁存的模数转换器件,ADDA、ADDB、ADDC为模拟通道选择,编码为000111分别选中IN0IN7。ALE为地址锁存信号,其上升沿锁存ADDA、ADDB、ADDC的信号,译
17、码后控制模拟开关,接通八路模拟输入中相应的一路。CLK为输入时钟,为AD转换器提供转换的时钟信号,典型工作频率为640KHz。START为AD转换启动信号,正脉冲启动ADDAADDC选中的一路模拟信号开场转换。OE为输出允许信号,高电平时候翻开三态输出缓存器,是转换后的数字量从D0D7输出。EOC为转换完毕信号,启动转换后EOC变为低电平,转换完成后EOC编程高电平。图5 ADC模数转换3.4显示电路以下是1602液晶引脚的接线图,中间没有接线的为数据控制端口。 1602字符型通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线 VCC(15脚)和地线GND(16脚),其控制原
18、理与14脚的LCD完全一样: 图6 1602引脚图3.5供电电路和参考电压由于此次系统的芯片工作电压为+5v,所以用常用的三端稳压器LM317和LM337构成的电源系统供电,其中ADC0809要提供一个准确的参考电源才能正常的工作,而LM317正好能够到达要求。图7 系统供电局部3.6 数字电压表系统电路原理图简易数字电压测量电路由A/D转换、数据处理及显示控制等组成,电路原理图如下图。A/D转换由集成电路0809完成。0809具有8路模拟输入端口,地址线23 25脚可决定对哪一路模拟输入作A/D转换。22脚为地址锁存控制,当输入为高电平时,对地址信号进展锁存。6脚为测试控制,当输入一个2uS
19、宽高电平脉冲时,就开场A/D转换。7脚为A/D转换完毕标志,当A/D转换完毕时,7脚输出高电平。9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。10脚为0809的时钟输入端,利用单片机30脚的六分频晶振频率再通过14024二分频得到1MHz时钟。单片机的P1、P3.0P3.3端口作为四位LED数码管显示控制。P3.5端口用作单路显示/循环显示转换按钮,P3.6端口用作单路显示时选择通道。P0端口作A/D转换数据读入用,P2端口用作0809的A/D转换控制。图8 数字电压表总原理图MC14024:二进制计数器74LS244:是一个缓冲输入口,同时也是一个单向驱动
20、器以减轻总线负担四 软件局部:主程序: 在刚上电时,系统默认为循环显示8个通道的电压值状态。当进展一次测量后,将显示每一通道的A/D转换值,每个通道的数据显示时间为1S左右。主程序在调用显示子程序和测试之程序之间循环,主程序流程图见图。调用显示子程序调用A/D转换子程序初始化开场显示子程序:YA/D转换完毕?P3.7=1?启动测试TESTART0809地址加1取数据P2.5=1开场显示子程序采用动态扫描法实现四位数码管的数值显示。测量所得的A/D转换数据放在70H77H存单元中,测量数据在显示时需转换成10进制BCD码放在78H7BH单元中,其中7BH存放通道标志数。存放器R3用作8路循环控制
21、,R0用作显示数据地址指针。地址数小于8? 完毕以下是简易数字电压表的单片机控制源程序:#include #include /延时函数用#define addata P0 /模拟电压数据采集入口#define Disdata P1 /显示数据段码输出口#define uchar unsigned char #define uint unsigned int sbit START=P24; /启动一次转换位 sbit ALE=P23; /地址锁存位sbit OE=P25; /0809输出控制位sbit EOC=P37; /A/D转换完毕标志位sbit DISX=Disdata0; /LED小数点
22、控制位sbit k1=P35; /循环/单路选择控制位sbit k2=P36; /显示通道控制位sbit A=P20; sbit D=P21;sbit C=P22;uchar code dis_711=0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0xFF;/*共阳8段LED数码管段码表0.1.2.3.4.5.6.7.8.9.不亮*/uchar code scan_con4=0xf1,0xf2,0xF4,0xF8; /四位数码管数值动态扫描显示控制uchar data ad_data8=0x00,0x00,0x00,0x00,0x00,0x
23、00,0x00,0x00; /定义8个数据存单元uint data dis5=0x00,0x00,0x00,0x00,0x00; /定义4个显示数据单元和1个数据存储单元/*1ms延时子函数*/delaylms(uint t) /t=1uint i,j;for(i=0;it;i+)for(j=0;j100;j+);/*显示扫描子函数*/scan()uchar k,n;int h; dis3=1; /通道初值为1for(n=0;n8;n+) /每次显示8个数据 if(k2=0) break; dis2=ad_datan/51; dis4=ad_datan%51; /余数暂存dis4=dis4*1
24、0; /计算十位dis1=dis4/51; dis4=dis4%51;dis4=dis4*10; /计算百分位dis0=dis4/51; for(h=0;h100;h+) /每个通道显示时间控制约为一秒if(k2=0) break; for(k=0;k=8) dis3=0; /*通道选择函数*/tongdao()uint m,i,n;dis2=ad_datan/51; dis4=ad_datan%51; /余数暂存dis4=dis4*10; /计算十分位dis1=dis4/51; dis4=dis4%51;dis4=dis4*10; /计算百分位dis0=dis4/51; for(m=0;m1
25、00;m+) /每个通道显示时间控制约为一秒 if(k2=0) break; for(i=0;i4;i+) /4位LED扫描控制Disdata=dis_7disi;if(i=2)DISX=0;P3=scan_coni; /P3.0-P3.3控制四个数码管的输出 delaylms(3);P3=0xff; /*0809A/D转换子函数*/test() uchar m;for(m=0;m8;m+) switch (m) case 0:A=0;D=0;C=0;break; case 1:A=1;D=0;C=0;break; case 2:A=0;D=1;C=0;break; case 3:A=1;D=
26、1;C=0;break; case 4:A=0;D=0;C=1;break; case 5:A=1;D=0;C=1;break; case 6:A=0;D=1;C=1;break; case 7:A=1;D=1;C=1;break; START=1; ALE=START; /转换通道地址锁存_nop_();_nop_();START=0; ALE=0; /开场转换命令_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/延时8USwhile(EOC=0) _nop_(); /等待转换完毕OE=1;ad_datam=ad
27、data;delaylms(1);OE=0; /*主函数*/main()uint n,m;P0=0xff; /初始化窗口P1=0x00;P3=0xff; while(1) if(k2=0) while(1) test(); for(m=0;m=8) dis3=0; if(k1=0) break; else while(1) test(); scan(); if(k2=0) break; 五数字电压表电路仿真5.1 仿真总图为了验证此次设计原理图的正确性,在制作实物之前用专业软件做了仿真,在Proteus软件中设置AT89C51单片机的晶振频率为12 MHz。本电路EA接高电平,没有扩展片外RO
28、M。如下列图是此次系统仿真的总原理图局部:图8 仿真总图通过用protues软件的仿真发现此次设计的系统原理图能够实现电压的正确测量,而且电压的误差较小,1602液晶屏能够正确显示出测量出来的结果。5.2 仿真结果显示如下列图为此次仿真的测量电压的结果的截图:图9 仿真结果显示六 系统性能分析通过理论分析和电路仿真,现在对此次课程设计的数字电压表系统设计结果进展总结。通过仿真我们可以看到仿真结果和理论分析是相符合的,也即此次设计的系统能够在一定的条件下到达课程设计目的,实现对外接电压的测量,电路构造简单,但是可以看出在系统的稳定性及可靠性方面做得不够。具体表达在以下几个方面:1数字电压表系统中
29、对于外界被测电压的变化反响不够灵敏,变化比拟慢,主要是因为ADC模数转换芯片的转换速率不够;2数字电压表系统测量的外界电压不够准确,跟用示波器或者高精度的电压表测量的结果有偏差,主要是因为ADC芯片的位数不够;3而且ADC的参考电压不准确也会造成测量结果的不准确;4另外很重要的影响因素是因为AD芯片的测量输入电压最大为5v,而设计的是25v,量程扩大了五倍,运用的是电阻分压网络,如果用精细电阻可以做到很高的精度,而设计中用的是5%误差的碳膜电阻,温度系数高,而且不稳定,这是很重要的一个影响因素。针对上述问题,理论上可以用一下方法进展改良:1在换用高精度的ADC芯片能够改善测量精度的问题,一般用
30、12位AD既能满足要求;2制作高精度电压参考源,通过提高ADC模数转换芯片的参考电压的精度来提高测量的电压精度;3运用高精度的金属膜电阻构成分压网络,能够最大限度提高精度;4通过查阅书籍可以找到ADC0809的误差系数和碳膜电阻的温度系数,然后在编程的时候进展软件的补偿和参数校正,能够最优化的用软件来补偿硬件的误差问题,这个在编程思想中是很重要的。虽然时间紧迫,最终按照仿真成功的原理图焊接实物,并调试,调试成功!而且在教师的指点下,使系统得到了最大优化的提高。七 心得体会通过三周的简易数字电压表的课程设计,是我与同学的讨论与认真计算设计分析所完成的,课程设计的任务是设计、组装并调试一个数字电压
31、表测量系统。需要我们综合运用单片机等课程的知识,通过查阅资料、方案论证与选定;设计和选取电路和元器件;分析指标及讨论,完成设计任务。在这次课程设计中,我学会了怎样去根据课题的要求去设计电路和调试电路。动手能力得到很大的提高。从中我发现自己并不能很好的熟练去使用我所学到的高频电路知识。在以后学习中我要加强对使用电路的设计和选用能力。但由于电路比拟简单、定型,而不是真实的生产、科研任务,所以我们根本上能有章可循,完成起来并不困难。把过去熟悉的定型分析、定量计算逐步,元器件选择等手段结合起来,掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。这对今后从事技术工作无疑是个很好的训练。通过这种综合
32、训练,我们可以掌握电路设计的根本方法,提高动手组织实验的根本技能,培养分析解决电路问题的实际本领,为以后毕业设计和从事电子实验实际工作打下根底。同时也让我充分认识到自己的空想与实践的差异,认识莫眼高手低,莫闭门造车,知识都在不断更新和流动之中,而扎实的根底是一切创造的源泉,只有从本质上理解了原理,才能更好的于疑途寻求柳暗花明,实现在科学界的美好畅游和寻得创造的快乐。还有就是每次在组团做试验都会感觉特别的充实,我们可以按照自己设计的电路去完成,教师也不是死板的要求我们怎么怎么,而是给了我们尽可能大的自己决定的余地,这次的元器件都是按照我们设计出来的电路参数给定的,而且每位教师都很耐心的为我们解决试验中所出现的问题,最后真心的感教师对我们课程设计的建议和帮助,我们才得以圆满的完成这次课程设计!- word.zl