当前位置: 代码迷 >> 单片机 >> 新手有关问题请问矩形键盘程序有点不明白
  详细解决方案

新手有关问题请问矩形键盘程序有点不明白

热度:99   发布时间:2016-04-28 14:54:21.0
新手问题请教矩形键盘程序有点不明白
矩形键盘程序,


疑问写在程序注释中了,程序执行是没有问题的,但是没看明白。
delay()  //延时函数
{
...
}
display()  //显示函数
{
...
}

void keyscan(void)
{
unsigned char temp;

        //扫描第一行端口
P1=0xfe;//对P1端口赋值11111110  
temp=P1;
temp&=0xf0;//即temp=temp&0xf0,temp(11111110)对11110000进行按位于运算
if(temp!=0xf0)//这点有疑问:这肯定不可能相等啊?为什么要这样写?
{
delay();
P1=0xfe;//对P1端口赋值11111110
temp=P1;
temp&=0xf0;//即temp=temp&0xf0,temp(11111110)对11110000进行按位于运算,结果为11110000
if(temp!=0xf0)
{
beep();
switch(temp)    //temp的值和按键是否按下根本没关系啊?这是怎么回事呢?按理temp应该等于11110000,不会等于下面的任何一个值,但是程序执行结果是,按下第一行按键,数码管显示对应数字。
{
case(0xe0):display(0);break;
case(0xd0):display(1);break;
case(0xb0):display(2);break;
case(0x70):display(3);break;
}
}
}
------解决方案--------------------
引用
if(temp!=0xf0)//这点有疑问:这肯定不可能相等啊?为什么要这样写?

你仔细想想,当没有按键时这里temp到底等于几?


引用
switch(temp)    //temp的值和按键是否按下根本没关系啊?这是怎么回事呢?按理temp应该等于11110000,不会等于下面的任何一个值,

假设S0按下,前面有P1=0xfe; 那么此时P1.4到底是高还是低?
  相关解决方案