按键扫描 一个没有定义的按键有显示对应数字

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
sbit dula = P2^6;
sbit wela = P2^7;

void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=100;j>0;j--);
}

void display(uchar num)
{
P0 = table[num];
dula = 1;
dula = 0;
P0 = 0xff;
}

void keyscan()
{
uchar temp,key;
P3 = 0xfe;
temp = P3;
temp = temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp = P3;
temp = temp&0xf0;
if(temp!=0xf0)
{
temp = P3;
switch(temp)
{
case 0xbe:
key = 2;
break;

        case 0xde:
        key = 1;
        break;
     }
     while(temp!=0xf0)
     {
        temp = P3;
        temp = temp&0xf0;
     }
     display(key);
  }

}
}

void main()
{
P0 = 0;
dula = 1;
dula = 0;
P0 = 0xfe;
wela = 1;
wela = 0;
while(1)
{
keyscan();
}
}

这是程序 上面应该是按下第二第三个按键分别显示1和2,但是在switch case语句里没有key = 0的情况下 按下第一个按键 数码管显示0,但是在按二三按键后重新按按键一后不再被扫描,求指点迷津

首先我跟你说,代码不写注释这是个非常不好的习惯,方便别人的阅读倒是其次,对于代码的维护,移植,学习原理至关重要。其次,什么按键,几个按键,由单片机的那几个IO口控制,什么连接形式,矩阵还是直接连接你也没说,只能根据代码隐约地猜,你都没说明白