uchar keyscan()
{
uchar cord_h,cord_l;//行列值
P3=0x0f; //没加这句,按键没反应,为什么??
cord_l=P3&0x0f; //
if(cord_l!=0x0f)
{
debouncer(); //去抖
if(cord_l!=0x0f)
{
cord_l=P3&0x0f; //列值
P3=cord_l|0xf0; //
cord_h=P3&0xf0; //行值
return(cord_h+cord_l);
}
}
return(0xff);
}
不明白这句 P3=0x0f; //
这样一赋值后那在后面当中P3岂不是一直为 0f,,那在下面取行值时
P3=cord_l|0xf0; //
cord_h=P3&0xf0; //行值
p3高四位在上面已经为0了,,这两句有何用??高四位不是还是0吗?又怎能取的行值??
请多多指教啊,,
P3=0x0f; //没加这句,按键没反应,因为P3口原来的状态是不定的,未知的。所以要加上这句,确保P3口状态稳定。
可以给P3口多次赋值啊,再赋值n次也没问题。赋值后P3口就是刚赋的值,不会“这样一赋值后那在后面当中P3岂不是一直为 0f”
取行值的原理和取列值相同哦。