TA的每日心情 | 奋斗 2023-5-10 20:09 |
---|
签到天数: 1742 天 连续签到: 1 天 [LV.Master]伴坛终老
|
手中的TFT液晶屏是以竖屏的方式工作的,如果直接来实现数码电子钟的显示会是显示效果很拥挤,也是决定以横屏的方式进行显示。
由于先前显示的图片已经是横屏的,故显示的重点是将数码的显示方式进行转置。实现数码转置显示的函数为Gui_DrawFont_Num32a(),该函数的内容如下:
void Gui_DrawFont_Num32a(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint16_t num){ unsigned char i,j,k,c; for(i=0;i<32;i++) { for(j=0;j<4;j++) { c=*(sz32a+num*32*4+i*4+j); for (k=0;k<8;k++) { if(c&(0x80>>k)) { POINT_COLOR=fc; LCD_DrawPoint(x+i,y-k-j*8); } else { if (fc!=bc) { POINT_COLOR=bc; LCD_DrawPoint(x+i,y-k-j*8); } } } } }} 日期的显示代码为:
Gui_DrawFont_Num32a(160, 300,RED, WHITE, rtc_initpara.year/16); Gui_DrawFont_Num32a(160, 270,RED, WHITE,rtc_initpara.year); Gui_DrawFont_Num32a(160, 240,RED, WHITE, 14); Gui_DrawFont_Num32a(160, 210,RED, WHITE, rtc_initpara.month/16); Gui_DrawFont_Num32a(160, 180,RED, WHITE,rtc_initpara.month); Gui_DrawFont_Num32a(160, 150,RED, WHITE, 14); Gui_DrawFont_Num32a(160, 120,RED, WHITE, rtc_initpara.date/16); Gui_DrawFont_Num32a(160, 90,RED, WHITE, rtc_initpara.date); 由于日期的显示明天才变化一次,故不宜简单的放在时间的显示函数中,否则会空浪费MCU资源。可通过对小时的数值判别来决定是否进行更新显示。
时间的显示代码则是放在时间显示函数中,该函数的内容为:
void rtc_show_time(void){ uint32_t time_subsecond = 0; uint8_t subsecond_ss = 0,subsecond_ts = 0,subsecond_hs = 0; rtc_current_time_get(&rtc_initpara); /* get the subsecond value of current time, and convert it into fractional format */ time_subsecond = rtc_subsecond_get(); Gui_DrawFont_Num32a(200, 300,RED, WHITE, rtc_initpara.hour/16); Gui_DrawFont_Num32a(200, 270,RED, WHITE,rtc_initpara.hour); Gui_DrawFont_Num32a(200, 240,RED, WHITE, 11); Gui_DrawFont_Num32a(200, 210,RED, WHITE, rtc_initpara.minute/16); Gui_DrawFont_Num32a(200, 180,RED, WHITE,rtc_initpara.minute); Gui_DrawFont_Num32a(200, 150,RED, WHITE, 11); Gui_DrawFont_Num32a(200, 120,RED, WHITE, rtc_initpara.second/16); Gui_DrawFont_Num32a(200, 90,RED, WHITE, rtc_initpara.second);} 显示效果如图所示: |
|