基于8051单片机的简易电压表方案设计书.docx

上传人:b****6 文档编号:7097495 上传时间:2023-01-17 格式:DOCX 页数:14 大小:95.50KB
下载 相关 举报
基于8051单片机的简易电压表方案设计书.docx_第1页
第1页 / 共14页
基于8051单片机的简易电压表方案设计书.docx_第2页
第2页 / 共14页
基于8051单片机的简易电压表方案设计书.docx_第3页
第3页 / 共14页
基于8051单片机的简易电压表方案设计书.docx_第4页
第4页 / 共14页
基于8051单片机的简易电压表方案设计书.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于8051单片机的简易电压表方案设计书.docx

《基于8051单片机的简易电压表方案设计书.docx》由会员分享,可在线阅读,更多相关《基于8051单片机的简易电压表方案设计书.docx(14页珍藏版)》请在冰豆网上搜索。

基于8051单片机的简易电压表方案设计书.docx

基于8051单片机的简易电压表方案设计书

—简易直流电压表

 

班级:

电信四班

姓名:

彭飞宇

学号:

2220081336

 

摘要

电压表应用十分广泛,但大部分是模拟电压表,而由于其特性,反应速度慢,读数麻烦并且误差较大,所以为适应不断快速发展的高速信号领域,已经广泛使用数字电压表。

本实验设计是基于51单片机开发平台实现的一种数字电压表系统。

该设计采用8051单片机作为控制核心,以ADC0809为模数转换数据采样,实现被测电压的数据采样;通过外围分压电路实现5V和50V的换档;同时使用5V稳压管作为超范围的保护电路;用8255驱动控制四块数码管显示被测电压。

1.设计任务和要求

1.1设计任务

设计制作一个简易直流电压表,该直流电压表能测量直流电压

1.2设计要求

基本要求

1.能测量电压档0--5V0--50V两档,输入阻抗>200K

2.数码显示共3位,其中一位小数

3.要有输入信号超范围的保护电路

发挥部分

1.能够测量交流电压(0—500V)

2.能够测量电阻

二设计方案和部分仿真

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

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;

P22=1;

P23=1;

Delay(10);

P1=0x00;

P1=dispbitcode[dispbuf[1]];

P20=1;

P21=1;

P22=0;

P23=1;

Delay(10);

P1=0x00;

P1=dispbitcode[dispbuf[0]];

P20=1;

P21=1;

P22=1;

P23=0;

Delay(10);

P1=0x00;

}

voidmain()

{

TimeInitial();

while

(1)

{

ST=0;

OE=0;

ST=1;

ST=0;

P34=0;

P35=0;

P36=0;

while(EOC==0);

OE=1;

getdata=P0;

OE=0;

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

{

TH1=(65536-200)/256;

TL1=(65536-200)%256;

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软件调试

为了适应试验箱上管脚连接和,对仿真程序加以修改,修改之后的程序如下:

#include

#include

#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;

sbitEOC=P3^2;

voiddelay(uchar);

voidinit()

{

CTL=0x80;

EA=1;

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;

}

for(j=0;j<3;j++)

{

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)

{

ucharpos[4]={0,0,0,0};

uchari=0;

ucharj;

uintn;

n=cnt*100;

while(n)

{

pos[i++]=n%10;

n/=10;

}

for(j=0;j<2;j++)

{

dus=dutab[16];

wes=wetab[j];

dus=dutab[pos[j]];

delay

(2);

}

dus=dutab[16];

wes=wetab[2];

dus=dutab[pos[2]]|0x80;

delay

(2);

dus=dutab[pos[2]];

dus=dutab[16];

wes=wetab[3];

dus=dutab[pos[3]];

delay

(2);

}

voiddelay(ucharz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voidmain()

{

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]朱定华编著《微机原理、汇编与接口技术》清华大学出版社

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1