倒计时实时时钟毕业设计_第1页
倒计时实时时钟毕业设计_第2页
倒计时实时时钟毕业设计_第3页
倒计时实时时钟毕业设计_第4页
倒计时实时时钟毕业设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、XXXXXXX毕业设计(论文)任务书题目 倒计时实时时钟设计 专业 电子信息科学与技术 学号 姓名 主要内容、基本要求、主要参考资料等:主要内容:以ATmega16为主控芯片,DS1302为实时时钟芯片,7段数码管为显示媒介,能准确地显示当前日期与时间,并根据设定的终点日期自动计算并显示剩余天数,实现当前时间、日期以及终点日期可重置功能。基本要求:(1)能准确地显示当前的日期(年、月、日)和时间(时、分、秒);(2)能根据设定的终点日期,自动计算当前日期到终点日期之前的天数,并显示;(3)提供人工方式的设置手段;(4)具有终点日期的重置与保持功能以及实时时钟掉电运行功能。主要参考资料:1马潮.

2、 AVR单片机嵌入式系统原理与应用实践M. 北京:北京航空航天大学出版社,2007.102 DALLAS SEMICONDUCTOR.DS1302 Trickle Charge Timekeeping Chip3康华光,陈大钦. 电子技术基础:模拟部分M. 北京:高等教育出版社,1996.64王永军,李景华. 数字逻辑与数字系统M. 北京:电子工业出版社,2006.15沈文. AVR单片机C语言开发入门指导M. 北京:清华大学出版社,2003.5完 成 期 限: 2009年6月5日 指导教师签名: 专业负责人签名: 年 月 日目 录摘要IABSTRACTII1 绪论11.1 课题研究背景11.

3、2 课题研究意义11.3 本文的结构22 系统总体方案设计22.1 时钟模块32.2 显示模块43 核心芯片介绍53.1 DS1302简介5引脚功能和结构5的控制字节6数据输入/输出6的寄存器7对后备电源进行涓细电流充电83.2 ATmega16介绍9特点9外部引脚与封装94 系统硬件设计104.1 应用系统结构104.2 显示单元11数码管编码11 系统显示面板部分124.3 系统硬件的控制部分135 系统软件设计155.1 时钟芯片控制165.2 倒计时信息计算165.3 按键检测176 系统调试196.1 硬件调试196.2 软件调试216.3 软硬联调效果展示227 总结24致 谢25

4、参考文献26倒计时实时时钟设计摘要本文介绍了一个基于ATmega16单片机的倒计时实时时钟的设计,系统采用ATmega16作为主控核心,串行实时时钟芯片DS1302完成计时功能,采用7段数码管动态扫描显示。文章主要分硬件设计和软件编程两个大方面。硬件设计主要包括中央处理单元电路、时钟电路。软件用C语言来实现,其系统主程序采用了状态机的分析设计思想,软件部分完成了对各个模块的控制、整合,实现倒计时实时时钟信息的显示,键盘对时钟的设置,时钟显示等功能。本设计在Proteus和CodeVisionAVR软件上进行了仿真和调试,实现了如下功能:显示当前日期、时间以及剩余天数计算与显示,调整日期、时间,

5、达到了设计的要求和目的。关键词:ATmega16单片机;DS1302;状态机;倒计时实时时钟A Design of Real-time Clock CountdownABSTRACTThis article describes a design of real-time clock countdown, this countdown based on ATmega16 microcontroller.ATmega16 as the main control core of the system, which using 7-segment digital tube display dynami

6、c scanning, and serial real time clock chip DS1302 complete computing time function.Article focuses on two aspects, the one is hardware designing, the other is software programming. Hardware designing includes a central processing unit circuit and clock circuits. Software is written in C language, t

7、he main program of the system adopted the idea of state machine designing. The part of the software completes the control and integration of each module, and the realization of real-time countdown clock information display, and setting the clock by keyboard, and the clock display and so on.The simul

8、ation and debugging of the design are run on the software of the Proteus and CodeVisionAVR. The design realizes the functions such as displaying of current date and time, and the remaining number of days counting and displaying, and adjusting the date and time. This design meets the design requireme

