矩阵按键扫描麻烦帮忙看看。
时间:10-02
整理:3721RD
点击:
以下程序在protues仿真,按键按下后,会进入while循环,即按理有按键按下低位会有一位被拉低,可是tl读不到,等于0x0f。 谁可以帮忙分析下是什么问题,感谢!

P2=0xf0;
if(P2!=0xf0)
{
delay(10);
if(P2!=0xf0) {th=P2;kb=1;}
while(kb)
{
tl=(P2=0x0f)&0x0f;
while(tl==0x0f){P1=0x04;}
temp=th|tl;temp^=0xff;temp=~temp;
P1=0x01;
switch(temp)
{
case 0x11: key_v=7;break; //第一行
case 0x12: key_v=4;break; //第二行
case 0x14: key_v=1;break; //第三行
case 0x18: key_v=10;break; //第四行
case 0x10: P2=0X02;break;
default : break;
}
kb=0;
}

P2=0xf0;
if(P2!=0xf0)
{
delay(10);
if(P2!=0xf0) {th=P2;kb=1;}
while(kb)
{
tl=(P2=0x0f)&0x0f;
while(tl==0x0f){P1=0x04;}
temp=th|tl;temp^=0xff;temp=~temp;
P1=0x01;
switch(temp)
{
case 0x11: key_v=7;break; //第一行
case 0x12: key_v=4;break; //第二行
case 0x14: key_v=1;break; //第三行
case 0x18: key_v=10;break; //第四行
case 0x10: P2=0X02;break;
default : break;
}
kb=0;
}
你可以在变量窗口看一下 tl 的数据啊,看变没变不就知道了!
你的代码中, tl=(P2=0x0f)&0x0f,这句话的效果是tl=1;这是你希望的吗?
