怎么让24个流水灯从上到下依次亮循环

#include<reg52.h>
#include<intrins.h>
void delay(unsigned int i)
{
while(i--);
}
void main()
{
P0=0xfe;
P1=0xfe;
P2=0xfe;
delay(10000);

while(1)
{        
            int k;
            for(k=0;k<27;k++)
            {
                if (k>0&&k<9)
                    {
                        P0=_crol_(P0,1);
                        delay(15000);
                        
                    }
                if (k>9&&k<18)                
                    {
                        P1=_crol_(P1,1);
                        delay(15000);
                        
                    }
                if (k>18&&k<27)
                    {
                        P2=_crol_(P2,1);
                        delay(15000);    
                    }
            }
}

}
怎么修改啊 这个 不是从上到下一次了亮的 分成了3个8个的流水灯

void main()中修改试看
P1=P2=P3=0;
    while(1)
    {
++k;
if(k>0&&k<9){if(k==1){P3=0;P1=128;}P1=_crol_(P1,1);delay(47000);}
else if(k>8&&k<17){if(k==9){P1=0;P2=128;}P2=_crol_(P2,1);delay(47000);}
else if(k>16&&k<25){if(k==17){P2=0;P3=128;}P3=_crol_(P3,1); delay(47000);}
    }

用个长整数来保存状态就不用写那么多判断了

#include<reg52.h>
 
void delay(unsigned int i)
{
    while(i--);
}
void main()
{
    P1=P2=P3=0;
    long val = 1;
    while(1)
    {
        P1 = val & 0xff;
        P2 = (val >> 8) & 0xff
        P3 = (val >> 16)& 0xff;
        val <<= 1;
        if(val > 0x00800000) val = 1;
    }
}