单片机流水灯代码4个灯依次点亮和逐个点亮
时间: 2024-10-17 07:07:42 浏览: 32
单片机流水灯,也称为七段数码管显示,通常用于简单的数字或字符显示。这里我们以经典的8位MCU如Atmel的Arduino Uno为例,使用共阳极LED数码管,编写一个4个灯依次点亮然后逐个熄灭的简单代码。
首先,假设每个数码管的最低位对应P0-P7这8根口线,我们可以用定时器来控制灯的切换:
```c
#include <avr/io.h>
#include <util/delay.h>
const int led_pins[] = {P0, P1, P2, P3}; // LED对应的IO口
void set_all_off() {
for (int i = 0; i < 4; ++i) {
DDRB &= ~(1 << led_pins[i]); // 设置为输入
}
}
void set_led(int index, bool on) {
if (on) {
PORTB |= (1 << led_pins[index]); // 打开指定LED
} else {
PORTB &= ~(1 << led_pins[index]); // 关闭指定LED
}
}
void blink_sequence() {
for (int i = 0; i < 4; ++i) {
set_led(i, true); // 点亮当前LED
_delay_ms(500); // 等待一段时间
set_all_off(); // 熄灭所有LED
_delay_ms(500); // 再次点亮下一个LED
}
}
int main(void) {
set_all_off();
while (1) {
blink_sequence();
}
}
```
在这个代码中,`set_all_off()`函数会关闭所有的LED,`set_led(index, on)`函数负责设置指定编号的LED开关状态。`blink_sequence()`则是一个循环,4个LED依次点亮并保持500毫秒,然后全部熄灭,如此循环。
阅读全文