基于AT89C51单片机的多功能电子万年历的设计毕业论文_第1页
基于AT89C51单片机的多功能电子万年历的设计毕业论文_第2页
基于AT89C51单片机的多功能电子万年历的设计毕业论文_第3页
基于AT89C51单片机的多功能电子万年历的设计毕业论文_第4页
基于AT89C51单片机的多功能电子万年历的设计毕业论文_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、基于at89c51单片机的多功能电子万年历的设计at89c51 scm-based elctronic design calendar 毕 业 论 文 学院名称 泸 州 职 业 技 术 学 院 系部名称 电 子 工 程 系 专业名称 应 用 电 子 技 术 2012年12月10日摘要本文介绍了基于at89c51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以at89c51单片机为控制器,以串行时钟日历芯片ds1302记录日历和时间,利用proteus仿真,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。万年历采用直观的数字显示,可以在1602上同时显示年、月、日、周

2、日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。关键字:at89c51;电子万年历; ds1302;1602目 录摘要01第一章 绪论031.1 课题研究的背景031.2课题解决的主要内容03第二章 系统的总体设计042.1系统硬件电路设计042.1.1系统硬件结构042.2单片机及其附属电路052.2.1 mcs-51系列单片机052.1.2 mcs-51系列单片机的工作条件电路082.1.3 ds1302092.1.4 lcd1602显示电路102.1.5调节电路12第三章 系统的软件设计123.1主程序12

3、3.2 lcd1602的驱动程序13 3.3 ds1302的驱动程序14第四章 万年历的设计结论144.1 万年历工作原理144.2 万年历结构原理图15致谢16参考文献16附录17附录【1】仿真图片17附录【2】程序代码17-25第一章 绪论1.1 课题研究的背景随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且ds1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用at89c51单片机作为

4、核心,功耗小,能在3v的低压工作,电压可选用35v电压供电。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。1.2课题解决的主要内容本课题所研究的电子万年历是单片机控制技术的一个具体应用,主要研究内容包括以下几个方面:(1)选用电子万年历芯片时,应重点考虑功能实在、使用方便、单片存储、低功耗、抗断电的器件。(2)根据选用的电子万年历芯片设计外围电路和单片机的接口电路。(3)在硬件设计时,结构要尽量简单实用、易于实现,使系统电路尽量简单。(4)根据硬件电路图,在开发板上完成器件的焊接。(5)根据设计的硬件电路,编写控制at8

5、9c51芯片的单片机程序。(6)通过编程、编译、调试,把程序下载到单片机上运行,并实现本设计的功能。(7)在硬件电路和软件程序设计时,主要考虑提高人机界面的友好性,方便用户操作等因素。(8)软件设计时必须要有完善的思路,要做到程序简单,调试方便。第二章 系统的总体设计单片机电子万年历的制作有多种方法,可供选择的器件和运用的技术也有很多种。所以,系统的总体设计方案应在满足系统功能的前提下,充分考虑系统使用的环境,所选的结构要简单使用、易于实现,器件的选用着眼于合适的参数、稳定的性能、较低的功耗以及低廉的成本。2.1系统硬件电路设计2.1.1系统硬件结构此系统由单片机主体电路、单片机工作条件电路、

6、1602显示电路、时间条件电路、时钟芯片ds1302等几大部分组成,其中单片机工作条件电路又包含电源电路、时钟电路、复位电路等几大部分组成,单片机工作条件电路使单片机正常的工作,然后单片机通过程序设置,控制ds1302时钟芯片,从ds1302芯片读取数据处理后送1602显示,其显示的时间和日期可以通过时间条件按键电路来进行调整,此系统硬件结构框图如图2-1图2-1 系统硬件框图2.2单片机及其附属电路2.2.1 mcs-51系列单片机mcs-51系列单片机主要是指intel公司生产的以51位内核的单片机芯片,具有8位cpu、4k字节rom、128字节ram、可扩展外部64k字节ram和rom、

