在线时间694 小时
UID406727
注册时间2012-12-12
NXP金币13
TA的每日心情 | 奋斗 2023-2-15 00:12 |
---|
签到天数: 969 天 [LV.10]以坛为家III
金牌会员
- 积分
- 7092
- 最后登录
- 2023-4-20
|
在飞凌RT1052的例程中提供一个RTC程序,并可由调试串口来观察和控制,但使用调试串口来观察RTC计时值终有些不便,为此给它配上OLED屏来显示还是比较方便的。由于RTC校时并不经常使用,加上扩展资源比较紧张,校时处理可依旧使用例程中的方法来解决。 改用OLED屏显示的RTC电子时钟如图所示。
RTC 计时效果
为进行计时值得显示,改造后的时间读取还是为:
- int rx8010_get_time()
- {
- uint8_t date[7];
- uint8_t dateRsul[7];
- uint8_t flagreg;
- int err;
- err = I2C_Read(I2C_BASE, RX8010_FLAG,&flagreg,1);
- if (flagreg & RX8010_FLAG_VLF)
- {
- PRINTF("\r\n Frequency stop was detected\r\n");
- return 1;
- }
- err = I2C_Read(I2C_BASE, RX8010_SEC,date,7);
- dateRsul[0] = bcd2bin(date[RX8010_SEC - RX8010_SEC] & 0x7f);
- dateRsul[1]= bcd2bin(date[RX8010_MIN - RX8010_SEC] & 0x7f);
- dateRsul[2] = bcd2bin(date[RX8010_HOUR - RX8010_SEC] & 0x3f);
- dateRsul[4] = bcd2bin(date[RX8010_MDAY - RX8010_SEC] & 0x3f);
- dateRsul[5] = bcd2bin(date[RX8010_MONTH - RX8010_SEC] & 0x1f);
- dateRsul[6] = bcd2bin(date[RX8010_YEAR - RX8010_SEC]);
- dateRsul[3] = date[RX8010_WDAY - RX8010_SEC] & 0x7f;
- OLED_ShowString(4,4,"20");
- OLED_ShowNum(20,4,dateRsul[6],2,16);
- OLED_ShowChar(36,4,'-');
- OLED_ShowNum(44,4,dateRsul[5],2,16);
- OLED_ShowChar(60,4,'-');
- OLED_ShowNum(68,4,dateRsul[4],2,16);
- OLED_ShowNum(20,6,dateRsul[2],2,16);
- OLED_ShowChar(36,6,':');
- OLED_ShowNum(44,6,dateRsul[1],2,16);
- OLED_ShowChar(60,6,':');
- OLED_ShowNum(68,6,dateRsul[0],2,16);
- return 0;
- }
复制代码
显示RTC计时功能的主程序为: - int main(void)
- {
- uint8_t datetime[19]={0};
- uint8_t c,ch_num=0;
- /* Board pin, clock, debug console init */
- BOARD_ConfigMPU();
- BOARD_InitPins();
- BOARD_InitI2C1Pins();
- BOARD_BootClockRUN();
- BOARD_InitDebugConsole();
- /* Print a note to terminal. */
- I2C_Init();
- rx8010_init();
- delay();
- delay();
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(20,0,"OK1052-C");
- OLED_ShowString(20,2,"RTC TEST");
-
- while (1)
- {
- delay();
- rx8010_get_time();
- }
- }
复制代码
|
|