9、nts and objectives.KEYWORDS ATmega16 microcontroller, DS1302, state machine, real-time clock countdown1 绪论单片计算机即单片微型计算机(Single-ChipMicrocomputer),是集CPU、RAM、ROM,定时、计数和多种接口于一体的微控制器1。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而AVR系列单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。本文通过对一个基于单片机的能实现时间,日期以及倒计

10、时相关信息功能的倒计时实时时钟的设计学习,详细介绍了单片机编程中状态机应用思想。从而达到学习、了解单片机相关指令在各方面的应用以及提高系统应用的有效性。系统由ATmega16、DS1302时钟芯片、7段数码管、按键等部分构成,能进行时、分、秒的显示。也具有年、月、日的显示,倒计时相关信息提醒等功能2。1.1 课题研究背景随着信息化的发展和人们生活节奏的提高,为了提高工作效率,提醒大家关注某项重大事件的开始或结束(如“高考”、“奥运会”等),以便更好地安排事件,倒计时实时时钟发挥的作用越来越大,同时,随着电子技术的发展,人们对倒计时实时时钟的要求也越来越高,要求其不仅计时精度高,而且具有可靠性好

11、、成本低、功能全等特点3。1.2 课题研究意义倒计时实时时钟是在实时时钟基础上的衍生品。它在实现显示当前日期和实践的基本功能之外,增加了自身计算和显示从当前日期到给定的未来一个日期(下称终点日期)之间的天数。其形式也具有多样性,根据不同需求可以制作不同大小的产品,例如,倒计时牌,适合安放在大厅或者广场,袖珍型倒计时实时时钟适合个人随身携带,可以自由设置对自己重要即将到来的日子,以提醒自己做好应对工作,同时还可以作为数字时钟用,当然还可以在该基础上增加闹铃功能或者裁减为更简单却十分有用的产品,例如篮球赛安放在篮板上方的倒计时牌。本课题的目的是让单片机开发者掌握单片机系统的安装和调试的方法,设计思

12、路,实现方法,硬件调试及软件调试,巩固和加强“模拟电子技术”、“数字电子技术”课程的理论知识,培养独立分析问题和解决问题的能力以及创新能力和创新思维。倒计时实时时钟设计的成功,表示在数字电子技术领域内的入门,而且此基本电路可以简单地扩展设计,诸如家用定时自动报警、球赛计时器、抢答器、定时开关、自动打铃器、自动起闭路灯、可编程时间的自动控制器、动力设备延时启动控制器、各种定时电气的自动启用等,都是以此为基础的。因此,研究倒计时实时时钟及扩大其应用是单片机开发的重要课题4。1.3 本文的结构论文共分五个部分:第一部分简单介绍了课题背景及研究意义;第二部分对DS1302的硬件资源、功能等作了较详细的

13、阐述;第三部分介绍了硬件电路的设计;第四部分介绍软件设计,程序采用C语言在CodeVisionAVR软件编写、调试;第五部分介绍系统调试。2 系统总体方案设计倒计时实时时钟是在实时时钟基础上的衍生品。它在实现显示当前日期和实践的基本功能之外,增加了自身计算和显示从当前日期到给定的未来一个日期(下称终点日期)之间的天数。因此,倒计时实时时钟应该具备以下功能:(1)能准确地显示当前的日期(年、月、日)和时间(时、分、秒)。(2)能根据设定的终点日期,自动计算当前日期到终点日期之间的天数,并显示。(3)当前日期、时间和终点日期的调整和设定功能。当系统第一次运行,或需要调整当前日期和时间,以及重新设定

