基于日历时钟DS1302的时钟设计.docx
- 文档编号:6350449
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:25
- 大小:509.74KB
基于日历时钟DS1302的时钟设计.docx
《基于日历时钟DS1302的时钟设计.docx》由会员分享,可在线阅读,更多相关《基于日历时钟DS1302的时钟设计.docx(25页珍藏版)》请在冰豆网上搜索。
基于日历时钟DS1302的时钟设计
课程设计
课程单片机课程设计
题目基于日历时钟DS1302的时钟设计
院系
专业班级
学生姓名
学生学号
指导教师
2012年3月30日
课程单片机课程设计
题目基于日历时钟DS1302的时钟设计
专业姓名学号
一、任务
设计一款基于DS1302,可以显示年月日时分秒及周信息,具有可调整日期和时间功能的电子万年历。
二、设计要求
[1]自动计时,显示年、月、日、时、分、秒。
[2]时间显示可调整。
[3]写出详细的设计报告。
[4]给出全部电路和源程序。
三、参考资料
[1]陈景初.单片机应用系统设计与实践[M].北京:
航空航天大学出版社,2006.
[2]陈正振.电子电路设计与制作.广西:
交通职业技术学院信息工程系,2007.
[3]杨子文.单片机原理及应用.西安:
电子科技大学出版社,2006.
[4]刘勇.数字电路.北京:
电子工业出版社,2004.
[5]黄明强.DS1302在单片机系统中的应用.保定:
师范学校学报,2004,
(2).
完成期限2012.3.19至2012.3.30
指导教师
专业负责人
2012年3月16日
目录
第1章绪论3
1.1DS1302简介3
1.2DS1302的性能特性3
1.3DS1302数据操作原理3
1.4DS1302的应用4
1.5本设计任务4
第2章总体方案论证与设计5
2.1单片机芯片的选择方案和论证5
2.2显示模块选择方案和论证5
2.3时钟芯片的选择方案和论证5
2.4总体硬件组成框图6
第3章系统硬件设计7
3.1单片机主控制模块的设计7
3.2时钟电路模块的设计8
3.3电路原理及说明9
3.4显示模块的设计10
第4章系统的软件设计12
4.1主程序设计12
4.2液晶驱动程序13
第5章系统调试与测试结果分析14
5.1硬件测试14
5.2软件测试14
5.3测试结果14
结论16
参考文献17
附录1程序18
附录2仿真效果图26
第1章绪论
随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活中。
日历是人们不可或缺的日常用品。
但一般日历都为纸制用品,使用不便,寿命不长。
电子万年历采用智能电子控制和显示技术,改善了纸制日历的缺陷。
电子万年历是一种应用非常广泛的日常计时工具,数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,壁挂式LED数码管显示的日历钟逐渐受到人们的欢迎。
1.1DS1302简介
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.5~5.5V。
时钟可工作在24小时格式或12小时(AM/PM)格式。
DS1302与单片机的接口使用同步串行通信,仅用3条线与之相连接。
可采用一次传送一个字节或突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
1.2DS1302的性能特性
·实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;
·用于高速数据暂存的31×8位RAM;
·最少引脚的串行I/O;
·2.5~5.5V电压工作范围;
·2.5V时耗电小于300nA;
·用于时钟或RAM数据读/写的单字节或多字节数据传送方式;
·简单的3线接口;
·可选的慢速充电(至VCC1)的能力。
1.3DS1302数据操作原理
DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。
无论是读周期还是写周期,开始8位指定40个寄存器中哪个被访问到。
在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。
时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。
如果在传送过程中置RST为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。
上电运行时,在VCC>=2.5V之前,RST脚必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
1.4DS1302的应用
实时时钟芯片DS1302采用串行数据传输,可为掉电保护电源提供可编程的充电功能,也可以关闭充电功能,芯片采用32768Hz晶振。
要特别说明的是,备用电源BT1可以用电池或超级电容(10万μF以上)。
虽然DS1302在主电源掉电后耗电很小,但如果要长时间保证时钟正常,最好选用小型充电电池。
如果断电时间较短(几小时或几天),可以用漏电较小的普通电解电容代替(100μF就可以保证1小时的正常走时)。
DS1302在第一次加电后,需进行初始化操作。
初始化后就可以按正常方法调整时间及闹铃。
1.5本设计任务
本设计的电子万年历属于小型智能家用电子产品。
利用单片机进行控制,实时时钟芯片进行记时,外加掉电存储电路和显示电路,可实现时间的调整和显示。
电子万年历既可广泛应用于家庭,也可应用于银行、邮电、宾馆、医院、学校、企业、商店等相关行业的大厅,以及单位会议室、门卫等场所。
因而,此设计具有相当重要的现实意义和实用价值。
本设计以AT89S52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片和24C02FLASH存储器,显示阳历年、月、日、星期、时、分、秒和阴历年、月、日,在显示阴历时间时,能标明是否闰月,同时完成对它们的自动调整和掉电保护,全部信息用液晶显示。
第2章总体方案论证与设计
由于电子万年历的种类比较多,因此方案选择在设计中是至关重要的。
正确地选择方案可以减小开发难度,缩短开发周期,降低成本,更快地将产品推向市场。
2.1单片机芯片的选择方案和论证
方案一:
采用89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
方案二:
采用AT89S52,片内ROM全都采用FlashROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,所以选择采用AT89S52作为主控制系统。
2.2显示模块选择方案和论证
方案一:
采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,虽然占用的单片机口线少,但连线还需要花费一点时间,所以也不用此种作为显示。
方案二:
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。
方案三:
采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,并且我做的最小系统上带一个TS1620-1,和AT89S52已经接好,省了很多麻烦,所以在设计中采用LC此D液晶显示屏。
2.3时钟芯片的选择方案和论证
方案一:
直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此方案。
方案二:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。
综上各方案所述,对此次作品的方案选定:
采用AT89S52作为主控制系统;DS1302提供时钟;LCD液晶显示屏作为显示。
2.4总体硬件组成框图
AT89S52
主控制模块
图2-1总体硬件组成框图
第3章系统硬件设计
本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。
可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;显示部份由LCD液晶显示屏显示。
3.1单片机主控制模块的设计
AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。
单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。
第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。
如图3-1所示:
图3-1主控制系统
3.2时钟电路模块的设计
图3-2示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768KHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc大于等于2.5V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。
SCLK始终是输入端。
图3-2DS1302的引脚图
3.3电路原理及说明
3.3.1时钟芯片DS1302的工作原理
DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲。
DS1302的控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。
对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0,位1至位5指操作单元的地址。
位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。
控制字节总是从最低位开始输入/输出的。
日历、时间寄存器内容:
“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。
“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。
当“WP”为1时,写保护位防止对任一寄存器的写操作。
3.3.2DS1302的控制字节
DS1302控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
3.3.3数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
3.3.4DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
3.4显示模块的设计
采用LCD显示,LCD显示具有丰富多样性,灵活性,电路简单、易于控制而且功耗小,对于信息量多的系统,是比较适合的,LCD液晶显示模块采用LCD1602型号,具有很低的功耗,正常工作室电流仅2.0mA/5.0V。
通过编程实现总动关闭屏幕能够更有效地降低功耗。
LCD1602分两行显示,每行可现实多达16个字符,其内部的字符发生器已经存储了160个不同的点阵字符图形,通过内部指令可实现对其显示多样的控制。
图3-3LCD液晶显示屏显示模块
第4章系统的软件设计
4.1主程序设计
AT89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体一起构成自激振荡器。
外接石英晶体及电容C1和C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容C1和C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,如果使用石英晶体,在这里电容使用22pF。
图4.1主程序流程图
4.2液晶驱动程序
LCD使用之前须对它进行初始初始化可通过复位完成,也可在复位后完成,初始化过程如下:
(1)清屏。
将显示缓冲区DDRAM的内容全部写入空格(ASCII20H)。
(2)功能设置。
(3)开/关显示设置。
控制显示的开关,当D=1时显示,D=0时不显示。
控制光标开关,当C=1时光标显示,C=0时光标不显示。
控制字符是否闪烁,当B=0时字符闪烁,B=0时字符不闪烁。
(4)输入方式设置。
初始化过程:
(1)延时15ms;
(2)写指令38H(不检测忙信号);
(3)延时5ms;
(4)写指令38H(不检测忙信号);
(5)延时5ms;
(6)写指令38H(不检测忙信号);
(7)以后每次写指令、读/写数据操作之前均需检测忙信号;
(8)写指令38H:
显示模式设置;
(9)写指令08H:
显示关闭;
(10)写指令01H:
显示清屏;
(11)写指令06H:
显示光标移动设置;
(12)写指令0CH:
显示开及光标设置。
第5章系统调试与测试结果分析
5.1硬件测试
电子万年历的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。
在本成电子万年历的设计调试中遇到了很多的问题。
回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:
(1)LCD液晶显示屏显示部分已经连在最小系统上,节省了不少时间和精力。
(2)对万年历修改时间或日期时,有时LCD液晶显示屏被屏蔽掉,造成不亮现象。
解决:
根据仪器的测试,发现电路的驱动能力不足,最后在DS1302时钟芯片的/CS、SCLK、RET端接入5.1K的上拉电阻后,电路的驱动能力才能满足,即可解决不亮现象。
5.2软件测试
电子成年历是多功能的数字型,可以看当前日期,时间。
电子成年历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。
最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。
在软件的调试过程中遇到的主要问题是:
烧入程序后,LCD液晶显示屏显示亮度不好。
解决:
一遍旋转10K欧的滑动变阻器,一遍观看LCD显示屏,知道看到合适的亮度为止。
5.3测试结果
在测试中遇到LCD液晶显示屏为不显示时,首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏,滑动变阻器器没有调好:
查看烧写的程序是否正确无误,对程序进行认真修改。
测试结论:
经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力。
同时在软件的编程方面得到更到的提高,对编程能力得到加强,同时对所学的知识得到很大的提高与巩固。
结论
本设计利用单片机AT89S52控制串行实时时钟芯片DS1302构成数字时钟电路,实现计时功能。
该电路使用简单的三线接口,为单片机节省大量的接口资源,时钟芯片DS1302带有后备电池,具备对后背电源进行涓细电流充电的能力,保证电路断电后仍保存时间和数据信息,这些优点解决了目前常用实时时钟占用单片机资源多以及计时不可靠等缺点。
该时钟功能强大,性能优越,能为很多领域,特别是对时钟工作的精确性和可靠性有较高要求的场合,提供较好的实时时钟。
但是,由于DS1302易受环境影响,会使该电路出现时钟精度不高、时钟混乱等问题,还有待继续研究和改进。
在对芯片的管脚功能和用法有充分的了解后,根据设计要求设计硬件电路,包括单片机控制电路、时钟电路、显示电路。
然后通过软件编程,实现了对年、月、日、时、分、秒、星期、闰年和阴历的自动调整,用按键进行控制,用液晶模块进行显示。
电子万年历可以正常显示时间并进行时间调整,基本完成了预期要实现的目标。
参考文献
[1]沈庆阳.8051单片机实践与应用.北京:
清华大学出版社.2003.12,26-38.
[2]陈景初.单片机应用系统设计与实践[M].北京:
航空航天大学出版社.2006.
[3]李宏,张家田.液晶显示器件应用技术.北京:
机械工业出版社.2004:
156-183.
[4]陈正振.电子电路设计与制作.广西:
交通职业技术学院信息工程系.2007.
[5]黄明强.DS1302在单片机系统中的应用.保定:
师范专科学校学报.2004:
17
(2).
[6]赵海兰,朱剑,赵祥伟.DS1302实时显示时间的原理与应用.电子技术.2002,
(1).
[7]孙安青.AT89S51单片机实验及实践教程.
[8]刘勇,数字电路.电子工业出版社.2004.
[9]徐爱钧,彭秀华.单片机高级语言编程与uVision2应用实践.北京:
电子工业出版社.2004.
[10]杨子文.单片机原理及应用.西安:
电子科技大学出版社.2006.
附录1程序
#include
#include
//#include"LCD1602.h"
//#include"DS1302.h"
#defineuintunsignedint
#defineucharunsignedchar
sbitDS1302_CLK=P1^7;//实时时钟时钟线引脚
sbitDS1302_IO=P1^6;//实时时钟数据线引脚
sbitDS1302_RST=P1^5;//实时时钟复位线引脚
sbitACC0=ACC^0;
sbitACC7=ACC^7;
charhide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year;//秒,分,时到日,月,年位闪的计数
sbitSet=P2^0;//模式切换键
sbitUp=P2^1;//加法按钮
sbitDown=P2^2;//减法按钮
sbitout=P2^3;//立刻跳出调整模式按钮
chardone,count,temp,flag,up_flag,down_flag;
ucharTempBuffer[5],week_value[2];
voidshow_time();//液晶显示程序
/***********1602液晶显示部分子程序****************/
//PortDefinitions**********************************************************
sbitLcdRs=P2^5;
sbitLcdRw=P2^6;
sbitLcdEn=P2^7;
sfrDBPort=0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
//内部等待函数
**************************************************************************
unsignedcharLCD_Wait(void)
{LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();LcdEn=0;returnDBPort;}
//向LCD写入命令或数据
************************************************************
#defineLCD_COMMAND0//Command
#defineLCD_DATA1//Data
#defineLCD_CLEAR_SCREEN0x01//清屏
#defineLCD_HOMING0x02//光标返回原点
voidLCD_Write(bitstyle,unsignedcharinput)
{LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_();//注意顺序
LcdEn=1;_nop_();//注意顺序
LcdEn=0;_nop_();LCD_Wait();
}
//设置显示模式************************************************************
#defineLCD_SHOW0x04//显示开
#defineLCD_HIDE0x00//显示关
#defineLCD_CURSOR0x02//显示光标
#defineLCD_NO_CURSOR0x00//无光标
#defineL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 日历 时钟 DS1302 设计