作息时间控制器(基于51单片机和DS1302的时钟)_第1页
作息时间控制器(基于51单片机和DS1302的时钟)_第2页
作息时间控制器(基于51单片机和DS1302的时钟)_第3页
作息时间控制器(基于51单片机和DS1302的时钟)_第4页
作息时间控制器(基于51单片机和DS1302的时钟)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第 22 页 共28 页 课程设计(论文) 题 目: 作息时间控制器 院 (系): 电子工程与自动化学院 专 业: 测控技术与仪器 学生姓名: 吉哲 学 号: 0900820413 指导教师: 徐翠锋 职 称: 讲师 2012年12月27日摘 要 本次作息时间控制器设计是采用AT89S52单片机作为系统的核心元件,在其最小系统基础上与DS1302时钟芯片配合,四个独立按键控制,六位七段数码管显示,无源蜂鸣器发声。单片机最小系统作为核心处理和控制单元;时钟芯片用来实现实时时间的精准输出和闹钟信息的存储,并可用纽扣电池供电以保持时间的连续运行;独立按键用于进行时间及闹钟的设定;数码管用于显示时间

2、及闹钟信息;蜂鸣器用于在达到设定的时间后进行及时提醒。关键词:时间控制;AT89S52;单片机;DS1302;时钟芯片;闹铃;定时报警 AbstractThis work and rest time controller design is to use AT89S52 SCM as the core of the system components, in its minimum system with DS1302 clock chip based on coordination, four independent key control, six seven period of digi

3、tal tube display, passive buzzer sound. Single chip microcomputer minimum system as the core processing and control unit; Clock chip to realize real-time time accurate output and alarm information storage, and use button batteries to keep continuous operation time, Independent key for time and alarm

4、 clock Settings; Digital tube is used to display the time and alarm information; Buzzer to reach a set time for timely remind.Key words:Time control; AT89S52 devices; SCM; DS1302; Clock chip; Alarm; Timing alarm目 录引言11 课程设计任务及要求12 硬件设计12.1 总体设计思路及系统框图12.2 中央处理控制器22.3 晶振电路32.4 时钟信号产生电路32.5 显示电路42.6 控

5、制电路62.7 闹铃电路82.8 电源及下载电路83 程序设计93.1 主程序流程图93.2 按键扫描程序流程图93.3 响铃扫描程序104 制板、组装与调试114.1 PCB制作114.2 制作PCB板流程114.3 调试115 方案总结11心得体会12谢辞13参考文献14附录15引言 时间是人类生活必不可少的重要元素,从古至今它都扮演着一个非常重要的角色。时间对人们来说总是那么宝贵,学习、工作的忙碌性和繁杂容易使人忘记当前的时间。随时提醒那些容易忘记时间的人,电子钟无疑最为直观。所以一个能够帮助人们提醒时间的事物对于人们来说有着非常重要的意义。数字钟通过数字电路实现时、分、秒。数字显示的计

6、时装置,广泛用于人家庭、车站、码头办公室等公共场所成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。多功能数字钟的应用非常普遍。由单片机作为数字钟的核心控制器,通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来,通过键盘可以进行校时、定时闹钟等功能,输出设备显示器可以用液晶显示技术和数码管来显示技术。作息时间控制器利用单片机控制技术将时钟电子化、数字化,拥有时钟精确、体积小等特点,拥有人性化的闹铃提醒功能,可被广泛应用于我们日常的学习、工作和生活当中。1 课程设计任务及要求1 掌握单片机最小系统的设

7、计方法;2 熟悉单片机定时器的原理。3 了解数码显示器与MCU的接口方法;4 掌握独立按键的使用方法;5 要求显示时钟的时、分、秒,在预定的时间内响铃,可同时预置5次以上时间。6 扩展:按键后才显示时间(低功耗),液晶显示记事。2 硬件设计2.1 总体设计思路及系统框图通过时钟信号产生电路产生时钟信号,然后将信号送入中央处理单元,然后由控制电路控制中央处理单元控制时钟闹钟的设定及修改、显示电路的显示和蜂鸣器的闹铃。中央处理单元显示电路晶振电路时钟电路闹铃电路控制电路系统结构框图 2.2 中央处理控制器AT89S52是一种低功耗、高性能的CMOS工艺的8位单片机。它带有8KB的可在线编程的 Fl

