本帖最后由 qintian0303 于 2024-12-6 22:37 编辑
进行LED的闪灯操作还有一种方式,就是通过定时器产生中断,然后在中断程序中进行LED翻转,这个是不是有点像前两篇的结合,实现的是闪灯的效果,通过的是中断的方式。
定时器属于MCU内部的功能,这一部分不涉及硬件配置,我们之间添加定时功能模块:
间隔定时器会每隔一段时间产生一个中断;
可以选择计数模式:8位、12位、16位;
上图展示的就是定时器的基本配置,注意单片机的主频只有16M,单片机是个16位的单片机,如果你的定时时间比较长的话就要分频大一点,注意这里的中断都是分开管理的;
这里对应的就是我们新生成的定时器相关文件,我们可以在Config_TAU0_1_user.c中进行中断处理:
void r_Config_TAU0_1_interrupt(void)
{
/* Start user code for r_Config_TAU0_1_interrupt. Do not edit comment generated here */
timercnt++;
if(timercnt >= 100)
{
PIN_WRITE(2,0) = ~PIN_READ(2,0);
PIN_WRITE(2,1) = ~PIN_READ(2,1);
timercnt = 0;
}
/* End user code. Do not edit comment generated here */
}
依然要注意中断的开启,在初始化阶段使用R_Config_TAU0_1_Start(void)。
效果如下:
使用定时器依然实现了交替闪灯,由于按键的存在也可以控制LED1,当我们按下后,两个LED实现了同频闪烁。
但这里感受到一个非常便利的地方,对于中断处理我们只需要写好应用就好了,对于中断标志位的处理我们都不用理会,这样非常的便捷。
|