基于单片机AT89C52的实时日历时钟系统的设计(1)_第1页
基于单片机AT89C52的实时日历时钟系统的设计(1)_第2页
基于单片机AT89C52的实时日历时钟系统的设计(1)_第3页
基于单片机AT89C52的实时日历时钟系统的设计(1)_第4页
基于单片机AT89C52的实时日历时钟系统的设计(1)_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、毕业设计(论文) 题 目:基于单片机AT89C52的实时日历时钟系统的设计学生姓名:学 号:所在学院:机械与电子工程学院专业班级:届 别:指导教师:皖西学院本科毕业设计(论文)创作诚信承诺书1.本人郑重承诺:所提交的毕业设计(论文),题目基于单片机AT89C52的实时日历时钟系统的设计是本人在指导教师指导下独立完成的,没有弄虚作假,没有抄袭、剽窃别人的内容; 2.毕业设计(论文)所使用的相关资料、数据、观点等均真实可靠,文中所有引用的他人观点、材料、数据、图表均已标注说明来源; 3. 毕业设计(论文)中无抄袭、剽窃或不正当引用他人学术观点、思想和学术成果,伪造、篡改数据的情况; 4.本人已被告

2、知并清楚:学校对毕业设计(论文)中的抄袭、剽窃、弄虚作假等违反学术规范的行为将严肃处理,并可能导致毕业设计(论文)成绩不合格,无法正常毕业、取消学士学位资格或注销并追回已发放的毕业证书、学士学位证书等严重后果; 5.若在省教育厅、学校组织的毕业设计(论文)检查、评比中,被发现有抄袭、剽窃、弄虚作假等违反学术规范的行为,本人愿意接受学校按有关规定给予的处理,并承担相应责任。 学生(签名): 日期: 年 月 日目 录1 绪论22 设计思路22.1 硬件的设计思路22.2 软件的设计思路33 硬件电路设计33.1 系统结构框图33.2单片机AT89C52的介绍33.3 时钟芯片DS1302接口设计与

3、性能分析43.5 按键模块设计73.6 复位电路模块的设计74 软件的设计84.1 主程序运行流程图及说明84.2 时钟芯片DS1302的软件设计及流程图94.3 按键控制及流程图114.4 1602LCD操作说明及流程图125 系统的仿真与结果分析145.1 用Proteus仿真及结果145.2 实物的制作155.3 误差分析16总结17参考文献:18致 谢19 皖西学院2016届本科毕业设计(论文)基于单片机AT89C52的实时日历时钟系统的设计学生: (指导老师: )(皖西学院机械与电子工程学院)摘 要:日历时钟是一个常见的用品,它渗透到我们生产、生活、学习中的每一个角落,一个性能精准、

4、功能齐全、外表美观的日历时钟对我们的工作、学习生活起着非常重要的作用。本文设计一种实时日历时钟系统,它以单片机AT89C52为主控制器,以DS1302日历时钟芯片,以1602LCD数码管为显示器件,再配以适当的外围电路,具有显示精准、调节方便、高可靠性、高性价比、低电压、低功耗等优点。关键词:AT89C52单片机;DS1302;1602LCD数码管显示;时钟 Design of real time calendar clock system based on single chip microcomputer AT89C52Student:WangXiang(Guidance teacher:

5、ZhouTongxu)(College of mechanical and electronic engineering of West Anhui University)Abstract:In the 51 single chip microcomputer application system, it is often needed to record real-time information and long-term preservation. For example, at the time of data acquisition, for some important infor

6、mation requires not only record the content, also need the exact time of the records the event; single chip microcomputer for the high reliability, high price, low voltage, low power consumption, and a series of advantages, in recent years get rapid development and promotion of a wide range, is wide

7、ly used in industrial control systems, communications equipment, daily consumption class products and toys . This design uses the AT89C52 single chip microcomputer as well as the DS1302 calendar clock chip to realize the design of the calendar clock.The design results show that the design of real ti

8、me clock based on DS1302 through the1602LCD digital tube display system can meet the design requirement.Key Words: 52 Microcontroller;DS1302;1602LCD digital tube display;clock11 绪论时间与人类的生活紧密相连,是一个重要的参数。这个参数无论什么时候都是非常重要的,少了时间这个参数,社会的进步也会随之变得缓慢,足以可见对时间的研究是非常有必要的。本次设计的功能是在51系列单片机系统中设置、获取、记录实时的日历时钟信息并通过

