单片机流水灯依次闪烁最后依次熄灭代码
时间: 2024-09-18 14:05:14 浏览: 46
在单片机上实现流水灯的逐个点亮和熄灭,通常会利用P0口或其他I/O端口作为数据线,配合定时器或中断系统来控制LED的亮灭。下面是一个简单的8个LED流水灯的示例,使用ATmega328P(Arduino Uno风格)来演示,采用C语言编写:
```c
#include <avr/io.h>
#include <util/delay.h> // 使用头文件for延时函数
const int LED_PIN[] = {2, 3, 4, 5, 6, 7, 8, 9}; // LED连接到P0口对应数字管脚
void delay_ms(unsigned long ms) {
_delay_ms(ms);
}
void lightLED(int index) {
DDRB |= (1 << index); // 设置该LED为输出
PORTB |= (1 << index); // 点亮LED
delay_ms(500); // 照明持续时间(这里设为500毫秒)
PORTB &= ~(1 << index); // 关闭LED
}
int main(void) {
for (int i = 0; i <= sizeof(LED_PIN) - 1; ++i) {
lightLED(i);
// 如果需要流水效果,可以在这里加入一个延时
// 比如 lightLED(i+1); 然后再调用lightLED(i),然后循环
delay_ms(100); // 灯光切换间隔
}
return 0;
}
```
在这个例子中,`lightLED()` 函数用于单独点亮一个LED,`main()` 循环遍历数组`LED_PIN`并依次调用这个函数。LED按顺序点亮,然后在每次点亮后稍微延迟一段时间(这里是100毫秒),模拟流水灯的效果。
阅读全文