AT32F407内配有RTC 计时器,使用它可以轻松地实现电子时钟的功能,在OLED屏的配合下,其显示效果如下图所示。 电子时钟效果图
在OLED屏显示程序的基础上,它只需在文件头部添加#include "rtc.h",然后在程序中添加一个修改过的RTC显示函数,其内容如下: - void rtc_show_time(void)
- {
- if(RTC_GetFlagStatus(RTC_FLAG_PACE) != RESET)
- {
- RTC_Get();
- OLED_ShowNum(0,0,20,2,16);
- OLED_ShowNum(16,0,calendar.w_year,2,16);
- OLED_ShowNum(40,0,calendar.w_month,2,16);
- OLED_ShowNum(64,0,calendar.w_date,2,16);
- OLED_ShowNum(16,2,calendar.hour,2,16);
- OLED_ShowNum(40,2,calendar.min,2,16);
- OLED_ShowNum(64,2,calendar.sec,2,16);
- /* Clear the RTC Second flag */
- RTC_ClearFlag(RTC_FLAG_PACE);
- /* Wait until last write operation on RTC registers has finished */
- RTC_WaitForLastTask();
- }
- Delay_ms(400u);
- }
此外,为了保证RTC的计时值与当前时间保持一致,需修改RTC初始化函数RTC_Init()中的初始值设置。 形成显示效果的主程序为: - int main(void)
- {
- AT32_Board_Init();
- AT32_OLED_Init();
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"AT-START-F407",16);
- OLED_ShowString(0,2,"OLED & RTC",16);
- RTC_Init();
- Delay_ms(1000u);
- Delay_ms(1000u);
- OLED_Clear();
- OLED_ShowChar(32,0,'-',16);
- OLED_ShowChar(56,0,'-',16);
- OLED_ShowChar(32,2,':',16);
- OLED_ShowChar(56,2,':',16);
- while(1)
- {
- rtc_show_time();
- }
- }
|