8、ash 存储器,该单片机采用了ATMEL公司的高密度、非易失性存储器技术,与工业上标准型80C51单片机的指令系统及引脚完全兼容;片内的Flash 存储器可在线重新编程,或使用通用的非易失性存储器编程器;通用的8位CPU与在线可编程Flash集成在一块芯片上,从而使AT89S52功能更加完善,应用更加灵活;具有较高的性能价格比,使其在嵌入式控制系统中有着广泛的应用前景。单片机结构图2.3 晶振电路时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊地一拍一拍地工作。常用的时钟电路有两种方式,一种为内部时钟方式,另一种为外部时钟方式。外部时钟方式是使用外部振荡脉冲信号,常用于

9、多片单片机同时工作,以便于同步。对外部脉冲信号只要求高电平的持续时间大于20uS,一般为低于12MHz的方波。在单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2,这两个引脚跨接石英晶体振荡器可微调电容,就构成一个稳定的自激振荡器,下图是单片机内部时钟方式的振荡器电路。本时钟电路是采用内部时钟方式,在XT1和X2引脚之间外接振荡器,构成一个自激振荡器,自激振荡器与单片机内部的时钟发生器构成单片机的时钟电路。晶振电路电路中电容的大小会影响振荡器频率的高低、振荡器的稳定性和起振的快速性,C1和C2的典型取值通常选择为30pF左右

10、。晶振的振荡频率的范围通常是在1.2MHz12MHz之间,常选择振荡频率6MHz或12MHz的石英晶体。2.4 时钟信号产生电路(1)方案一:单片机内部定时器利用单片机内部定时器设计时间计时处理,采用单片机内部的T0定时器溢出中断来实现,工作在方式2下,8位定时器,具有自动重装载功能,具有精确定时功能。优点:电路简单,充分利用现有资源,节约资源和成本缺点:掉电后数据丢失,需重新设定时间和闹钟(2)方案二:DS1302时钟芯片DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的

11、时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。 本次设计中,使用DS1302提供的RAM区保存5个闹铃数据,达到掉电不丢失功能。优点:掉电后不掉数据,可以保存时间和闹钟,比较符合实际使用缺点:成本稍高,使用程序相对复杂时钟芯片应用电路考虑到实际使用需求,为方便用户使用

12、,故采用方案二。2.5显示电路(1)方案一:OCM12864带中文字库的128*64是一种具有4位/8位并行、2线或 3线串行多种并行方式。内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块,其分辨率为128*64,内置8192个16*16点汉字,和128个16*8点ASC字符集, 利用该模块可构成全中文人机交互图形界面。优点:屏幕较大,使用方便,可显示信息量大缺点:体积大,价格昂贵,在较远处无法清晰看到屏幕内容OCM12864(2)方案二:LCM16021602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组

13、成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。优点:体积较小,使用方便,显示信息量较大缺点:成本稍高,在较远处无法清晰看到屏幕内容LCM1602(3)方案三:数码管常用的数码管有7段和“米”段之分,又有共阳极和共阴极两种。该系统采用7段共阳极数码管。共阳极数码管内的发光二极管的阳极连接在一起,通常此公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。数码管有静态显示和动态显示两种显示方式。静态显示方式程序简单,显示度高,但占用I/O口资源较多,硬件成本高,且功

