在厂家的例程中,提供了RTC的使用示例,将它与串行数码管模块相结合即可实现电子时钟的效果,见下图所示。
在实现电子时钟显示效果时,需对RTC时钟显示函数加以修改,修改后的内容如下:
static void RTC_TimeShow(uint8_t *showtime)
{
RTC_DateTypeDef sdatestructureget;
RTC_TimeTypeDef stimestructureget;
HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);
Write_Max7219(8,stimestructureget.Hours/10);
Write_Max7219(7,stimestructureget.Hours%10);
Write_Max7219(5,stimestructureget.Minutes/10);
Write_Max7219(4,stimestructureget.Minutes%10);
Write_Max7219(2,stimestructureget.Seconds/10);
Write_Max7219(1,stimestructureget.Seconds%10);
}
值得注意的是,RTC所读取到的计时值是以十六进制的形式呈现的,因此需要对数值显示函数加以修改,进而实现十六进制数的显示处理。
实现上图显示效果的主程序为:
int main(void)
{
HAL_Init();
HAL_PWR_EnableBkUpAccess();
__HAL_RCC_BACKUPRESET_FORCE();
__HAL_RCC_BACKUPRESET_RELEASE();
SystemClock_Config();
SystemPower_Config();
MX_ICACHE_Init();
MX_RTC_Init();
BSP_LED_Init(LED2);
BSP_LED_Init(LED3);
RTCStatus = 1;
app_MAX7219();
Init_MAX7219();
Write_Max7219(3,10);
Write_Max7219(6,10);
while (1)
{
RTC_TimeShow(aShowTime);
}
}
此外,为了方便校时处理,还可以添加参数键入处理函数来进行时间校正!
视频演示: https://www.bilibili.com/video/BV1pD4y1h7Yu/?vd_source=f302fc0cc3a0425328db53a3b92082ca
引用: lugl4313820 发表于 2022-12-18 23:24 66666,这个有特色。
多谢支持!!!