1、时间日期设置功能,闹钟设置功能,整点报时功能显示当日数功能,显示当月日历功能支持触摸屏操作和小键盘输入采用的工具法UP-NETARM3000 嵌入式开发平台ADS1.2集成开发环境JTAG仿真器驱动程序超级终端通信程序进度安排第1天 系统的初步设计第2-5天 编代码,实现系统功能第6-7天 系统的调试与完善参考资料1基于ARM的嵌入式系统设计实验与实践教程,清华大学出版社,2011.2嵌入式系统开发原理与实践,清华大学出版社,2005.3ARM微处理器应用开发技术详解与实例分析电子科技大学出版社,20071. 题目2. 系统简介二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界
2、钟表业界的第三次革命。使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的式发展为人们日常更为熟悉的夜光数字显示式,直观明了,并增加了全自动日期、星期以及其他日常附属信息的显示功能,它更符合消费者的生活需求。因此,电子万年历的出现带来了钟表计时业界跨跃性的进步。如今电子万年历飞入了寻常百姓家,挂式、台式以及带装饰画面等丰富的电子万年历数不胜数,不但满足了精准的计时需求,还将计时带上了科技时尚的味道。ARM嵌入式技术可进行多种功能的设置,如闹钟、报时、日历查询、语音等;并改善了很多原有英钟不能解决的问题,例如:数字夜光显示、数据存储以及全自动温度检测等功能;这给传统计时消费带来了
3、新的动力,越来越多的消费者选择了电子万年历。所以,我们这次嵌入式课程设计的题目选为电子万年历。本数字万年历系统实现了以下功能:1.显示年、月、日和时间,支持LED和LCD两种式显示;2.时间显示式有两种:文本式,图形式;3.时钟加入背景图片,并且图片可以根据季节变化,整体界面美观;4.能通过小键盘调节万年历的年、月、日、时、分、秒;5.定时闹钟提醒功能和整点报时功能;6.显示当月日历,显示当天星期功能;7.掉电后无需重新设置时间和日期。3. 系统设计本次设计是基于ARM微处理芯片并用ADS1.2开发完成的,该万年历能够显示年、月、日、星期、时、分、秒,还有闹钟和整点报时功能,并且可任意设定时间
4、和日期。显示年、月、日和时间的式均支持LED和LCD显示,时间的LCD显示式又分为两种,一种是文本式,另一种是图形式,再配上背景图片,界面非常美观。它还支持触摸屏操作和小键盘,修改时间和日期可以通过小键盘来调节。并且掉电后无需重新设置时间和日期。本系统采用多任务设计。除了系统已定义的任务外,再定义了Main_Task_Prio、Rtc_Disp_Task_Prio和LED_Display_Task_Prio三个任务,任务优先级分别为12、14和和11。通过Main_Task_Prio任务中响应键盘和触摸屏消息,可以对时钟和闹钟进行设置。通过Rtc_Disp_Task实现系统时钟和日历的显示和更
5、新,并判断闹钟时间是否到达并做到达后的相应处理以及判断是否到达整点并进行整点报时。通过LED_Display_Task_Prio实现LED对时间、日期的显示和更新。使用多任务系统中的信号量保证多个任务同时对系统的一个资源(系统时钟)访问而不产生冲突。3.1 LED显示时间和日期万年历启动后,按下“NumLock”按键可以切换LED显示日期或时间,其中年、月、日、时、分、秒均为2位数字,并且每两个数字之间用“-”隔开,并且其显示的时间和日期与LCD屏幕上的时间和日期保持一致,其实现函数是在任务LED_Display_Task_Prio中,任务实时获取系统当前的时间和星期存放于led_curren
6、ttime中,再根据显示时间或日期的标识符led_flag的数值来进入不同的分支以显示时间或日期,其中currenttime是一个自定义的结构体,它存放了当前时间的年、月、日、时、分、秒。通过函数Get_Rtc(&led_currenttime)取得当前的时间信息,并通过调用LED相关的API函数将时间显示出来,通过WriteSDIO(ZLG7289_CMD_DATA0|0)使得,第一个数码管亮,同样使用WriteSDIO(ZLG7289_CMD_DATA0|1)数码管以式0译码,第二个数码管亮,按照同样的法就可以使得其他数码管灯也亮。最后用OSTimeDly(100)将任务挂起一段时间。用这
7、样的式实现LED显示时间和日期。主要代码如下:void LED_Display_Task(void *Id) structTime led_currenttime; Zlg7289_Reset();/zlg7289复位 for(;) Get_Rtc(&led_currenttime);/获取当前时间 ZLG7289_ENABLE();/使zlg7289占有同步串口 if(led_flag=0) /进入显示时间分支 Delay(5);/延时 WriteSDIO(ZLG7289_CMD_DATA0|5);/数码管以式0译码,第6个数码管亮 WriteSDIO(0x0a);/显示- Delay(1)
8、; WriteSDIO(ZLG7289_CMD_DATA0|2);/数码管以式0译码,第3个数码管亮 WriteSDIO(ZLG7289_CMD_DATA0|7);/数码管以式0译码,第8个数码管亮 WriteSDIO(led_currenttime.hour/16);/显示十位 WriteSDIO(ZLG7289_CMD_DATA0|6);/数码管以式0译码,第7个数码管亮 WriteSDIO(led_currenttime.hour%16);/显示个位 WriteSDIO(ZLG7289_CMD_DATA0|4);/数码管以式0译码,第5个数码管亮 WriteSDIO(led_curren
9、ttime.minute/16); WriteSDIO(ZLG7289_CMD_DATA0|3);/数码管以式0译码,第4个数码管亮 WriteSDIO(led_currenttime.minute%16); WriteSDIO(ZLG7289_CMD_DATA0|1);/数码管以式0译码,第2个数码管亮 WriteSDIO(led_currenttime.second/16); WriteSDIO(ZLG7289_CMD_DATA0|0);/数码管以式0译码,第1个数码管亮 WriteSDIO(led_currenttime.second%16); else if(led_flag=1) /
10、进入显示日期分支 WriteSDIO(led_currenttime.year/16); WriteSDIO(led_currenttime.year%16); WriteSDIO(led_currenttime.month/16); WriteSDIO(led_currenttime.month%16); WriteSDIO(led_currenttime.day/16); WriteSDIO(led_currenttime.day%16); Delay(1); ZLG7289_DISABLE();/zlg7289放弃同步串口控制? OSTimeDly(200);3.2 LCD显示文本形式的
11、系统时间、闹钟时间、日期和星期LCD显示文本形式的时间和日期比较简单,时间、日期、星期和闹钟时间的显示都是用文本框显示的,并且时间要实时刷新,所以放在了Rtc_Disp_Task时钟刷新任务里面,其中时间文本框为pTimeTextCtrl,日期文本框为pDateTextCtrl,闹钟文本框为pAlarmTextCtrl,星期文本框为pWeekDayTextCtrl,只要在系统初始时,将文本框初始化,并且在Rtc_Disp_Task任务里面实时提取当前系统时间,以显示系统时间为例,获取当前系统时间的函数为Get_Rtc(¤ttime),它把时间信息存入currenttime,然后将c
12、urrenttime中的时间存入strtime,最后再用SetTextCtrlText(pTimeTextCtrl, strtime,TRUE)语句便将时间显示到系统时间文本框中,类似的其他文本框显示也是用这种式。比较特殊的是星期的显示,需要先根据年月日计算出当前是几,然后再根据几设定显示的字符,其中计算星期的函数如下:U8 GetSysWeek(U8 year,U8 month,U8 day) U8 y,m,d,w; U8 c = 20; y = (year4)*10+(year&0x0f); /bcd转dec m = (month4)*10+(month& d = (day4)*10+(day& if(m2) m+=12; y-=1; w=y+(y/4)+(c/4)+(26*(m+1)/10)+d-1-(2
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1