14、耗大。本系统需要显示时分秒,所以采用动态显示,当要显示信息时,由P0口输出字符的段码,P2口对相应的位输出低电平,三极管导通,点亮相应的数码管,就可以把要显示的字符在数码管上显示。在这种显示电路中,一个字位一个字位地轮流点亮各LED,每一个字位停留1ms左右,由于人的视觉暂留,不会察觉有闪烁现象。优点:体积较小,价格便宜,使用方便,亮度高,远处也可看清缺点:可现实信息量小由于实际使用中需要在较远处也可清洗看到显示的时间,结合成本和体积,故援用方案三。2.6控制电路常用到的一般有编码键盘和非编码键盘。编码键盘是靠硬件电路对每个键位进行编码,当有键按下时,输出固定的数码,并用来判断键位。编码键盘一

15、般需要较多的硬件电路,成本较高。单片机一般采用非编码键盘。非编码键盘是指不是靠固定的编码来实现键位的识别,而是用软件确定一种算法对键位进行扫描。非编码键盘能实现实现软件的资源的充分利用。常见的非编码键盘有独立按键和矩阵键盘两种。矩阵式键盘与独立按键相比同样多的按键使用的I/O口较少,节省资源,但编程、电路设计较复杂。独立式按键则只需读对应的I/O口,来确定键位,而且考虑到作息时间控制器中需要的I/O口较少,所以采用独立式按键。键盘模块连接的I/O口为P3口,P3口的引脚都有第二功能。电子闹钟的时间校准时需要把定时器的标志位和寄存器等与系统时间相关的参数恢复到计时初始状态,虽说在一般的函数内部也

16、可以做到,但如果用单片机自带的外部中断方式会更方便,便于人工随时设置。键盘输入采用P3口使得软件设计更灵活。(1)方案一:两个按键两个按键调整是在日常生活中最长见的一种。其中一个键用来切换需要调整的内容,另一个键用来改变当时选定的数值,一般为增量改变。优点:节约资源,节省整体体积缺点:如遇需切换量大,修改值比当前值稍小时,使用极不方便(2)方案二:三个按键在方案一的基础上,增加减量修改按钮。优点:节约资源,节省整体体积缺点:如遇需切换量大,使用不方便(3)方案三:四个按键在方案二的基础上增加一个辅助切换按钮,即:按键A为切换时间与闹钟循环显示按键;按键B为修改按钮,即在当前显示值需要修改时,按

17、下此按键即可修改,同时此按键还有切换修改数的功能,即切换所需修改的“时”“分”“秒”;剩余两个位增量修改和减量修改键。优点:使用方便,符合实际使用需求缺点:按键复用较多,编程较复杂控制按键电路考虑到板子体积,故没有采用按键较多的矩阵式键盘。再结合考虑实际使用需求,故选用方案三。2.7闹铃电路蜂鸣器报警的发音器件常采用压电式蜂鸣器。压电式蜂鸣器约需10mA的驱动电流,可以用一个晶体三极管驱动,如图1.2.5所示。P1.0接晶体管的基极输入端,当P1.0输出低电平“0”时,三极管导通并对I/O口的灌电流放大驱动蜂鸣器;当P1.0输出高电平“1”时,三极管截止,蜂鸣器停止发声。 闹铃电路2.8电源及

18、下载电路考虑到在实际使用中,需要有电源指示灯来指示当前电源供电时候正常,故增加电源指示灯(红色LED)一个;考虑到实际使用中的需要和节能功能,设置电源开关(自锁式开关)一个,以方便使用;考虑到实际使用中,程序已经写入单片机内,无需频繁修改,故将普通九针式牛角座下载口改换为排针式,以节约空间,减小实物体积。电源电路3 程序设计3.1 主程序流程图3.2 按键扫描程序流程图发送键值读回键值延时再读回键值(消抖)松手检测判断键值并给key赋值Key=4Key=3Key=2key=1Gai=0?给选中修改的值 减1循环切换修改的内容:时分秒给选中修改的值加1 Y N将修改后时间或闹钟存入时钟芯片切换时

