基于8051单片机的简易电压表方案设计书Word文件下载.docx
- 文档编号:20190899
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:14
- 大小:95.50KB
基于8051单片机的简易电压表方案设计书Word文件下载.docx
《基于8051单片机的简易电压表方案设计书Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于8051单片机的简易电压表方案设计书Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
2.1硬件:
上图为硬件的总体框图,可分为四个模块。
模数转换使用ADC0809芯片,它将输入的模拟电压量转换为一个8位的二进制数字,然后进入到单片机80C51控制单元,经过8255驱动处理用数码管显示出电压值。
外围电路是一种分压电路,由于ADC0809芯片输入电压不可大于5V,所以当测量50V档位的时候要通过分压电路来实现。
同时还有控制单片机显示程序,使其显示为50V档位数值。
(1)以下介绍MCS-51单片机的内部结构,主要部分为
1.一个8位的CPU
2.128B或256B单元数据存储器(RAM)
3.4KB或8KB内程序存储器(ROM或EPROM)
4.4个8位并行I/O接口P0~P3
5.两个定时/计数器
6.5个中断源管理控制系统
7.一个全双工串行I/OUART(通用异步接受、发送器)
8.一个片内振荡器和时钟产生电路
(2)ADC0809
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
ADC0809内部逻辑电路如下:
ADC0809引脚图如下:
引脚说明:
1.ADC0809内部带有输出锁存器,可以与单片机直接相连。
2.初始化时,使ST和OE信号全为低电平。
3.送要转换的某一通道的地址到A.B,C端口上。
4.在ST端给出一个至少有100ns宽的正脉冲信号。
5.是否转换完毕,我们根据EOC信号来判断。
6.当EOC变为高电平时,若此时OE为高电平,转换的数据输出到单片机
2.2软件程序:
单片机中所发程序的流程图如下图2。
其中包含主函数和两个显示子函数,分别为5V和50V档位的显示子程序。
通过外围电路的改变实现换档。
下面为仿真所用程序
#include<
reg52.h>
unsignedcharcode
dispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedchardispbuf[4];
unsignedinti;
unsignedintj;
unsignedchargetdata;
unsignedinttemp;
unsignedinttemp1;
unsignedcharcount;
unsignedchard;
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitCLK=P3^3;
sbitP34=P3^4;
sbitP35=P3^5;
sbitP36=P3^6;
sbitP20=P2^0;
sbitP21=P2^1;
sbitP22=P2^2;
sbitP23=P2^3;
sbitP17=P1^7;
voidTimeInitial();
voidDelay(unsignedinti);
voidTimeInitial()
{TMOD=0x10;
TH1=(65536-200)/256;
TL1=(65536-200)%256;
EA=1;
ET1=1;
TR1=1;
}
voidDelay(unsignedinti)
{
unsignedintj;
for(;
i>
0;
i--)
{
for(j=0;
j<
125;
j++)
{;
}
voidDisplay()
{
P1=dispbitcode[dispbuf[3]];
P20=0;
P21=1;
P22=1;
P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[2]];
P17=1;
P20=1;
P21=0;
P1=dispbitcode[dispbuf[1]];
P22=0;
P1=dispbitcode[dispbuf[0]];
P23=0;
voidmain()
TimeInitial();
while
(1)
ST=0;
OE=0;
ST=1;
P34=0;
P35=0;
P36=0;
while(EOC==0);
OE=1;
getdata=P0;
temp=getdata*1.0/255*500;
dispbuf[0]=temp%10;
dispbuf[1]=temp/10%10;
dispbuf[2]=temp/100%10;
dispbuf[3]=temp/1000;
Display();
voidt1(void)interrupt3using0
CLK=~CLK;
2.3模拟仿真结果
图3
按上述原理连接后,用Proteus软件模拟仿真可以得到完整电路图。
如图3所示,仿真结果如图所示。
2.实际制作和调试
2.1测试方法和仪器
所用到的元器件有:
80C51单片机1片
8255芯片1片
ADC0809芯片1片
4数码管4块
12MHZ晶振1个
5V稳压管1只
滑动变阻器(20K)2个
510K电阻1个
51K电阻1个
直流电源1台
导线若干
实验室中有实验箱,可以用实验箱完成,这样就省去了许多元器件,也使得系统稳定可行。
可用标准直流电压表来测量输入的直流电压值,与数码管显示的数值比较测试。
2.2软件调试
为了适应试验箱上管脚连接和,对仿真程序加以修改,修改之后的程序如下:
absacc.h>
#defineucharunsignedchar
#defineuintunsignedint
#definePAXBYTE[0x8000]
#definePBXBYTE[0x8001]
#definePCXBYTE[0x8002]
#defineCTLXBYTE[0x8003]
#defineADXBYTE[0x9000]//AD转换in0口
#definedusPB
#definewesPA
ucharcodedutab[17]=
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x00
};
ucharcodewetab[4]=
0x01,0x02,0x04,0x08
bitflag=0;
floatnum=0;
uchartmp=0;
voiddelay(uchar);
voidinit()
CTL=0x80;
EX1=1;
IT1=1;
voiddisplay(floatcnt)
ucharpos[4]={0,0,0,0};
uchari=0;
ucharj;
uintn;
n=cnt*1000;
//wes=0;
while(n)
pos[i++]=n%10;
n/=10;
3;
dus=dutab[16];
wes=wetab[j];
dus=dutab[pos[j]];
//wes=wetab[j];
delay
(2);
dus=dutab[16];
wes=wetab[3];
dus=dutab[pos[3]]|0x80;
//wes=wetab[3];
delay
(2);
dus=dutab[pos[3]];
voiddisplay1(floatcnt)
n=cnt*100;
2;
wes=wetab[2];
dus=dutab[pos[2]]|0x80;
dus=dutab[pos[2]];
voiddelay(ucharz)
uintx,y;
for(x=z;
x>
x--)
for(y=110;
y>
y--);
init();
while
(1)
AD=0;
EOC=1;
while(!
EOC);
PA=AD;
tmp=AD;
num=tmp/255.0*5;
if(flag)
display(num);
else
display1(num*10);
voidint1()interrupt2
flag=~flag;
2.3硬件测试
按实验箱内部连线接好之后,再按先前设计好的外围电路,与实验箱接上,接入可变直流电压源,观察数码管显示数值是否与标准电压表一致。
可以通过加入单脉冲来改变数码管显示的小数点的位置,改变电压输入点,改变档位,从而实现5V和50V的换档。
2.4调试中的问题记录
1.在50V档位时,所测电压有点误差,如:
输入32.65V,测得结果为34.56V,这是因为外围电路的分压作用没有调节好,没有达到1/10的分压效果。
可以调节外围电路的滑动变阻器,使其显示示数正确。
2.显示示数余辉过于强烈,通过检查8255的接线有点松动,把每个线都一一检查固牢后,虽仍有余辉,但不过于强烈。
3.测试结果分析
组数
直流电压源
单片机显示
误差
1
1.22V
1.217
0.8%
2
2.63V
2.575
1.9%
3
6.25V
06.33
0.9%
4
15.63V
15.58
0.3%
通过上述结果分析,当在5V档位时,测量较高值时测量精度有点低,误差大。
但数值小的时候测量精度很高。
不足之处是本设计的外围分压电路是通过510K和50K电阻串联分压方式,并通过调节电位器来实现1/10的分压效果,实际最好是450K和50K,这样恰好是分出十分之一电压,但实际电路受到电压源等因素影响较大,这之间会因为电压值的不同而引起效果好坏的改变,可以考虑用运算放大器来设计一个精确而又稳定的分压电路。
对于过压保护电路,由于实验室没有提供MOS管,故只能采用5.1V的稳压管来实现电路过压保护作用。
由于稳压管容易烧坏,所以在电压源开机瞬间,不可使电压源内电压过高,否则稳压管会烧坏。
4.课程设计总结
本次课程设计中0-5V档与0-50V档没有本质的区别,因为是通过外围分压电路将输入电压缩小10倍,从而转换为0-5V档,而在显示结果时只需将数码管的小数点右移一位即成为正确的输入电压。
对于ADC0809的分辨率应该是v/255,v为该档位的最大电压,5V的分辨率只有0.02V左右。
但此设计中使用C语言程序编译,使用的是浮点数,故显示时不会受缚于0.02V的分辨率。
总体来说通过本次实验,用Proteus进行仿真,了解了Proteus软件的基本使用方法,用keil转换伟福识别语言,使该软件能够识别C语言,也加深了对单片机模拟仿真软件的认识和理解;
也在实际操作连接外电路的过程中,遇到了许多问题,认识到自己的动手能力的亟待提高。
同时在寻求解决问题,查找资料,向老师请教的同时,提高了自己做设计实验的能力,也学会了如何利用图书资源和自身知识去转换为实际应用,为以后的学习提高奠定了基础。
参考文献:
[1] 蔡美琴等编著,MCS-51系列单片机系统及其应用,高等教育出版社,2004年4月
[2] 谭浩强编《C语言程序设计(第二版)》清华大学出版社
[3]朱定华编著《微机原理、汇编与接口技术》清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 8051 单片机 简易 电压表 方案设计