不知道是思路错误还是语言错误,如何解决?(标签-51单片机|关键词-#include)

用51单片机完成数字输入显示器,通过矩阵键盘完成数值的输入,如果输入溢出可报错

#include 
#define uchar unsigned char
    uchar num ;
    uchar xianshi=20;
sbit S3=P3^1;//独立键盘s3
sbit we=P2^7;//位选
sbit du=P2^6;//段选
sbit S2=P3^0;//独立键盘s2
sbit beep=P2^3;
//共阴极数码管段选表
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71,0x76,0x38,0x37,0x3e,0x40,0x00};
//共阴极数码管位选表
uchar code place[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0};
    //delay 函数的定义
      void delay(unsigned  int  z)
{ unsigned int x,y;
  for(x=z;x>0;x--)
   for(y=144;y>0;y--); 
}
    void keyscan()
{ 
        P3=0xf0;//列扫描
        if(P3!=0xf0)
    { delay(20);
            if(P3!=0xfe)
            { switch(P3)
                { case 0xe0: xianshi=0; break; //第一列
                  case 0xd0: xianshi=1; break;//二
                    case 0xb0: xianshi=2; break;//三
          case 0x70: xianshi=3;    break;//四        
                }
                P3=0x0f;//行扫描
             switch(P3)
             {  case 0x0e: xianshi=xianshi; break; //第一行
                  case 0x0d: xianshi=xianshi+4; break;
                    case 0x0b: xianshi=xianshi+8; break;
          case 0x07: xianshi=xianshi+12;    break;    
            }
             while(P3!=0X0F);//松手检测
        }
    }
                        
}    
 void main()
{ while(1)
         {  keyscan();
            if(S2==0)
            {  delay(30);//按键防抖
                num++;
                if(num>8)
                {num=0;
                    beep=~beep;
                }    
                    
                while(!S2);//松手检测
            }
    
           if(S3==0)
            {  delay(30);//按键防抖                        
                if(num>0)
                num--;                
                while(!S3);//松手检测
            }
         we=1;
             P0=place[num];
             we=0;
             delay(10);
             du=1;
            P0=table[xianshi];
            du=0;
    }
        
        
}        
 

delay(10);
du=1;
P0=table[xianshi];
du=0;
把这一段删去后,位选可正常选择,加上后,数码屏就是黑的,但不报错

什么屏