9、数码管显示,要求能够进行长时间的记录,并且在断电的情况下,还能继续保对时间的回去和记录。实时显示可以通过软件编程实现,但这种方法需要编制的程序复杂,代码多且单片机软件开销大,时间信息也不宜长期保存。而采用专用实时时钟芯片可以避免这些问题,并且可以非易失地长期保存时间信息,因此,在设计中选择使用专用芯片来实现日历时钟显示系统。根据功能模块的划分,本系统包括3个部分:1) 51单片机模式块:其作用是和外围的时钟芯片通信,并控制数据传输过程,采集时间信息并予以处理;2) 日历时钟模块:此模块由专用的实时时钟芯片构成,它是本设计的核心模块,由它提供实时的日历时钟信息;3) 数码管显示模块:此模块用于实

10、时日历时钟信息显示;程序部分包括单片机和时钟芯片的接口程序(实现单片机和时钟芯片之间的数据传输过程)以及数码管显示程序。2 设计思路2.1 硬件的设计思路由于系统要实现的功能比较简单,主要是采集实时日历时间及闹钟的设置,因此,硬件设计思路非常清晰。采用AT89C52芯片作为硬件核心,具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、星期、日、周、月、年以及闰年补偿的年进行计数,而且精度高位的RAM作为数据暂存

11、区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA.故采用DS1302作为时钟芯片。当然,其他的外接电路中显示器及按键等硬件的设计都非常简单了。本设计采用的是1602LCD液晶显示器。它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,能很好地显示出本设计要求的结果(对实时日历时钟的显示)。2.2 软件的设计思路 整个单片机应用系统是一个整体。在应用系统整体设计时,软件和硬件要统一考虑进来的。其中软件的设计要根据系统要达到的功能要求,将其分为若干个独立的模块,画出程序流程图。根据系统的特点和考虑实际的情况选择编程语言。一般选择汇编语言和C语言。汇编语言对硬件操作方便,程序代码

12、短;C语言功能较多,表达能力好,使用方便,在应用方面也很广,程序效率高,移植性韧度好,现在很多单片机都是用C语言作为编程语言。软件系统设计时,要分配好系统的资源。一个单片机系统的资源主要是片内和片外资源,前者是指单片机内部的中央处理器、程序储存器、书数据储存器、定时/计数器、串行口、并行口等。所以,在设计的时候要分出各个独立的模块设计软件。本设计应该把单片机分为单片机AT89C52主程序、时钟芯片DS1302的软件设计、1602LCD的设计和其它外接电路模块。这样,对本次的设计又有一定程度的简化。 3 硬件电路设计本设计的硬件电路设计主要是围绕日历时钟芯片DS1302的使用进行的。3.1 系统

13、结构框图本设计的硬件电路包括单片机电路、日历时钟芯片电路和数码管显示输出电路,其结构框图如图1所示。图1系统硬件结构框图3.2单片机AT89C52的介绍单片机选用美国ATMEL公司生产的AT89C52单片机。AT89C52是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8k bytes的可反复擦写的只读程序存储器(PEROM)和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C52单片机适合于许多较

14、为复杂控制应用场合。AT89C52单片机引脚分布如图2所示。图2 AT89C52单片机引脚分布图3.3 时钟芯片DS1302接口设计与性能分析DS1302是Dallas公司生产的一种实时时钟芯片。它与单片机连起来,向单片机传送年、月、日、时、分、秒的功能。它还拥有用于主电源和备份电源的双电源引脚,在没有主电源的情况下,也能保持时钟的连续运行。另外,它还能提供31字节的用于高速数据暂存的RAM。表1 DS1302引脚功能X1,X232.768kHz晶振引脚GND地线RST复位端I/O数据输入/输出端口SCLK串行时钟端口VCC1慢速充电引脚 VCC2电源引脚图3 内部链接DS1302时钟芯片内主

15、要包括移位寄存器、控制逻辑电路、振荡器。DS1302与单片机系统的数据传送依靠RST,I/O,SCLK三根端线即可完成。其工作过程可概括为:首先系统RST引脚驱动至高电平,然后在SCLK时钟脉冲的作用下,通过I/O引脚向DS1302输入地址/命令字节,随后再在SCLK时钟脉冲的配合下,从I/O引脚写入或读出相应的数据字节。DS1302的引脚排列如表1及内部结构图如图3所示。3.4 DS1302接口电路设计1、时钟芯片DS1302的接口电路及工作原理: 图4 DS1302的时钟模块图4为DS1302的接口电路,其中Vcc1为后备电源,Vcc2为主电源。VCC1为提供低功率的电池备份。VCC2在双

16、电源系统中提供主电源,在这种运用方式中VCC1连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。此外,DS1302由VCC1或VCC2 两者中较大者供。DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图5所示。表-1为DS1302的控制字,此控制字的位7必须置1,若为0则不能对DS1302进行读写数据。对于位6,若对时间进行读/写时,CK=0,对程序进行读/写时RAM=1。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;进行写操作时,该位为0。控制字节总是从最低位开始输

17、入/输出的。表-2为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,“WP”必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。2、DS1302的控制字DS1302的控制字如表2所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为1表示进行读操作,为0表示进行写操作。5控制字节总是从

18、最低位开始输出。表2 DS1302的控制字格式1RAM/CKA4A3A2A1A0RD/WR3、数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如图5所示:图5 DS1302读/写时序图4、DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表3。 表3 DS1302的日历、时间寄存器写寄存器读寄存器Bit7Bit6Bit5B

19、it4Bit3Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H12/24010时时AM/PM86H87H0010日日8A8B00000星期8C8D10年年8EH8FHWP0000000此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所

20、有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。3.5 按键模块设计本系统采用了5个按键,其中4个采用独立按键,因为这种方法查询方便,程序简单,可节省CPU资源,按键电路如图6所示,4个独立按键分别与AT89C52的P3.3、P3.4、P3.5、P3.6接口相图6 按键电路对图6中的各个按键做一下说明:set键:按下SET键进入时间校准状态,按一下显示时间的调整,按两下显示年月日的调整;up键:当按下set键后,up进行set选定项(如:分钟)的加操作;down键:当按下set键后,down进行set选定项(如:分钟)的减操作;chose键:当按下set键后,chose就会对年

21、月日,时分秒的某一位进行准确的调整;3.6 复位电路模块的设计当AT89C52单片机的复位引脚RST出现2个机器周期以上的高电平时,单片机就执行了复位操作。若ST持续为高电平,单片机就处于循环复位,从而无法执行程序。而本系统选用的是12MHz的晶振,因此一个机器周期为1s,那么复位脉冲宽度最小应为2s。在实际应用系统中,考虑到电源的稳定时间,参数漂移,晶振稳定时间以及复位的可靠性等因素,必须有足够的余量。如图7位晶振电路所示:本设计采用上电且开关复位电路,如图8所示上电后,由于电容充电,使RST持续一段高电平时间。当单片机已在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电

22、且开关复位的操作。通常选择C=1030F,本设计采用的电容值为20F的电容和电阻为100欧的电阻。图7 晶振电路图8 复位电路4 软件的设计4.1 主程序运行流程图及说明在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。数据处理包括:数据的采集、数字滤波等。过程控制程序主要是使单片机按一定的方法进行计算,然后再输出,以便控制实现想要的结果。为了实现本次设计的任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。

23、所谓“模块”,实质上就是所完成一定功能,相对独立的程序段,这种程序设计方法叫模块程序设计法。模块程序设计法对本设计完成的好处是:单个模块比起一个完整的程序易编写及调试;模块可以共存,一个模块可以被多个任务在不同条件下调用;模块程序分割任务和利用已有程序,来简化的完成设计要求。本系统软件采用模块化结构,主要由主程序DS1302子程序及键盘控制子程序构成。如图9为主程序流程图所示:开始系统初始化调节时分秒欢迎界面显示主界面按键调节按键调节调节年月日是否调节显示时间是否是是否否 图9 主程序流程图4.2 时钟芯片DS1302的软件设计及流程图本系统的时间显示来源于DS1302对单片机的执行,二者的连

24、接需要3根线,CLK(7)、I/O(6)、RST(5),具体连接图见系统硬件设计原理图如图10所示:图10 单片机与DS1302的连接进入主程序后,DS1302先进行初始化设置,若串行口有数据,最后则调用函数从日历时钟芯片获取日历时钟信息,调用显示函数显示日历时钟信息显示出来,重复进行。这部分包括对DS1302某个单元写、读DS1302某个单元的内容和对DS1302设定时间。在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。读、写DS