14、终点日期时,提供人工方式的设置手段。(4)当前日期、时间和终点日期的调整与设定过程应该简单、可靠,方便用户操作,人性化。(5)终点日期的重置和保持功能。用户可以重置终点日期,这样系统就成为能适合更多场合使用的迎XXX倒计时实时时钟,例如,设置终点日期为08年8月8日,它就是迎奥运倒计时实时时钟;而终点设置为11年1月1日,它就变成迎新年倒计时实时时钟了。设置的终点日期应能长期保持,系统掉电不丢失,系统能够自动根据当前日期和终点日期计算出两者之间相差的天数。(6)实时时钟掉电运行。倒计时实时时钟系统通常为广告牌的形式放置在走廊大厅或者单位小区的大门处,因此显示器件应该采用大型的高亮度LED数码管

15、,方便人们在白天和比较远的地方观看。大型的高度LED数码管需要15V的电压,功耗比较大,不适合采用电池供电,通常是使用220V市电供电。当发生停电等情况时,系统的显示功能可以停止工作,但必须保证系统的实时时钟部分还在正常的计时运行,即“电停表不停”。这样当再次上电后,用户无须重新设置日期和时间。综上所述,我设计的倒计时实时时钟的硬件电路由主控部分(单片机ATmega16)、计时部分(实时时钟芯片DS1302)、显示部分(动态显示)、电源部分几个部分组成。各部分之间相互协作,构成一个统一的有机整体,实现倒计时实时时钟的功能。如下是对其时钟模块和显示模块的比较与评估。2.1 时钟模块采用ATmeg

16、a16作为主控芯片,通常实时时钟的实现方案有两种途径:一是使用AVR本身的功能;二是采用专用的实时时钟芯片,如表2-1是这些方案的特点比较和评估。表2-1 实时时钟实现方案及特点方案实时时钟源实现方法特点1AVR内部定时器软件成本低,精度差,程序设计复杂,不易实现掉电可靠运行2外接32 768Hz晶体软件成本低,精度稍差,程序设计复杂,不易实现掉电可靠运行3专用实时时钟芯片硬件成本稍高,精度高,程序设计简单,容易实现掉电可靠运行表中的方案1、2都是利用AVR本身内部的功能来实现实时时钟的功能5,该方案的主要优点是成本低,但缺点也是非常明显:首先是不容易实现实时时钟的掉电运行;其次是系统软件设计

17、比较复杂,这是因为软件不仅要实现所有的实时时钟的功能,还要考虑系统其他功能的实现。第3种方案的实现成本稍微高一点,但专用实时时钟芯片DS1302的集成度高,走时准确,具备自动日历和闰年自动调整等功能,特别是专用实时时钟芯片本身耗电非常小,非常容易实现实时时钟的掉电运行设计6,其电路如图2-1所示。图2-1ATmega16与DS1302的接口电路上述三种方案均是可行的,由于方案3外围接口电路简单,成本较低,精度高,程序设计简单,可以很好实现系统所要求的功能,故选用方案3。2.2 显示模块用单片机驱动LED数码管显示有很多方法,按显示方式分有静态显示和动态显示。静态显示就是显示驱动电路具有输出锁存

18、功能,单片机将所要显示的数据送出去后,数码管始终显示该数据(不变),CPU不再控制LED,到下一次显示时,再传送一次新的显示数据。静态显示的接口电路采用一个并行口接一个数码管,数码管的公共端按共阴极或共阳极分别接地或接VCC。这种接法,每个数码管都要单独占用一个并行I/O口,以便单片机传送字形码到数码管控制数码管的显示。显然其缺点就是当显示位数多时,占用I/O口过多。为了解决静态显示I/O口占用过多的问题,可采用串行接口扩展LED数码管的技术。静态显示方式的优点是显示的数据稳定,无闪烁,占用CPU时间少。其缺点是由于数码管始终发光,功耗比较大。 动态扫描用分时的方法轮流控制每个显示器的COM端

19、,使每个显示器轮流电亮。在轮流点亮过程中,每位显示器的点亮时间极为短暂,但由于人的视觉暂留现象及发光二极管的余辉效应,给人的印象就是一组稳定的显示数据。动态驱动一般用于多位LED数码管显示,主要是节省驱动管脚,减少器件。从以上两种显示方式比较,我们可以看到,动态扫描可靠,综合性能更好。所以选用动态扫描方案7。3 核心芯片介绍3.1 DS1302简介DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、周、日、时、分、秒自动计时,且具有闰年补偿功能,工作电压宽达2.55.5V。它采用3线串行接口与CPU进行同步通信,并可采用突发方式依次传送多字节的时

