您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页基于单片机的万年历

基于单片机的万年历

来源:飒榕旅游知识分享网
电子系统课程设计 20071202 陈文甲

电子系统设计报告

任务名称:学生姓名: 指导老师;

时间显示电路 陈文甲

陈汉林

20071202 电子系统课程设计 20071202 陈文甲 【摘要】

本系统以ATmega16型单片机为主控系统,通过软件编程实现对整个系统时间系统地控制。整个时间系统,通过单片机自带的DS1302控制整个系统的时钟,通过LCD1602A液晶显示器显示日期和时间,通过单片机最小系统自带的四个按键实现对时间地切换和调节。通过时钟控制、时间调节和切换以及单片机中软件地控制,实现整个系统的协调运作。整个系统中,单片机是核心,DS1302控制整个系统地运作,而LCD1602A和按键实现时间地显示和调节。

【关键词】 单片机 时间显示 切换

Time Display Circuit

【Abstract】

This design choose ATmega16 microcontroller, time clock chip DS1302 as counting part, an external LCD1602 as display part, to achieve the display circuit showing year,month,day,hour,minute, second. Use Code Vision SCM building environment and external hardware circuit to complete time display. Use button to switch the date and time, use button to achieve the number flashes on the LCD screen, and under the conditions of flashes use button to adjust the date and time.

【Key Words】Time Display ATmega16 Button Display

电子系统课程设计 20071202 陈文甲

·一、设计要求

设计一个年、月、日及时、分、秒的显示电路。时钟芯片采用DS1302,键盘输入及显示采用串行专用键盘/显示控制芯片HD7279;电路具有年月日及分时秒显示功能,其中日期及时间的显示通过两个键进行切换。电路具有初始化时间的功能。

·二、设计原理及方案

1、设计原理

为了满足系统要求,本系统设计采用高效低功耗的ATmega16型单片机作为主控MCU,采用时钟芯片DS1302为核心控制部件,为简化电路连接采用LCD1602A实现显示,通过ATmega16向DS1302及LCD1602A发送指令,完成时间的显示、调整和计时等。 2、设计方案

由于设计主要要求功能的实现,而对具体的芯片使用不做具体要求,我们放弃使用外围电路比较复杂的数码管和HD7279,而采用液晶LC1602A。设计主要通过编程实现,使用单片机自带的DS1302芯片和按键,通过编程实现引脚配置,液晶LC1602A采用外接。采用4个按键,分别实现年月日及时分秒的切换、实现各位的上调下调、选择调整位闪烁时进行调整。

·三、系统硬件设计

1、为简化硬件内容,充分发挥实验室器材的利用,我们选用单片机课上所用到得ATmega16最小系统作为硬件实现平台。

2、计时采用ATmega16最小系统自带DS1302芯片,它是一种高性能、低功耗、带RAM的实时时钟电路,内含年、月、日、时、分、秒、星期七个寄存器,可以对年、月、日、时、分、秒、星期进行计时,具有闰年补偿功能。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。管脚图如图1所示。

图1 DS1302管脚图

电子系统课程设计 20071202 陈文甲

图2 DS1302寄存器图

特别注意的是,在使用DS1302芯片时,一定要先启动时钟,即将秒寄存器最高位CH位置为0,启动时钟,这样DS1302才可以正常使用。对于年、月、日、时、分、秒的显示,可通过CV自带函数进行读取。具体如下: DS1302的编程语句:

rtc_init(0,0,0); //初始化

rtc_set_time(0,0,0);//时间初值 rtc_set_date(16,9,05);//日期初值

rtc_get_date(&date[0],&date[1],&date[2]); //得到日期 rtc_get_time(&time[0],&time[1],&time[2]); //得到时间

3、为简化电路连接,显示部分外接LCD1602A,可分别显示时间或日期。点阵字符式液晶显示器一般是一个功能模块,它由小面积的液晶显示屏和驱动电路组合而成。模块内置有192种字符、数字、字母、标点等可显示的字型点整图形库,并提供可控制的并行或串行接口以及通信协议。市场上常见的有1行、2行、4行,每行可显示8、12、16、24、32个点阵字符的功用液晶显示器。由于LCD1602A点阵字符液晶显示模块在国际山已经规范化,所以在CVAVR平台的支持先,用户使用这类LCD点阵字符显示器就比较方便,只要写几条语句,调用CVAVR的LCD提供的函数,就能把要显示的信息在LCD上显示出来。具体链接方式可参照单片机课本193页图。

电子系统课程设计 20071202 陈文甲

图3 LCD1602管脚图

LCD1602自带函数:

void lcd_init(unsigned char lcd_colums) //对LCD进行初始化,并清除LCD的显示,将显

示位置回到第0行,第0列的其实位置处

