利用51单片机+8位数码管+AD0809设计数字直流电压表系统.docx

上传人:b****3 文档编号:5262797 上传时间:2022-12-14 格式:DOCX 页数:15 大小:748.65KB
下载 相关 举报
利用51单片机+8位数码管+AD0809设计数字直流电压表系统.docx_第1页
第1页 / 共15页
利用51单片机+8位数码管+AD0809设计数字直流电压表系统.docx_第2页
第2页 / 共15页
利用51单片机+8位数码管+AD0809设计数字直流电压表系统.docx_第3页
第3页 / 共15页
利用51单片机+8位数码管+AD0809设计数字直流电压表系统.docx_第4页
第4页 / 共15页
利用51单片机+8位数码管+AD0809设计数字直流电压表系统.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

利用51单片机+8位数码管+AD0809设计数字直流电压表系统.docx

《利用51单片机+8位数码管+AD0809设计数字直流电压表系统.docx》由会员分享,可在线阅读,更多相关《利用51单片机+8位数码管+AD0809设计数字直流电压表系统.docx(15页珍藏版)》请在冰豆网上搜索。

利用51单片机+8位数码管+AD0809设计数字直流电压表系统.docx

利用51单片机+8位数码管+AD0809设计数字直流电压表系统

 

 

1.题目设计要求

要求:

利用51单片机+8位数码管+AD0809设计数字直流电压表系统,精度为0.01V。

完成以下设计环节:

1)使用AltiumDesinger或Protel99SE开发工具,设计电路原理图与PCB制板图。

2)使用Uvision2开发平台,采用C语言或汇编语言设计软件程序。

3)使用PROTEUS仿真软件,设计仿真原理图并运行软件程序,完成系统仿真。

2.系统的组成及工作原理

2.1电路原理图

图2.1电路原理图

2.2A/D转换原理

模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。

但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。

A/D转换器的工作原理:

采用逐次逼近法,逐次逼近式A/D是比较常见的一种A/D转换电路,转换的时间为微秒级。

逐次逼近法转换过程是:

初始化时将逐次逼近寄存器各位清零;转换开始时,先将逐次逼近寄存器最高位置1,送入D/A转换器,经D/A转换后生成的模拟量送入比较器,称为   Vo,与送入比较器的待转换的模拟量Vi进行比较,若Vo<Vi,该位1被保留,否则被清除。

然后再置逐次逼近寄存器次高位为1,将寄存器中新的数字量送D/A转换器,输出的 Vo再与Vi比较,若Vo<Vi,该位1被保留,否则被清除。

2.3数据处理原理

由ADC0809的转换原理可以知道我们从其得到数据还只是二进制数据,我们还需要进一步处理来的到x的十进制数,并且对其进行精度处理,也就是课题要求的的精确到小数点后两位,在这里我们用51单片机对数据进行处理。

我们处理数据的思路是:

首先将得到的二进制数直接除以十进制数51,然后取整为x的整数部分,然后就是将得到的余数乘以10,然后再除以51,再取整为x的十分位,最后将得到的余数除以5得到x的百分位。

2.4器件列表

系统所用到的主要器件如下:

1.MCS51单片机--AT89C51

2.ADC0809芯片

3.LED显示器

4.电阻若干

5.二极管若干

 

3.器件的功能和作用

3.1AT89C51功能介绍

3.1.1AT89C51的简单概述

AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。

AT89C51是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

 

 

图3.1AT89C51芯片模型

3.1.2AT89C51的引脚介绍

89C51单片机多采用40只引脚的双列直插封装(DIP)方式,下面分别简单介绍。

(1)电源引脚

电源引脚接入单片机的工作电源。

Vcc(40引脚):

+5V电源。

GND(20引脚):

接地。

(2)时钟引脚

XTAL1(19引脚):

片内振荡器反相放大器和时钟发生器电路的输入端。

XTAL2(20引脚):

片内振荡器反相放大器的输出端。

图3.2电源接入方式

(3)复位RST(9引脚)

在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。

(4)

/Vpp(31引脚)

为外部程序存储器访问允许控制端。

当它为高电平时,单片机读片内程序存储器,在PC值超过0FFFH后将自动转向外部程序存储器。

当它为低电平时,只限定在外部程序存储器,地址为0000H~FFFFH。

Vpp为该引脚的第二功能,为编程电压输入端。

(5)ALE/

(30引脚)

ALE为低八位地址锁存允许信号。

