89C51题目解答失败,特此求助

这是题目

图片说明

这是我的解答


#include"reg51.h"
#define uchar unsigned char  

sbit l0=P2^0;  sbit l1=P2^1;
sbit l2=P2^2;  sbit l3=P2^3;
sbit l4=P2^4;  sbit l5=P2^5;
sbit l6=P2^6;  sbit l7=P2^7;     

void delay()
{
    uchar t,p;
    for(p=0;p<=255;p++)
    for(t=0;t<=255;t++);
}
void jishu()
{   
    l0=0;  delay();  l0=1;
    l2=0;  delay();  l2=1;
    l4=0;  delay();  l4=1;
    l6=0;  delay();  l6=1;
}
void oushu()
{   
    l1=0;  delay();  l1=1;
    l3=0;  delay();  l3=1;
    l5=0;  delay();  l5=1;
    l7=0;  delay();  l7=1;
}
void jiaoti()
{
    l0=0;  l2=0;  l4=0;  l6=0;  delay();
    l0=1;  l2=1;  l4=1;  l6=1;  
    l1=0;  l3=0;  l5=0;  l7=0;  delay();
    l1=1;  l3=1;  l5=1;  l7=1;
}

void main()
{   
    uchar state;
    do
    {   P1=0xff;  state=P1;  state=state&0x03;//读取现在开关状态
        switch(state)
        {
            case 0:  P2=~0x00;  break; //全闭,全灭
            case 1:  jishu();   break;//1闭,0开,奇数灯流水
            case 2:  oushu();   break;//1开,0闭,偶数灯流水
            case 3:  jiaoti();  break;//全开,奇偶交替亮
        }
    } while(1);
}

这个解答语法和逻辑没有错误,在模拟的时候得不到理想的效果,尝试修改失败,求各位大神帮忙瞅瞅怎么纠正,感谢

https://wenku.baidu.com/view/3b66976f1ed9ad51f01df25f.html