void lcd_clear(void) //清除LCD的显示,并将显示位置回到第0行、第0列的起始位置处。 void lcd_gotoxy(unsigned char x, unsigned char y) //显示位置定位于第x列第y行的位置处。 void lcd_putchar(char c) //将字符c在当前的显示位置上显示出来。

void lcd_puts(char *str) //将从当前的显示位置开始,显示定义在SRAM中的字符串。 void lcd_putsf(char flash *str) //将从当前的显示位置开始,显示定义在Flash中的字符串。

4、采用4个按键,分别实现年月日和时分秒的切换,选择调整位闪烁时进行调整,实现 各位的上调和下调。对于区分大小月份和平润年,可通过软件方法来实现,具体分析为:1~7月:逢单月为31天;逢双月为30天,其中2月另行处理。8~12月:逢单月为30天;逢双月为31天。平年、闰年:仅仅处理2月份的天数:平年的2月份天数为28天,闰年的2月份天数为29天。为防止按键出现抖动,特意在程序中添加按键防抖程序,用以实现按键功能。

5、整体电路图如下:

电子系统课程设计 20071202 陈文甲

·四、系统软件设计

使用Code Vision环境进行编程。通过编程配置引脚PB7-PB4接14-11,6、5、4接pb2、pb1、pb0 ,1302的7、6、5接pc2、pc3、pc4 ,pa0控制日期与时间显示切换,pa1 上调,pa2 下调,pa3 选择调整位。 1、软件总体设计流程图

图4 软件设计总体流程图

2、日期/时间的显示程序

因为CV中带有现成的函数库,所以在程序中可直接调用即可。 rtc_get_date(&time[3],&time[4],&time[5]) //通过访问time数组的地址,DS1302芯片获取日期 r=time[3];y=time[4];n=time[5] //将time数组内的值分别赋给年、月、日;

lcd_gotoxy(0,0); //液晶将光标定位到第0行、第0列开始显示

sprintf(lcd_buffer,\"%4d/%2d/%2d\ //从DS1302获取数据至LCD1602缓冲区,将 液晶缓冲区内的数据显示在液晶屏上;

lcd_puts(lcd_buffer); //控制出错,如果数据不是10进制形式,则以其ASC-II码显示; (2)日期/时间的显示流程图

电子系统课程设计 20071202 陈文甲

图5 日期/时间的显示流程图

3、按键防抖程序则利用状态机来实现,状态分为按键初始态、按键确认态和按键释放态。

·五、设计过程中遇到的问题及其解决

本次课程设计可谓是重重困难,收获颇丰。特别是在调试软硬件的过程中,发现了一系列的问题,同时也对DS1302芯片的使用有了更加透彻的认识。具体问题可归纳为一下几方面:

第一种情况是液晶显示时间为零。也就是说数据没有写入DS1302,或者是没有读出来。此时我们应该检查DS1302的RST,I/O,SCLK三端口是否与单片机接触良好。如果接触良好,那么应该可以显示出预设时间和日期了。

第二种情况是液晶可以显示预设时间,但时间不动。这就是时间显示的问题了或是

电子系统课程设计 20071202 陈文甲

DS1302晶振不起振的问题了。那么我们应该先检查液晶与单片机连接是否正确。如果连接正确,则可检查DS1302的晶振是否起振。可通过示波器进行检测。

第三种情况,如何解决DS1302晶振不起振问题。可检查上电后系统是否向DS1302晶振写入启动命令,即将秒寄存器最高位CH置零。将其置零后在查看液晶,如果时间仍然不动,那多半是板子的问题,可尝试换换单片机实验板。

·六、结论

对于本次实验,我始终本着严谨认真的态度来进行,希望自己能够有所收获。因此,实验之初我便坚持来实验室进行设计研究。在编程之前,我们小组详细研读了单片机课本关于DS1302时钟芯片的相关内容,对其管脚、寄存器、时序、读写控制字都有了清楚的认识。软件方面选取Code Vision环境进行编程,因为Code Vision软件中自带了函数库,其中已经包含了DS1302、LCD1602的函数,因此可在主函数中直接调用,使编程变得相对简单,同时也使我体会到了科技的强大。

在调试软硬件的过程中,我们小组也出现了一系列的问题,特别是时钟不动这个问题困扰了我们很久。但我们没有气馁,在老师的帮助下,我们利用示波器查看晶振是否起振,通过网上查阅资料进行改正,成功解决了相关问题,感觉很有成就感。

参考文献

[1]马潮.AVR单片机嵌入式系统原理与应用实践.北京:北京航空航天大学出版社,2007.10.

[2]ATMEL.ATmega16 Data Book. http://www.atmel.com

[3]张克彦.AVR单片机实用程序设计[M].北京:北京航空航天大学出版社,2004. [4] LCD1602A_cn. http://www.elecfans.com/soft/softdown.asp?softid=463

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务