能否尽量详细地说一下:
P1=0x0F; //低四位输入
delay(1); //稍稍延时
temp=P1; //读P1口
temp=temp&0x0F; //取低四位
temp=~(temp|0xF0);
if(temp==1) //检测按下的键所在的列号,在第一列
key=0;
else if(temp==2) //在第二列
key=1;
else if(temp==4) //在第三列
key=2;
else if(temp==8) //在第四列
key=3;
else
key=16; //否则显示-
这一段的意义
你只要我解释这段的意义吧。 这一段是确定按下的键所在的列号。我看几乎每行都有注释啊,而且注释的很好。
temp=temp&0x0F; //取低四位
temp=~(temp|0xF0);这行没注释,我就说一下,就是对temp低四位取反,
因为 P0是段选,低电平有效,这样能分离出按键信息。举个例子,如果是第一列有键按下,temp在执行此句前,低四位应该是1110(低电平有 效 )执行后低四位才变成0001,恰好能为下面的 if,else if 提供正确的逻辑。如果没键按下,temp=0x00,所以有else key=16。显示“-”。
我想应该解释清楚了,如有疑问,给我留言。
我来帮你搞定!