基于51单片机的电压表的设计文档格式.docx
- 文档编号:21846682
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:16
- 大小:372.87KB
基于51单片机的电压表的设计文档格式.docx
《基于51单片机的电压表的设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机的电压表的设计文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
单片机处理
数码管显示
图1.1设计方案
主控芯片
选用单片机AT89C51和A/D转换芯片ADC0808实现电压的转换和控制,用四位数码管显示出最后的转换电压结果。
显示部分
选用一个四联的共阴极数码管。
1.4电路设计原理
模拟电压经过档位切换到不同的分压电路筛减后,经隔离干扰送到A/D转换器进行A/D转换。
然后送到单片机中进行数据处理。
处理后的数据送到LED中显示。
同时通过串行通讯与上位通信。
硬件电路及软件程序。
而硬件电路又大体可分为A/D转换电路、LED显示电路,程序的设计使用C语言编程,利用Keil和PROTEUS软件对其编译和仿真。
一般I/O接口芯片的驱动能力是很有限的,在LED显示器接口电路中,输出口所能提供的驱动电流一般是不够的尤其是设计中需要用到多位LED,此时就需要增加LED驱动电路。
在本设计中采用RESPACK上拉电阻来增加驱动能力。
数据处理及控制模块
AT89C51
P1
P3
显示模块
4位一体LED数码管
数据采
集模块
ADC0808
控制
信号
输出显示
Analog
Digital
LED位控制信号
P
2
图1.2原理电路
本实验采用AT89C51单片机芯片配合ADC0808模/数转换芯片构成一个简易的数字电压表,原理电路如图1.2所示。
该电路通过ADC0808芯片采样输入口IN0输入的0~5V的模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道D0~D7传送给AT89C51芯片的P1口。
AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码,并通过其P0口传送给数码管。
同时它还通过其四位I/O口P2.0、P2.1、P2.2、P2.3产生位选信号,控制数码管的亮灭。
P3.0控制ADC0808的启动端(START)和地址锁存端(ALE);
P3.1控制ADC0808的输出允许端(OE);
P3.2控制ADC0808的转换结束信号(EOC)。
2程序设计
2.1程序设计总方案
根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图2.1所示。
开始
初始化
调用A/D转换子程序
调用显示子程序
结束
图2.1数字式直流电压表主程序框图
2.2系统子程序设计
2.2.1初始化程序
所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等。
2.2.2A/D转换子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图2.2所示。
启动转换
A/D转换结束?
输出转换结果
数值转换
显示
图2.2A/D转换流程图
2.2.3显示子程序
显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。
在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。
3硬件电路设计
3.1数字芯片A/D转换技术
电路原理图如图3.1所示,三个地址位ADDA,ADDB,ADDC均接地,因而所需测量的外部电压可由ADC0808的IN0端口输入。
51系列单片机
数字显示
A/D转换
输入电压
图3.1A/D转换原理图
在A/D转换开始之前,逐次逼近寄存器的SAR的内容为0,在A/D转换过程中,SAR存放“试探”数字量,在转换完毕后,它的内容即为A/D转换的结果数字量。
3.1.1ADC0808模数转换芯片简介
ADC0808模数转换芯片如图3.2。
图3.2ADC0808模数转换芯片
ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
ADC0808是ADC0809的简化版本,功能基本相同。
一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。
引脚功能(外部特性)
ADC0808芯片有28条引脚,采用双列直插式封装,如右图所示。
各引脚功能如下:
1~5和26~28(IN0~IN7):
8路模拟量输入端。
8、14、15和17~21:
8位数字量输出端。
22(ALE):
地址锁存允许信号,输入,高电平有效。
6(START):
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
7(EOC):
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
9(OE):
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
10(CLK):
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
12(VREF(+))和16(VREF(-)):
参考电压输入端
11(Vcc):
主电源输入端。
13(GND):
地。
23~25(ADDA、ADDB、ADDC):
3位地址输入线,用于选通8路模拟输入中的一路。
3.2单片机的数据处理技术
A/D转换完毕后,单片机的P1.6口接收到一高电平,立马通过P3将OE置1,ADC0808的三态输出锁存器被打开,转换完的数字信号经过与D0~D7相连的P0口进入AT89C51。
AT89C51根据公式将数字信号转换为模拟量,然后利用程序获取模拟量的每一位,分别通过P2口输出到LED上。
与此同时,AT89C51会通过P2.0~P2.3口选择用哪一段LED显示所传出的数据。
例如,当P2.0~P2.3=1110,则LED接收到的数据会在第四段LED上显示。
另外,AT89C51一旦获得了数据后便会将ST置0,即模数转换器停止转换,知道LED获得新的数据并显示出来,ST才会重新置1。
由于AT89C51转换速率很快(微妙量级),所以不会影响其接收新的数据。
3.2.1AT89C51单片机简介
AT89C51单片机如图3.3。
图3.3AT89C51单片机
AT89C51是51系列单片机的一个型号,它是ATMEL公司生产的。
AT89C52是一个低电压、高性能CMOS8为单片机。
将通用的微处理器和Flash存储器结合在一起,可反复擦写的Flash存储器可有效地降低开发成本。
AT89C51有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
3.2.2主要功能特性:
低功耗空闲和掉电模式,软件设置睡眠和唤醒功能。
兼容MCS51指令系统,8K可反复擦写(>
1000次)FlashROM。
3个16位可编程定时/计数器中断,时钟频率0-24MHz。
32个双向I/O口,256B内部RAM。
2个串行中断,可编程UART串行通道。
2个外部中断源,共6个中断源。
2个读写中断口线,3级加密位。
3.3单片机控制的数码管显示技术
3.3.1LED基本结构
LED是发光二极管显示器的缩写。
LED由于结构简单、价格便宜、与单片机接口方便等优点而得到广泛应用。
LED显示器是由若干个发光二极管组成显示字段的显示器件。
在单片机中使用最多的是七段数码显示器。
LED七段数码显示器由8个发光二极管组成显示字段,其中7个长条形的发光二极管排列成“日”字形,另一个圆点形的发光二极管在显示器的右下角作为显示小数点用,其通过不同的组合可用来显示各种数字。
LED引脚排列如下图3.4所示:
图3.4LED引脚排列
3.3.2LED显示器的选择
在应用系统中,设计要求不同,使用的LED显示器的位数也不同,因此就生产了位数,尺寸,型号不同的LED显示器供选择,数码管有两种:
一种共阴极、另一种为共阳极,本次课程设计用的是共阴极。
在本设计中,选择4位一体的数码型LED显示器。
本系统中前一位显示电压的整数位,即个位,后两位显示电压的小数位。
如图3.5所示,是一个共阴极接法的4位LED数码显示管,其中a,b,c,d,e,f,g为4位LED各段的公共输出端,1、2、3、4分别是每一位的位数选端,dp是小数点引出端,4位一体LED数码显示管的内部结构是由4个单独的LED组成,每个LED的段输出引脚在内部都并联后,引出到器件的外部。
图3.5共阴极4位一体LED数码显示管
3.3.3LED译码方式
译码方式是指由显示字符转换得到对应的字段码的方式,对于LED数码管显示器,通常的译码方式有硬件译码和软件译码方式两种。
硬件译码是指利用专门的硬件电路来实现显示字符码的转换。
软件译码就是编写软件译码程序,通过译码程序来得到要显示的字符的字段码,译码程序通常为查表程序。
本设计采用的是共阴极LED,其对应的字符和字段码如下表3.6所示。
表3.6共阴极字段码表
显示字符
共阴极字段码
3FH
1
06H
5BH
3
4FH
4
66H
5
6DH
6
7DH
7
07H
8
7FH
9
6FH
4硬件连接
4.1模拟输入电路
模拟输入电路如图4.1所示
图4.1 模拟输入电路
通过可变电阻一端接电源+5V,一端接地GND,在并联一个标准电压表,通过改变电阻的阻值,从而改变所测电压值,实现电压的模拟信号输入。
4.2ADC0808芯片与单片机接口电路
ADC0808芯片与单片机接口电路如图4.2
图4.2 ADC0808芯片与单片机接口电路
ADC0808的输出接到P1口,OUT1对应的是最高位,START与ALE可以接在一起。
在这里,START接P3.0,OE接P3.1,EOC接P3.2,ClOCK接P3.4。
4.3显示电路
显示电路如图4.3。
图4.3 显示电路
通过P0口控制四位共阴极数码管段选,通过P2口的低四位控制位选。
值得注意的是P0需要接上拉电阻,否则P0会处于高阻态。
4.4总电路
设计原理:
将模拟量通过IN0输入,经过ADC0808芯片转换,得到数字量输出到单片机P0口,经过单片机处理后,送到四位共阴极数码管上显示。
5仿真
5.1软件调试
软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。
Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。
Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与uVisions3IDE工具软件结合进行编程仿真调试。
本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真我采用的是Proteus软件,而程序方面,采用的是汇编语言,用Keil软件将程序写入单片机。
5.2显示结果及误差分析
仿真结果如下:
当输入电压在0-5V时,输入电压为2.60,显示结果为2.658,如图5.1所示,误差为+0.058。
图5.1 输入电压2.60显示结果
当输入电压大于5V时,发光二极管会闪烁,LED灯则总显示5.097,如图5.2(a)(b)。
(a)
(b)
图5.2 输入电压大于5V显示结果
误差分析
由于使用ADC0808本身存在5/255的误差,所以使得数码管显示的电压值和输入电压显示在标准电压表上的电压值存在误差。
结论
经过一段时间的努力,毕业论文-基于51单片机的数字电压表的设计基本完成。
但设计中的不足之处仍然存在。
这次设计是我第一次设计电路,并用Proteus实现了仿真。
在这过程中,我对电路设计,单片机的使用等都有了新的认识。
通过这次设计学会了Proteus和Keil软件的使用方法,掌握了从系统的需要、方案的设计、功能模块的划分、原理图的设计和电路图的仿真的设计流程,积累了不少经验。
基于单片机的数字电压表使用性强、结构简单、成本低、外接元件少。
测量电压准确,精度高。
系统功能、指标达到了课题的预期要求、系统在硬件设计上充分考虑了可扩展性,经过一定的改造,可以增加功能。
本文设计主要实现了数字电压表测量一路电压的功能,详细说明了从原理图的设计、电路图的仿真再到软件的调试。
通过本次设计,我对单片机这门课有了进一步的了解。
无论是在硬件连接仿真方面还是在软件编程方面。
本次设计采用了AT89C51单片机芯片,与以往的单片机相比增加了许多新的功能,使其功能更为完善,应用领域也更为广泛。
设计中还用到了模/数转换芯片ADC0808,以前在学单片机课程时只是对其理论知识有了初步的理解。
通过这次设计,对它的工作原理有了更深的理解。
在调试过程中遇到很多问题,硬件上的理论知识学得不够扎实,对电路的仿真方面也不够熟练。
总之这次电路的设计和仿真,基本上达到了设计的功能要求。
在以后的实践中,我将继续努力学习电路设计方面的理论知识,并理论联系实际,争取在电路设计方面能有所提升。
致谢
经过两周时间的不懈努力,本次课程设计已经接近尾声,由于是初次尝试设计电路,知识及经验的匮乏,难免遇到很多困难,如果没有导师的督促指导以及同学们的支持,很难顺利的完成此次课程设计。
从开始选题到论文的顺利完成,都离不开老师、同学、朋友给以的帮助,在这里请接受我的谢意!
首先,在本次毕业设计过程中,从构思、资料收集到最后定稿的各个环节给予细心指引与教导,使我对课程的多方面的知识有了深刻的认识,使我得以最终完成课程设计,在此表示衷心感谢。
其次,感谢一起做课程设计的组员,还有帮助我的同学们,感谢你们给我的鼓励,感谢你们在我遇到困难时所给的帮助,正是有了你们的帮助和鼓励,此次课程设计才得以顺利的完成。
最后,本次设计得以顺利完成,也要感谢导师组的杨老师,他们在本文写作阶段给出了许多宝贵意见。
导师们的高深精湛的造诣与严谨求实的治学精神将永远激励着我。
坚持下去一定会找出解决问题的方法。
再次感谢给我鼓励和帮助的老师和同学们,谢谢大家!
参考文献
[1]于殿泓、王新年.单片机原理与程序设计实验教程.西安电子科技大学出版社,2007年5月
[2]谢维成、杨加国.单片机原理与应用及C51程序设计实例.电子工业出版社,2006年3月
[3]魏立峰.单片机原理及应用技术.北京大学出版社,2005年
[4]宋凤娟,孙军,李国忠.基于89C51单片机的数字电压表设计[J].工业控制计算机,2007年
[5]张靖武、周灵彬,单片机系统的Proteus设计与仿真[M],北京:
电子工业出版社,2007年
附录1
设计程序如下:
#include<
absacc.h>
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitSTART=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitP07=P0^7;
sbitCLK=P3^4;
sbityy=P2^5;
uchardataled[4];
uintdatatvdata;
ucharcodetv[]={0xfe,0xfd,0xfb,0xf7};
ucharcodea[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voiddelay(void)//延时程序
{
uinti;
for(i=0;
i<
10;
i++);
}
voidledxianshi(void)//显示模块
uchark,i;
if(tvdata>
5000)
yy=~yy;
led[0]=tvdata%10;
led[1]=tvdata/10%10;
led[2]=tvdata/100%10;
led[3]=tvdata/1000;
for(k=0;
k<
4;
k++)
{
P2=tv[k];
i=led[k];
P0=a[i];
if(k==3)
{
P07=1;
}
delay();
}
voidmain(void)
ET0=1;
EA=1;
TMOD=0x02;
TH0=216;
TL0=216;
TR0=1;
while
(1)
START=1;
START=0;
//启动转换
while(EOC==0);
OE=1;
tvdata=P1;
tvdata*=20-0.01;
OE=0;
ledxianshi();
voidt0(void)interrupt1using0
CLK=~CLK;
附录2
总电路图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 电压表 设计