嵌入式_2410__模拟时钟_源代码_实例.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式_2410__模拟时钟_源代码_实例

模拟时钟 1 项目需求分析: 主要设计思路: 本设计主要利用S3C2410内部的RTC模块来实现。此模块具有掉电模式下依然能够正常工作的特性,本设计中RTC模块通过外部的电池工作。模拟时钟的时间显示功能是通过读/写寄存器实现的,要显示秒、分、时、日期、月、年,CPU必须读取存于BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON与BCDYEAR寄存器中的值,时间的设置也是通过以上的寄存器实现的,即以上寄存器是可读可写的。 3.2详细框图 3.2 硬件流程图 主要包括三个模块,键盘输入用来设置调整时间,ARM完成数据处理功能,LCD显示时钟。 3.3 各个子模块及其功能描述 3.3.1 时钟背景初始和表盘初始 首先显示一个背景图片和画一个黑色背景半径为130像素的圆,然后以100像素为半径画一个白色圆圈。在圆圈边显示“3”、“6”、“9”、“12”,并分别在LCD屏幕的左上角和右下角显示“模拟时钟”和“张博”“章冀伟”。 3.3.2 Rtc_TimeSet( )时间初始化 从串口接受数据,设置 Rtc 的初始时间。并将输入的年、月、日显示在LCD屏幕左边;根据输入的时、分、秒画出钟盘里的分针,时针,秒针。延时半分钟后开始走动。 3.3.3更新分秒时位置服务程序部分,实现时分秒钟的走动显示(在LCD和超级终端上显示)。 在LCD上显示时分秒针的走动,具体实现方法是,经过一秒(分)钟后即在下一刻度处绘制秒(分/时)针,同时在前一刻度处画一条颜色与背景相同的针。 3.3.4调整时间 时钟走动时,判断是否有ARM上的“A”键输入,如果有则从串口接受数据,设置 Rtc 的初始时间,并更改年、月、日、时、分、秒。 4.详细设计 要完成时钟的走动,必须要读出BCDHOUR,BCDMIN,BCDSEC里头的数据,根据这个数据来计算新一时刻各个针应该出现在表盘的哪个位置,以及这个位置偏离12点钟的角度,假设一个表盘有60格,那么动一格就需要转动6度。以秒针为例,秒针的新的x,y轴的位置(使用弧度来算) xs= (int) (320 + 100*sin(sec*0.10472) ); ys= (int) (240 - 100*cos(sec*0.10472) ); 通过这个新的位置,调用sec_move(xs,ys)的函数就行。而分针,时针的走动原理是一样的,只是要注意计算正确之间的进位关系。 具体程序如下: void sec_move(int a,int b) //画秒针 { Glib_Line(320,240,oldxs,oldys,0; Glib_Line(320,240,a,b,0xffffff00); oldxs=a; oldys=b; } void min_move(int a,int b) //画分针 { Glib_Line(320,240,oldxm,oldym,0; Glib_Line(320,240,a,b,0xffffff00); oldxm=a; oldym=b; } void hou_move(int a,int b) //画时针 { Glib_Line(320,240,oldxh,oldyh,0; Glib_Line(320,240,a,b,0xffffff00); oldxh=a; oldyh=b; } void time_set(int sec,double min,double hour) //初始指针位置 { int xs,ys,xm,ym,xh,yh; double temp; xs= (int) (320 + 100*sin(sec*0.10472) ); ys= (int) (240 - 100*cos(sec*0.10472) ); sec_move(xs,ys); //画秒针 xm= (int) (320 + 90*sin(min*0.10472) ); ym= (int) (240 - 90*cos(min*0.10472) ); min_move(xm,ym); //画分针 if(hour=12) //画时针 { temp=(5*hour)+(min/12); xh= (int) (320 + 75*sin(temp*0.10472) ); yh= (int) (240 - 75*cos(temp*0.10472) ); hou_move(xh,yh); } else { temp=(5*(hour-12))+(min/12); xh= (int) (320 + 75*sin(temp*0.10472) ); yh= (int) (240 - 75*cos(temp*0.

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档