嵌入式2410模拟时钟源代码实例.docx
- 文档编号:10880702
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:12
- 大小:98.05KB
嵌入式2410模拟时钟源代码实例.docx
《嵌入式2410模拟时钟源代码实例.docx》由会员分享,可在线阅读,更多相关《嵌入式2410模拟时钟源代码实例.docx(12页珍藏版)》请在冰点文库上搜索。
嵌入式2410模拟时钟源代码实例
模拟时钟
1项目需求分析:
1.1主要设计思路:
本设计主要利用S3C2410内部的RTC模块来实现。
此模块具有掉电模式下依然能够正常工作的特性,本设计中RTC模块通过外部的电池工作。
模拟时钟的时间显示功能是通过读/写寄存器实现的,要显示秒、分、时、日期、月、年,CPU必须读取存于BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON与BCDYEAR寄存器中的值,时间的设置也是通过以上的寄存器实现的,即以上寄存器是可读可写的。
1.2需要完成的目标和采用的主要方法:
需要在LCD屏幕上显示一幅背景图片和一个时钟的钟盘,并在LCD屏幕的左上角和右下角分别显示项目名称和项目组成员;
需要初始化时间,将年、月、日显示在LCD屏幕左边;钟盘里的分针,时针,秒针显示初始化的时间,并延时半分钟后开始走动;
需要更新分针,时针,秒针的实时位置;
需要在时钟走动时修改时间,并将修改后的年、月、日、时、分、秒都显示出来。
2.项目分工
2.1组员姓名及分工
本项目由张博和章冀伟共同完成,其中张博负责完成背景效果、表盘绘制和Rtc初始时间设置,章冀伟负责完成时分秒针的走动显示和修改时间,两人共同完成程序的调试。
2.2完成情况
每个人都成功完成各自部分,并且协同调出最终结果。
2概要设计
3.1软件流程图:
延时半分钟后时钟自动开始走动
是
否
3.2详细框图
3.2硬件流程图
主要包括三个模块,键盘输入用来设置调整时间,ARM完成数据处理功能,LCD显示时钟。
3.3各个子模块及其功能描述
3.3.1时钟背景初始和表盘初始
首先显示一个背景图片和画一个黑色背景半径为130像素的圆,然后以100像素为半径画一个白色圆圈。
在圆圈边显示“3”、“6”、“9”、“12”,并分别在LCD屏幕的左上角和右下角显示“模拟时钟”和“张博”“章冀伟”。
3.3.2Rtc_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)的函数就行。
而分针,时针的走动原理是一样的,只是要注意计算正确之间的进位关系。
具体程序如下:
voidsec_move(inta,intb)//画秒针
{
Glib_Line(320,240,oldxs,oldys,0x00000000);
Glib_Line(320,240,a,b,0xffffff00);
oldxs=a;
oldys=b;
}
voidmin_move(inta,intb)//画分针
{
Glib_Line(320,240,oldxm,oldym,0x00000000);
Glib_Line(320,240,a,b,0xffffff00);
oldxm=a;
oldym=b;
}
voidhou_move(inta,intb)//画时针
{
Glib_Line(320,240,oldxh,oldyh,0x00000000);
Glib_Line(320,240,a,b,0xffffff00);
oldxh=a;
oldyh=b;
}
voidtime_set(intsec,doublemin,doublehour)//初始指针位置
{
intxs,ys,xm,ym,xh,yh;
doubletemp;
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.10472));
hou_move(xh,yh);
}
}
实现修改时间,首先要判断是否有7279的输入,然后再判断输入的是否是“A”键,如果是,则从串口接受数据,设置Rtc的初始时间,否则,时钟继续走。
unsignedcharkey_get()//获取键盘信息
{
unsignedcharkey_number;
key_number=read7279(CMD_READ);
switch(key_number)
{
case0x03:
key_number=0;break;
case0x0b:
key_number=1;break;
case0x13:
key_number=2;break;
case0x1b:
key_number=3;break;
case0x04:
key_number=4;break;
case0x0c:
key_number=5;break;
case0x14:
key_number=6;break;
case0x1c:
key_number=7;break;
case0x05:
key_number=8;break;
case0x0d:
key_number=9;break;
case0x15:
key_number=10;break;
case0x1d:
key_number=11;break;
case0x06:
key_number=12;break;
case0x0e:
key_number=13;break;
case0x16:
key_number=14;break;
case0x1e:
key_number=15;break;
default:
key_number=0xff;break;
}
returnkey_number;
}
while
(1)//时钟进入走到状态
{
for(i=0;i<800000;i++);//延时一秒
key_number=key_get();//获取键盘信息
if(key_number==10)//假如按下“A”键
{
Rtc_TimeSet();//初始化时间
year=rBCDYEAR;//读当前时间
month=rBCDMON;
date=rBCDDATE;
hour=rBCDHOUR;
min=rBCDMIN;
sec=rBCDSEC;
time_disp(year,month,date);//显示年月日
time_set(sec,min,hour);//画指针
n1=sec;
n2=min;
n3=hour;
}
n1++;
if(n1==60)
{
n1=0;
n2++;
if(n2==60)
{
n2=0;
n3++;
}
if(n3==24)n3=0;
}
time_set(n1,n2,n3);//画指针
}
}
5调试结果和改进方案
5.1调试结果
调试过程中发现如下问题:
1.秒针不动。
2.秒针走动正确,分针走动正确,时针走动不正确。
3.调整时间后,改变后的年月日和上次的年月日重叠在一起。
解决办法:
1.有些实验箱RTC没有正确记数,换箱子即可。
2.应该是每走12分钟时针走一格。
4.应该先将上次的时间清除后再显示现在的时间。
5.2改进方案
1.目前时钟还没有设计闹钟功能,可以考虑通过串口接受闹钟时间,并使用RTCALARMCONTROLREGISTER这个寄存器。
2.填充钟面底色采用的是不断画圆的方式,导致有一些像素点没有涂上颜色,可以用逐行填充的方法,效果会好些。
3.清除年月日采用的是涂黑的方式,可以考虑用异或的处理方式,速度更快、效果更好。
5.参考文献
[1]周立功.ARM微控制器基础与实战(第二版)
北京:
北京航空航天大学出版社,2005:
48-561
[2]嵌入式系统软件模拟及硬件接口设计的快速验证
电子与信息学报2004年第10期
[3]嵌入式多媒体应用中的片上存储器分配
《电子学报》2005年第11期
[4]嵌入式软件仿真开发系统的研究
《电子学报》2000年第03期
[5]孙天泽袁文菊张海峰.嵌入式设计及Linux驱动开发指南北京:
电子工业出版社2005:
79-41
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 2410 模拟 时钟 源代码 实例