在系统扩展时,ALE的负跳沿江P0口发出的第八位地址锁存在外接的地址锁存器,然后再作为数据端口。

为该引脚的第二功能,在对片外存储器编程时,此引脚为编程脉冲输入端。

(6)

(29引脚)

片外程序存储器的读选通信号。

在单片机读片外程序存储器时,此引脚输出脉冲的负跳沿作为读片外程序存储器的选通信号。

(7)pin39-pin32为P0.0-P0.7输入输出脚,称为P0口。

P0是一个8位漏极开路型双向I/O口。

内部不带上拉电阻,当外接上拉电阻时,P0口能以吸收电流的方式驱动八个LSTTL负载电路。

通常在使用时外接上拉电阻,用来驱动多个数码管。

在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,不需要外接上拉电阻。

(8)Pin1-Pin8为P1.0-P1.7输入输出脚,称为P1口,是一个带内部上拉电阻的8位双向I/0口。

P1口能驱动4个LSTTL负载。

(9)Pin21-Pin28为P2.0-P2.7输入输出脚,称为P2口。

P2口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载。

端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

对内部Flash程序存储器编程时,接收高8位地址和控制信息。

在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。

而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。

(10)Pin10-Pin17为P3.0-P3.7输入输出脚,称为P3口。

P3口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载,这8个引脚还用于专门的第二功能。

端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

对内部Flash程序存储器编程时,接控制信息。

3.2AD0809功能介绍

AD0809是CMOS逐次逼近型A/D转换器,具有八路模拟量输入通道,有转换起停控制,模拟输入电压范畴0v-5v,转换时间为100us,AD0809有八路模拟通道选择开关、地址所存和译码器、比较器、八位开关树型D/A转换器、逐层逼近型寄存器、定时和控制电路及三态输出锁存器组成。

其中,八路模拟通道选择开关实现从8路模拟量中选择一路送给后面的比较器进行比较;地址所存和译码器用于当ALE信号有效时锁存器从ADDA、ADDB、ADDC3根地址线中送来的3位地址,译码后产生通道信号,从8路模拟通道中选择8位A/D转换器,当START信号有效时,就开始对输入的当前通道的模拟量进行转换,转换完后,把转换得到的数字量送到8位锁存器,同时通过EOC引脚送出转换结束信号。

三态输出锁存器保存当前模拟通道转换得到的数字量,当OC信号有效时,把转换的结果通过D0-D7送出。

3.3LED数码管功能介绍

LED的段码端口A~G分别接至AT89C51的P1.0~P1.7口,位选端1~4分别接至P3.5、P3.4、P3.1、P3.0。

 

4.系统硬件设计

用一片ADC0809和必要的外围器件与80C51进行接口连接,要求对IN0所输入的模拟电压进行识别,将其转换成相应的二进制数并以发光二极管的形式显示。

图4.189C51单片机

 

图4.2ADC0809芯片

5.系统软件设计

5.1程序流程图

图5.1数字式电压表主程序流程图

 

图5.2A/D转换流程图

 

5.2程序代码

#include"reg51.h"

sbitST_ALE=P3^0;//STARTandALEbothconnecttoP3.0

sbitEOC=P3^1;//EOCconnecttoP3.1

sbitOE=P3^2;//OEconecttoP3.2

sbitCLK=P3^3;//CLKconnecttoP3.3

unsignedcharCHANNEL;//ADchannelvariable

