其实楼主一直想做个自己的时钟,挂在墙上。
既然有上辑雷达扫描的基础,那么做个时钟指针旋转也就不在话下啦。
所以本辑没有什么技术难点,就是利用STM32库中的画图方法,来描画一个时钟的界面。
用到的函数是这个:void LCD_WriteBMP(uint32_t BmpAddress);
把BMP图片转为数组,然后作为参数传到该函数中,就能够把时钟的表盘画在屏幕上了,
接下来,利用另一个层,根据时间,绘制三个指针,偷个懒吧,指针暂且用画线来代替。
- void DrawPointer(u32 t_s)
- {
- u32 h, m, s;
- s32 x, y;
-
- h = (t_s / (3600/5)) % (12 * 5);
- m = (t_s / 60) % 60;
- s = t_s % 60;
-
- h = ((360 + 90) - h * 6) % 360;
- m = ((360 + 90) - m * 6) % 360;
- s = ((360 + 90) - s * 6) % 360;
-
- memset(&frameBuffer[0xA0000], 0, 0x50000);
-
- x = 40 * fcos[h];
- y = 40 * fsin[h];
-
- LCD_SetTextColor(LCD_COLOR_BLUE);
- LCD_DrawUniLine(120,120,120+x,120-y);
-
- x = 60 * fcos[m];
- y = 60 * fsin[m];
-
- LCD_SetTextColor(LCD_COLOR_BLUE);
- LCD_DrawUniLine(120,120,120+x,120-y);
-
- x = 80 * fcos[s];
- y = 80 * fsin[s];
-
- LCD_SetTextColor(LCD_COLOR_RED);
- LCD_DrawUniLine(120-x/4,120+y/4,120+x,120-y);
- memcpy(&frameBuffer[0x50000], &frameBuffer[0xA0000], 0x50000);
- }
复制代码
其实这样也就大功告成了,接下来就是研究从硬件RTC获取实时时间,不过这部分内容就不在本辑研究啦。
毕竟F4还有点小,挂载墙上就看不清楚时间啦。
上照片,怎么照都不好看,尤其是指针,太细了,正对着屏幕拍照会看不清指针。
真是太挫了。其实我用的表盘是这样的……
总感觉和楼主想象中的东西不一样啊……
好吧,勉为其难的献出源码吧,
RTClock.zip
(513.38 KB, 下载次数: 128)
很悲催的是,那画图函数,只能把图片画在原点起始的位置上,而不能指定其他位置。
当然啦,从楼主的愿望来说,本辑内容只是个实验性质的描画。楼主想要更大的屏幕,并且更省电的屏幕,才能做更实用的时钟,然后挂在墙上。
到那时候,三个指针也应该是图片贴上去的,而不是三条线啦。