uchar key(void)
{
uchar key,key1,key2,k;
P1=0XF0;
k=0xff;
if((P1&0XF0)!=0XF0)
{
delay();
if((P1&0XF0)!=0XF0)
key1=P1&0XF0;
P1=0X0F;
if((P1&0X0F)!=0X0F)
{
delay();
if((P1&0X0F)!=0X0F)
{
key2=P1&0X0F;
key=key1|key2;
if(key!=0xff)
{
switch(key)
{
case 0xee: k=0;break;
case 0xed: k=1;break;
case 0xeb: k=2;break;
case 0xe7: k=3; break;
case 0xde: k=4;break;
case 0xdd: k=5;break;
case 0xdb: k=6;break;
case 0xd7: k=7; break;
case 0xbe: k=8;break;
case 0xbd: k=9;break;
case 0xbb: k=10;break;
case 0xb7: k=11; break;
case 0x7e: k=12;break;
case 0x7d: k=13;break;
case 0x7b: k=14;break;
case 0x77: k=15; break;
}
}
}
}
}
return(k);
}
只做了键盘扫描程序,说明问题,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
-----------------------------------------------------------------------
代码太长 重新简化
int keyscan()
{
unsigned char k k_temp;
P1=0xf0; //低位置0,准备查询按键
k=P1; //取得当前P1口状态
if(k!=0xf0) //如果有变化则表示有按键按下
{
delay(10); //延迟 消抖
k_temp=p1;
if(k==k_temp) //确实有键按下
{
k=0xfe;
do //循环扫描每一行
{
p1=k;
if(k!=p1)
{
switch(P1) //判断按键 并返回键值
{
//第1行
case 0x7e:{return 0;break;}
case 0xbe:{return 0;break;}
case 0xde:{return 0;break;}
case 0xee:{return 0;break;}
//第2行
case 0x7d:{return 0;break;}
case 0xbd:{return 0;break;}
case 0xdd:{return 0;break;}
case 0xed:{return 0;break;}
//第3行
case 0x7b:{return 0;break;}
case 0xbb:{return 0;break;}
case 0xdb:{return 0;break;}
case 0xeb:{return 0;break;}
//第4行
case 0x77:{return 0;break;}
case 0xb7:{return 0;break;}
case 0xd7:{return 0;break;}
case 0xe7:{return 0;break;}
}
}
k=_crol_(k,1); //移位 进入下一行扫描
}
while(k!=0xef); //超过列范围 退出扫描
}
}
}
一周热门 更多>