单片机led触发后无限流水代码
时间: 2024-09-24 11:10:15 浏览: 52
LED流水灯_单片机实现LED流水效果_源码
单片机LED流水灯的效果通常是通过编程控制多个LED灯轮流点亮和熄灭,给人一种连续流动的感觉。这通常涉及到定时器、中断和位操作等技巧。以下是一个基本的5个LED流水灯的例子,使用Atmel AVR单片机(如ATmega328P)和C语言:
```c
#include <avr/io.h>
#define LEDS PORTB //假设PORTB用于连接LED
#define INTERVAL_US 5000 //每个LED亮的时间间隔,单位微秒
void delay_us(unsigned int us) {
volatile uint16_t start = micros();
while ((micros() - start) < us);
}
void led_flow(int index) {
DDRB |= (1 << index); //设置指定LED为输出并打开
for (int i = 0; i < 4; ++i) { //循环让所有LED闪烁
PORTB &= ~(1 << index); //其他LED关闭,当前LED打开
delay_us(INTERVAL_US);
PORTB |= (1 << index); //当前LED关闭,下一个LED打开
delay_us(INTERVAL_US);
}
DDRB &= ~(1 << index); //最后把当前LED关闭
}
int main(void) {
cli(); //禁止全局中断,避免干扰
for (int i = 0; i < 5; ++i) {
led_flow(i);
delay_us(INTERVAL_US * 2); //稍作延时切换到下一个LED
}
sei(); //重新允许中断
while (1); //无限循环保持程序运行
}
阅读全文