uchar ScanKey(void)
//
矩阵键盘
{
uchar Tmp,Tmp2,KeyNum;//
定义变量
P1=0xf0;
//
屏蔽低四?/p>
if(P1!=0xf0)
//
行扫?/p>
{
delay(10);
//
延时去抖
if(P1!=0xf0)
//
确定按键按下
{
Tmp=P1;
//
取出
P1
口高四位数据
P1 =0x0F;
//
屏蔽高四?/p>
_nop_();_nop_();_nop_();_nop_();//
延时
Tmp2=P1;
//
取出
P1
口低四位
Tmp=Tmp+Tmp2;
//
将取出的高四位,低四位组合,得到键?/p>
while(P1!=0x0F) ;
//
松手检?/p>
switch(Tmp&0x0F)
//
判断行号
{
case 0x0E:KeyNum=0;break;
case 0x0D:KeyNum=4;break;
case 0x0B:KeyNum=8;break;
case 0x07:KeyNum=12;break;
}
switch(Tmp&0xf0)
//
判断列号,并与行号相加,获得键?/p>
{
case 0xE0:KeyNum+=1;break;
case 0xD0:KeyNum+=2;break;
case 0xB0:KeyNum+=3;break;
case 0x70:KeyNum+=4;break;
}
return KeyNum;
//
输出键?/p>
}
}
return 0;
//
无按键按下返?/p>
0
?/p>
}