本帖最后由 jinglixixi 于 2023-10-13 19:56 编辑
本以为M0+这样的内核,应该内置一个RTC以解决电子时钟这样的问题,在无果的情况下只好借助计时器来解决这个问题。 好在其内核是有SYSTICK计时器的,为此可通过相应的设置来获得0.5秒的延时信号。 图1 SYSTICK设置
随后,与串行数码管的显示功能相配合就可实现电子时钟的功能。 关于串行数码管模块的使用可参见: https://bbs.21ic.com/icview-3332062-1-1.html 实现电子时钟功能的主程序为: int main(void)
{
SYSCFG_DL_init();
DL_SYSCTL_enableSleepOnExit();
Init_MAX7219();
Write_Max7219(1,s%10);
Write_Max7219(2,s/10);
Write_Max7219(3,0xa);
Write_Max7219(4,m%10);
Write_Max7219(5,m/10);
Write_Max7219(6,0xa);
Write_Max7219(7,h%10);
Write_Max7219(8,h/10);
while (1) {
__WFI();
}
}
由于SYSTICK计时器的周期值只有0.5秒,故需要利用它的中断处理来获得1计时及电子时钟的显示功能,其具体内容如下: void SysTick_Handler(void)
{
DL_GPIO_togglePins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN );
u=u+1;
if(u==2)
{
u=0;
s=s+1;
}
if(s==60)
{
s=0;
m=m+1;
}
Write_Max7219(2,s/10);
Write_Max7219(1,s%10);
if(m==60)
{
m=0;
h=(h+1)%24;
}
Write_Max7219(4,m%10);
Write_Max7219(5,(m%100)/10);
Write_Max7219(7,h%10);
Write_Max7219(8,(h%100)/10);
}
经程序的编译与下载,其实现的计时效果如图2所示。 图2 计时效果
演示视频:
|