欢迎来到天天文库
浏览记录
ID:19312956
大小:102.50 KB
页数:7页
时间:2018-09-21
《基于实时钟芯片电子万年历设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于实时钟芯片的电子万年历的设计一摘要:电子万年历以AT89S52单片机为控制核心,采用Dallas公司的DS12C887A实时钟芯片构成计时电路,实现了时间和日期的显示,还增加了温度显示和整点报时的功能。文章对该系统的硬件电路、工作原理做了详细介绍,同时给出了软件设计的流程图及主要程序源代码。关键词:单片机,实时钟,温度测量二引言电子万年历在家庭居室、学校、车站和广场使用越来越广泛,给人们的生活、学习、工作带来极大的方便。针对以往的电子万年历断电后需重新调整时间与日期,且计时误差大的现象。本系统设计采用实时钟芯片(DS12C887A)作为计时器件,该芯片内部自带晶体振荡器,
2、这样就有效的保证了计时的精确性,并且内部自带锂电池使得在断情况能继续更新时间信息。本设计采用AT89S52作为主控制器,为了提高电路的实用性加入温度测量电路、报时和闹钟功能。系统的工作原理是:主控制器每隔一段时间(小于一秒钟)读一次时钟芯片的内部寄存器的值,将读出的日历、时间信息实时的显示在LED数码显示器上。同时,主控制器不断的扫描按键电路和温度测量电路,当有键按下时,识别出按键的值并调整相应的时间或日历的值再写入时钟芯片内部。温度数据由测量电路(DS1280)获得的温度值送入显示电路显示。2系统硬件的设计电路原理图如图2所示:2.1电源电路为了减少电路成本,本系统电源电路
3、由变压器变压、三端集成稳压(L7805)电路产生5V,具有简单、可靠、价格低廉等特点。2.2主控制器主控制器采用ATMEL公司的最新系列单片机产品AT89S52。该单片机除了拥有MCS一51系列单片机的所有;优点外,内部还具有8KB的在系统可编程FLASH存储器,!低功耗的空闲和掉电模式,极大的降低了电路的功耗。另外,还具有一个看门狗电路,为电路的可靠工作提供了更大的保证。2.3数码管显示电路显示电路采用具有高亮度、使用寿命长、价格低廉等特点的LED数码管。整个显示电路由LED数码管和显示驱动电路和译码电路构成。由于本系统中显示的内容较多,共需要16个数码管,分别用八位显示年
4、、月、日,四位显示时间,二位显示星期,二位显示温度。为了节省控制器的资源,在控制器和显示器之间加入一个译码电路使本来需要16根控制线的电路变成只需四根控制线,极大的节省了系统资源。该译码器由两个3—8译码器构成。2.4实时钟芯片本设计采用美国Dallas公司的DS12C887A,该芯片能够自动产生世纪、年、月、日时、分、秒等时间信息。利用内部的世纪寄存器,配合软件就能解决千年的问题。该芯片内部自带有锂电池,外部掉电时,其内部的时间信息还能够保持1O年之久。对于一天内的时间记录有12小时制和24小时制两种模式。时间的表示方法也有两种,一种用二进制数表示,另一种用BCD码表示。该
5、芯片内部带有128字节的RAM,其中11字节用来存储时间信息,4字节用来存储芯片的控制信息,称为控制寄存器,113字节通用RAM可供用户存储临时信息。此外,用户还可以对芯片进行编程控制输出各种方波,并可对其内部的三路中断通过软件进行屏蔽。2.5按键与温度测量电路本系统为了使电路更简单,按键电路只设计了个按键,分别是’设置’、’+’、’一’三个键用来调整日历以及时钟。本系统为了提高电路的实用性,增加了一个温度显示功能。该系统的温度测量电路采用DallaS公司的DS1280。该器件由于其具有价格低廉电路简单、测量精确等优点。2.6音频信号产生及驱动电路本电路的功能是接收控制电路发
6、送来的整点报时及定时信号,根据系统设定产生不同频率的音频信号,由驱动电路加以放大驱动扬声器发出声音,从而实现整点报时及闹钟的功能。3系统的软件设计本系统程序由主程序、中断服务函数和多个子函数构成。主函数主要完成各子函数和中断函数的初始化。定时中断函数主要完成时钟芯片的定时扫描及键盘扫描。时钟芯片的读写函数主要是将时间、日历信息读出来,并把要修改的具体值写入时钟芯片内部。相关程序流程图如下:主要源程序代码如下:#itic1ude#itic1ude#defitieintenab1eEA=1#defitieUrlsignedcharuchar
7、#defitieUrlSignedintUint/********函数声明********/VOidreadrtc(void):VOidbusinitialize(VOid):—voiddisplay(VOid):/*显示函数*/voiddiSca1endar(ucharbit——shvoiddistdt(ucharbitshiel———VOidintinitialize(VOid):VOidtimerOinitialize(VOid):/********************************
此文档下载收益归作者所有