基于51单片机的数字电压表设计Word下载.docx
- 文档编号:5877286
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:17
- 大小:257.89KB
基于51单片机的数字电压表设计Word下载.docx
《基于51单片机的数字电压表设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字电压表设计Word下载.docx(17页珍藏版)》请在冰点文库上搜索。
ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式AD转换器。
其部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进展A/D转换。
〔1〕主要特性:
1〕8路输入通道,8位A/D转换器,即分辨率为8位。
2〕具有转换起停控制端。
3〕转换时间为100μs(时钟为640kHz时),130μs〔时钟为500kHz时〕
4〕单个+5V电源供电
5〕模拟输入电压围0~+5V,不需零点和满刻度校准。
6〕工作温度围为-40~+85摄氏度
7〕低功耗,约15mW。
〔2〕部构造
ADC0809是CMOS单片型逐次逼近式A/D转换器,部构造如图13.22所示,它由8路模拟开关、地址锁存与译码器、比拟器、8位开关树型A/D转换器、逐次逼近存放器、逻辑控制和定时电路组成。
图2ADC0909引脚
3数字电压表系统设计
3.1系统设计框图
此次设计的是数字电压表,要求的电压围是0~5v,而设计扩展的量程为0~25v。
系统设计主要包括四个局部:
分别是电源模块、AD模数转换局部、51单片机最小系统局部、1602液晶显示局部。
首先由单片机初始化ADC0809模数转换芯片和1602液晶显示,当外接被测电压后,ADC0809将模拟电压信号转换为数字信号输入到单片机的I/O口,通过单片机处理后将电压的大小显示在1602液晶上面。
如下是本次设计作品的框图:
图3系统框图
3.2单片机电路
单片机最小系统如下列图所示,各个引脚都已经标出,而且四个I/O口都已经用排阵引出,方便外接I/O扩展用。
图4单片机最小系统
3.3ADC采样电路
由于ADC0809是带地址锁存的模数转换器件,ADDA、ADDB、ADDC为模拟通道选择,编码为000~111分别选中IN0~IN7。
ALE为地址锁存信号,其上升沿锁存ADDA、ADDB、ADDC的信号,译码后控制模拟开关,接通八路模拟输入中相应的一路。
CLK为输入时钟,为AD转换器提供转换的时钟信号,典型工作频率为640KHz。
START为AD转换启动信号,正脉冲启动ADDA~ADDC选中的一路模拟信号开场转换。
OE为输出允许信号,高电平时候翻开三态输出缓存器,是转换后的数字量从D0~D7输出。
EOC为转换完毕信号,启动转换后EOC变为低电平,转换完成后EOC编程高电平。
图5ADC模数转换
3.4显示电路
以下是1602液晶引脚的接线图,中间没有接线的为数据控制端口。
1602字符型通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样:
图61602引脚图
3.5供电电路和参考电压
由于此次系统的芯片工作电压为+5v,所以用常用的三端稳压器LM317和LM337构成的电源系统供电,其中ADC0809要提供一个准确的参考电源才能正常的工作,而LM317正好能够到达要求。
图7系统供电局部
3.6数字电压表系统电路原理图
如下是此次数字电压表系统的总原理图,其中的连线用网络标号表示出来,省去了连线的麻烦,而且是总图的可读性增强。
图8数字电压表总原理图
4软件设计
4.1系统总流程图
此次设计的数字电压表系统比拟简单,就设置了一个量程为0~25v,所以没有用到按键控制,也没有其他的功能,因此程序比拟简单,在输入模拟信号时采用电阻分压,最终的采样输入电压只有实际输入电压的十分之一,所以在编写程序中要编写一段数据调整程序,如下为系统总流程图:
开场
完毕
初始化
AD采样量化
液晶显示
图9系统流程图
4.2程序代码
/********电压表********/
#include<
reg52.h>
intrins.h>
//库函数头文件,代码中引用了_nop_()函数
/*ADC初始定义*/
sbitstart=P3^0;
//转换开场控制
sbitoe=P3^2;
//输出允许控制
sbiteoc=P3^1;
//转换完毕信号
sbitclock=P3^3;
//转换时钟
sbitP0_2=P0^2;
//蜂鸣器
sbitP0_5=P0^5;
sbitP0_6=P0^6;
sbitP0_7=P0^7;
/*1602液晶初始定义*/
sbitRS=P0^0;
//读控制
sbitRW=P0^3;
//写控制
sbitE=P0^1;
//使能端
unsignedcharda0,da1,da2,da3,da4;
unsignedinttemp;
unsignedintd1,d2,d3;
unsignedchardat;
//数字电压量
unsignedcharlcdd[]="
0123456789"
;
voidlcd_w_cmd(unsignedchar);
//写命令函数
voidlcd_w_dat(unsignedchardat);
//写数据函数
voiddisplay(unsignedchardat);
//显示函数
unsignedcharlcd_r_start();
//读状态函数
voidint1();
//LCD初始化函数
voiddelay(unsignedchart);
//可控延时函数
voiddelay1();
//软件实现延时函数,5个机器周期
/*显示函数局部*/
voiddisplay(unsignedchardat)
{
temp=5*dat;
//量程扩大五倍
da0=temp/51/10;
//十位
da1=temp/51%10;
//个位
d1=temp%51;
d1=d1*10;
da2=d1/51;
//十分位
d2=d1%51;
d2=d2*10;
da3=d2/51;
//百分位
d3=d2%51;
d3=d3*10;
da4=d3/51;
//千分位
lcd_w_cmd(0x0c);
//设置光标不显示、不闪烁
delay(20);
lcd_w_cmd(0xc0);
//第二行起始显示地址0x80
delay
(2);
lcd_w_dat('
V'
);
//显示字符串‘volatageis’
o'
l'
a'
t'
g'
e'
'
//显示电压的大小
lcd_w_dat(lcdd[da0]);
lcd_w_dat(lcdd[da1]);
.'
//小数点
lcd_w_dat(lcdd[da2]);
lcd_w_dat(lcdd[da3]);
//百分位
lcd_w_dat(lcdd[da4]);
//单位
}
/*主函数*/
voidmain()
{
P0_2=1;
//关蜂鸣器
P0_5=P0_6=P0_7=0;
//选择000第一通道
int1();
//LCD初始化
while
(1)
{
start=0;
start=1;
//获得上升沿复位
//获得下降沿启动转换,同时ALE开锁存
do
{
clock=~clock;
//时钟信号
}
while(eoc==0);
//等待转换完毕,eoc=1完毕
oe=1;
//三态锁存缓冲器翻开
dat=P1;
//数字电压信号输出
oe=0;
//三态锁存缓冲器关闭
display(dat);
/*延时函数*/
voiddelay(unsignedchart)
unsignedcharj,i;
for(i=0;
i<
t;
i++)
for(j=0;
j<
20;
j++);
/*延时函数1*/
voiddelay1()
_nop_();
/*LCD初始化函数*/
voidint1()
lcd_w_cmd(0x3c);
//设置工作方式
//设置光标
lcd_w_cmd(0x01);
//清屏
lcd_w_cmd(0x06);
//设置输入方式
lcd_w_cmd(0x80);
//设置初始显示位置
/*LCD读状态函数*/
//返回值:
返回状态字,最高位D7=0,LCD控制器空闲;
D7=1,LCD控制器忙
unsignedcharlcd_r_start()
unsignedchars;
RW=1;
//RW=1,RS=0,读LCD状态
delay1();
RS=0;
E=1;
//E端时序
s=P2;
//从LCD的数据口读状态
E=0;
RW=0;
return(s);
//返回读取的LCD状态字
/*LCD写命令函数*/
voidlcd_w_cmd(unsignedchar)
unsignedchari;
do
{//查LCD忙操作
i=lcd_r_start();
//调用读状态字函数
i=i&
0x80;
//与操作屏蔽掉低7位
}
while(i!
=0);
//LCD忙,继续查询,否那么退出循环
RW=0;
delay1();
RS=0;
//RW=0,RS=0,写LCD命令字
E=1;
P2=;
//将中的命令字写入LCD数据口
E=0;
RW=1;
delay(255);
/*LCD写数据函数*/
voidlcd_w_dat(unsignedchardat)
{//查忙操作
RS=1;
//RW=1,RS=0,写LCD数据
//E端时序
P2=dat;
//将dat中的显示数据写入LCD数据口
5数字电压表电路仿真
5.1仿真总图
为了验证此次设计原理图的正确性,在制作实物之前用专业软件做了仿真,在Proteus软件中设置AT89C51单片机的晶振频率为12MHz。
本电路EA接高电平,没有扩展片外ROM。
如下列图是此次系统仿真的总原理图局部:
图8仿真总图
通过用protues软件的仿真发现此次设计的系统原理图能够实现电压的正确测量,而且电压的误差较小,1602液晶屏能够正确显示出测量出来的结果。
5.2仿真结果显示
如下列图为此次仿真的测量电压的结果的截图:
图9仿真结果显示
6系统性能分析
通过理论分析和电路仿真,现在对此次课程设计的数字电压表系统设计结果进展总结。
通过仿真我们可以看到仿真结果和理论分析是相符合的,也即此次设计的系统能够在一定的条件下到达课程设计目的,实现对外接电压的测量,电路构造简单,但是可以看出在系统的稳定性及可靠性方面做得不够。
具体表达在以下几个方面:
〔1〕数字电压表系统中对于外界被测电压的变化反响不够灵敏,变化比拟慢,主要是因为ADC模数转换芯片的转换速率不够;
〔2〕数字电压表系统测量的外界电压不够准确,跟用示波器或者高精度的电压表测量的结果有偏差,主要是因为ADC芯片的位数不够;
〔3〕而且ADC的参考电压不准确也会造成测量结果的不准确;
〔4〕另外很重要的影响因素是因为AD芯片的测量输入电压最大为5v,而设计的是25v,量程扩大了五倍,运用的是电阻分压网络,如果用精细电阻可以做到很高的精度,而设计中用的是5%误差的碳膜电阻,温度系数高,而且不稳定,这是很重要的一个影响因素。
针对上述问题,理论上可以用一下方法进展改良:
〔1〕在换用高精度的ADC芯片能够改善测量精度的问题,一般用12位AD既能满足要求;
〔2〕制作高精度电压参考源,通过提高ADC模数转换芯片的参考电压的精度来提高测量的电压精度;
〔3〕运用高精度的金属膜电阻构成分压网络,能够最大限度提高精度;
〔4〕通过查阅书籍可以找到ADC0809的误差系数和碳膜电阻的温度系数,然后在编程的时候进展软件的补偿和参数校正,能够最优化的用软件来补偿硬件的误差问题,这个在编程思想中是很重要的。
虽然时间紧迫,最终按照仿真成功的原理图焊接实物,并调试,调试成功!
而且在教师的指点下,使系统得到了最大优化的提高。
7心得体会
通过与同学的讨论与认真计算设计分析所完成的,课程设计的任务是设计、组装并调试一个数字电压表测量系统。
需要我们综合运用单片机等课程的知识,通过查阅资料、方案论证与选定;
设计和选取电路和元器件;
分析指标及讨论,完成设计任务。
在这次课程设计中,我学会了怎样去根据课题的要求去设计电路和调试电路。
动手能力得到很大的提高。
从中我发现自己并不能很好的熟练去使用我所学到的高频电路知识。
在以后学习中我要加强对使用电路的设计和选用能力。
但由于电路比拟简单、定型,而不是真实的生产、科研任务,所以我们根本上能有章可循,完成起来并不困难。
把过去熟悉的定型分析、定量计算逐步,元器件选择等手段结合起来,掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。
这对今后从事技术工作无疑是个很好的训练。
通过这种综合训练,我们可以掌握电路设计的根本方法,提高动手组织实验的根本技能,培养分析解决电路问题的实际本领,为以后毕业设计和从事电子实验实际工作打下根底。
同时也让我充分认识到自己的空想与实践的差异,认识莫眼高手低,莫闭门造车,知识都在不断更新和流动之中,而扎实的根底是一切创造的源泉,只有从本质上理解了原理,才能更好的于疑途寻求柳暗花明,实现在科学界的美好畅游和寻得创造的快乐。
还有就是每次在组团做试验都会感觉特别的充实,我们可以按照自己设计的电路去完成,教师也不是死板的要求我们怎么怎么,而是给了我们尽可能大的自己决定的余地,这次的元器件都是按照我们设计出来的电路参数给定的,而且每位教师都很耐心的为我们解决试验中所出现的问题,最后真心的感教师对我们课程设计的建议和帮助,我们才得以圆满的完成这次课程设计!
参考文献
[1]群芳,士军,黄建.单片微型计算机与接口技术.:
电子工业,2008
[2]群芳.单片机原理接口与应用.:
清华大学,2005
[3]迎新.单片微型计算机原理、应用及接口技术.:
国防工业,1999
[4]顶峰.单片微机应用系统设计及使用技术.:
机械工业,2007
[5]伟.单片机c语音程序设计实例基于protues仿真.:
电子工业,2007
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 数字 电压表 设计