20、钟信号或RAM数据。DS1302内部有一个31字节的用于临时存放数据的RAM寄存器。DS1302还具备主电源/后备电源供电的双电源引脚,可以自动切换电源,同时提供了对后备电源进行涓细电流充电的能力8。图3-1 DS1302引脚配置图图3-1为DS1302的引脚排列。其中VCC1为后备电源,VCC2为主电源。DS1302由VCC1 或VCC2两者中的较大者供电。当VCC2 > (VCC1+0.2V)时,VCC2给DS1302供电,同时可以向VCC1充电;当VCC2 < VCC1时,DS1302由VCC1供电。因此,在主电源关闭的情况下,也能保持时钟的连续运行。X1和X2是接振荡源引脚

21、,外接32.768kHz晶体(钟表、电子表常用晶体)。是复位/片选线;I/O为串行数据输入/输出双向端口;SCLK是串行通信的时钟输入脚,时钟处于输入状态。这3个引脚用于数据通信,下面有详细说明。DS1302的控制字节DS1302的控制字节如表3-1,各位的定义如下:Ø 控制字节的最高位(第7位)必须是逻辑“1”。如果它为“0”,则不能把数据写入DS1302中。第6位为“0”时,表示读/写日历时钟数据,为“1”时,表示进行读操作。Ø 最低位(第0位)为“0”时,表示要进行写操作;为“1”时,表示进行读操作。Ø 控制字节总是从最低位开始输出(低位在前)。表3-1 D

22、S1302的控制字节数据输入/输出DS1302的数据接口是一种3线制的串行接口,控制器与DS1302进行数据交换时,首先要向DS1302发送一个字节的控制指令字。对于写DS1302的操作,控制器首先发送写控制指令字,然后接着发送数据字节,在下一个SCLK时钟的上升沿时(图3-3中第9个),数据被写入DS1302,数据输入从低位开始,即低位在前。同意,如果要从DS1302中读数据,则控制器要先发出读控制指令字,当DS1302收到读控制指令字后,随后通过I/O口线输出数据,控制器在第9个SCLK的上升沿时将数据读入。数据的读/写时序如图3-3所示。图3-3 DS1302的读/写控制时序在图3-3中

23、,是复位/片选线。 引脚的输入有2种功能:首先,接通控制逻辑,允许地址/命令序列进入移位寄存器;其次,提供终止单字节或多字节数据的传送手段。控制器通过把输入口置高电平(图中的上升沿)来启动DS1302的数据传送过程,且只有当为高电平时,才能对DS1302进行操作。如果在数据传送过程中将置为低电平,则会终止此次数据传送,DS1302的I/O引脚变为高阻态。上电过程中,在Vcc2.5V之前,必须保持低电平。另外,只有在SCLK为低电平时,才能将置为高电平。 DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,用于存放日期和时钟值。数据的格式为压缩BCD码形式,其日历、

24、时间寄存器及其控制字如表3-2所列。使用中需要特别注意秒寄存器的最高位CH,CH位是停止/启动时钟的控制为,当该位为“1”时,时钟停止计时,保持现有数据不变,进入低功耗的待机状态;当CH为“0”时,时钟才启动计时、进入正常工作方式。因此当DS1302第一次上电时,应该将CH写“0”,启动时钟工作。表3-2 DS1302的日历、时钟寄存器及控制字寄存器名命令字取值范围各位内容写操作读操作76543210秒寄存器 80H81H00-59CH10SECSEC分寄存器82H83H00-59010MINMIN时寄存器84H85H01-12或00-2312/24010HRHR日寄存器86H87H01-28