25、1302的数据流程图如图11所示 :开始变量初始化使DS1302不具备写保护复位端产生一个高电平写1302地址延时一段时间地址数据写出地址增加写完地址?复位端产生一个高电平读1302地址延时一段时间将该地址的数据读出地址增加显示数据数据读完?否是是否 图11读写DS1302数据流程图 其中DS1302的读写程序见附录1。4.3 按键控制及流程图当set键按下时,秒位置闪烁。每次按下set键按下时,分别在秒、分、时、日、月、年处闪烁。当set键再次按下时,加一或减一键有效并在相应位置加一或减一。比如选定分位,按下增大键,调整显示分位的增加,当秒增加至满60后,自动清零,同时调节一次送至下一位显示

26、,显示位置重新回到调节处;当按下减小键时,调整显示位秒的减小,当秒减至0后,自动跳转为59,同时调节一次送至下一位显示,显示位置重新回到调节处;年月日时分的调节只需要按chose键进行选择调节的位置,调节方法一样。键盘加一减一流程图如图12所示开始 光标定位分单元 Fen =59 =Fen =0 =Fen =-1? =Fen=60? =Fen -1 =Fen+1 =减小键按down增大键按下up Y 功能键set按下? 写入分 图12 键盘加一减一操作流程图 4.4 1602LCD操作说明及流程图显示主要是通过从芯片中读入程序,分别对秒、分、时、星期、日、月、年以及闹钟进行显示,并且通过键盘的

27、操作,对时间进行加减操作,使时间更新显示。进入主函数后,执行完1602LCD的初始化函数,然后用write_com(0x80)指令,命令先将数据指针定位在第一行第一个字处,然后写入第一行要显示的数据,在每个字之间简短的延时;在第二行重新定位数据指针write_com(0x80+0x40),将数据指针定位在第二行,然后再将第二行所要显示的数据写入,继而显示。1602LCD的写命令操作和写数据操作分别用两个独立的函数来完成,函数内部唯一的区别就是液晶数据命令选择端的电平。写命令函数解释如下:void write_com(uchar com) /向液晶写入命令 rs=0; /选择写命令模式 lcde

28、n=0; /使能端置零 P0=com; /将要写的命令送到数据总线上 delay(3); /延时,以待数据稳定 lcden=1; /给使能端一个高脉冲 delay(3); /延时 lcden=0; /将使能端置零,以完成高脉冲写数据函数操作如下:void write_date(uchar date) /向液晶写入数据 rs=1; /选择写数据模式 lcden=0; /使能端置零 P0=date; /将要写的数据送到数据总线上 delay(3); /延时,以待数据稳定 lcden=1; /给使能端一个高脉冲 delay(3); /延时 lcden=0; /将使能端置零,以完成高脉冲1602LCD

29、的初始化如下:write_com(0x38); /1602液晶初始化 write_com(0x0c); /开光标闪烁:0x0f,关光标闪烁:0x0c write_com(0x06); /写一个字符后,地址指针自动加1 write_com(0x01); /显示清0,数据指针清01602LCD的流程图如图13所示。开始 1602初始化 读取数据 第一行显示 读取数据 第二行显示 结束 图13 1602LCD的流程图5 系统的仿真与结果分析5.1 用Proteus仿真及结果 Proteus是是英国Lab Center Electronics公司出版的一个能很好的仿真单片机的软件。所以,仿真软件的选择

30、就是Proteus。 由于在元件库的版本比较低,没有1602LCD这个元件,所以,采用共阳极和共阴极断码器7SEG-MPX-CA和7SEG-MPX-CC代替1602LCD来仿真。所以,此时总程序见附录2。 当按下set键时,系统进入另一模式,系统最先进入的是时分秒的调整,按下chose进入具体的某一位(时或分或秒)的调整。继续按set键,进入年月日的调整,按下chose,进入某一位(年或月或日)的调整。如图14所示为Proteus仿真显示图14 用Proteus仿真的结果显示时间和日期 仿真开始时输入的是电脑的时间,如图15所示: 图15 仿真开始时输入电脑的时间按下set键,调整时间的仿真如

