基于51单片机的多功能数字电子钟的设计Word文档下载推荐.docx
- 文档编号:22380793
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:24
- 大小:263.93KB
基于51单片机的多功能数字电子钟的设计Word文档下载推荐.docx
《基于51单片机的多功能数字电子钟的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于51单片机的多功能数字电子钟的设计Word文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。
1.2电子时钟的国内外研究现状
数字电子时钟,自从它发明的那天起,就成为人类的朋友,给人们的生活、学习、工作、娱乐带来极大的方便。
但随着时间的推移,科学技术的不断发展,生活节奏越来越快,竞争日益激烈,人们对时间计量的精度要求越来越高,应用越来越广。
可以说时间的准确已成为各行各业安全运行的基础,如果时间出现误差而不能及时校正,会造成一系列严重的后果和经济损失。
电子时钟的设计方法有多种,可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以利用对单片机编程来实现电子钟。
其中,利用单片机实现的电子时钟具有硬件结构简单、编程灵活、便于功能扩展等特点。
由单片机作为数字钟的核心控制器,可以通过它的时钟信号实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
通过键盘可以进行定时、校时功能。
输出设备显示器可以用液晶显示技术或者数码管显示技术。
智能温度传感器(亦称数字温度传感器)是上世纪90年代中期问世的。
此类传感器是微电子技术、计算机技术和自动测试技术的结晶。
目前,国际上已开发出多种智能温度传感器。
智能温度传感器内部一般包含温度传感器、A/D转换器、信号处理器、存储器(或寄存器)和接口电路。
有的产品还带多路选择器、中央控制器、随机存取存储器和只读存储器。
智能温度传感器能实时更新并输出温度数据,适配于各种微控制器也就是通常所说的单片机(MCU),并且可通过软件来实现显示功能,其智能化取决于软件和硬件的综合开发水平,二者缺一不可。
目前,新型温度传感器正从模拟式向数字式、集成化向智能化及网络化的方向发展。
21世纪后,智能温度传感器毫无疑问正朝着高精度、多功能、总线标准化、高可靠性及高安全性等高科技的方向迅速发展,开发虚拟传感器和网络传感器、研制更先进的单片测温系统已是刻不容缓。
在日常生活和自动控制系统中,我们时常会遇到对时间和温度实时监控的需求。
这就给具有多种功能的时钟提供了市场,也有了市场开发的前景。
本文给出了一种基于单片机实现带温度检测的电子时钟的设计方法和实现过程。
2AT89S51单片机简介
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及89C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51具有如下特点:
40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
主要特性:
•8031CPU与MCS-51兼容
•4K字节可编程FLASH存储器(寿命:
1000写/擦循环)
•全静态工作:
0Hz-33MHz
•三级程序存储器保密锁定
•128*8位内部RAM
•32条可编程I/O线
•两个16位定时器/计数器
•6个中断源
•可编程串行通道
•低功耗的闲置和掉电模式
•片内振荡器和时钟电路
3硬件系统设计
3.1系统框架设计
系统框架如图3.1
图3.1系统框架图
3.2模块设计
3.2.1单片机系统电路
AT89S51芯片外形及引脚分布如图3.2
图3.2AT89S51芯片外形及引脚分布图
如图2所示,AT89S51有40引脚,双列直插(DIP)封装,所用引脚功能如下:
1.VCC——运行时加+5V
2.GND——接地
3.XTAL1——振荡器反相放大器及内部时钟发生器的输入端
4.XTAL2——振荡器反相放大器的输出端
5.RST——复位输入,高电平有效,在晶振工作时,在RST引脚上作用2个机器周期以上的高电平,将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFTAUXR的DISRTO位(地址8EH)可打开或关闭该功能。
DISRTO位缺省为RESET输出高电平打开状态。
6.EA/VPP——片外程序存储器访问允许信号。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地),如果EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。
7.P1口,P2口——P1,P2是一组带内部上拉电阻的8位双向I/O口。
运行时通过P1口控制驱动电路的工作,将数据送到数码管,显示相应的段码,为了达到减少功耗或满足端口对最大电流的限制,应加上一限流电阻。
P2.0——P2.7口控制数码管的位选,使六个数码管轮流显示数据,等于0时位选三极管导通,等于1时位选三极管截止。
8.无自锁开关——(S2-P3.7)开关接相应引脚P3.7,当开关按下时,相应引脚为低电平0,断开时引脚为高电平1。
3.2.2复位电路
无论使用哪种类型的单片机,总要涉及到单片机复位电路的设计.而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性.许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。
复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
为可靠起见,电源稳定后还要经过一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
单片机复位电路参数的选定须在振荡稳定后保证复位高电平持续时间大于2个机器周期。
单片机复位电路主要有四种类型:
微分型复位电路;
积分型复位电路;
比较器型复位电路;
看门狗型复位电路。
复位电路设计如图3.3
图3.3复位电路
3.2.3晶振电路
晶振电路设计如图3.4
图3.4晶振电路
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL1应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
C1,C2在是电时帮助晶振起振。
3.2.4数码管显示驱动电路
数码管点亮田:
段选和位选,结合图3.5,图3.6
图3.5数码管引脚图
(a)
(b)
图3.6位选电路
图3.5为数码管的引脚图,每位的段码线(a,b,c,d,e,f,g,dp)分别与1个8位的锁存器输出相连,由AT89S51控制组合0-9十个数据,如令其显示1则b,c引脚(即2,3引脚)送高电平,此时数码管显示1。
由于各位的段码线并联,8位I/O口输出段码对各个显示位来说都是相同的。
当数码管正常工作时必须接上拉电阻,数码管点亮一般要5~10mA的电流,po输出电流不到1mA,同时上拉电阻起到一个限流的作用。
在多位LED显示时,为了简化电路,降低成本,节省系统资源,将所有的N位段选码并联在一起,由一片74HC595控制。
由于所有LED的段选码皆由一个74HC595并行输出口控制,因此,在每一瞬间,N位LED会显示相同的字符。
想要每位显示不同的字符,就必须采用扫描的方法,即在每一瞬间只使用一位显示字符。
在此瞬间,74HC595并行输出口输出相应字符段选码,而位选则控制I/O口在该显示位送入选通电平,以保证该位显示相应字符。
如此轮流,使每位分时显示该位应显示字符。
由于74HC595具有锁存功能,而且串行输入段选码需要一定时间,因此,不需要延时,即可形成视觉暂留效果。
图3.6为位选电路,PNP型三极管的集电极接数码管的公共端,当P2口对应的引脚输出低电平时三极管导通,对应的数码管显示数据。
这样,在同一时刻,多位LED中只有选通的那1位显示出字符,而其他5位则是熄灭的。
同样,在下一时刻,只让下一位的位选线处于选通状态,而其他个位的位选线处于关闭状态,在段码线上输出将要显示字符的段码,则同一时刻,只有选通位显示出相应的字符,而其他各位则是熄灭的。
如此循环下去,就可以使各位显示出将要显示的字符。
虽然这些字符是在不同时刻出现的,而在同一时刻,只有一位显示,其他各位熄灭,但由于LED的余辉和人眼的视觉暂留作用,只要每位显示间隔足够短,则可以造成多位同时亮的假象,达到同时显示的效果。
3.2.5定时报时电路设计
本电路采用无源蜂鸣器作为发声报时的声源,对P1.3口延时翻转电平产生驱动波形(如图3.7)对蜂鸣器进行驱动。
通过改变延时时间进而改方波的占功比可以得到驱动蜂鸣器的方波信号。
这样蜂鸣器报时时就可以听到不同音调的报时声。
图3.7波形图
3.2.6按钮设置电路
按钮设置电路如图3.8
图3.8按钮设置电路
按键按下时,由于抖动的问题,用延时的方法去除抖动,原因及解决方案如图3.9
图3.9延时方法除抖动
4软件系统设计
4.1主程序流程图
图4.1主程序图
4.2系统设计的源程序
包括主程序、中断子程序、显示子程序、判断按键和调时设置程序、等待按键抬起程序、 报时子程序、延时子程序
用单片机AT89C51设计一个多功能电子时钟能实现时分秒显示,能定时报时,还有调整时间的功能。
单片机AT89C51的P0口接数码管的7段,P2口接数码管的位选。
P3.0-P3.4接按键,P1.3接蜂鸣,数码管是一个八位一体共阴的,时间初始值00:
00:
00
#include<
reg52.h>
//包含51单片机寄存器定义的头文件
unsignedcharTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};
//段码共阴
unsignedcharport[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsignedcharint_time;
//中断次数计数变量
unsignedcharsecond;
//秒计数变量
unsignedcharminute;
//分钟计数变量
unsignedcharhour;
//小时计数变量
unsignedcharsecond0;
unsignedcharminute0;
unsignedcharhour0;
unsignedcharflag;
sbitk0=P3^0;
sbitk1=P3^1;
sbitk2=P3^2;
sbitk3=P3^3;
sbitk4=P3^4;
sbitring=P1^3;
voidDelayUs2x(unsignedchart)//延时函数
{
while(--t);
}
voiddelay(unsignedchart)
{
while(t--)
{//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
voidDisplay()//时间显示函数
P2=0xbf;
//P2.6引脚输出低电平,DS6点亮
P0=Tab[second/10];
//显示秒十位
delay
(1);
P2=0x7f;
//P2.7引脚输出低电平,DS7点亮
P0=Tab[second%10];
//显示秒个位
P2=0xf7;
//P2.3引脚输出低电平,DS3点亮
P0=Tab[minute/10];
//显示分十位
P2=0xef;
//P2.4引脚输出低电平,DS4点亮
P0=Tab[minute%10];
//显示分个位
P2=0xdf;
//P2.5引脚输出低电平,DS5点亮
P0=0x40;
//分隔符“-”的段码
P2=0xfe;
//P2.0引脚输出低电平,DS0点亮
P0=Tab[hour/10];
//显示时十位
P2=0xfd;
//P2.1引脚输出低电平,DS1点亮
P0=Tab[hour%10];
//显示时个位
P2=0xfb;
//P2.2引脚输出低电平,DS2点亮
voidDisplay0()//闹钟时间显示函数
P0=Tab[second0/10];
delay
(1);
P2=0x7f;
P0=Tab[second0%10];
P2=0xf7;
P0=Tab[minute0/10];
P2=0xef;
P0=Tab[minute0%10];
P2=0xdf;
P0=0x40;
P2=0xfe;
P0=Tab[hour0/10];
P2=0xfd;
P0=Tab[hour0%10];
}
voidmain(void)//主函数
k0=1;
k1=1;
k2=1;
k3=1;
k4=1;
TMOD=0x01;
//使用定时器T0
EA=1;
//开中断总允许
ET0=1;
//允许T0中断
TH0=(65536-46083)/256;
//定时器高八位赋初值
TL0=(65536-46083)%256;
//定时器低八位赋初值
TR0=1;
int_time=0;
//中断计数变量初始化
second=0;
//秒计数变量初始化
minute=0;
//分钟计数变量初始化
hour=0;
//小时计数变量初始化
second0=0;
minute0=0;
hour0=0;
flag=0;
while
(1)
if(k0==0)
EA=0;
while(k4!
=0)
{
if(k2==0)
delay(10);
if(k2==0)
hour++;
if(hour>
23)hour=0;
while(k2==0)Display();
if(k3==0)
minute++;
if(minute>
59)minute=0;
while(k3==0)Display();
}
Display();
EA=1;
}
if(k1==0)
flag=1;
while(k2==0)Display0();
while(k3==0)Display0();
Display0();
if(flag&
&
(hour==hour0)&
(minute==minute0))
ring=!
ring;
};
voidinterserve(void)interrupt1using1//usingTime0函数功能:
定时器T0的中断服务子程序
int_time++;
if(int_time==20)
int_time=0;
//中断计数变量清0
second++;
//秒计数变量加1
if(second==60)
//如果秒计满60,将秒计数变量清0minute++;
//分钟计数变量加1
if(minute==60)
minute=0;
//如果分钟计满60,将分钟计数变量清0
hour++;
//小时计数变量加1
if(hour==24)
//如果小时计满24,将小时计数变量清0
TH0=(65536-46083)/256;
//定时器重新赋初值
TL0=(65536-46083)%256;
总结
在这次课程设计调试过程中,我碰到很多困难,如时间设置时按键的判断,由于之初程序的问题时间显示不能根据按键的变化而变化,还有跳转指令的使用,导致程序运行时时常进入死循环,修改程序时思考不周全,如定时报时的问题,由于报时时间,导致时间显示时延迟,时钟不够精确。
通过本次课程设计,让我对单片机整体有了一次全面的了解,原来单片机的功能是如此强大,其实学习单片机没有我们想象的那么困难,做完这次课程设计我直接体会要学会单片机只要我们熟练控制单片机32个I/O输入输出,会对所有功能块的模式寄存器和控制寄存器进行设置,掌握程序的编写,我们学习的目的就达到了。
这次设计使我深刻认识到学习的理论必须用到实际中才能体现它的价值,才能学有所用,也就是所谓理论必须联系实际,这次设计对我查阅资料、程序编写、动手设计、对一些陌生软件的自主学习能力等都有很大的提高
本文采用AT89S51单片机用C语言进行编程,其本达到了设计的要求,由于设计者学识有限,设计还可以进一步优化和完善,真正实现“智能”时钟。
参考文献
[1]黄仁欣.单片机原理与应用技术第二版.北京:
清华大学出版社,2010
[2]赵嘉蔚.单片机原理与接口技术.北京:
清华大学出版社,2010
[3]李朝青.单片机原理与接口技术.北京:
北京航空航天大学出版社,2005
[4]童诗白,华成英.模拟电子基础技术.北京:
高等教育出版社,2001
[5]郑峰.51单片机应用系统典型模块开发大全.北京:
中国铁道出版社,2010
[6]贾好来.MCS-51单片机原理及应用.北京:
机械工业出版社,2007
[7]龚运新.单片机C语言开发技术.北京:
清华大学出版社,2006
[8]郭天祥.新概念51单片机C语言教程——入门、提高、开发、扩展.北京:
电子工业出版社,2009
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 多功能 数字 电子钟 设计