打印

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

[复制链接]
386|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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 计时效果

演示视频:

使用特权

评论回复
沙发
xyz549040622| | 2023-10-31 21:38 | 只看该作者
如果用SYSTICK计时器做时间的话,会有频繁进入中断的情况发生,还是外置个RTC比较方便,可以节省软件的开销。

使用特权

评论回复
板凳
jinglixixi|  楼主 | 2023-11-1 07:49 | 只看该作者
xyz549040622 发表于 2023-10-31 21:38
如果用SYSTICK计时器做时间的话,会有频繁进入中断的情况发生,还是外置个RTC比较方便,可以节省软件的开销 ...

有道理

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2675

帖子

37

粉丝