7、2个16位的定时器/计数器、4个8位并行i/o口、1个全双工串行i/o口、21字节的专用寄存器、5个中断源、片内自带振荡器、片内单总线等功能部件。at89c51单片机就是mcs-51系列单片机的一种,它的片内有4k字节的在线编程flash存储器,可以擦写1000次,具有掉电模式,而且具有掉电状态下的中断恢复功能,对设计开发非常实用。其引脚图如图2-2所示。图2-2 at89c51单片机的引脚图其引脚功能和内部结构如下:1.单片机的引脚功能at89c51单片机有40个引脚。(1)、vcc:电源电压+5v(2)、gnd:接地(3)、p0口:p0口是一组8位漏极开路型双向i/o口,也即地址/数据总线

8、复 用口。作为输出口用时,每位能驱动8个ttl逻辑门电路,对端口写“1”可作为高阻抗输入端用。(4)、p1口:p1口是一个带内部上拉电阻的8位双向i/o,p1的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。(5)、p2口:p2口是一个带内部上拉电阻的8位双向i/o,p2的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被

9、外部信号拉低时会输出一个电流。(6)、p3口还接收一些用于flash闪速存储器编程和程序校验的控制信号。表3-1 p3口的第二功能图端口引脚第二功能p3.0rxd(串行输入口)p3.1txd(串行输出口)p3.2int0(外中断0)p3.3int1(外中断1)p3.4t0(定时/计时器0外部输入)p3.5t1(定时/计时器1外部输入)p3.6wr(外部数据存储器写选通)p3.7rd(外部数据存储器读选通)(7)、rst:复位输入。当振荡器工作时,rst引脚出现两个机器周期以上高电平将使单片机复位。wdt溢出将使引脚输出高电平,设置sfr auxr的disrt0(地址8eh)可打开或关闭该功能。

