在51单片机内用二维数组实现八个小灯泡从上到下在从下到上依次亮
时间: 2024-10-19 20:02:38 浏览: 16
在51单片机中,我们可以使用P0、P1等端口作为LED灯的驱动,并通过一个二维数组来控制灯泡的状态。假设我们有8个小灯泡,可以按照两行四列的布局排列,可以用一个4x2的布尔型二维数组来表示,其中true代表点亮,false代表熄灭。
首先,初始化阵列并设置所有灯泡为初始状态(熄灭):
```c
#define LED_ROWS 2
#define LED_COLS 4
bool led_matrix[LED_ROWS][LED_COLS] = { { false, false, false, false }, { false, false, false, false } };
```
然后,你可以编写两个函数来控制灯泡的切换顺序:
1. 上下交替亮起:
```c
void lightUpDown() {
for (int i = 0; i < LED_ROWS; i++) {
for (int j = 0; j < LED_COLS; j++) {
// 先上到下
if (i % 2 == 0) {
led_matrix[i][j] = !led_matrix[i][j];
}
// 然后下到上
else {
led_matrix[i][j] = !led_matrix[i][j];
}
}
}
}
```
2. 左右交替亮起:
```c
void lightLeftRight() {
bool temp;
for (int i = 0; i < LED_ROWS; i++) {
temp = led_matrix[i][0];
for (int j = 0; j < LED_COLS - 1; j++) {
led_matrix[i][j] = led_matrix[i][j + 1];
}
led_matrix[i][LED_COLS - 1] = temp;
}
}
```
最后,在主循环中调用这两个函数实现灯泡的变换效果:
```c
while (1) {
lightUpDown();
delay_ms(500); // 等待一段时间让灯光变化更明显
lightLeftRight();
delay_ms(500);
}
```
这里`delay_ms()`用于暂停程序运行,以达到理想的效果。注意,实际应用时需要根据51单片机的具体型号和硬件配置调整延迟时间。
阅读全文