单片机编程中怎么优化下面的c代码呢?

最近在学习单片机,而c语言比java难亿点点,所以想问问怎么实现类似Led后跟随循环自动与数字结合,比如while中写一个for'循环,y=1开始循环,里面就自动赋值一个Led1,y=2,则变成Led2,这样就可以不用重复写相同的代码了。字符串拼接我也做过,不知是不是方式不对。
附上图和代码

  1. 图:

    img

  2. 代码如下:

#include<reg51.h>

sbit Led1 = P2^0;
sbit Led2 = P2^1;
sbit Led3 = P2^4;
sbit Led4 = P2^5;

int w,x,y;       

dalay(int a);

int main(){
     while(1){
       
         Led1 = 0;
         dalay(10);
         Led1 = 1;
         dalay(10);

         Led2 = 0;
         dalay(10);
         Led2 = 1;
         dalay(10);

         Led3 = 0;
         dalay(10);
         Led3 = 1;
         dalay(10);

         Led4 = 0;
         dalay(10);
         Led4 = 1;
         dalay(10);
    }
}

int dalay(int a){
     for(w = 1;w<=a;w++){
     for(x = 0;x<=1000;x++){}
    }
}

求优化,这个问题困扰我很久了,蟹蟹!


#include<reg51.h>
sbit Led1 = P2^0;
sbit Led2 = P2^1;
sbit Led3 = P2^4;
sbit Led4 = P2^5;
void dalay(int a);
void set_led(int x,bit var);
int main(){
   int x=0;
   bit c=0;
     while(1){
         set_led(x/2,c);
         x=x+1;
         c=c+1;
         dalay(10);
    }
}
void dalay(int a){
     int w,x;
     for(w = 1;w<=a;w++){
     for(x = 0;x<=1000;x++){}
    }
}
void set_led(int x,bit var)
{
    switch(x)
    {
        case 0:
            Led1 = val;
            break;
        case 1:
            Led2 = val;
            break;
        case 2:
            Led3 = val;
            break;
        case 3:
            Led4 = val;
            break;
        default :
            break;
       }
}