蓝桥杯嵌入式LED流水灯
时间: 2025-04-16 19:42:42 浏览: 37
### 蓝桥杯嵌入式系统LED流水灯实现
#### 使用定时器与位操作实现LED流水灯效果
在STM32平台上,通过配置通用定时器可以精确控制LED的亮灭周期。对于流水灯功能而言,程序会按照一定顺序逐个点亮LED,并保持一段时间后再熄灭。
```c
/* 定义全局变量用于记录当前状态 */
u32 ledTick;
void led_process() {
if (uwTick - ledTick < 1000) return;
ledTick = uwTick;
// 利用异或运算改变最低位的状态,从而达到交替开关的效果
led_ctrl ^= 0x01;
led_control(led_ctrl);
}
```
上述代码展示了如何创建一个每秒钟切换一次的简单闪烁模式[^1]。然而,在实际应用中,为了形成流水般的视觉效果,通常采用循环移位的方式逐步点亮不同编号的LED:
```c
void LED_liushui(void) {
int i = 1;
while (1) {
LED_Disp(i); // 显示当前要亮起的LED组合
HAL_Delay(500); // 延迟半秒让该组LED持续发光
LED_Disp(0x00); // 清除显示,关闭所有LED
HAL_Delay(500); // 继续延迟以便观察变化过程
// 更新下一个待激活的LED位置
if (i == 128) // 当前已是最后一个LED,则重置回第一个
i = 1;
else // 否则继续向左移动一位
i <<= 1;
}
}
```
这段代码实现了从最右边开始每隔半个单位时间就向前推进一盏新的LED被点亮的过程[^2]。值得注意的是,这里使用的`HAL_Delay()`函数提供了毫秒级别的延时服务,适用于大多数场景下的简易编程需求;但对于更高精度的要求可能还需要借助硬件定时器中断机制来完成更加复杂的逻辑处理。
#### 高级特性:基于定时器中断的服务模型
当涉及到多个并发任务或者需要更精细的时间管理时,推荐使用内置的定时器资源作为调度核心。例如,可以在初始化阶段设置好某个特定频率(比如20ms)触发的一次性事件响应流程,之后再依据此基础构建其他业务模块的功能调用链路[^3]。
阅读全文
相关推荐


















