27,375
社区成员
发帖
与我相关
我的任务
分享
//下面这段代码是我从书上抄的。。在switch那里我改了一下而已。先做个简单和测试
//但本来按下第一个键就led亮的。但是没有反应。。
//请问这段扫描键盘的代码是错在哪里?怎么改呢。。
void keyScan()
{
void delay(UINT);
UCHAR xTemp, yTemp, readKey, reReadKey;
xTemp = (P3 = 0x0f) & 0x0f; //扫描按键行值
if(xTemp == 0x0f) //无键按下
return;
yTemp = (P3 = 0xf0) & 0xf0; //列值
readKey = xTemp | yTemp;
delay(5); //延迟
xTemp = (P3 = 0x0f) & 0x0f; //扫描按键行值
if(xTemp == 0x0f)
return;
yTemp = (P3 = 0xf0) & 0xf0;
readKey = xTemp | yTemp;
if(readKey == reReadKey)
{
switch(readKey)
{
case 0xee: P1 = 0x00;while(1); //测试按下第一个键
case 0xde:break;
}
}
}
uchar Keyscan(void)
{
uchar i,j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
for(j=0; j<4; j++)
{
P1 = Buffer[j];
/*以下三个_nop_();作用为让 P1 口的状态稳定*/
_nop_();
_nop_();
_nop_();
temp = 0x01;
for(i=0; i<4; i++)
{
if(!(P1 & temp))
{
return (i+j*4); //返回取得的按键值
}
temp <<= 1;
}
}
}