对应矩阵按键控制数码管,没有现象

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar num,temp;
void delay(uint z)
{
uint x,y;
for(x=z;x>=0;x--)
for(y=110;y>0;y--);
}

uint code table[]={0x3f,
0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,
0x5e,0x79,0x71,0x80,
0x00};
void main()
{

while(1)
{
    wela=1;
    P0=0xc0;
    wela=0;
    
    dula=1;
  P0=0;
  dula=0;
    P3=0xfe;
    temp=P3;
    temp=temp&0xf0;
    while(temp!=0xf0)
    {
        delay(5);
        temp=P3;
        temp=temp&0xf0;
        while(temp!=0xf0)
        {
            temp=P3;
        switch(temp)
        {
            case 0xee:num=1;                //11101110
                break;   
            case 0xde:num=2;                  //11011110
              break;
            case 0xbe:num=3;                  //10111110
              break;
            case 0x7e:num=4;                  //01111110
              break;
            
        }
            while (temp != 0xf0)
            {
                temp = P3;
                temp = temp & 0xf0;
            }
        }
            dula=1;
    P0=table[num-1];
    dula=0;
    }
    P3=0xfd;
    temp=P3;
    temp=temp&0xf0;
    while(temp!=0xf0)
    {
        delay(5);
        temp=P3;
        temp=temp&0xf0;
        while(temp!=0xf0)
        {
            temp=P3;
        switch(temp)
        {
            case 0xed:num=5;                  //11101101
                break;   
            case 0xdd:num=6;                  //11011101
              break;
            case 0xbd:num=7;                  //10111101
              break;
            case 0x7d:num=8;                  //01111101
              break;
            
        }
            while (temp != 0xf0)
            {
                temp = P3;
                temp = temp & 0xf0;
            }
        }
            dula=1;
    P0=table[num-1];
    dula=0;
    }
    P3=0xfb;
    temp=P3;
    temp=temp&0xf0;
    while(temp!=0xf0)
    {
        delay(5);
        temp=P3;
        temp=temp&0xf0;
        while(temp!=0xf0)
        {
            temp=P3;
        switch(temp)
        {
            case 0xeb:num=9;                  //11101011
                break;   
            case 0xdb:num=10;                  //11011011
              break;
            case 0xbb:num=11;                  //10111011
              break;
            case 0x7b:num=12;                  //01111011
              break;
            
        }
            while (temp != 0xf0)
            {
                temp = P3;
                temp = temp & 0xf0;
            }
        }
            dula=1;
    P0=table[num-1];
    dula=0;
    }
    P3=0xf7;
    temp=P3;
    temp=temp&0xf0;
    while(temp!=0xf0)
    {
        delay(5);
        temp=P3;
        temp=temp&0xf0;
        while(temp!=0xf0)
        {
            temp=P3;
        switch(temp)
        {
            case 0xe7:num=13;                  //11100111
                break;   
            case 0xd7:num=14;                  //11010111
              break;
            case 0xb7:num=15;                  //10110111
              break;
            case 0x77:num=16;                  //01110111
              break;
            
        }
            while (temp != 0xf0)
            {
                temp = P3;
                temp = temp & 0xf0;
            }
        }
            dula=1;
    P0=table[num-1];
    dula=0;
    }
}

}

是延时函数错了,延时函数延时了5ms,导致数码管的数字被覆盖,可以延时到100us左右就可以了