19、间与五个闹钟轮流显示3.3 响铃扫描程序Ring_flag=1? Y N不响铃响铃4 制板、组装与调试4.1 PCB制作硬件电路的调试首先是系统原理图的检查。根据所学的理论知识检查原理图是否有不合理之处,各部分的参数是否合理。其次检查绘制的PCB的封装和实物是否相符。再次检查PCB各网络间的连接是否和原理图相符,以及做出来的电路板是否有在制作过程中断线的情况。电路板的初步检查就完成了。4.2 制作pcb板的流程设计好原理图sch改变封装绘制pcb板布局布线打印pcb图纸印制铜板腐蚀铜板钻孔焊接元器件测板修改电路测试。4.3 调试对硬件电路的检查需借助万用表,用来检测每一条线路之间是否通路,以及

20、有没有虚焊,还要检测一些靠的比较近的线之间是否出现短路。将检测出来的问题解决后,就可以进行第二步的调试然后进行上电调试。对最小系统板,看下载口是否能正常工作。如果不能正常工作,检查与下载相关的下载接口和复位电路。如果能正常工作,编写与模块相应的程序检查模块是否能正常工作。5 方案总结AT89S52除8K在系统可编程Flash外,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适用于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52具有以下标准功能:8k

21、字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时/计数器,全双工串行口,片内晶振及时钟电路。另外,AT89S52支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保护,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 作息时间控制器是以AT89S52为核心,辅以必要的电路,设计的带有闹铃功能的数字电子时钟。通过12864液晶显示时间,可调整时间。系统的重点是基于AT89S52单片机的编程,通过设计系统从而达到学习、设计、开发软、硬件的能力。 电子时钟采用

22、液晶实现对“时”、“分”、“秒”数字显示。相比老式的机械钟表单就显示而言就遥遥领先。电子时钟小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化使得数字时钟功能大大的得到了扩展。诸如定时自动报警、按时自动响铃、时间程序自动控制、定时广播、自动启闭路灯、定时开关烘箱等,所有的这些都是以钟表数字化为基础的。因此,研究电子时钟及扩大其应用,有着非常现实的意义。心得体会两个星期的课程设计结束了,我们从中获益匪浅。从选题、确定方案、设计原理图、焊接、调试的过程中,我们体会到了课本联系实际并学以致用,设计思想、动手能力都有所提高,这对我们来说是一次将课本所学知识应用到具体实践中的一次考验。在课程设计之

23、初,首先对题目要求做一个分析,构思好每一个功能要通过什么电路来实现。要做好一个课程设计,还必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。在焊接每个元件的时候一定要注意各个输入、输出引脚,因

24、为每个引脚都是不一样的,只要让各个引脚互相对应,才能得出正确的结果,否则,出现任何一点小的误差就会对整个系统造成毁灭性的打击。通过课程设计,对一些已学过的知识,是一个很好的回顾,巩固了自己所学的知识,又从实践中验证了理论知识,实践与理论相结合。谢辞 转眼课程设计已接近尾声,老师们治学严谨,学识渊博,思想深邃,视野雄阔,为我营造了一种良好的精神氛围。在课程设计开始之初,徐老师就告诉我们要认真对待自己的课程设计,并在过程中经常抽出时间来关心我们的设计进度情况,帮助我们分析问题,督促我们抓紧学习。授人以鱼不如授人以渔,置身其间,耳濡目染,潜移默化,使我不仅接受了全新的思想观念,树立了宏伟的学术目标,

25、领会了基本的思考方式。特别是徐老师在课程设计期间投注了大量的时间及精力关注我们的设计进度,指导我们的论文写作。在此我衷心的感谢各位老师,并向各位老师表达我崇高的敬意。最后,我也向各位在课程设计期间帮助我,给予我支持的同学表达我的谢意。参考文献1 白驹珩,雷晓平编著.单片计算机及其应用.北京: 高等教育出版社,20102郭天祥. 51单片机C语言教程. 电子工业出版社. 2009.3康华光电子技术基础(模拟部分)M. 高等教育出版社. 1998 4 谭浩强. C程序设计.清华大学出版社.20055 王选民. 智能仪器原理及设计. 清华大学出版社.2008附 录附录一 整体原理图附录二 整体PCB

