[活动专区] 【AT-START-F407测评】+ RTC电子时钟

[复制链接]
 楼主| jinglixixi 发表于 2021-1-26 09:18 | 显示全部楼层 |阅读模式

AT32F407内配有RTC 计时器,使用它可以轻松地实现电子时钟的功能,在OLED屏的配合下,其显示效果如下图所示。
1.jpg
电子时钟效果图

在OLED屏显示程序的基础上,它只需在文件头部添加#include "rtc.h",然后在程序中添加一个修改过的RTC显示函数,其内容如下:
  1. void rtc_show_time(void)
  2. {
  3. if(RTC_GetFlagStatus(RTC_FLAG_PACE) != RESET)      
  4. {
  5. RTC_Get();
  6. OLED_ShowNum(0,0,20,2,16);
  7. OLED_ShowNum(16,0,calendar.w_year,2,16);
  8. OLED_ShowNum(40,0,calendar.w_month,2,16);
  9. OLED_ShowNum(64,0,calendar.w_date,2,16);
  10. OLED_ShowNum(16,2,calendar.hour,2,16);
  11. OLED_ShowNum(40,2,calendar.min,2,16);
  12. OLED_ShowNum(64,2,calendar.sec,2,16);
  13. /* Clear the RTC Second flag */
  14. RTC_ClearFlag(RTC_FLAG_PACE);
  15. /* Wait until last write operation on RTC registers has finished */
  16. RTC_WaitForLastTask();
  17. }  
  18. Delay_ms(400u);
  19. }

此外,为了保证RTC的计时值与当前时间保持一致,需修改RTC初始化函数RTC_Init()中的初始值设置。
形成显示效果的主程序为:
  1. int main(void)
  2. {
  3. AT32_Board_Init();
  4. AT32_OLED_Init();
  5. OLED_Init();
  6. OLED_Clear();
  7. OLED_ShowString(0,0,"AT-START-F407",16);
  8. OLED_ShowString(0,2,"OLED & RTC",16);     
  9. RTC_Init();
  10. Delay_ms(1000u);
  11. Delay_ms(1000u);
  12. OLED_Clear();
  13. OLED_ShowChar(32,0,'-',16);
  14. OLED_ShowChar(56,0,'-',16);
  15. OLED_ShowChar(32,2,':',16);
  16. OLED_ShowChar(56,2,':',16);
  17. while(1)
  18. {
  19. rtc_show_time();
  20. }
  21. }



caizhiwei 发表于 2021-1-26 15:04 | 显示全部楼层
上RTOS玩玩看~
 楼主| jinglixixi 发表于 2021-1-26 16:33 | 显示全部楼层

一直在裸奔,没接触过呀,有时间看看。最近好像大家都在玩操作系统移植,会不会移植的开销比较大,而影响开发程序的空间?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

517

主题

2932

帖子

39

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

517

主题

2932

帖子

39

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