temp 去掉,直接用P1 代替 , 这样有什么区别吗 ??
void keyscan(void)
{ P1=0xF0; //高四位输入 列为高电平 行为低电平
delay(1);
temp=P1; //延时 //读P1口
temp=temp&0xF0; //屏蔽低四位
temp=~((temp>>4)|0xF0);
if(temp==1) // p1.4 被拉低
key=1; //第1个按键键值
else if(temp==2) // p1.5 被拉低
key=2; //第2个按键键值
else if(temp==4) // p1.6 被拉低
key=3; //第3个按键键值
else if(temp==8) // p1.7 被拉低
key=4; //第4个按键键值
else
key = 16;
P1=0x0F; //低四位输入 行为高电平 列为低电平
delay(1); //延时
temp=P1; //读P1口
temp=temp&0x0F;
temp=~(temp|0xF0);
if(temp==2) //第一行 p1.1 被拉低(直接P1==2 是因为我们P1.0空的,是3*4的矩阵键盘)
key=key+0;
else if(temp==4) //第二行 p1.2 被拉低
key=key+4;
else if(temp==8) //第三行 p1.3 被拉低
key=key+8;
else
key = 16;
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
能具体一点吗,我就是不知道为什么不可以,因为我试了是不行的
解释P1:其是reg52.h中定义的sfr(特殊功能寄存器)类型的。实体P1口被映射到单片机内RAM高128B的地址中。操作P1类似读写片内RAM。而对P1的操作,会反映在P1口上,也就是说P1口会相应的被置位、清零。
temp:你自定义的变量,开辟空间在片内RAM低128B内。不会造成外设的动作。
假设你P1替换了temp,那么与逻辑相悖了。具你的这句代码来说:temp=temp&0xF0;换成P1,那么P1口就会受到影响。从而影响你键值的输入和判断。因为你这个逻辑,P1是要此刻等于0xf0的,也就是判断4x4中某行被选中。
现在懂了,真心感谢你的解答!!!谢谢
现在懂了,真心感谢你的解答!!!谢谢
一周热门 更多>