25、,29,30,310010DATEDATE月寄存器88H89H01-1200010MMONTH周寄存器8AH8BH01-0700000DAY年寄存器8CH8DH00-9910YEARYEAR 对后备电源进行涓细电流充电DS1302可以使用双电源供电,当VCC2(主电源) >(VCC1+0.2V)时,DS1302自动切换到由VCC2供电,同时还具有向VCC1充电(当VCC1接可充电电池时)的功能,充电电流的大小也可以通过设置相应的控制充电寄存器来改变9。图3-4是DS1302对后备电源VCC1进行涓细电流充电的示意图。充电过程由DS1302内部的2个寄存器控制。DS1302的这个功能,为实

26、现实时时钟的掉电运行提供了方便、可靠的方案。图3-4 DS1302对后备电源进行涓细电流充电示意图3.2 ATmega16介绍(1)采用先进RISC结构的AVR内核131条机器指令,且大多数指令的执行时间为单个系统时钟周期;32个8位通用工作寄存器;工作在16MHz时具有16MIPS的性能;配备只需要2个时钟周期的硬件乘法器(2)外围接口2个带有分别独立、可设置预分频器的8位定时器/计数器;1个带有可设置预分频器、具有比较、捕捉功能的16位定时器/计数器;片内含独立振荡器的实时时钟RTC;4路PWM通道;8路10位ADC;面向字节的两线接口TWI(兼容I2C硬件接口);1个可编程的增强型全双工

27、的,支持同步/异步通信的串行接口USART;1个可工作于主机/从机模式的SPI串行接口(支持ISP程序下载);片内模拟比较器;内含可编程的,具有独立片内振荡器的看门狗定时器WDT。(3)宽电压、高速度、低功耗工作电压范围宽:ATmega16 4.55.5v;运行速度:ATmega16 016M;低功耗:ATmega16L工作在1MHz、3v、25度时的典型功耗为,正常工作模式 1.1mA,空闲工作模式 0.35mA,掉电工作模式 <1uA。ATmega16单片机有三种形式的封装:40脚双列直插PDIP、44脚方形的TQFP和MLF形式(贴片形式)。其外部引脚封装如图3-5所示。图3-5

28、ATmage16 外部引脚与封装示意图其中, I/O引脚,分成PA、PB、PC和PD四个8位端口,他们全部是可编程控制的双(多)功能复用的I/O引脚(口)。 四个端口的第一功能是通用的双向数字输入/输出(I/O)口,其中每一位都可以由指令设置为独立的输入口,或输出口。当I/O设置为输入时,引脚内部还配置有上拉电阻,这个内部的上拉电阻可通过编程设置为上拉有效或上拉无效。 如果AVR的I/O口设置为输出方式工作,当其输出高电平时,能够输出20mA的电流,而当其输出低电平时,可以吸收40mA的电流。因此AVR的I/O口驱动能力非常强,能够直接驱动LED发光二极管、数码管等。而早期单片机I/O口的驱动

29、能力只有5mA,驱动LED时,还需要增加外部的驱动电路和器件。 芯片Reset复位后,所有I/O口的缺省状态为输入方式,上拉电阻无效,即I/O为输入高阻的三态状态10。4 系统硬件设计4.1 应用系统结构根据系统的功能和实施方案的确定,倒计时实时时钟的结构由下图4-1所示的几部分组成。图4-1 倒计时实时时钟的结构图Ø ATmega16:系统核心控制芯片。Ø DS1302:专用实时时钟芯片(具体上文DS1302章节介绍)。Ø 显示单元:由高亮度LED数码管组成,显示日期、时间、剩余天数。Ø 按键:设置日期、时间。Ø 主电源:220V交流输入,输

30、出直流5V,供电系统控制使用;直流15V供高亮度LED数码管的驱动电路使用。Ø 备用电源:当主电源停止工作时,DS1302由备用电源供电,以保持运行。4.2 显示单元编码在本设计中,我使用ATmega16芯片的PB端口作为数码管段码的输出端,其对应的编码如表4-1所示11。表4-1 8段LED数码管字型字段编码表显示字型PB7PB6PB5PB4PB3PB2PB1PB0段 码共阴极段 码共阳极hgfedcba0001111113FHC0H10000011006HF9H2010110115BHA4H3010011114FHB0H40110011066H99H5011011016DH92H

