51单片机流水灯两边到中间
时间: 2024-11-15 20:32:01 浏览: 37
这个问题的实现方法有很多种,下面是一种可能的实现方法:
1. 定义一个长度为8的数组,数组元素分别代表8个LED灯的状态,0表示灭,1表示亮。
2. 从数组的两端开始,依次点亮两个LED灯,然后向中间移动,每次点亮两个相邻的灯,直到中间两个灯都点亮。
3. 然后再从中间向两端移动,每次熄灭两个相邻的灯,直到所有灯都熄灭。
4. 重复以上步骤,直到达到需要的效果。
具体实现代码如下:
```
#include <reg52.h>
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit LED5 = P1^4;
sbit LED6 = P1^5;
sbit LED7 = P1^6;
sbit LED8 = P1^7;
void delay(unsigned int t)
{
while(t--);
}
void main()
{
unsigned char led[8] = {0, 0, 0, 0, 0, 0, 0, 0};
unsigned char i, j;
while(1)
{
// 从两端向中间移动
for(i = 0, j = 7; i <= 3; i++, j--)
{
led[i] = 1;
led[j] = 1;
LED1 = led[0];
LED2 = led[1];
LED3 = led[2];
LED4 = led[3];
LED5 = led[4];
LED6 = led[5];
LED7 = led[6];
LED8 = led[7];
delay(50000);
}
// 从中间向两端移动
for(i = 0, j = 7; i <= 3; i++, j--)
{
led[i] = 0;
led[j] = 0;
LED1 = led[0];
LED2 = led[1];
LED3 = led[2];
LED4 = led[3];
LED5 = led[4];
LED6 = led[5];
LED7 = led[6];
LED8 = led[7];
delay(50000);
}
}
}
```
阅读全文