- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
研究生课程论文
电子时钟设计
课程名称 嵌入式系统设计
姓 名
学 号
专 业 信号与信息处理
任课教师
开课时间 2010年
教师评阅意见:
论文成绩 评阅日期
课程论文提交时间: 2010年 8 月 1 日
摘要:电子时钟,与传统的机械钟相比,它具有走时准确、显示直观,无机械装置等优点。随着现代数字技术的发展,广泛的应用于各个生活生产领域,如时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备等等。?本次课程设计具有最简单的计时功能及调整时间的功能。为核心,并以为程序设计为基础,构成一个简单的电子时钟。通过能够准确显示时间,时、分、秒,并且可以通过按键进行校时。??关键字:?? 电子时钟??校时
日期设置:通过开发板上的17键数字小键盘修改当前的日期
时间设置:通过开发板上的17键数字小键盘修改当前的时间
2、电子钟
获取系统的当前时间,把系统时间显示在一个文本框中,并可以通过键盘设置修改。
3、表 盘
时钟表盘是通过画一个圆,并对其进行60等分来实现。对圆进行等分是先确定两个坐标点,坐标点的横坐标恰好是对应夹角与半径的正弦值,纵坐标等于对应夹角与半径的余弦值,然后利用API函数来画线和显示刻度值。
4、表针显示和走动
首先通过函数取得时钟的时数,分数和秒数,然后利用当前时间(时,分,秒)相对于零点(12点)的数学关系,分别求出时针,分针,秒针图形长度的终点像素坐标,再用不同颜色通过画线命令以表盘原点为起点分别画出时针,分针,秒针,这样即可在屏幕上显示当前时间。
按钟表走动的原理,设计秒针每隔一秒走动一次,当秒针走完60秒,也就是秒数为零时,分针走动一分,当分针每走5分钟或10分钟的同时,时针走动一下,如此循环就完成了表针的走动操作,实际编程时,先取得秒数,分数,时数,换算成屏幕像数点坐标,再用画线命令显示秒针,分针及时针,显示表针图形走动的同时,还要考虑表针走动后,前一个表针图形不能留在屏幕上,以及表针重合时不能覆盖背景屏幕。
三、操作系统多任务设计:
uc/os-Ⅱ操作系统支持多任务,本设计除了主任务Main_Task外,还创建了时钟更新显示的任务,表盘和数字时钟更新显示任务分别为My_Clock_Task、Rtc_Disp_Task。系统主任务完成键盘, LCD刷新等。
电子时钟更新任务程:
Rtc_Disp_Task完成系统时钟的日期和时间的更新显示,其程序流程图如下图2-2所示:
图2-2 电子时钟更新显示任务程序流程图
附件:
程序:
#include..\ucos-ii\includes.h /* uC/OS interface */
#include ..\ucos-ii\add\osaddition.h
#include ..\inc\drv.h
#include ..\inc\drv\OSFile.h
#include ..\inc\drv\Display.h
#include string.h
#include math.h
#include ..\inc\def.h
#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihosting
///******************任务定义***************///一个任务通常是一个无限循环,任务返回参数必须定义为void
//主任务
OS_STK Main_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆栈
void Main_Task(void *Id); //Main_Test_Task
#define Main_Task_Prio 12
//实时时钟显示任务
OS_STK Rtc_Disp_Stack[STACKSIZE*4]={0,};
void Rtc_Disp_Task(void *Id);
#define Rtc_Disp_Task_Prio 14
//时钟任务
OS_STK My_Clock_Stack[STACKSIZE*4]={0,};
void My_Clock_Task(void *Id);
#define My_Clock_Task_Prio 15
///**************全局变量定义***************//
文档评论(0)