10、disrt0位缺省为reset输出高电平打开状态。(8)、ale/prog:当访问外部程序存储器或数据存储器时,ale(地址锁存器允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ale仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ale脉冲。(9)、xtal1:振荡器反相放大器及内部时钟发生器的输入端。(10)、xtal2:振荡器反相放大器的输出端。2、at89c51单片机内部结构看门狗(wdt):wdt是一种需要软件控制的复位方式。wdt 由13位计数器和特殊功能寄存器中的看门狗定时器复位存储器(

11、wdtrst)构成。wdt 在默认情况下无法工作;为了激活wdt,用户必须往wdtrst 寄存器(地址:0a6h)中依次写入01eh 和0e1h。当wdt激活后,晶振工作,wdt在每个机器周期都会增加。wdt计时周期依赖于外部时钟频率。除了复位(硬件复位或wdt溢出复位),没有办法停止wdt工作。当wdt溢出,它将驱动rsr引脚输出一个高电平。可编程串口(uart)在at89c51中,uart 的操作与at89c51 和at89c52 一样。at89c51系列单片机的串行通信口可以工作于同步和异步通信方式。当工作于异步方式时,它具有全双工的操作功能,也就是说,它可以同时进行数据的发送和接收。串

12、行口内的接收器采用的是双缓冲结构,能够在接收到的第一个字节从接收寄存器读走之前就开始接收第二个字节(当然,如果第二个字节接收完毕,而第一个字节仍然没有被读走,那将会丢掉一个字节)。串行口的发送和接收操作都是通过特殊功能寄存器中的数据缓冲寄存器sbuf进行的,但在sbuf的内部,接收寄存器和发送寄存器在物理结构上是完全独立的。如果将数据写入sbuf,数据会被送入发送寄存器准备发送。如果执行sbuf指令,则读出的数据一定来自接收缓存器。因此,cpu对sbuf的读写,实际上是分别访问2个不同的寄存器。这2个寄存器的功能决不能混淆。振荡电路:at89c51系列单片机的内部振荡器,由一个单极反相器组成。

13、xtal1反相器的输入,xtal2为反相器的输出。可以利用它内部的振荡器产生时钟,只要xtal1和xtal2引脚上一个晶体及电容组成的并联谐振电路,便构成一个完整的振荡信号发生器,此方式称为内部方式。另一种方式由外部时钟源提供一个时钟信号到xtal1端输入,而xtal2端浮空。在组成一个单片机应用系统时,多数采用这种方式,这种方式结构紧凑,成本低廉,可靠性高。在电路中,对电容c1和c2的值要求不是很严格,如果使用高质的晶振,则不管频率为多少,c1、c2通常都选择30pf。定时/计数器:at89c51单片机内含有2个16位的定时器/计数器。当用于定时器方式时,定时器的输入来自内部时钟发生电路,每

14、过一个机器周期,定时器加1,而一个机器周期包含有12个振荡周期,所以,定时器的技术频率为晶振频率的1/12,而计数频率最高为晶振频率的1/24。为了实现定时和计数功能,定时器中含有3种基本的寄存器:控制寄存器、方式寄存器和定时器/计数器。控制寄存器是一个8位的寄存器,用于控制定时器的工作状态,方式寄存器是一个8位的寄存器,用于确定定时器的工作方式,定时器/计数器是16位的计数器,分为高字节和低字节两部分。ram:高于7fh内部数据存储器的地址是8位的,也就是说其地址空间只有256字节,但内部ram的寻址方式实际上可提供384字节。的直接地址访问同一个存储空间,高于7fh的间接地址访问另一个存储

15、空间。这样,虽然高128字节区分与专用寄器 ,即特殊功能寄存器区的地址是重合的,但实际上它们是分开的。究竟访问哪一区,存是通过不同的寻址方式加以区分的。sfr:sfr是具有特殊功能的所有寄存器的集合,共含有22个不同寄存器,它们的地址分配在80hffh中。虽然如此,不是所有的单元都被特殊功能寄存器占用,未被占用的单元,其内容是不确定的。如对这些单元进行读操作,得到的是一些随机数,而写入则无效,所以在编程时不应该将数据写入这些未确定的地址单元中,特殊功能寄存器主要有累加器acc、b寄存器、程序状态字寄存器psw、堆栈指针sp、数据指针dptr、i/o端口、串行口数据缓冲器sbuf、定时器寄存器、

16、捕捉寄存器、控制寄存器。中断系统:at89c51单片机有6个中断源,中断系统主要由中断允许寄存器ie、中断优先级寄存器ip、优先级结构和一些逻辑门组成。ie寄存器用于允许或禁止中断;ip寄存器用于确定中断源的优先级别;优先级结构用于执行中断源的优先排序;有关逻辑门用于输入中断请求信号。在整个中断响应过程中cpu所执行的操作步骤如下:(1)完成当前指令的操作(2)将pc内容压入堆栈(3)保存当前的中断状态(4)阻止同级的中断请求(5)将中断程序入口地址送pc寄存器(6)执行中断服务程序(7)返回2.1.2 mcs-51系列单片机的工作条件电路mcs-51系列单片机的工作条件电路包括电源电路、时钟

17、电路、复位电路;1、电源电路:其目的是为单片机提供电源电压,mcs-51系列单片机的电源引脚为vcc在单片机的第40脚,本课题只采用仿真,直接用proteus自带的电源即可,在这里就不在多说。2、时钟电路: 此电路的作用是为单片机提供12mhz时钟信号,是单片机有节奏的工作,它由两个谐振电容、一个晶振、和单片机内部的振荡电路构成,其电路如图2-3所示图2-3 时钟电路3、复位电路: 其作用是使单片机回到初始状态,它由一个开关和一个上拉电阻构成,其电路如图2-4所示图2-4复位电路2.1.3 ds1302 ds1302 是美国dallas公司推出的一种高性能、低功耗、带ram的实时时钟电路,它可

18、以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5v5.5v。采用三线接口与cpu进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或ram数据。ds1302内部有一个318的用于临时性存放数据的ram寄存器。ds1302是ds1202的升级产品,与ds1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 ds1302的引脚如图2-5所示图2-5 ds1302与单片机的连接图vcc2:芯片主电源,其作用是为芯片提供电源电压。vcc1:后备电源,其作用是在主电源关闭的情况下,也能保持时钟的连续运行。x1和x2:振荡源,外接

19、32.768khz晶振。i/o:串行数据输出端;rst:是复位/片选线,其作用有两个,(1)rst接通控制逻辑,允许地址/命令序列送入移位寄存器;(2)rst提供终止单字节或多字节数据的传送手段。当rst为高电平时,所有的数据传送被初始化,允许对ds1302进行操作。如果在传送过程中rst置为低电平,则会终止此次数据传送,i/o引脚变为高阻态。上电运行时,在vcc2.5v之前,rst必须保持低电平。只有在sclk为低电平时,才能将rst置为高电平。i/o为串行数据输入输出端(双向),后面有详细说明。sclk:时钟是输入端,其作用是为芯片提供时钟信号。2.1.4 lcd1602显示电路在此设计中

20、其结果在1602液晶屏上显示出来,1602能显示16x2个字符,它的液晶芯片是hd44780,其芯片的引脚图如图2-6所示:图2-6 lcd1602的引脚图1、各引脚的功能如下:vss:电源地,即电源接地端; vdd:芯片电源端,为芯片提供电源电压,其工作电压可在4.5v5.5v之间,通常为5v; vee:背光灯电源,为1602液晶屏的背光灯提供电源,其电压与芯片的电源一样,可在4.5v5.5v之间,通常为5v; rs:数据/指令选择端(h/l),通过控制该脚的电平,可选择是向芯片写入指令,还是向芯片写入数据; rw:读/写选择端(h/l), 通过控制该脚的电平,可选择是向芯片传入指令数据或指

21、令,还是从芯片中读取指令数据或指令;e:使能信号端,它的作用是为芯片提供使能信号;d0d7:并行数据传送端;2、lcd1602各引脚与单片机的连接如图2-7所示图2-7 lcd1602与单片机的连接d0d7数据端口连接在单片机的p0口,由于单片机的p0口是一组8位漏极开路型双向i/o口,所以需要在数据端口上接上拉电阻。2.1.5调节电路在该设计电路中,时间和日期的调节采用四个独立键盘构成,其原理和结构都非常简单在这里就不多做介绍,本系统它与单片机的连接如图2-8所示。2-8 独立按键与单片机的连接图中k1为调节的“选择”即是调节时间、日期、还是星期;k2为选择项目的“加”动作k3为选择项目的“

22、减”动作k4为选择项目的“确定”动作和做加减动作的“确认”。(k1接2.3口、k2接2.4口、k3接2.5口、k4接2.6口)第三章 系统的软件设计该设计的软件采用模块化的设计方案,及各个硬件模块都对应相应的子程序,通过主函数调用各子函数和子函数之间的相互调用来完成电子万年历的功能。3.1主程序主程序主要完成独立键盘的扫描、液晶的初始化、1602送显等功能,其程序流程图如图3-1所示: 3-1 主程序流程图3.2 lcd1602的驱动程序1602分为两行显示,第一行显示date字符和当前的日期(年、月、日),第二行显示time字符和当前时间(时、分、秒)。其程序流程图如图3-2所示:图3-2

23、lcd1602的驱动程序流程图3.3 ds1302的驱动程序ds1302工作时为了对任何数据传送进行初始化,需要将复位脚(rst)置为高电平且将8位地址和命令信息装入移位寄存器。数据在时钟(sclk)的上升沿串行输入,前8位指定访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输出数据。时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),在多字节方式下为8加最多可达248的数据。图3-3 ds1302的驱动程序流程图第四章 万年历的设计结论本课题从理论到实际应用,用at89c51单片机、ds1302、1602等一些电路的组合,成功的设计出了一个电子万年历。而