31、图16所示: 图16 仿真调整时间5.2 实物的制作 由于在制作实物的过程中用断码器7SEG-MPX-CA和7SEG-MPX-CC的引脚比较多,而且显示为闪动的,可能实物和仿真对比误差较大,所以,实物的制作还是采用1602LCD作为显示器。如图17为制作好的日历时钟。 图17 制作好的日历时钟电路板5.3 误差分析 在实际的制作中有很大的影响因素,比如电容的损坏、电源的稳定性、晶振的稳定时间或者复位的可靠性等各方面因素,都可能导致制作实物和用Proteus仿真出来的结果会有一定的差距。并且仿真图就是一个模拟用的,和实际效果是有点差别的,仿真中没有晶振电路和复位电路都是可以工作的,焊接是按照原理

32、图来的而不是仿真.所以,在实际制作过程中要留一些余量。总结本设计硬件电路较简单,所用器件较少,电路中使用AT89C52单片机、DS1302时钟显示芯片等主要器件,实现计时、校时的功能。在整个设计过程中,硬件方面主要设计了AT89C52单片机的最小系统、DS1302接口电路;软件方面借助各个渠道的资料。系统的调试主要是通过一块AT89C52开发板,再借助于Proteus以及少许自己搭建的外围电路实现的;再此过程中,分步调试时显示出了日期、时间及闹钟,集中调试时没有达到预期效果。本次设计的万日历时钟具有读显示直观、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。在对芯

33、片的管脚功能和用法有充分的了解后,根据设计要求设计硬件电路,包括单片机控制电路、时钟电路、显示电路、供电电路、键盘电路、复位电路。然后通过软件编程,实现了对年、月、日、时、分、秒及闹钟自动调整,用按键进行控制,用液晶模块进行显示。在整个设计过程中学到了许多处理事情的方法,在电路焊接时虽然没什么大问题,但是从焊接过程中也知道了焊接在整个作品中的重要性,电路的模块比较多,焊接比较复杂,不能心急,慢慢来不能急于求成。反而达到事半功倍的效果。在编写程序代码的时候,因为思路开始比较模糊,碰到过许多问题,经过静下心来思考,理清了思路,问题就迎刃而解。在此次设计中,知道了做事要有持之以恒的决心和一步一个脚印

34、的耐心,这样才能做好一件事情。实时日历时钟可以正常显示时间并进行时间调整,基本完成了预期要实现的目标。 17参考文献:1陈明荧 8051单片机课程设计实训教程M北京:清华大学出版社,2005:11-13.2苏平.单片机的原理与接口技术M.北京:电子工业出版社,2006:1-113.3王忠民.微型计算机原理M.西安:西安科技大学出版社,2003:15-55.4何立民单片机高级教程M北京:北京航空航天大学出版社,2003:25-125.5纪宗南.单片机外围器件使用手册M.北京:北京航空航天大学出版社,2004:622-655.6周雪.模拟电子技术M西安: 西安电子科技大学出版社,2005:81-9

35、5.7左金生.电子与模拟电子技术M.北京:电子工业出版社,2004:105-131.8马忠梅,籍顺心等单片机的C语言应用程序设计M北京航空航天大学出版社, 2001:123-189.9新编单片机原理与应用(第二版).西安电子科技大学出版社,2007:126-239.10张萌.单片机应用系统开发综合实例M.北京:清华大学出版社,2007:127-298.11王越明.电子万年历的设计J.黑龙江科技信息,2004:166-135.致 谢首先,在这里感谢学校给我们安排这次课程设计,使我有一个可以自己动手学习的机会。通过动手实践,我学习到了很多课本以外的知识,体会到了自己亲自动手做出成果的喜悦。其次,在

36、这要感谢我们可敬可爱的老师,虽然老师工作繁忙,但还是会时常关注学生的课设进展,并给出很多宝贵的点拨,帮助我们解决了很多技术上难题。老实说,没有老师的悉心指导,就不会有我今天的作品。最后,我还要感谢这次设计中给我帮助的同学,是你们的帮助,我才能顺利的完成毕业设计任务。谢谢你们的帮助!19附录1#ifndef _DS1302_H_#define _DS1302_H_/*ds1302 内部RAM RAM0 1100 000R/W 1读 0写 RAM1 1100 001R/W . RAM30 1111 110R/W */sbit clk = P13; /ds1302时钟线定义sbit io = P14

