源码如下
bit key_flag;
//1不支持连续 0支持连续
u8 key_scan(u8 mode)
{
u8 num=0;//这个变量用来存返回值
P3|=0X0F;//给低四位全置一
if(((P3&0X0F)==0X0F)||(mode==0))///没有按下
{
key_flag=0;
}
if(key_flag==0)
{
if((P3&0X0F)!=0X0F)
{
delay_ms(5);
if((P3&0X0F)!=0X0F)
{
switch(P3&0X0F)
{
case 0x0e:num=7;break;
case 0x0d:num=6;break;
case 0x0b:num=5;break;
case 0x07:num=4;break;
default:break;
}
if(mode)
key_flag=1;
}
return num;
}
}
return num;
}