本帖最后由 jinglixixi 于 2023-5-9 23:58 编辑
N32WB031内置了RTC计时器,并具有日历处理功能,因此在OLED屏的配合下极易实现电子时钟的功能。
在使用例程的基础上,所用的关键函数为获取RTC计时值的函数RTC_GetTime()及OLED屏的数值显示函数OLED_ShowNum()。
其中OLED屏的数值显示函数为:
void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size2)
{
uint8_t t,temp;
uint8_t enshow=0;
for(t=0;t<len;t++)
{
temp=(num/oled_pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
continue;
}
else enshow=1;
}
OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
}
}
相应的RTC计时值显示函数为:
void RTC_TimeShow(void)
{
RTC_GetTime(RTC_FORMAT_BIN, &RTC_TimeStructure);
(void)RTC->DATE;
OLED_ShowNum(20,4,RTC_TimeStructure.Hours,2,16);
OLED_ShowNum(44,4,RTC_TimeStructure.Minutes,2,16);
OLED_ShowNum(68,4,RTC_TimeStructure.Seconds,2,16);
}
显示效果
要实现上图的主函数为:
int main(void)
{
log_init();
log_info("\r\nRTC calendar demo\r\n");
RTC_DateAndTimeDefaultVale();
RTC_CLKSourceConfig(2);
RTC_PrescalerConfig();
log_info("RTC configured....");
RTC_ConfigInt(RTC_INT_WUT, DISABLE);
RTC_EnableWakeUp(DISABLE);
RTC_DateRegulate();
RTC_TimeRegulate();
TIM3_Configuration();
OLED_gpio();
OLED_Init();
OLED_Clear();
OLED_ShowString(20,0,"N32WB031",16);
OLED_ShowString(20,4," : :",16);
while(1);
}