基于GD32F450开发板的横屏数码电子钟

[复制链接]
1346|2
 楼主| jinglixixi 发表于 2017-6-1 08:33 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2017-6-1 08:35 编辑

     手中的TFT液晶屏是以竖屏的方式工作的,如果直接来实现数码电子钟的显示会是显示效果很拥挤,也是决定以横屏的方式进行显示,显示效果如图所示。
图片1.png

    由于先前显示的图片已经是横屏的,故显示的重点是将数码的显示方式进行转置。实现数码转置显示的函数为Gui_DrawFont_Num32a(),该函数的内容如下:
  1. void Gui_DrawFont_Num32a(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint16_t num)
  2. {
  3.         unsigned char i,j,k,c;
  4.         
  5.         for(i=0;i<32;i++)
  6.         {
  7.                 for(j=0;j<4;j++)
  8.                 {
  9.                         c=*(sz32a+num*32*4+i*4+j);
  10.                         for (k=0;k<8;k++)        
  11.                         {
  12.                                 if(c&(0x80>>k))        
  13.                                 {
  14.                                                   POINT_COLOR=fc;
  15.                                                   LCD_DrawPoint(x+i,y-k-j*8);
  16.                                 }
  17.                                 else
  18.                                 {
  19.                                           if (fc!=bc)
  20.                                                 {
  21.                                                         POINT_COLOR=bc;
  22.                                                        LCD_DrawPoint(x+i,y-k-j*8);
  23.                                                 }
  24.                                 }
  25.                         }
  26.                 }
  27.         }
  28. }
    日期的显示代码为:
  1.         Gui_DrawFont_Num32a(160, 300,RED, WHITE, rtc_initpara.year/16);
  2.         Gui_DrawFont_Num32a(160, 270,RED, WHITE,rtc_initpara.year%16);
  3.         Gui_DrawFont_Num32a(160, 240,RED, WHITE, 14);

  4.         Gui_DrawFont_Num32a(160, 210,RED, WHITE, rtc_initpara.month/16);
  5.         Gui_DrawFont_Num32a(160, 180,RED, WHITE,rtc_initpara.month%16);
  6.         Gui_DrawFont_Num32a(160, 150,RED, WHITE, 14);

  7.         Gui_DrawFont_Num32a(160, 120,RED, WHITE, rtc_initpara.date/16);
  8.         Gui_DrawFont_Num32a(160, 90,RED, WHITE, rtc_initpara.date%16);
    由于日期的显示明天才变化一次,故不宜简单的放在时间的显示函数中,否则会空浪费MCU资源。可通过对小时的数值判别来决定是否进行更新显示。
       时间的显示代码则是放在时间显示函数中,该函数的内容为:
  1. void rtc_show_time(void)
  2. {
  3.     uint32_t time_subsecond = 0;
  4.     uint8_t subsecond_ss = 0,subsecond_ts = 0,subsecond_hs = 0;
  5.     rtc_current_time_get(&rtc_initpara);  
  6.     /* get the subsecond value of current time, and convert it into fractional format */
  7.     time_subsecond = rtc_subsecond_get();
  8.     Gui_DrawFont_Num32a(200, 300,RED, WHITE, rtc_initpara.hour/16);
  9.     Gui_DrawFont_Num32a(200, 270,RED, WHITE,rtc_initpara.hour%16);
  10.     Gui_DrawFont_Num32a(200, 240,RED, WHITE, 11);

  11.     Gui_DrawFont_Num32a(200, 210,RED, WHITE, rtc_initpara.minute/16);
  12.     Gui_DrawFont_Num32a(200, 180,RED, WHITE,rtc_initpara.minute%16);
  13.     Gui_DrawFont_Num32a(200, 150,RED, WHITE, 11);

  14.     Gui_DrawFont_Num32a(200, 120,RED, WHITE, rtc_initpara.second/16);
  15.     Gui_DrawFont_Num32a(200, 90,RED, WHITE, rtc_initpara.second%16);
  16. }


youminlee 发表于 2017-6-1 09:32 | 显示全部楼层
谢谢分享
 楼主| jinglixixi 发表于 2017-6-2 09:05 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

525

主题

2963

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部