unsignedcharLED[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//commoncathodeLEDcode

unsignedcharCHECK[4]={0xEF,0xDF,0xBF,0x7F};//chooseLEDchannel

voiddelay(unsignedchartime)

{

unsignedchari,j;

for(i=time;i>0;i--)

for(j=250;j>0;j--)

;

}

voiddisplay()

{

unsignedlongtemp;

unsignedcharDATA,digit[4];

unsignedintk,l;

DATA=P0;//saveADdata

temp=DATA;//thetemporaryvariable

temp=temp*1000/51;//ADformula:

D=A*5/255

digit[0]=temp/1000;//thethousandsplace

digit[1]=temp%1000/100;//thehundredsplace

digit[2]=temp%1000%100/10;//thetensplace

digit[3]=temp%1000%100%10;//theonesplace

DATA=P2;//saveP2

for(k=0;k<10000000;k++)

{

/*lighteneachLEDandequalthebelowforloop

P1=LED[digit[0]]+0x80;

P2_4=0;

P2_4=1;

P1=LED[digit[1]];

P2_5=0;

P2_5=1;

P1=LED[digit[2]];

P2_6=0;

P2_6=1;

P1=LED[digit[3]];

P2_7=0;

P2_7=1;

*/

for(l=0;l<4;l++)

{

P2=P2|0xF0;//avoidLEDresidual

P1=LED[digit[l]]+0x80*(l==0);//LEDcode

P2=DATA&CHECK[l];//chooseLEDchannel

}

}

P2=DATA;//restoreP2

}

voidmain()

{

CHANNEL=0xF8;//ADchannel0

ST_ALE=0;//STARTandALEdefault

OE=0;//OEdefault

TMOD=0x02;//T0operateinmode2

TH0=0xFF;//autoloadvalue

TL0=0xFF;//defaultvalue

EA=1;//allinterruptenable

ET0=1;//T0interruptenable

TR0=1;//T0run

while

(1)

{

P2=CHANNEL;//chooseADchannel

ST_ALE=1;//locktheADchanneladdress

ST_ALE=0;//ADrun

while(EOC==0);//waituntilADover

OE=1;//enabletotransmitADdata

display();//viewtheADresultanddiaplayLED

delay(250);//delaytopreparefornextADchannel

OE=0;//forbittotransmitADdata

/*if(CHANNEL==0xFF)

CHANNEL=0xF7;//ADchannelloop

CHANNEL++;//nextADchannel

*/

}

}

voidT1_TIME()interrupt1using0

{

CLK=!

CLK;//CLK500kHz

}

6.系统仿真调试

6.1仿真原理图设计

图6.1仿真原理图

6.2与程序代码链接

6.2.1运用keiluVision4生成.hex文件并链接

新建一个工程的步骤:

(1)新建一个文件夹,放置工程文件,避免与其他文件混淆,如新建文件夹project1;

(2)点击桌面keil图标,出现启动界面如图6.2:

图6.2keil启动界面

(3)点击“project---NewuVisionProject”新建一个工程,如新建工程project1,并将其保存在文件夹project1中:

图6.3新建工程界面

(4)弹出一个框,在CPU类型下我们找到并选中“Atmel”下的AT89S51或AT89S52:

图6.4选择芯片型号

(5)点击file,新建文件,并将其保存,如果是C语言,则将文件后缀改为.c并保存,如果是汇编语言,将后缀改为.asm后保存。

(6)将保存好的文件将添加进工程,右击project窗口中的SourceGroup1,在打开的菜单中选择”AddFiletoGroup‘SourceGroup1’”保存的文件添加进来:

图6.5添加文件至工程

添加文件至工程中后即可点击添加的文件进行编程。

对程序进行编译,成成文件中包含.hex格式文件。

按后按.hex格式文件所在路径链接仿真电路。

6.3仿真运行结果

链接后即可获得结果,结果显示在LED数码管上,如图6.1所示,测得的电压为2.49V,与实际电压值相比较,其值在误差允许范围内,故其结果正确。

7.心得体会

通过此次课程设计,学到了不少的东西,在此期间,我们通过网上搜索资料,逛图书馆,看视频教程了解本次课程设计的相关知识,真的使人受益匪浅,收获颇多!

通过大家的努力,在同学和指导老师的帮助下,成功的完成了本次课程设计。

通过对数字电压表的设计,让我真正的了解了数字电压表的工作原理,另外以前岁单片机就有一定的认识及应用,这次课程设计更加加深了自己对单片机应用技术的掌握,虽然以前就做过一些单片机制作,并且对单片机C语言的应用并不陌生,但是本次设计中系统,纤细的设计工作使我更加深刻的掌握了单片机设计的一些细节,尤其是对A/D转换技术的掌握。

这次课程设计所涉及的知识虽然并不是很全面,但是同样让我受益匪浅,尤其是在做课程设计的同时,让我找到了自己的一些不足之处。

并在做课程设计时让我觉得用平时所学,真的的接触一些东西时,是多么的快乐,动手之后完全没有了在课堂上学习时的枯燥,这样能够更快的吸收知识。

另一方也让我看到了交流的重要性,又不懂得时候,和同学交流解决问题可以高效的解决问题。

 

8.参考文献

1.谢维成杨加国(主编)

《单片机原理与应用及C51程序设计》

清华大学出版社

2.刘坤(主编)

《51单片机典型应用开发大全》

中国铁道出版社

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

当前位置:首页 > 自然科学 > 物理

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

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