31、6011111017DH82H70000011107HF8H8011111117FH80H9011011116FH90HA0111011177H88Hb011111007CH83HC0011100139HC6Hd010111105EHA1HE0111100179H86HF0111000171H8EH注:B、D字型为小写b、d,以同数字8、0字型区别 系统显示面板部分倒计时实时时钟系统面板如下图4-2所示图4-2 倒计时实时时钟系统面板设计图面板设计成大的广告板形式,上面的文字是贴上去的烫金字,可以根据不容的需要进行更换,如换成“距新年还有天”。面板上使用了9个8英寸的高亮度LED数码管,分别用

32、于显示年、月、日、时、分、秒和剩余天数。L1、L2 2位,显示年和时,交替。L3、L4 2位,显示月和分,交替。L5、L6 2位,显示日和秒,交替。D1、D2、D3 3位,显示剩余的天数,最多999天。:、 秒闪烁标志。L1L6共6位LED用于时间和日期的显示,在系统正常显示状态下,时间和日期的显示每隔15s交替一次。秒闪烁标志由4个远点LED和两个条状LED组成,每秒钟闪烁一次。正常的显示格式为:时间显示“23:45:50”,保持15s;日期显示“10-4-10”,保持15s。“:”和“”每秒钟闪烁一次,不仅表示系统处在正常的运行中,同时也作为区分时间和日期显示的标志。对日期和时间的设置,是

33、按位进行的,设置过程中,与正在设置位的对应LED数码管会闪烁,例如当设置分钟的10分位时,L3闪烁;设置分钟的个位时,L4闪烁,用于提示用户输入操作。4.3 系统硬件的控制部分倒计时实时时钟系统控制部分的硬件电路如图4-3所示。系统使用一片ATmega16作为核心控制器器件。显示电路如图4-3所示,它采用动态扫描方式,PB0PB6为7段码输出口,PA0PA7和PC7PC6是10个LED位控制口,其中9个为8段LED数码管的位选线,另外一个是将6个秒闪烁用LED发光二极管的负极并在一起而组成的公共控制P口。PC0PC3接4个按键:SET_1,Up,Enter和SET_2,作为时间、日期设置使用。

34、PD4PD6作为与DS1302通信的串行接口,由于DS1302的串行通信时序是非标自定义的(不是SPI,也不是I2C)模式8,因此在软件中只能采用I/O模拟方式实现。DS1302的数据I/O是双向的OC开路引脚,为了保证通信可靠,外部加一个上拉电阻。DS1302的VCC1接一个可充电的3.6V电池,当系统采用5V供电时,DS1302给电池充电。当系统掉电后,DS1302由电池供电,可以长期保持时钟的正常运行。这个设计非常好地解决了实时时钟掉电运行的问题。将图4-3和图4-2合在一起,就是完整的倒计时实时时钟电路图,由于实际产品使用的是15V驱动的高亮度LED数码管,图4-3中的输出不能直接驱动

35、,因此要完成实际产品,还学要在图与图之间增加由三极管或达林顿管组成的硬件功率驱动电路12。本设计为方便Proteus演示,将这部分电路省掉了,省掉驱动电路,并不影响系统的完整性。图4-3 倒计时实时时钟系统控制部分的硬件电路5 系统软件设计倒计时实时时钟的系统控制软件从功能上包括以下主要部分:系统初始化,DS1302读/写,LED动态扫描及按键识别与处理,剩余天数的计算等。其具体框图如图5-1所示。图5-1 倒计时实时时钟程序框图系统主程序中采用了状态机的分析设计思想,将系统的工作状态分成:正常显示状态、当前日期设置状态、当前时间设置状态和终点日期设置。状态之间的转换通过按键实现,不同状态时的

