1、五邑大学单片机课程设计报告基于 51 单片机的简易数字电压表的设计学 院:信息工程学院专 业:交通工程(交通控制与管理)班 姓 名学 号指导老师:完成日期:2015 年 01 月 05 日1目录1 引言12 设计方案13 元器件34 实际电路85 单片机程序106 电路板制作15 7 总结168 附录169 参考文献172数字电压表设计31 引言 在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。数字电压表简称 DVM,它是采用数字化测量技术,把连续的模拟量转换成不连
2、续、离散的数字形式并加以显示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用。 传统的指针式刻度电压表功能单一,进度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。采用单片机的数字电压表,将连续的模拟量如直流电压转换成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与 PC 实时通信。数字电压表是诸多数字化仪表的核心与基础。以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。目前,由各种单片机和 A/D 转换器构成的数字电压表作全面深入的了解是很有必要的。 目前,数字电压表的内
3、部核心部件是 A/D 转换器,转换的精度很大程度上影响着数字电压表的准确度,因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面。 本文是以简易数字直流电压表的设计为研究内容,本系统主要包括三大模块:转换模块、数据处理模块及显示模块。其中,A/D 转换采用 ADC0808 对输入的模拟信号进行转换,控制核心 AT89C51 再对转换的结果进行运算处理,最后驱动输出装置 LED 显示数字电压信号2 设计方案2.1 设计要求 以单片机为核心,设计一个数字电压表。采用中断方式,对 2 路 05V 的模拟电压进行循环采集,采集的数据送 LED 显示,并存入内存。超过界限时指示灯闪烁。为了稍微增加
4、一点难度,我加入测量温度的功能。2.2 设计思路根据设计要求,选择 AT89C51 单片机为核心控制器件。A/D 转换采用 ADC0808 实现,与单片机的接口为 P1 口和 P2 口的高四位引脚。电压显示采用 4 位一体的 LED 数码管。LED 数码的段码输入,由并行端口 P0 产生:位码输入,用并行端口 P2 低四 位产生。42.3 设计方案将被测电压输入 ADC0808 的电压输入端口,进行采集。接着,将采集到的模拟信号转换为数字信号。然后,通过控制单片机的内部程序,让单片机系统按照规定的时序来采集 ADC0808 输入的数字信号,并通过算法计算出被测电压的值。最后,单片机再将计算好的
5、电压值,按照一定的时序送入 LED 数码管中,让其显示。同时,设置监测电路,当电压达到预定值时,进行报警提示。2.4 流程图图 1:设计方案流程图3 元器件3.1 A/D 转换模块一个 n 位的逐次逼近型 A/D 转换器只需要比较 n 次,转换时间只取决于位数和时钟周期,逐次逼近型 A/D 转换器转换速度快,因而在实际中广泛使用。3.1.1 逐次逼近型 A/D 转换器原理逐次逼近型 A/D 转换器是由一个比较器、A/D 转换器、存储器及控制电路组成。它利用内部的寄存器从高位到低位一次开始逐位试探比较。转换过程如下:开始时,寄存器各位清零,转换时,先将最高位置 1,把数据送入 A/D 转换器转换
6、,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则 1 保留,如果转换的模拟量比输入的模拟量大,则 1 不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟量对应的二5进制数字量 5。其原理框图如图 2 所示:顺序脉冲发生器 逐次逼近寄存器 ADC电压比较器输入电压输入数字量图 2 逐次逼近式 A/D 转换器原理图3.1.2 ADC0808 ADC0808 是 CMOS 单片型逐次逼近式 A/D 转换器,带有使能控制端,与微机直接接口,片内带有锁存功能的 8 路模拟多路开关,可以对 8 路 0-5V 输入模拟电压信号分时进行转换,由于 ADC0808
7、设计时考虑到若干种模/数变换技术的长处,所以该芯片非常适应于过程控制,微控制器输入通道的接口电路,智能仪器和机床控制等领域 5。ADC0808 主要特性:8 路 8 位 A/D 转换器,即分辨率 8 位;具有锁存控制的8 路模拟开关;易与各种微控制器接口;可锁存三态输出,输出与 TTL 兼容;转换时间:128s;转换精度:0.2%;单个+5V 电源供电;模拟输入电压范围0- +5V,无需外部零点和满度调整;低功耗,约 15mW6。3.1.3 ADC0808 的外部引脚特征 ADC0808 芯片有 28 条引脚,采用双列直插式封装,其引脚图如图 3 所示。图 3 ADC0808 引脚图下面说明各
8、个引脚功能:IN0-IN7(8 条):8 路模拟量输入线,用于输入和控制被转换的模拟电压。地址输入控制(4 条):ALE:地址锁存允许输入线,高电平有效,当 ALE 为高电平时,为地址输入线,用于选择 IN0-IN7 上那一条模拟电压送给比较器进行 A/D 转换。6ADDA,ADDB,ADDC:3 位地址输入线,用于选择 8 路模拟输入中的一路,其对应关系如表 1 所示:表 1 ADC0808 通道选择表地址码 C B A 对应的输入通道 0 0 0 0 1 1 1 1 0 0 1 1 0 0 11 0 1 0 1 0 1 0 1 IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN7
9、 START:START 为“启动脉冲”输入法,该线上正脉冲由 CPU 送来,宽度应大于 100ns,上升沿清零 SAR,下降沿启动 ADC 工作。EOC: EOC 为转换结束输出线,该线上高电平表示 A/D 转换已结束,数字量已锁入三态输出锁存器。D1-D8:数字量输出端,D1 为高位。OE:OE 为输出允许端,高电平能使 D1-D8 引脚上输出转换后的数字量。REF+、REF-:参考电压输入量,给电阻阶梯网络供给标准电压。Vcc、GND: Vcc 为主电源输入端,GND 为接地端,一般 REF+与 Vcc 连接在一起,REF-与 GND 连接在一起.CLK:时钟输入端。3.1.4 ADC0
10、808 的内部结构及工作流程ADC0808 由 8 路模拟通道选择开关,地址锁存与译码器,比较器,8 位开关树型 A/D 转换器,逐次逼近型寄存器,定时和控制电路和三态输出锁存器等组成,其内部结构如图 4 所示。图 4 ADC0808 的内部结构其中:(1)8 路模拟通道选择开关实现从 8 路输入模拟量中选择一路送给后面的比较器进行比较。(2)地址锁存与译码器用于当 ALE 信号有效时,锁存从 ADDA、ADDB、ADDC 3根地址线上送来的 3 位地址,译码后产生通道选择信号,从 8 路模拟通道中选7择当前模拟通道。(3)比较器,8 位开关树型 A/D 转换器,逐次逼近型寄存器,定时和控制电
11、路组成 8 位 A/D 转换器,当 START 信号有效时,就开始对当前通道的模拟信号进行转换,转换完成后,把转换得到的数字量送到 8 位三态锁存器,同时通过引脚送出转换结束信号。(4)三态输出锁存器保存当前模拟通道转换得到的数字量,当 OE 信号有效时,把转换的结果送出。ADC0808 的工作流程为:(1)输入 3 位地址,并使 ALE=1,将地址存入地址锁存器中,经地址译码器从8 路模拟通道中选通 1 路模拟量送给比较器。(2)送 START 一高脉冲,START 的上升沿使逐次寄存器复位,下降沿启动 A/D转换,并使 EOC 信号为低电平。(3)当转换结束时,转换的结果送入到输出三态锁存
12、器中,并使 EOC 信号回到高电平,通知 CPU 已转换结束。(4)当 CPU 执行一读数据指令时,使 OE 为高电平,则从输出端 D0-D7 读出数据。3.2. LED 数码管 3.2.1 LED 基本结构 LED 是发光二极管显示器的缩写。LED 由于结构简单、价格便宜、与单片机接口方便等优点而得到广泛应用。LED 显示器是由若干个发光二极管组成显示字段的显示器件。在单片机中使用最多的是七段数码显示器。LED 七段数码显示器由 8 个发光二极管组成显示字段,其中 7 个长条形的发光二极管排列成“日”字形,另一个圆点形的发光二极管在显示器的右下角作为显示小数点用,其通过不同的组合可用来显示各
13、种数字。LED 引脚排列如下图 5 所示: 图 5 LED 数码管引脚排列 为了简化数字式直流电压表的电路设计,在 LED 驱动电路的设计上,可以利用单片机 P0 口上外接的上拉电阻来实现,即将 LED 的 A-G 段显示引脚和DP 小数点显示引脚并联到 P0 口与上拉电阻之间,这样,就可以加大 P0 口作为输出口德驱动能力,使得 LED 能按照正常的亮度显示出数字,如图 6 所示 8图 6LED 与单片机接口间的设计3.3.MCS-51 系列单片机 AT89C51 这是本次设计的核心器件,主要负责把接收到的数字量经过数据处理,产生正确的 LED 显示段码,同时,它还通过其四位 I/O 口,产
14、生位选信号控制数码管的亮灭。3.3.1 总线型 DIP40 引脚封装电源引脚(2 个)VCC:接+5V 电源。GND:接地端。外接晶体引脚(2 个)XTAL1:外接晶振输入端(采用外部振荡器时,此引脚接地) 。XTAL2:外接晶振输入端(采用外部振荡器时,此引脚作为外部振荡信号输入端) 。并行输入/输出引脚(32 个)P0.0P0.7:通用 I/O 引脚。9P1.0P1.7:通用 I/O 引脚。P2.0P2.7:通用 I/O 引脚或数据低 8 位地址总线复用引脚。P3.0P3.7:通用 I/O 引脚或第二功能引脚(RXD 、TXD、INT0 、INT1、T0、T1、WR 、 RD) 。控制引脚
15、(4 个)RST/VPD:复位信号输入引脚/备用电源输入引脚。ALE/PROG:地址锁存允许信号输出引脚/编程脉冲输入引脚。EA/VPP:内、外存储器选择引脚/片内 EPROM(或 Flatiron)编程电压输入引脚。PSEN:片外程序存储器读选通信号输出引脚。4 实际电路4.1 电路设计经过以上的设计过程,可设计出基于单片机的简易数字直流电压表硬件电路原理图如下图所示。10此电路的工作原理是:+5V 模拟电压信号通过变阻器 VR1 分压后由 ADC0808的 IN0 通道进入(由于使用的 IN0 通道,所以 ADDA,ADDB,ADDC 均接低电平) ,经过模/数转换后,产生相应的数字量经过
16、其输出通道 D0-D7 传送给 AT89C51 芯片的 P1 口,AT89C51 负责把接收到的数字量经过数据处理,产生正确的 7 段数码管的显示段码传送给四位 LED,同时它还通过其四位 I/O 口 P2.0、P2.1、P2.2、P2.3产生位选信号控制数码管的亮灭。此外,AT89C51 还控制 ADC0808 的工作,此外,我们还可以通过编程来实现对温度的测量。简易数字直流电压表的硬件电路已经设计完成,就可以选取相应的芯片和元器件,利用 Proteus 软件绘制出硬件的原理,并仔细地检查修改,直至形成完善的硬件原理图。但要真正实现电路对电压的测量和显示的功能,还需要有相应的软件配合,才能达
17、到设计要求。在 protues 软件仿真后的电路图是4.2 电路分析我们开始的单片机课程设计就是一个数字电压表,而最后我们新添加一个测量温度的功能。按钮 1 是切换两个测量电压的通道,按钮 2 是切换电压和温度的通道。首先,+5V 模拟电压信号通过变阻器 VR1 分压后由 ADC0809 的通道进入,经过模/数转换后,产生相应的数字量经过其输出通道 D0-D7 传送给单片机,单片机控制 ADC0809.然后单片机负责把接收到的数字信号经过数据处理,产生正确的7 段数码管的显示段码,并且传送给四位数码管,同时通过单片机四位 I/O 口产生位选信号控制数码管的亮灭。此外,我们通过编写程序,利用 1
18、8b20 温度传感器来实现对环境温度的检测,将温度数据传送给单片机处理,由单片机处理数据并在 LED 数码管中显示温度数据。115 单片机程序#include #include #define uint unsigned int#define uchar unsigned charuchar code LEDData=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f ,0x40;uchar code LEDData1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xef,0xef ;/带小数点的0,1,2,3
19、,4,5,6,7,8,9 用于百位的显示sbit OE = P26; /ADC 输出允许端口sbit AT = P30; / 通道选择端口sbit ST = P25; / ADC 启动端口 sbit P35 =P36; / LED 端口 sbit P36 =P37; /扬声器端口sbit CLK=P27;sbit P20=P20;sbit P21=P21;sbit P22=P22;sbit P23=P23;sbit EOC=P24;sbit DQ=P31; /温度传感器信号线 unsigned char flag;unsigned char WD;void delay(uint t) /1ms
20、 延时函数 uint i; while(t-) for (i=0;i0;i-) /读取 8 位数据 DQ = 0; /数据线置低电平 dat=1; /读出的数据最低位再最前面,这样刚好一个字节在 dat 里 DQ = 1; /将数据线拉到高电平 if(DQ) dat|=0x80; Tdelay(4); 12 return(dat); /返回数据 WriteOneChar(uchar dat) /写一个字节 uchar i=0; for (i=8; i0; i-) DQ = 0; DQ = dat Tdelay(5); DQ = 1; dat=1; uint ReadTemperature(vo
21、id) /读取温度 uchar a=0; uchar b=0; uint t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); WriteOneChar(0x44); Init_DS18B20(); WriteOneChar(0xCC); WriteOneChar(0xBE); a=ReadOneChar();b=ReadOneChar(); /*t=b;t255) b+; /如果低 8 位大于 255,向高 8 位进 1t=b;ti;if(s d=temp;Display_Result(d);/显示数值if(AT=0) /当选择通道 INT
22、0 时 if(d0x80) /电压超过 2.5V P35=0; / 扬声器响,LED 亮P36=0;delay(10); /延时后 LED 灭,实现 LED 闪烁P35=1;delay(10); elseP35=1; /电压未超过 1.25V 时,扬声器不响,LED 也不亮P36=1;else /若选择通道 INT1if(d0xC0) /电压超过 3.75V 时P35=0; / 扬声器响,LED 亮P36=0;delay(10);15P35=1; /延时后 LED 灭,实现 LED 闪烁delay(10); elseP35=1; /电压未超过 2.5V 时,扬声器不响,LED 也不亮P36=1
23、;OE = 0; /输出允许关闭ST = 0;ST = 1; /开启 ADC 转换ST = 0; else uint i; P35=1; / 扬声器不响, LED 也不亮P36=1; i=ReadTemperature(); display(LEDDatai/1000,LEDData1i%1000/100,LEDDatai%100/10); void INTT0() interrupt 0WD=!WD; /功能选择 的中断程序void INTT1() interrupt 2AT=!AT; /通道选择 的中断程序void T1ZD()interrupt 3 TH1=(65536-100)/256
24、;TL1=(65536-100)%256;CLK=CLK; 166 硬件制造流程6.1 PCB 图6.2 制板流程洗板 热转印钻孔腐蚀铜板除碳涂松脂焊元器件177 总结通过这次比较完整的设计,使我摆脱了单纯的理论知识学习状态,达到了理论与实践的结合锻炼了我的综合运用所学的专业基础知识,解决实际设计问题的能力,同时,也提高了我们查阅文献资料、设计手册、设计规范以及电脑制图等专业能力水平,而且通过整体的掌握对布局的取舍以及对细节的斟酌处理,都使能力得到了锻炼、经验得到了丰富,抗压能力以及耐力在不同程度上得到了提高。虽然这次毕业设计内容繁多、过程繁琐但我收获很多,在这次设计过程中我不仅对 A/D 转
25、换芯片 ADC0809 有了进一步熟悉,随着设计的不断深入对它的工作原理、启动设置、转换结束判断及输出等都基本掌握,在和老师的沟通交流的过程中我对设计有了新的认识,并且对实物的连接与布局有了新的看法,对专业有了进一步的认识,希望在以后的实验中吸取更多地经验学会更多的实践知识。同时,在整个课程设计的过程中,发生过很多错误。通过不断纠正错误的过程,我学会了很多东西,不仅是专业知识,还有合理的时间安排,同学之间的互相帮助等等。我觉得自己开始对电子这方面有了基本的兴趣爱好,希望自己以后可以做的更好。8 附录元器件清单: 4 位 8 段数码管 共阴极 1 个排阻 10K 1 个电阻 1K 1 个电解电容
26、 30pf 1 个瓷片电容 1uf 1 个单片机芯片 AT89C52 1 个数模转换 ADC0808 1 个温度传感 DS18B20 1 个插座(单片机)DIP-40 1 个晶振 12M 1 个蜂鸣器(有源) 1 个轻触开关 (4 脚) 2 个滑动变阻器 1K 2 个铜板 10cm*8cm 1 块189 参考文献1 徐秀平.单数字电路与逻辑设计.电子工业出版社,20102 刘焕成. 工程背景下的单片机原理及系统设计 .清华大学出版社,20083 曾卓斌. 电子实习指导书 .五邑大学电子电工实验中心,2014 版4 周润景,张丽娜 .基于 PROTEUS 的电路及单片机系统设计与仿真.北京航空航天大 学出版社,20065 赵淑范,王宏伟 .电子技术实验与课程设计 .北京清华大学出版社6 零点工作室 ,米昶. protel DXP 电路设计基础教程.机械工业出版社 ,2005.