用单片机控制8个LED从上往下流水显示,不能用特殊函数,普通赋值语句实现代码
时间: 2024-09-15 14:04:50 浏览: 28
要使用单片机(如Arduino Uno)控制8个LED从上到下流水显示,你可以使用P0、P1这样的通用IO口,通过循环逐位点亮和熄灭LED来实现。这里假设我们有4个数码管组成一排,每个数码管有两位。
```c
#include <avr/io.h>
void delay_ms(int milliseconds) {
unsigned long start = micros();
while (micros() - start < milliseconds * 1000);
}
const int LED_Pins[] = {5, 6, 7, 8}; // 这里假设P0口接LED
int main(void) {
DDRB |= (1 << LED_Pins[0]); // 设置P0口高电平输出
for (int i = 0; i <= 7; i++) { // 从0到7表示最高位到最低位
PORTB = (1 << LED_Pins[i]); // 点亮当前LED
delay_ms(10); // 暂停一下,以便观察流动效果
for (int j = 0; j < sizeof(LED_Pins); j++) { // 再次点亮下一个LED
if ((i + j) % sizeof(LED_Pins) == 0) {
PORTB &= ~(1 << LED_Pins[j]); // 当到达下一排时,关闭当前LED
PORTB |= (1 << LED_Pins[(j+1)%sizeof(LED_Pins)]); // 开启下一排的第一个LED
} else {
PORTB |= (1 << LED_Pins[j]);
}
}
}
return 0;
}