unsigned char KeyScan(void)
{
static char state=0;
unsigned char key=0xff,i;
switch(state)
{
case 0:P3=0xF0;
if((P3&0xF0)!=0xF0)
state =1;
break;
case 1:
P3=0xF0;
if((P3&0xF0)!=0xF0)
{
for (i=0;i<4;i++)
{
P3=(~(1<<i));
switch(P3&0xF0)
{
case 0xE0:key=i*4+0;break;
case 0xD0:key=i*4+1;break;
case 0xB0:key=i*4+2;break;
case 0x70:key=i*4+3;break;
}
}
state =2;
}
break;
case 2:
P3=0xF0;
if((P3&0xF0)!=0xF0)
state=2;
else state =0;
break;
default:break;
}
return key;
}