24、且所设计的电子万年历设计也按当初要求的能够在proteus中进行仿真,并且能够很精确的显示年历。可以说该电子万年历具有很高的实用价值。4.1 万年历工作原理此系统由单片机主体电路、单片机工作条件电路、1602显示电路、时间条件电路、时钟芯片ds1302等几大部分组成,它具有年、月、日、星期、时、分、秒的显示功能,它的工作是是靠实时时钟ds1302这个芯片的强大功能来完成的,首先单片机通过程序设置,控制ds1302时钟芯片,从ds1302芯片读取数据处理后送1602显示,其显示的时间和日期可以通过按键来进行调整,这样可以使时间和日期更加的准确。4.2 万年历结构原理图在软件设计的过程中,利用了k

25、eil这个软件在程序录入和调试的时候的优越性,让我能够在编写软件的时候很方便的发现软件中的错误,现在已经能够使用keil对所设计的程序进行调试。对于proteus这款软件,也能熟练掌握电路设计仿真。由于平时没有接触过这两个软件,加上毕业设计的时间有限,对于他们的连接调试程序,未能熟练掌握,但以后有机会的话会再好好学习的。本次设计的电子万年历也存在的不足的地方,有待于以后的改进。致 谢经过三个多月的时间,毕业设计按照预期完成了,由于本人的知识水平有限,论文和设计中有遗漏和缺陷的地方恳请指正。感谢我的导师龙舰涵老师给了我莫大的帮助,在他悉心的指导和严格的要求下,作品和论文顺利完成了。论文从选题和最

