M4 -使用基础定时器实现呼吸灯
前言:
本人初学cortex-M4 的小练习,只使用一个基础定时器+按键+led,分别实现流水灯,呼吸灯,以及他们两者之间的切换,并做到尽可能的整个程序的运行有较小的阻塞。 下方只展示呼吸灯部分代码,内容杂乱,目前还处于学习积累的小小白阶段,仅供方便自己学习积累,欢迎大佬们进行批评指正。
问题描述:
主要遇到的问题是在没有外部中断的情况下实现流水灯和呼吸灯中的 “延时” 导致的程序阻塞,导致单片机会因延时导致无法快速运行,浪费大量等待时间,以及影响按键扫描
解决方案:
1:定时器实现pwm效果 假定一个周期,然后对一个周期划分出高低电平。
2:根据:对应不同状态或状态切换可以有相应的处理动作的处理思想, 在流水灯以及呼吸灯中,分别加入一个 1 us的延时,然后通过改变一个数值,对不同的状态进行判断,进而进行不同的操作。
下方只展示呼吸灯部分代码,内容杂乱,仅供自己学习积累,欢迎大佬们进行批评指正,也欢迎交流。
int j = 0, k = 1, times = 0;
void river3_led(void)
{
if(times == 500)
{
if(j < 500 && k == 1)
{
if(j == 499)
{
k = 0;
}
j++;
}
else
{
j--;
if(j == 0)
{
k = 1;
}
}
times = 0;
cycle_time();
}
else
{
cycle_time();
}
}
void cycle_time(void)
{
times++;
if(times <= j)
{
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
}
else if(times <= 500)
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
}
Delay_us(1);
}
|