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();
}
}
|