查看: 107|回复: 0

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

[复制链接]

主题

好友

4925

积分

状元

  • TA的每日心情
    奋斗
    2019-7-10 13:53
  • 签到天数: 1009 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2017-6-1 11:10:37 |显示全部楼层
    手中的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);}         显示效果如图所示:
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /2 下一条

    手机版|电路城

    GMT+8, 2019-8-24 13:43 , Processed in 0.097634 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz!

    返回顶部