本帖最后由 jinglixixi 于 2022-11-30 09:57 编辑
在MM32L0136片内有1 个RTC 计数器,并支持日历功能。 在使用串口测试时,其测试结果如图1所示。 图1 测试结果
由图可知,它是通过串口发送字符“a”来进行RTC的初始化,由字符“b”来读取计时值,由字符“c”来启用闹钟功能。 此外,通过串口以1秒的间隔来发送字符“a”,所得到的计时值也是很准确的。
RTC的初始计时值是通过参数定义来实现,其内容如下: #define APP_RTC_SUBSEC_COUNTFREQ 256u #define APP_RTC_TIME_SOURCE RTC_TimeSource_BypShad #define APP_RTC_TIMEMODE RTC_TimeMode_24Hour #define APP_RTC_TIMEFORMAT RTC_HourFormat_AM #define APP_RTC_OUTPUT RTC_OutPut_None #define APP_RTC_POLARITY RTC_Polarity_None #define APP_RTC_TIMEOUT 1000u #define APP_RTC_YEARS 11u //2011-03-04 #define APP_RTC_MONTHS 3u #define APP_RTC_DAYS 4u #define APP_RTC_WEEK 1u // 周一 #define APP_RTC_HOURS 1u // 1:2:4 #define APP_RTC_MINUTES 2u #define APP_RTC_SECONDS 4u #define APP_RTC_ALARM_SUBSEC 0xfa #define APP_RTC_ALARM_SECONDS 8u #define APP_RTC_ALARM_MINUTES 2u #define APP_RTC_ALARM_HOURS 1u #define APP_RTC_ALARM_DAYS 4u #define APP_RTC_ALARM_MASK RTC_ALARMMASK_NONE #define APP_RTC_SUBSEC_MASK RTC_SubSecmask_8bit
在使用时,可按自己的需要来调整。此外,也可添加相应的函数来实现按键的动态设置。
在添加LCD屏的情况下,则可轻松地实现电子时钟的功能,其效果如图2所示。 图2 显示效果
实现电子时钟的主程序为: int main(void)
{
uint32_t dat;
BOARD_Init();
app_slcd_init();
app_rtc_init();
while (1)
{
app_rtc_get_current_time();
LCD_DisplayNumberH(rtc_time.Hours, rtc_time.Mins, rtc_time.Secs);
app_delay(100);
}
}
值得注意的是,RTC的计时值不能以十进制的方式来显示,而必须转换为十六进制数来显示。 此外,还可以使用上层的小号数值来显示日期值中的月日值,如图3的形式。 但目前的问题是,第3位数字的段码只提供了一半的段码输出,暂时还无法实现它的全段显示。 图3 显示日期与时间
演示视频:
|