36、显示方式也不同,如表5-1所列。表5-1 不同工作状态时的显示内容和方式状态显示内容和方式正常显示状态交替显示当前日期和时间,转换间隔时间为15s,秒闪烁标志每秒钟闪烁一次当前时间设置状态显示用户设置时间值,点状LED长亮,当前设置位闪烁当前日期设置状态显示用户设置日期值,条状LED长亮,当前设置位闪烁终点日期设置状态显示用户设置日期值,条状LED长亮,当前设置位闪烁在主程序中采用了分时处理的思想,每隔大约1s读取DS1302中的当前日期值,并进行天数计算;每隔10ms扫描按键,进行按键处理。5.1 时钟芯片控制对DS1302的操作,本系统中没有从低层开始编写驱动程序,而是使用了最方便的方法:

37、直接使用CVAVR软件中提供的对DS1302读写的基本操作函数。由于DS1302是一片常用的典型芯片,所以CVAVR软件直接提供了对它操作的函数和操作实例。有关DS1302芯片的操作时序与有关应用具体可参考本文第3部分的核心芯片介绍。5.2 倒计时信息计算在系统软件中需要计算当前日期与重点日期之间的天数。这个计算工程相对麻烦一些,因为除了需要考虑闰年、大月、小月的天数不同,还要考虑出一个比较快的计算方法。在公历(格里历)纪年中,有闰日的年份叫闰年,一般年份为365天,闰年为366天。由于地球绕太阳运行周期为365天5小时48分46秒(合365.242 19天),即一回归年,公历把一年定为365

38、天,所余下的时间约为4年累计一天,加在2月里,所以平常年份每年365天,2月为28天,闰年为366天,2月为29天。因此,每400年中有97个闰年,闰年在2月末增加一天,闰年为366天。闰年的计算方法:公元纪年的年数可以被4整除,即为闰年;能被100整除,而不能被400整除为平年;能被100整除,也可以被400整除的为闰年。例如2000年是闰年,而1900年不是。下面是计算公历闰年的代码:y_temp = 2000+(int)i; /y_temp为年份数值,4位,例如2007if (y_temp % 400 = 0) | (y_temp % 4 = 0) && (y_temp

39、% 100 != 0) tian += 366; / 闰年为366天else tian += 365; / 通常一年为365天,平年关于大小月的天数计算,在代码中使用了判断语句,如果进行代码优化的话,那么采用查表法可能更为简洁13。5.3 按键检测图5-2 简单按键状态机的状态转换流程图在这个系统中,采用的时间序列周期为10ms,它意味着,每隔10ms检测一次按键的输入信号,并输出一次按键的确认信号,同时按键的状态也发生一次转换。图5-2中“状态0”为按键的初始状态,当按键输入为“1”时,表示按键处于开放,输出“0”(1/0),下一状态仍旧为“状态0”。当按键输入为“0”,表示按键闭合,但输出

40、还是“0”(0/0)(没有经过消抖,不能确认按键真正按下),下一状态进入“状态1”。“状态1”为按键闭合确认状态,它表示了在10ms前按键为闭合的,因此当再次检测到按键输入为“0”时,可以确认按键被按下了(经过10ms的消抖),输出“1”表示确认按键闭合(0/1),下一状态进入“状态2”。而当再次检测到按键的输入为“1”时,表示按键可能处在抖动干扰,输出为“0”(1/0),下一状态返回到“状态0”。这样,利用状态1,实现了按键的消抖处理。“状态2”为等待按键释放状态,因为只有等按键释放后,一次完整的按键操作过程才算完成。从对图5-1的分析中可以知道,在一次按键操作的整个过程,按键的状态是从“状

41、态0”->“状态1”->“状态2”,最后返回到“状态0”的。并且在整个过程中,按键的输出信号仅在“状态1”时给出了唯一的一次确认按键闭合的信号“1”(其它状态均输出“0”)。所以上面状态机所表示的按键系统,不仅克服了按键抖动的问题,同时也确保在一次按键整个的过程中,系统只输出一次按键闭合信号(“1”)。换句话讲,不管按键被按下的时间保持多长,在这个按键的整个过程中都只给出了一次确认的输出,它是一个最简单和基本的按键14数电。该系统共4个按键:SET_1、Up、Enter和SET_2。在正常显示工作状态下,Up和Enter无任何功能,这两个键仅在日期和时间设置状态时才起作用。图5-3