26、图附录三 整体实物图附录四 整体程序/完整程序源代码#include reg52.h#include ds1302.h#define uchar unsigned char#define uint unsigned int#define Duan P0#define Wei P2#define Key_value (P1&0X1C)1)|k4)uchar code tableA=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;uchar code tableP=0x40,0x79,

27、0x24,0x30,0x19,0x12,0x02,0x78, 0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e;SYSTEMTIME CTime6;sbit beep=P10;sbit light=P11;sbit k4=P30;uint state,gai,key1,key2,key3,key4,temp,bee,count,ring_flag,m,i,j;void display(uchar,uchar,uchar,uchar,uchar,uchar);void keyscan();void beepscan();void beepring();void de

28、lay(uchar);void delay2(uchar);void main()EA=1;ET1=1;TMOD=0x10;TH1=(65536-5000)/256;TL1=(65536-5000)%256;TR1=1;Initial_DS1302();Read_Alarmdata(CTime+1); while(1)if(gai=0) DS1302_GetTime(&CTime); if(state=0)display(CTimestate.Hour/10,CTimestate.Hour%10,CTimestate.Minute/10,CTimestate.Minute%10,CTimest

29、ate.Second/10,CTimestate.Second%10);elsedisplay(CTimestate.Hour/10,CTimestate.Hour%10,CTimestate.Minute/10,CTimestate.Minute%10,CTimestate.Second,state);keyscan();beepscan();beepring(); void display(uchar A,uchar B,uchar C,uchar D,uchar E,uchar F) if(gai=0) Wei=0;delay(1);Duan=tableAA;Wei=0x80;delay

30、(5);Wei=0;delay(1);if(F%2=0)Duan=tablePB;elseDuan=tableAB;Wei=0x40;delay(5);Wei=0;delay(1);Duan=tableAC;Wei=0x20;delay(5);Wei=0;delay(1);Duan=tableAD;Wei=0x10;delay(5);Wei=0;delay(1); Duan=tableAE;Wei=0x08;delay(5);Wei=0;delay(1);Duan=tableAF;Wei=0x04;delay(1);if(gai=1) Wei=0;delay(1);Duan=tableAA;W

31、ei=0x80;delay(5);Wei=0;delay(1);if(F%2=0)Duan=tablePB;elseDuan=tableAB;Wei=0x40;delay(5);if(gai=2)Wei=0;delay(1);Duan=tableAC;Wei=0x20;delay(5);Wei=0;delay(1);Duan=tableAD;Wei=0x10;delay(5); if(gai=3) Wei=0;delay(1); Duan=tableAE;Wei=0x08;delay(5);if(state=0)Wei=0;delay(1);Duan=tableAF;Wei=0x04;dela

32、y(5); void keyscan()temp=Key_value; if(temp!=0x0f) delay(10);temp=Key_value; if(temp!=0x0f) switch(temp) case 0x0d : key1=1; break; case 0x0b : key2=1; break; case 0x07 : key3=1; break; case 0x0e : key4=1; break; while(Key_value!=0x0f)if(state=0)display(CTimestate.Hour/10,CTimestate.Hour%10,CTimesta

33、te.Minute/10,CTimestate.Minute%10,CTimestate.Second/10,CTimestate.Second%10);elsedisplay(CTimestate.Hour/10,CTimestate.Hour%10,CTimestate.Minute/10,CTimestate.Minute%10,CTimestate.Second,state);if(key1) if(gai) gai=0; if(state=0) modif_time(CTimestate.Second,CTimestate.Minute,CTimestate.Hour); else

