利用51单片机+8位数码管+AD0809设计数字直流电压表系统Word格式文档下载.docx
- 文档编号:18242917
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:15
- 大小:748.65KB
利用51单片机+8位数码管+AD0809设计数字直流电压表系统Word格式文档下载.docx
《利用51单片机+8位数码管+AD0809设计数字直流电压表系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《利用51单片机+8位数码管+AD0809设计数字直流电压表系统Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
首先将得到的二进制数直接除以十进制数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个引脚还用于专门的第二功能。
对内部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>
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];
}
}
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单片机典型应用开发大全》
中国铁道出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 51 单片机 数码管 AD0809 设计 数字 直流 电压表 系统