基于DS1302的实时时钟设计报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

课程设计设计题目:基于DS1302的实时时钟设计学生姓名:黄景军指导教师:高峰二级学院:龙蟠学院专业:电气工程及其自动化班级:M11电气工程及其自动化学号:11211090231摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用。本设计采用实时时钟芯片DS1302,基于AT89C51单片机的设计制作了具有红外遥控、LED显示、可设定时的电子时钟,达到制作的目的,并用protuse和medwin进行模拟实验。本报告中主要介绍了系统的硬件设计和软件设计,并用八位共阳极LED数码管,采用查询法查键实现。关键词:单片机DS1302AT89C51共阳极LED数码显示器2目录设计任务及主要技术指标和要求………………………………………31.1设计任务……………………………………………………………31.2主要技术指标和要求…………………………………………………3二、引言…………………………………………………………………3三、核心芯片简介………………………………………………………………43.1DS1302简介………………………………………………………53.1.1DS1302引脚功能与内部结构……………………………………53.1.2DS1302的寄存器…………………………………………………53.2AT89C52简介…………………………………………………………6四、方案设计和论证………………………………………………………6五、软硬件设计…………………………………………………………75.1硬件电路设计……………………………………………………75.2软件实现………………………………………………………………85.2.1主程序………………………………………………………………85.2.2时钟读出程序设计………………………………………125.2.3时钟调整程序设计……………………………………………13六、系统调试……………………………………………………………………13七、总结…………………………………………………………………………14八、参考文献……………………………………………………………………143一、设计任务及主要技术指标和要求1.1设计任务:用DS1302时钟芯片设计实时时钟。1.2主要技术指标和要求:(1)通过程序直接对实时时钟时间进行设置,启动时钟运行。用8位数码管显示。(2)通过按钮对实时时钟时间进行设置,使时钟能正常运行。(3)其他发挥功能。二、引言从古代的滴漏更鼓到近代的机械钟,从电子表到目前的数字时钟,为了准确的测量和记录时间,人们一直在努力改进着计时工具。钟表的数字化,大力推动了计时的精确性和可靠性。在单片机构成的装置中,实时时钟是必不可少的部件。目前常用的实时时钟,很多采用单片机的中断服务来实现,这种方式一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且某些测控系统可能不允许;有的则使用并行接口的时钟芯片,如MC146818、DS12887等,它们虽然能满足单片机系统对实时时钟的要求,但是这些芯片与单片机接口复杂,占用地址、数据总线多,芯片体积大,占用空间多,给其它设计带来诸多不便。本设计选取串行接口时钟芯片DS1302与单片机同步通信构成数字时钟电路。其简单的三线接口能为单片机节省大量资源,DS1302的后背电源及对后背电源进行涓细电流充电的能力保证电路断电后仍能保存时间和数据信息等。这些优点解决了目前常用的实时时钟所无法解决的问题。该时钟电路强大的功能和优越的性能,在很多领域的应用中,尤其是某些自动化控制、长时间无人看守的测控系统等对时钟精确性和可靠性有较高要求的场合,具有很高的使用价值。4三、核心芯片简介3.1DS1302简介DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.5~5.5V。时钟可工作在24小时格式或12小时(AM/PM)格式。DS1302与单片机的接口使用同步串行通信,仅用3条线与之相连接。可采用一次传送一个字节或突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。3.1.1DS1302引脚功能与内部结构DS1302的引脚功能如表1所示,外形及内部结构如图1所示:表1DS1302引脚功能表3.1.2DS1302的寄存器引脚号引脚名称功能1VCC2主电源2、3X1、X2振荡源,外接32768Hz晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行时钟输入端8VCC1后备电源5图1DS1302管脚图及内部结构图DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其时间寄存器及其控制字见表2。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器的内容。DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H--FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。寄存器名命令字取值范围各位内容写操作读操作76543210秒寄存器80H81H00--59CH10SECSEC分寄存器82H83H00--59010MINMIN时寄存器84H85H01-12或00-2312/24010HRHR表2DS1302的时钟寄存器及其控制字63.2AT89C52简介图2AT89S51引脚图功能特性概括:AT89S51提供以下标准功能:40个引脚、4KBytesFlash片内程序存储器、128Bytes的随机存取数据存储器(RAM)、32个外部双向输入/输出(I/O)口、5个中断优先级2层中断嵌套中断、2个数据指针、2个16位可编程定时/计数器、2个全双工串行通信口、看门狗(WDT)电路、片内振荡器及时钟电路。四、方案设计和论证使用串行接口时钟芯片DS1302设计时钟电路。该设计方案以单片机AT89C52为主控芯片,以串行时钟芯片DS1302为核心计时芯片,组成数字时钟电路。该电路不但能准确地计时、附加其它功能,而且,其三线接口可以节省接口资源,在断电后不丢失时间和数据信息。设计方案接口简单,计时可靠,综合性能良好。7图3时钟芯片DS1302设计时钟五、软硬件设计5.1硬件电路设计LED数码管采用动态扫描方式显示,P0口为段码输出口,P2口为扫描驱动口,扫描驱动信号经74HC224功率放大来低点亮电源。计时按键设计了2个,分别接在P3.5,P3.6口,用于设定与加一调整。DS1302时钟芯片的晶挣频率为32.78KHz。秒表/时钟计时器的硬件电路如图,采用32.768KHz晶振可有利于提高秒计时的精确性。DS1302时钟电路(AT89C52)主控模块键扫描电路八位LED数码管显示电路8图4DS1302实时时钟硬件仿真电路5.2软件实现5.2.1汇编的主程序#includereg51.h//#defineucharunsignedchar#defineunitunsignedint#defineulongunsignedlongsbitBUZZ=p3^7;sbitKEY1=p1^0;sbitKEY2=p1^1;ucharhour_reg,minute_reg,second_reg;voiddelay(uint);voiddisplay(uchar*);voidtime2str(uchar*);voidtime_set(void);9voidmain(void){uchardispram[9];TMOD=0x11;IE=0x82;TR0=1;while(1){time2str(dispram);display(dispram);if(KEY1==0)time_set();}}voidtime2str(uchar*ch){ch[0]=hour_reg/10;ch[1]=hour_reg%10;ch[2]=16;ch[3]=minute_reg/10;ch[4]=minute_reg%10;ch[5]=16;ch[6]=second_reg/10;ch[7]=second_reg%10;}voidtime_set(void){ucharch[8];uchari,c;TR0=0;second_reg=0;time2str(ch);do{display(ch);}while(KEY1==0);C=2;10while(c){time2str(ch);if(c==2){ch[0]|=0x80;ch[1]|=0x80;}else{ch[3]|=0x80;ch[4]|=0x80;}display(ch);if(KEY1==0);{c--;do{display(ch);}while(KEY1==0);}if(KEY2==0){if(c==2)hour_reg=(hour_reg+1)%24;elseminute_reg=(minute_re+1)%60;for(i=0;i50;i++)display(ch);}}TR0=1;}voiddelay(unsignedintdt){registerunsignedcharbt,ct;for(;dt;dt--)for(ct=2;ct;ct--)for(bt=250;--bt;);}voiddisplay(uchar*disp_ram){staticuchardisp_count;unsignedchari,j;unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,110x83,0xc6,0xa1,0x86,0x8e,0xbf,0xff};disp_count=(disp_count+1)&0x7f;for(i=0;i8;i++){j=disp_ram[i];if_j&0x80)p0=9disp_count32)?table[j&0x7f]:0xff;elsep0=table[j];p2=0x01i;delay(1);p0=0xff;p2=0;}}voidT0_time(void)interrupt1{staticucharT0_count=0;TL0=0xb0;TH0=0x3c;T0_count=20)(T0_count=0;second_reg++;if(second_reg=60){second_reg=0;minute_reg++;if(minute_reg=60){minute_reg=0;hour_reg=(hour_reg+1)%24;}}}}125.2.2时钟读出程序设计图5时钟读出程序流程开始初始化DS1302DS1302开始振荡从1302中读出时、份、秒结束时分秒数据处理后送显示缓冲单元135.2.3时钟调整程序设计图6时钟调整程序流程六、系统调试当一切准备就绪,开始调试。先进行硬件调试,检查各个借口是否完美的接好。然后进行软件与硬件结合调试,因为整个系统含有很多个子程序,所以调试时把各个子程序分别调试,成功后进行整体调试。在调试过程中发现了一些错误,加了修改。比如:在中断服务程序中必须将与主函数中共用的变量进行堆栈,如果不堆栈程序执行结果将无法想象。设定键有效,进入小时调整程序设定按键有效?进入分钟调整程序设

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功