34、Wirte_Alarmdata(CTime+state,state-1); state=0; else if(5=state)state=0; elsestate+;key1=0; else if(key2) if(gai=3) gai=1; else gai+; key2=0;else if(key3) /if(state=0)&(gai!=0); Stop_DS1302(); if(gai=1) if(CTimestate.Hour=23) CTimestate.Hour=0;else CTimestate.Hour+;else if(gai=2)if(CTimestate.Minute=

35、59) CTimestate.Minute=0;else CTimestate.Minute+;else if(state=0) if(CTimestate.Second=59) CTimestate.Second=0; else CTimestate.Second+; else if(CTimestate.Second=0)CTimestate.Second=1;elseCTimestate.Second=0; key3=0; else if(key4=1)if(state=0)&(gai!=0);/ Stop_DS1302(); if(gai=1) if(CTimestate.Hour=0

36、) CTimestate.Hour=23;else CTimestate.Hour-;else if(gai=2)if(CTimestate.Minute=0) CTimestate.Minute=59;else CTimestate.Minute-;else if(state=0) if(CTimestate.Second=0) CTimestate.Second=59;else CTimestate.Second-; else if(CTimestate.Second=0) CTimestate.Second=1; else CTimestate.Second=0; key4=0; voi

37、d beepscan()ring_flag=0;if(i=5) i=1;elsei+;if(CTimei.Second=1)&(CTimei.Minute=CTime0.Minute)&(CTimei.Hour=CTime0.Hour)ring_flag=1;else if(CTimei.Second=1)&(CTimei.Minute+1=CTime0.Minute)&(CTimei.Hour=CTime0.Hour)ring_flag=0;beep=1;light=1;elsering_flag=0;void beepring()if(count=2)count=0;if(ring_fla

38、g)beep=beep;light=light;elsering_flag=0;void time1()interrupt 3TH1=(65536-5000)/256;TL1=(65536-5000)%256;count+; void delay(unsigned char x) unsigned char i,j;for(i=x;i0;i-)for(j=20;j0;j-);/文件内容/* THE REAL TIMER DS1302 DRIVER LIB COPYRIGHT (c) 2005 BY JJJ. - ALL RIGHTS RESERVED - File Name: DS1302.h

39、 Author: Jiang Jian Jun Created: 2003/7/21 Modified: NO Revision: 1.0 */#ifndef _DS1302_H_#define _DS1302_H_sbit DS1302_CLK = P35; /实时时钟时钟线引脚 sbit DS1302_RST = P37; /实时时钟数据线引脚 sbit DS1302_IO = P36; /实时时钟复位线引脚sbit ACC7 = ACC7 ;typedef struct _SYSTEMTIME_ unsigned char Second; unsigned char Minute; un

40、signed char Hour; SYSTEMTIME;/定义的时间类型#define AM(X) X#define PM(X) (X+12) / 转成24小时制#define DS1302_SECOND 0x80#define DS1302_MINUTE 0x82#define DS1302_HOUR 0x84 #define DS1302_WEEK 0x8A#define DS1302_DAY 0x86#define DS1302_MONTH 0x88#define DS1302_YEAR 0x8C#define DS1302_RAM(X) (0xC0+(X)*2) /用于计算 DS13

41、02_RAM 地址的宏void DS1302InputByte(unsigned char d) /实时时钟写入一字节(内部函数) unsigned char i; for(i=0; i=1 ; DS1302_CLK = 0; unsigned char DS1302OutputByte(void) /实时时钟读取一字节(内部函数) unsigned char i; for(i=8; i0; i-) ACC = ACC 1; /相当于汇编中的 RRC ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; return(ACC); void Writ

42、e1302(unsigned char ucAddr, unsigned char ucDa) /ucAddr: DS1302地址, ucData: 要写的数据 DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址,命令 DS1302InputByte(ucDa); / 写1Byte数据 DS1302_CLK = 1; DS1302_RST = 0;unsigned char Read1302(unsigned char ucAddr) /读取DS1302某地址的数据 unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01); / 地址,命令 ucData = DS1302OutputByte(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论