当前位置:首页 > 基于51系列单片机及DS1302时钟芯片的电子时钟 - C语言 - Proteus仿真 - 报告
陕西理工学院课设报告
5、课设心得
本设计利用单片机AT89C52控制串行实时时钟芯DS1302构成数字时钟电路,实现计时功能。
该电路使用简单的三线接口,为单片机节省大量的接口资源,时钟芯片带有后备电池。该时钟功能强大,性能优越,能为很多领域,特别是对时钟工作的准确性和可靠性有较高要求。
软件完成后,把伟福编译后的文件通过烧录器下载到AT89S52芯片,加上电源就可以进行调试。 各程序模块具有一定的独立性,因此可以先调试模块,在模块功能都能实现的前提下,再调试总程序,这样能快捷地检查判断硬件或软件上的问题。调试结果及解决办法如下:
测试显示模块时,液晶屏显示乱码。利用Proteus软件仿真,发现仿真时显示正常,再检查硬件,发现电源键接线错误。按原理图重新焊接后,能正常显示。
测试DS读写模块时,从LCD显示表明能正确写入与读取当前时间,但DS1302的工作情况不太理想,主要表现在实时时间稍微偏快。
DS1302 时钟的产生基于外接的晶体振荡器,振荡器的频率为32.768KHZ,该晶振通过引脚X1、X2 直接连接至DS1302,即DS1302 是依靠外部晶振与其内部的电容配合来产生时钟脉冲,由于DS1302 在芯片本身已经集成了6pF的电容。所以,为了获得稳定的可靠的时钟,必须选用具有6pF 负载电容的晶振。然而,许多人在选用晶振时仅仅注意了晶振的额定频率值,而忽视了晶振的负载电容大小,甚至连许多经销商也不能提供所售晶振的负载电容,所以即使在使用中选用了符合32768Hz 的晶振,但如果该晶振的负载电容与DS1302 提供的6pF不一致时,就会影响晶振的起振或导致振荡频率的偏移。 当所选的晶振负载电容不是6pF 时,可以采用增加辅助电容的方法提高或降低DS1302 振荡器的电容性负载,使之与晶体所需的电容值匹配,如果已知晶体的负载电容为CI,若CI 小于6pF,则可以增加一个并联电容CS 以产生所需要的总负载电容CI,即CI=6pF+CS;若CI 大于6pF,则可以在晶体的一端增加一个串联电容CS,以产生所需要的负载电容CI,即1/CI=1/6pF+1/CS,通过计算即可得出应增加的辅助电容大小
通过本次课程设计的全过程使我更加地对单片机系统内部资源的理解与运用,并较好地实现了DS1302芯片与单片机的融合与工作。单片机的外围设备就是
通过这一周的学习,我感觉有很大的收获:首先,通过这次课程设计使自己对课本上的知识可以应用于实际,使理论与实际相结合,加深自己对课本知识的更好理解,同时也段练了自己的动手能力:能够充分利用电脑去查阅资料,增加了许多课本以外的知识。更加了解了单片机原理及应用。增加了对DS1302和AT89C52芯片引脚结构和功能的理解及运用,在设计电路过程中,要考虑到整体的美观性,连接电路时对各线路的连接要细致。在验证面电路效果时,出现了很多问题,其主要问题各个接线点之间错接没接上等。在这个过程中,锻炼了我的细心和耐性。
13
陕西理工学院课设报告
参考文献
[1]李全利,仲伟峰,徐军著.单片机原理及应用[M]..北京:清华大学社,2006 [2]DS1302中文手册
[3]倪晓军 章韵等.单片机原理与接口技术教程.北京:清华大学出版社.2009 [4]王守忠 聂元铭.51单片机开发入门与典型实例.北京:人民邮电出版社,2009
14
陕西理工学院课设报告
附录A 硬件电路原理图
15
陕西理工学院课设报告
附录B源程序
/**************DS1302及1602时钟设计 **********/
#include
#define uchar unsigned char #define uint unsigned int #define SECOND 0x81 #define MINUTE 0x83 #define HOUR 0x85 sbit rs=P2^0; sbit rw=P2^1; sbit ep=P2^2;
sbit DS1302_IO= P1^7;
sbit DS1302_SCLK = P1^6; sbit DS1302_RST = P1^5; sbit M=P3^1; //选择 sbit U=P3^2; // 加 sbit D=P3^3; // 减 sbit W=P3^4; //确定 sbit SPK=P3^7; //蜂鸣器 uchar sel=0;
uchar code DIS1[]={%uchar code DIS2[]={\/******************延时****************/ void delay(uint ms) {
unsigned int a,b; for(a=0;a for(b=0;b<124;b++); } /***************DS1302驱动******************/ void DS1302_Write(uchar D) { uchar i; 16
共分享92篇相关文档