图
1
(为
LCD
截屏保存在
SD
卡中的图像)
最终界面如下,但还存在不少漏洞。
1
、没有更改时间的设置;
2
、只有节气显示没有节
假日显示
3
、
背景不是用
uCGUI
画的,
是在
PS
中画好然后存在
SD
卡中,
然后显示的
BMP
格式图像。
要点分析:
1
、
STM32
自带了
RTC
时钟计数器,从
0
开始计数到
2
32
。每一个计数代表秒计数,每
六十个计数代表分计数,以此类推。
24
(小时)
*60
(分钟)
*60
(秒钟)
=86400
代表一天
的计数时间。假设当前计数为
count
,
count/86400
得到计数的天数,根据这个得到年月日。
Count%86400
得到时分秒。
2
、一些根据
1
中得到的年月日时分秒,进行计算的程序有:阳历转阴历,闰年判断,
节气判断,星期几计算,当前月有多少天等等。
3
、模拟时钟的绘制:时钟指针运动算法、屏幕重绘方法、
RTC
消息、画笔
/
画刷等。指
针运动算法和屏幕重绘方法是本程序主要难点所在。
(以下参照百度文库之模拟时钟)
不论何种指针,每次转动均以
π
/30
弧度(一秒的角度)为基本单位,且都以表盘中心
为转动圆心。计算指针端点(
x, y
)的公式如下:
x =
圆心
x
坐标
+
指针长度
* cos (
指针方向角
)
y =
圆心
y
坐标
+
指针长度
* sin (
指针方向角
)
注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分)
,由于指针
可能跨越圆心,因此一个指针需要计算两个端点。
由于屏幕的重绘
1
秒钟一次,
如果采用全屏删除式重绘则闪烁十分明显,
显示效果不佳。
本程序采用非删除式重绘,假定指针将要移动一格,则先采用背景色(这里是白色)重绘原
来指针以删除原来位置的指针,再采用指针的颜色在当前位置绘制指针(如果指针没有动,
则直接绘制指针,此句在程序中被我删除,具体原因,为数据截断导致一些误差)
。
另外,秒表为
RTC
一秒钟定时计数。
程序分析: