论文部分内容阅读
【摘要】本文介绍了一种基于Windows CE 6.0操作系统的模拟时钟的设计方法,该设计以三星公司的S3C2440为核心,基于MFC编程,实现了钟面上时分秒针的实时显示。本设计编译生成的.exe文件可做为Windows CE系统的一个应用程序使用。
【关键词】ARM;S3C2440;Windows CE;模拟时钟
1.引言
随着科学技术的发展,嵌入式设备广泛应用于商业管理和工业控制等领域。本设计以ARM9嵌入式微处理器S3C2440为核心,基于MFC编程,在开发板的液晶显示屏上显示模拟时钟,实现了时分秒针的实时显示。
2.硬件平台
本设计以ARM9嵌入式微处理器S3C2440开发板为核心,主要利用S3C2440内置的RTC模块,通过读取系统时间来实时绘制时针,实现模拟时钟的实时走动。
3.软件设计
3.1 对话框设计
建立工程之后,在Resource View中设计模拟时钟的界面,选定一个与S3C2440触摸屏相符的对话框界面。模拟时钟的显示用程序实现,在对话框下方放置从Toolbox中选择的控件。本设计总共用到九个控件:对话框控件,显示时分秒的静态文本控件,用于显示数字的动态控件,更改时间的控件和确定控件等。
3.2 程序设计
首先添加一个OnTimer()函数读取系统时间并用作计时器的消息处理函数,用于通知moniDlg类中的画表盘刻度和指针的函数重新绘图。添加设置时间按钮函数,用于导出软键盘,设置时间;确认按钮函数用于关闭软键盘,此时屏幕刷新。
3.2.1 表盘刻度画法
在moniDlg类中添加画表盘刻度的函数。程序创建两种画笔,设置不同的颜色和粗细,来区分整点时刻和分点时刻。
由于S3C2440开发板显示屏默认的原点在左上角,根据S3C2440触摸屏的大小确定圆心位置,这样就确定了表盘的位置,表盘上的刻度都在以圆心为中心的圆环上。其坐标可以通过三角函数推导出来。设圆心坐标为(X,Y),半径为R,表盘上其他点的坐标为(X1,Y1),该点与圆心X轴夹角为A(0~360度),该点坐标为(X1=X+RcosA,Y1=Y+RsinA)。
由于我们习惯上使用逆时针的角度,而表针是顺时针转动,即在S3C2440上,坐标跟我们实际用到的坐标方向不同,所以我们应先算出从12点开始的每个刻度的正余弦值,即有60个数组元素的正余弦数组,为计算每个刻度跟时分秒针在表盘中的位置做准备。校正后的角度值,按顺时针重新排列三角函数值,得到如下正余弦数组:
时钟表盘画法流程图:见图1。
画表盘核心代码:
3.2.2 指针画法
在moniDlg类中添加刻画指针的函数。时分秒针主要用长短和粗细区分,亦可设置指针颜色。绘制指针以角度值为控制变量,根据前面画表盘计算出的校正后的角度值及定义的时分秒针的长度,算出时分秒针起始的坐标值。利用读取的系统时间算出坐标,用函数MoveTo(x1,y1)和LineTo(x2,y2)实现指针的连接并实时显示。为了让模拟时钟看起来更加平滑美观,本文设计每2分钟,时针移动1度;每10秒钟,分针移动1度;秒针则是每秒移动一格即6度。因此要计算时分秒针的坐标位置,还需在校正后角度的三角函数正余弦数组中加入一定的数组元素,构成新的三角函数正余弦数组:
(1)时针的取值只有1~12这12个数字,本文设计每2分钟,时针移动1度。此处用读取的分钟数和小时数来计算时针的顶点和终点坐标。设读取系统时间的小时数为st.wHour,分钟数为st.wMinute,时针移动的度数为H。由于S3C2440系统时间采用24小时制,当读取系统小时数小于等于12,则H=st.wHour*30+st.wMinute/2;当系统小时数大于12,则H=(st.wHour—12)*30+st.wMinute/2。若得到的H=360,则取H为0;若H<360,则H取式中算出的值。将算出的H代入下列公式,即可算出时针的顶点和终点坐标。其中x和y为表盘圆心坐标,下同。
(2)分针的取值是60个数字,本设计为每10秒分针移动1度。用读取的分钟数和秒钟数来计算分针的顶点和终点坐标。设读取的分钟数为st.wMinute,秒钟数为st.wSecond,分针移动的度数为M。由于要使得每10秒分针移动1度,因此计算时要加上st.wSecond/10。M=st.wMinute*6+st.wSecond/10,当计算后M=360,则取M为0。将算出的M代入下列公式,即可算出分针的顶点和终点坐标。
(3)秒针的取值亦为60个数字,本设计为每过1秒钟,秒针移动1格。设读取系统的秒钟数为st.wSecond,秒针移动的度数为S。S=st.wSecond*6,当计算出的S=360时,S取0;否则取计算出的值。将算出的S代入下列公式,即可算出秒针的顶点和终点坐标。
时钟指针画法流程图:见图2。
绘制指针的核心代码:
程序界面设计结构为上方显示模拟钟,下方显示数字钟和时间调整按钮。本设计程序在一个显示界面下实现了模拟钟、数字钟和时间调整的功能。程序运行效果如图3所示。指针和刻度颜色可根据个人喜好设定,笔者设置为黑色。
5.结语
本文的设计在Windows CE操作系统下,实现了模拟钟的全部显示功能,同时还具有数字鐘的显示和时间调整功能。编译形成的可执行文件,可用于智能手机、PDA、带触屏的开发板等具有Windows CE系统的微型设备中,对嵌入式初学者也有很大的帮助。
参考文献
[1]blogercn的专栏 一个模拟时钟[EB/OL].http://www.52rd.com/Blog/Detail_RD.Blog_blogercn_20940.html,2009—8—9/2012—9—20.
作者简介:
侯秋华(1986—),女,硕士研究生,主要研究方向:信号检测与信息处理。
刘炜(1963—),男,副教授,硕士生导师,主要研究方向:智能仪器。
【关键词】ARM;S3C2440;Windows CE;模拟时钟
1.引言
随着科学技术的发展,嵌入式设备广泛应用于商业管理和工业控制等领域。本设计以ARM9嵌入式微处理器S3C2440为核心,基于MFC编程,在开发板的液晶显示屏上显示模拟时钟,实现了时分秒针的实时显示。
2.硬件平台
本设计以ARM9嵌入式微处理器S3C2440开发板为核心,主要利用S3C2440内置的RTC模块,通过读取系统时间来实时绘制时针,实现模拟时钟的实时走动。
3.软件设计
3.1 对话框设计
建立工程之后,在Resource View中设计模拟时钟的界面,选定一个与S3C2440触摸屏相符的对话框界面。模拟时钟的显示用程序实现,在对话框下方放置从Toolbox中选择的控件。本设计总共用到九个控件:对话框控件,显示时分秒的静态文本控件,用于显示数字的动态控件,更改时间的控件和确定控件等。
3.2 程序设计
首先添加一个OnTimer()函数读取系统时间并用作计时器的消息处理函数,用于通知moniDlg类中的画表盘刻度和指针的函数重新绘图。添加设置时间按钮函数,用于导出软键盘,设置时间;确认按钮函数用于关闭软键盘,此时屏幕刷新。
3.2.1 表盘刻度画法
在moniDlg类中添加画表盘刻度的函数。程序创建两种画笔,设置不同的颜色和粗细,来区分整点时刻和分点时刻。
由于S3C2440开发板显示屏默认的原点在左上角,根据S3C2440触摸屏的大小确定圆心位置,这样就确定了表盘的位置,表盘上的刻度都在以圆心为中心的圆环上。其坐标可以通过三角函数推导出来。设圆心坐标为(X,Y),半径为R,表盘上其他点的坐标为(X1,Y1),该点与圆心X轴夹角为A(0~360度),该点坐标为(X1=X+RcosA,Y1=Y+RsinA)。
由于我们习惯上使用逆时针的角度,而表针是顺时针转动,即在S3C2440上,坐标跟我们实际用到的坐标方向不同,所以我们应先算出从12点开始的每个刻度的正余弦值,即有60个数组元素的正余弦数组,为计算每个刻度跟时分秒针在表盘中的位置做准备。校正后的角度值,按顺时针重新排列三角函数值,得到如下正余弦数组:
时钟表盘画法流程图:见图1。
画表盘核心代码:
3.2.2 指针画法
在moniDlg类中添加刻画指针的函数。时分秒针主要用长短和粗细区分,亦可设置指针颜色。绘制指针以角度值为控制变量,根据前面画表盘计算出的校正后的角度值及定义的时分秒针的长度,算出时分秒针起始的坐标值。利用读取的系统时间算出坐标,用函数MoveTo(x1,y1)和LineTo(x2,y2)实现指针的连接并实时显示。为了让模拟时钟看起来更加平滑美观,本文设计每2分钟,时针移动1度;每10秒钟,分针移动1度;秒针则是每秒移动一格即6度。因此要计算时分秒针的坐标位置,还需在校正后角度的三角函数正余弦数组中加入一定的数组元素,构成新的三角函数正余弦数组:
(1)时针的取值只有1~12这12个数字,本文设计每2分钟,时针移动1度。此处用读取的分钟数和小时数来计算时针的顶点和终点坐标。设读取系统时间的小时数为st.wHour,分钟数为st.wMinute,时针移动的度数为H。由于S3C2440系统时间采用24小时制,当读取系统小时数小于等于12,则H=st.wHour*30+st.wMinute/2;当系统小时数大于12,则H=(st.wHour—12)*30+st.wMinute/2。若得到的H=360,则取H为0;若H<360,则H取式中算出的值。将算出的H代入下列公式,即可算出时针的顶点和终点坐标。其中x和y为表盘圆心坐标,下同。
(2)分针的取值是60个数字,本设计为每10秒分针移动1度。用读取的分钟数和秒钟数来计算分针的顶点和终点坐标。设读取的分钟数为st.wMinute,秒钟数为st.wSecond,分针移动的度数为M。由于要使得每10秒分针移动1度,因此计算时要加上st.wSecond/10。M=st.wMinute*6+st.wSecond/10,当计算后M=360,则取M为0。将算出的M代入下列公式,即可算出分针的顶点和终点坐标。
(3)秒针的取值亦为60个数字,本设计为每过1秒钟,秒针移动1格。设读取系统的秒钟数为st.wSecond,秒针移动的度数为S。S=st.wSecond*6,当计算出的S=360时,S取0;否则取计算出的值。将算出的S代入下列公式,即可算出秒针的顶点和终点坐标。
时钟指针画法流程图:见图2。
绘制指针的核心代码:
程序界面设计结构为上方显示模拟钟,下方显示数字钟和时间调整按钮。本设计程序在一个显示界面下实现了模拟钟、数字钟和时间调整的功能。程序运行效果如图3所示。指针和刻度颜色可根据个人喜好设定,笔者设置为黑色。
5.结语
本文的设计在Windows CE操作系统下,实现了模拟钟的全部显示功能,同时还具有数字鐘的显示和时间调整功能。编译形成的可执行文件,可用于智能手机、PDA、带触屏的开发板等具有Windows CE系统的微型设备中,对嵌入式初学者也有很大的帮助。
参考文献
[1]blogercn的专栏 一个模拟时钟[EB/OL].http://www.52rd.com/Blog/Detail_RD.Blog_blogercn_20940.html,2009—8—9/2012—9—20.
作者简介:
侯秋华(1986—),女,硕士研究生,主要研究方向:信号检测与信息处理。
刘炜(1963—),男,副教授,硕士生导师,主要研究方向:智能仪器。