42、是SET_1键的功能状态转换图。图5-3 按键SET_1功能状态转换图在正常显示状态时,按一下SET_1键,转入当前时间设置1状态,此时第1位数码管闪烁,提示用户现在是设置时的高位(见图5-3);如果再继续按SET_1键,进入当前日期设置1状态,同样第1位数码管闪烁,提示用户现在是设置年的高位;如果再按SET_1键,则返回正常显示状态。在按键设置过程中,只要在10s内没有按键操作,将放弃本次的设置,自动返回正常显示状态。时间设置子状态转换过程(当前时间设置为状态2)如图5-4所示。图5-4 时间设置子状态转换图设置过程按位进行,Up键的作用是将当前设定位的数加1;Enter键确认当前设置,进入

43、下一位的设置。处于当前设定位的数码管闪烁显示,以提示用户。只有第6次按Enter键后,系统才正式确认用户的全部设置,并将其写入DS1302。同样,只要在10s内没有按键的操作,将放弃本次操作,自动返回正常显示状态。SET_2键的功能与SET_1键类似,它转入的是终点日期的设置状态。当前日期和终点日期的设置操作与图5-4所示的转换过程类似。另外,在用户设置过程中,系统对用户的设定进行了自动的限定处理,时、分、秒、月份、日期都要做限定。例如,月份最高不能出现大于12的数字,那么当前设置月份的高位时,无论按多少次的Up键,该位数字智能限定在0和1之间转换;当月份低位数字大于3时,设定月份的高位为1后

44、,低位数字会自动清为0;转入设置月份的低位时,如果月高位已经为1了,那么低位数字智能在0、1、2这三个数字之间转换。总之按键的过程尽量做到精益求精,尽量做到人性化的设计。考虑到使用者并非专业人员,绝对有可能胡乱按键,在这种情况下,要依靠程序来确保正常运行。6 系统调试整个系统功能的实现,调试是关键。6.1 硬件调试硬件调试是确保电路正常工作的重要保证。对硬件电路的调试首先是动态显示部分的调试, 可以将驱动电路与LED显示电路部分一起调试,将驱动电路与LED显示电路在Proteus上画出,然后直接给电路一组高或低的电平对应特殊的段码或位码, 看显示的效果, 以此判断LED是否正常。图6-1 倒计

45、时实时时钟系统基于Proteus的硬件仿真图通过送入特殊的段码,动态显示部分可以显示送入的段码。在动态显示部分正常工作的基础上,根据系统硬件设计在Proteus上画出整个系统原理图,然后点击Play(注意,此时并没有加上系统程序),根据硬件各连接点的电位,判断其是否连接正确。其电路图如图6-1所示。6.2 软件调试CVAVR软件的主工作窗口如图6-2所示。图6-2 CVAVR主工作窗口系统软件主要包括以下几个模块:DS1302读/写,LED动态扫描及按键识别与处理,剩余天数计算。首先处理好LED动态扫描函数模块,每隔2ms扫描一次,使仿真效果达到不闪烁,亮度均匀即可。然后根据CVAVR软件直接

46、提供的对DS1302读/写的基本操作函数对其进行调试,使数码管能够显示实时时间即完成对DS1302的读操作,写操作亦可从后面按键识别与处理模块完成后实现验证。按键采用状态机编程思想,每隔10ms读取一次键值,能够有效的到达消抖处理,该部分程序作为模块化可被移植,也很容易验证完成。通过CVAVR上的编译,在软件语法无错误的基础上,对整个软硬件系统的联调,主要检查各工作状态时显示的内容效果以及按键效果测试。经过这几步的调试后,可以得到初步的实验效果,再根据一些如精度要求的细节去细调系统使之完善。经过软硬件的联调,系统达到了课题的要求。6.3 软硬联调效果展示系统默认终点日期为北京奥运会日期即08/08/08,由于终点日期小于当前日期,所以倒

温馨提示

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

评论

0/150

提交评论