37、; /数据线sbit rst = P15; /复位线/秒 分 时 日 月 年uchar code write_add=0x80,0x82,0x84,0x86,0x88,0x8c,0x8a; /写地址uchar code read_add =0x81,0x83,0x85,0x87,0x89,0x8d,0x8b; /读地址uchar code init_ds =0x58,0x00,0x00,0x01,0x01,0x13,0x1; uchar miao,fen,shi,ri,yue,week,nian;uchar i;uchar open1;/*写一个数据到对应的地址里*/void write_ds

38、1302(uchar add,uchar dat)rst = 1; /把复位线拿高for(i=0;i<8;i+) /低位在前clk = 0; /时钟线拿低开始写数据io = add & 0x01; add >>= 1; /把地址右移一位clk = 1; /时钟线拿高for(i=0;i<8;i+)clk = 0; /时钟线拿低开始写数据io = dat & 0x01;/*把要的时间 年月日 都读出来*/void read_time()miao = read_ds1302(read_add0);/读秒fen = read_ds1302(read_add1);

39、/读分shi = read_ds1302(read_add2);/读时ri = read_ds1302(read_add3);/读日yue = read_ds1302(read_add4);/读月nian = read_ds1302(read_add5);/读年 /n_nian = year_moon ;/n_yue = month_moon ;/n_ri = day_moon ;/*把要写的时间 年月日 都写入ds1302里*/void write_time() /把时间写进去write_ds1302(0x8e,0x00);/打开写保护write_ds1302(write_add0,miao

40、);/写秒write_ds1302(write_add1,fen);/写分write_ds1302(write_add2,shi);/写时write_ds1302(write_add3,ri);/写日write_ds1302(write_add4,yue);/写月write_ds1302(write_add6,week);/写年write_ds1302(0x8e,0x80);/关闭写保护/*把数据保存到ds1302 RAM中*0-31*/void write_ds1302ram(uchar add,uchar dat)add <<= 1; /地址是从第二位开始的add &=

41、 0xfe; /把最低位清零 是写的命令add |= 0xc0; /地址最高两位为 1 write_ds1302(0x8e,0x00);write_ds1302(add,dat);write_ds1302(0x8e,0x80);/*把数据从ds1302 RAM读出来*0-31*/uchar read_ds1302ram(uchar add)add <<= 1; /地址是从第二位开始的add |= 0x01; /把最高位置1是读命令add |= 0xc0; /地址最高两位为 1 return(read_ds1302(add);/*初始化ds1302时间*/void init_ds13

42、02()uchar i;rst = 0;/第一次读写数据时要把IO品拿低clk = 0;io = 0;i = read_ds1302ram(30); fen1 = read_ds1302ram(1);shi1 = read_ds1302ram(2);open1 = read_ds1302ram(3);read_time(); /读时间if(miao >= 0x60)write_ds1302(0x8e,0x00); /打开写保护write_ds1302(write_add0,init_ds0);/允许ds1302工作write_ds1302(0x8e,0x80);/关写保护/*设置ds13

43、02时间函数*/void set_ds1302time(uchar num,uchar *shi,uchar dat) /调时 if(num = 1) *shi+=0x01;if(*shi & 0x0f) >= 0x0a)*shi = (*shi & 0xf0) + 0x10;if(*shi >= dat)*shi = 0; else if(*shi = 0x00)*shi = dat;if(*shi & 0x0f) = 0x00)*shi = (*shi | 0x0a) - 0x10;*shi -=0x01 ; #endif附录2#include <

44、reg51.h> /调用单片机头文件#define uchar unsigned char /无符号字符型 宏定义变量范围0255#define uint unsigned int /无符号整型 宏定义变量范围065535#include "ds1302.h"/数码管段选定义 0 1 2 3 4 5 6 7 8 9uchar code smg_du=0xa0,0x75,0x32,0x2a,0x32,0x25,0xb4,0xBa,0x20,0x28, 0x30,0x25,0xe4,0x23,0x64,0x74,0xff; /断码/数码管位选定义uchar code smg_we=0xfe,0xbf,0xfb,0xef,0xf7,0xdf,0xfd,0x7f;/数码管位选定义uchar dis_smg8 = 0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xBa;uchar smg_i = 8; /显示数码管的个位数bit flag_200ms ;bit flag_100ms ;bit f

温馨提示

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

评论

0/150

提交评论