查看: 2537|回复: 1

RT1052 RTC电子时钟

[复制链接]
  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7092
    最后登录
    2023-4-20
    发表于 2018-11-10 10:30:54 | 显示全部楼层 |阅读模式
        在飞凌RT1052的例程中提供一个RTC程序,并可由调试串口来观察和控制,但使用调试串口来观察RTC计时值终有些不便,为此给它配上OLED屏来显示还是比较方便的。由于RTC校时并不经常使用,加上扩展资源比较紧张,校时处理可依旧使用例程中的方法来解决。
        改用OLED屏显示的RTC电子时钟如图所示。
    snap.jpg
    RTC 计时效果


        为进行计时值得显示,改造后的时间读取还是为:
    1. int rx8010_get_time()
    2. {
    3.     uint8_t date[7];
    4.     uint8_t dateRsul[7];
    5.     uint8_t flagreg;
    6.     int err;
    7.     err = I2C_Read(I2C_BASE, RX8010_FLAG,&flagreg,1);
    8.     if (flagreg & RX8010_FLAG_VLF)
    9.         {
    10.                 PRINTF("\r\n Frequency stop was detected\r\n");
    11.                 return 1;
    12.      }
    13.         err = I2C_Read(I2C_BASE, RX8010_SEC,date,7);
    14.         dateRsul[0] = bcd2bin(date[RX8010_SEC - RX8010_SEC] & 0x7f);
    15.         dateRsul[1]=  bcd2bin(date[RX8010_MIN - RX8010_SEC] & 0x7f);
    16.         dateRsul[2] = bcd2bin(date[RX8010_HOUR - RX8010_SEC] & 0x3f);
    17.         dateRsul[4] = bcd2bin(date[RX8010_MDAY - RX8010_SEC] & 0x3f);
    18.         dateRsul[5] = bcd2bin(date[RX8010_MONTH - RX8010_SEC] & 0x1f);
    19.         dateRsul[6] = bcd2bin(date[RX8010_YEAR - RX8010_SEC]);
    20.         dateRsul[3] = date[RX8010_WDAY - RX8010_SEC] & 0x7f;
    21.         OLED_ShowString(4,4,"20");
    22.         OLED_ShowNum(20,4,dateRsul[6],2,16);        
    23.         OLED_ShowChar(36,4,'-');
    24.         OLED_ShowNum(44,4,dateRsul[5],2,16);
    25.         OLED_ShowChar(60,4,'-');
    26.         OLED_ShowNum(68,4,dateRsul[4],2,16);
    27.         OLED_ShowNum(20,6,dateRsul[2],2,16);        
    28.         OLED_ShowChar(36,6,':');
    29.         OLED_ShowNum(44,6,dateRsul[1],2,16);
    30.         OLED_ShowChar(60,6,':');
    31.         OLED_ShowNum(68,6,dateRsul[0],2,16);
    32.         return 0;
    33. }
    复制代码


         显示RTC计时功能的主程序为:
    1. int main(void)
    2. {
    3.         uint8_t datetime[19]={0};
    4.         uint8_t c,ch_num=0;
    5.         /* Board pin, clock, debug console init */
    6.         BOARD_ConfigMPU();
    7.         BOARD_InitPins();
    8.         BOARD_InitI2C1Pins();
    9.         BOARD_BootClockRUN();
    10.         BOARD_InitDebugConsole();

    11.         /* Print a note to terminal. */
    12.         I2C_Init();
    13.         rx8010_init();
    14.         delay();
    15.         delay();
    16.         OLED_Init();
    17.         OLED_Clear();
    18.         OLED_ShowString(20,0,"OK1052-C");
    19.         OLED_ShowString(20,2,"RTC TEST");

    20.       while (1)
    21.       {
    22.              delay();
    23.              rx8010_get_time();
    24.       }
    25. }
    复制代码


    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 23:45
  • 签到天数: 1318 天

    [LV.10]以坛为家III

    124

    主题

    2832

    帖子

    31

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    7575
    最后登录
    2024-4-27
    发表于 2018-11-10 15:53:20 | 显示全部楼层
    支持下,不错            
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-27 11:35 , Processed in 0.126562 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表