单片机的键盘由于介入了人为操作,并不都是机器按流程跑,所以必须考虑到人的操作时长远大于机器周期,所以对于键盘状态的检测必须是写在while中,进行循环检测,这些需要实时检测的状态是:从没有按下到按下,和从已经按下到松手。而为了可以使while中的循环可以跳出,进入while的判断语句中的变量要在while循环中再次赋值,而这个赋值必须是与新状态相关的。
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
就如最后一个while,这是用来检测松手操作,没有松手就会进入while中循环,只有循环中赋判断语句中的变量被不停地附松手的值,等到松手是才可以跳出while