26、终完成,凝结着导师的辛勤的汗水,他不辞劳苦的教导、严谨的作风使我终生受益。在此毕业设计完成之际,谨向导师和所有帮助过我的老师致以崇高的敬意和衷心的感谢。还有感谢家人、朋友还有宿舍里所有的室友,是他们给我创造了良好的学习氛围,在学习和生活中给了我支持和帮助。在以后的学习生活中我会时时敦促自己更加努力,不辜负师长、亲人、朋友对我的期望。参考文献1 赵长德.微型计算机原理与接口技术m.北京:机械工业出版社,1999:98-350.2 苏平.单片机的原理与接口技术m.北京:电子工业出版社,2006:1-113.3 王忠民.微型计算机原理m.西安:西安科技大学出版社,2003:15-55.4 胡戴明.计

27、算机组成原理m.北京:经济科学出版社,2005:43-56.5 纪宗南.单片机外围器件使用手册m.北京:北京航空航天大学出版社,622-655.6 周雪.模拟电子技术m西安: 西安电子科技大学出版社,2005:81-95.7 左金生.电子与模拟电子技术m.北京:电子工业出版社,2004:105-131.8 尹勇.单片机开发环境vision2的开发指南m. 北京:北京航空航天大学出版社,2004:173-199.9 张斌武.单片机系统proteus设计与仿真m. 北京:电子工业出版社,2005:52-89.附录附录【1】仿真图片 附录【2】程序代码#include #include #defin

28、e uchar unsigned char#define uint unsigned intsbit sda=p10; /ds1302数据线sbit clk=p11; /dsb1302时钟线sbit rst=p12; /ds1302复位线sbit rs=p20; /lcd寄存器选择sbit rw=p21; /lcd读/写控制sbit en=p22; /lcd启用sbit k1=p23; /选择sbit k2=p24; /加sbit k3=p25; /减sbit k4=p26; /确定uchar tcount=0;/一年中每个月的天数,二月的天数由年份决定uchar monthsdays=0,3

