矩形键盘程序,
疑问写在程序注释中了,程序执行是没有问题的,但是没看明白。
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;
}
}
}
------解决方案--------------------
你仔细想想,当没有按键时这里temp到底等于几?
假设S0按下,前面有P1=0xfe; 那么此时P1.4到底是高还是低?