LP-MSPM0L1306开发板试用体验---电子时钟计时篇

[复制链接]
 楼主| jinglixixi 发表于 2023-10-13 19:54 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2023-10-13 19:56 编辑

本以为M0+这样的内核,应该内置一个RTC以解决电子时钟这样的问题,在无果的情况下只好借助计时器来解决这个问题。
好在其内核是有SYSTICK计时器的,为此可通过相应的设置来获得0.5秒的延时信号。
1.jpg
图1  SYSTICK设置

随后,与串行数码管的显示功能相配合就可实现电子时钟的功能。
关于串行数码管模块的使用可参见:
https://bbs.21ic.com/icview-3332062-1-1.html
实现电子时钟功能的主程序为:
  1. int main(void)
  2. {
  3.     SYSCFG_DL_init();
  4.     DL_SYSCTL_enableSleepOnExit();
  5.     Init_MAX7219();
  6.     Write_Max7219(1,s%10);
  7.     Write_Max7219(2,s/10);
  8.     Write_Max7219(3,0xa);
  9.     Write_Max7219(4,m%10);
  10.     Write_Max7219(5,m/10);
  11.     Write_Max7219(6,0xa);
  12.     Write_Max7219(7,h%10);
  13.     Write_Max7219(8,h/10);
  14.     while (1) {
  15.         __WFI();
  16.     }
  17. }

由于SYSTICK计时器的周期值只有0.5秒,故需要利用它的中断处理来获得1计时及电子时钟的显示功能,其具体内容如下:
  1. void SysTick_Handler(void)
  2. {
  3.     DL_GPIO_togglePins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN );
  4.     u=u+1;
  5.     if(u==2)
  6.     {
  7.         u=0;
  8.         s=s+1;
  9.     }
  10.     if(s==60)
  11.     {
  12.         s=0;
  13.         m=m+1;
  14.     }
  15.      Write_Max7219(2,s/10);
  16.      Write_Max7219(1,s%10);
  17.     if(m==60)
  18.     {
  19.         m=0;
  20.         h=(h+1)%24;
  21.     }
  22.     Write_Max7219(4,m%10);
  23.     Write_Max7219(5,(m%100)/10);
  24.     Write_Max7219(7,h%10);
  25.     Write_Max7219(8,(h%100)/10);
  26. }
经程序的编译与下载,其实现的计时效果如图2所示。
2.jpg
图2 计时效果

演示视频:

xyz549040622 发表于 2023-10-31 21:38 | 显示全部楼层
如果用SYSTICK计时器做时间的话,会有频繁进入中断的情况发生,还是外置个RTC比较方便,可以节省软件的开销。
 楼主| jinglixixi 发表于 2023-11-1 07:49 | 显示全部楼层
xyz549040622 发表于 2023-10-31 21:38
如果用SYSTICK计时器做时间的话,会有频繁进入中断的情况发生,还是外置个RTC比较方便,可以节省软件的开销 ...

有道理
您需要登录后才可以回帖 登录 | 注册

本版积分规则

517

主题

2932

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部