29、1,0,31,30,31,30,31,31,30,31,30,31;/周日,周一到周六0,1-6 读取ds1302时分别是1-7uchar *week=sun,mon,tus,wen,thu,fri,sat;/lcd显示缓冲uchar lcd_dsy_buffer1=date 00-00-00 ;uchar lcd_dsy_buffer2=time 00:00:00 ;uchar datetime7; /所读取的日期时间char adjust_index=-1; /当前调节的时间对象:秒,分,时,日,月,年(0,1,2,3,4,6)uchar change_flag=-mhdm-y; /(分,

30、时,日,月,年)(不调节秒周)/延时,向ds1302写、读一字节以及从ds1302指定位置度、写数据的程序/延时-void delayms(uint x)uchar i;while(x-) for(i=0;i120;i+);/向ds1302写入一个字节void write_a_byte_to_ds1302(uchar x)uchar i;for(i=0;i=1;/从da1302读取一字节-uchar get_a_byte_from_ds1302()uchar i,b,t;for(i=0;i=1;t=sda;b|=t7;clk=1;clk=0;/bcd码转换return b/16*10+b%16

31、;/从ds1302指定的位置读数据-uchar read_data(uchar addr)uchar dat;rst=0;clk=0;rst=1;write_a_byte_to_ds1302(addr);dat=get_a_byte_from_ds1302();clk=1;rst=0;return dat;/向ds1302某地址写入数据-void write_ds1302(uchar addr,uchar dat)clk=0;rst=1;write_a_byte_to_ds1302(addr);write_a_byte_to_ds1302(dat);clk=0;rst=0;/-/-设置时间-v

32、oid set_ds1302()uchar i;write_ds1302(0x8e,0x00);/写控制字,取消写保护for(i=1;i7;i+) /分时日月年依次写入/分的起始地址10000010(0x82),后面续依次是时,日,月,周,年,写入地址每次递增2 write_ds1302(0x80+ 2*i,(datetimei/104)|(datetimei%10); write_ds1302(0x8e,0x80);/加保护/-/读取当前日期时间/-void gettime()uchar i;for(i=0;i7;i+)datetimei=read_data(0x81+2*i);/- /16

33、02lcd的若干显示控制代码。/uchar read_lcd_state() 读lcd状态uchar read_lcd_state()uchar state;rs=0;rw=1;en=1;delayms(1);state=p0;en=0;delayms(1);return state;/void lcd_busy_wait() 忙等待void lcd_busy_wait()while(read_lcd_state()&0x80)=0x80);delayms(5);/void write_lcd_data(uchar dat) 向lcd写数据void write_lcd_data(uchar d

34、at) lcd_busy_wait(); rs=1;rw=0;en=0;p0=dat;en=1;delayms(1);en=0;/void write_lcd_command(uchar cmd) 写lcd指令void write_lcd_command(uchar cmd)lcd_busy_wait();rs=0;rw=0;en=0;p0=cmd;en=1;delayms(1);en=0;/void init_lcd() lcd初始化void init_lcd()write_lcd_command(0x38);delayms(1);write_lcd_command(0x01);delaym

35、s(1);write_lcd_command(0x06);delayms(1);write_lcd_command(0x0c);delayms(1);/void set_lcd_pos(uchar p) 设置液晶显示位置void set_lcd_pos(uchar p)write_lcd_command(p|0x80);/-/在lcd上显示字符串void display_lcd_string(uchar p,uchar *s)uchar i;set_lcd_pos(p);for(i=0;i16;i+)write_lcd_data(si); delayms(1);/-/日期与时间值转换为数字字符

36、void format_datetime(uchar d,uchar *a)a0=d/10+0;a1=d%10+0;/-/判断是否为闰年uchar isleapyear(uint y)return(y%4=0&y%100!=0)|(y%400=0);/-/求自2000.1.1开始的任何一天是星期几/函数没有通过,求出总天数后再求星期几,/因为求总天数可能会超越uint的范围。void refreshweekday()uint i,d,w=5;/已知1999.12.31是周五for(i=2000;i2000+datetime6;i+)d=isleapyear(i)?366:365;w=(w+d)

37、%7;d=0;for(i=1;idatetime4;i+) d+=monthsdaysi;d+=datetime3;/保存星期,06表示星期日至周六,为了与ds1302的星期格式匹配,返回值需要加1datetime5=(w+d)%7+1;/-void datetime_adjust(char x)switch(adjust_index)case 6:/年00-99 if(x=1&datetime60) datetime6-; /获取2月天数 monthsdays2=isleapyear(2000+datetime6)?29:28; /如果年份变化后当前月份的天数大于上限则设为上限 if(dat

38、etime3monthsdaysdatetime4) datetime3=monthsdaysdatetime4; refreshweekday();/刷新星期 break;case 4:/月01-12 if(x=1&datetime41)datetime4-; /获取2月天数 monthsdays2=isleapyear(2000+datetime6)?29:28; /如果月份变化后当前月份的天数大于上限则设为上限 if(datetime3monthsdaysdatetime4) datetime3=monthsdaysdatetime4; refreshweekday();/刷新星期 break; case 3:/日00-28/29/30/31;调节之前首先根据年份得出该年中2月的天数 monthsdays2=isleapyear(2000+datetime6)?29:28; /根据当前月份决定调节日期的上限 if(x=1&datetime30) datetime3-; refreshweekday();/刷新星期 break; case 2:/时 if(x=1&datetime20) dat

温馨提示

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

评论

0/150

提交评论