51开发板C语言代码问题

要求:
1、流水灯从左侧流向右侧(只亮1个灯),到右侧后,再从右侧流向左侧;
2、流到左侧后,从中间向两侧流动(亮2个灯),到两侧后,从两侧流处中间;
3、流到中间后,再从第1步重复流动。
用C语言,代码久久我

总共有多少个灯?简单的做法是每个灯状态用一个bit来表示,然后所有灯组合成一个数。
每次状态变化就对应一个数,然后组成一个数组,循环用数据里的数据去控制灯亮灭状态。
比如有5个灯,

   
unsigned char LedFlowMap[] = {
0x00, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, //对应你的要求1
0x04, 0x0A, 0x11, 0x0A,0x04  // 对应你的要求2
} ;
while(1) {
     for (int i = 0; i < sizeof(LedFlowMap); i++) {
          LedUpdate(LedFlowMap[i]);
          Delay_1S();
     }
}

功能:让8个LED灯顺序点亮,然后在逆向点亮;

代码如下:

#include<reg52.h>

#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint z); 

main()
{  
uchar aa;   
uint count=0;
while(1)
{
aa=0xfe;
P0=aa;
delay(100);
while(1)
{
aa=_crol_(aa,1);//aa左移一位,
P0=aa;
delay(1000);
        count++;

if(count>=7)        //判断8个LED灯是否已被全部点亮一次
{
for(;count>0;)//逆向点亮8个LED灯
{
aa=_cror_(aa,1);//aa右移一位
P0=aa;
delay(1000);//调用延时程序,延时1S;
count--;
}
break;
}
 
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

img