很久之前写的矩阵键盘检测程序,没有验证过行不行。今天实验了下,思路没有问题
,但是问题大大的。4x4矩阵键盘检测不了,顿觉得好郁闷啊。小白一个,还没学会怎么调试,自己想不出来问题在哪啊,只能求助师兄的帮助。在师兄的帮助下调试下,改了一两个地方,可以检测到按键按键。大学了,能有教你学习你就很幸运了。今天又涨知识了。
我反复检验键盘检测有没有问题,还是发现了问题。师兄帮忙调试成功的程序还是有bug,按键按了十几二十次后按键会检测不到。问题又来,每一次解决问题何尝不是在成长呢?继续吧!
void main()
{
for(;;)
{
keyscan();
if(1 == key_deal(keyvalue))
{
led1 = 0;
}
if(4 == key_deal(keyvalue))
{
led1 = 1;
}
}
}
void keyscan()
{
uchar temp;
P3 = 0xf0;
temp=(P3 & 0xf0);
if(temp != 0xf0)// ÅжÏÊÇ·ñÓа´¼ü°´ÏÂ
{
delay(5);// Ïû¶¶
temp=P3 & 0xf0;
if(temp != 0xf0)// ÔÙ´ÎÅжϣ¬È·¶¨ÊÇ·ñÕæµÄÓа´¼ü°´ÏÂ
{
P3 = temp | 0x0f;//°Ñ¸ßËÄλµÄÖµ¸³¸øP3£¬´Ó¶ø¿ÉÒԵõ½Ò»¸ö°ËλµÄ¼üÖµÂë
keyvalue = P3;// »ñÈ¡¼üÖµÂë
while((P3 = temp | 0x0f) == keyvalue);//ËÉÊÖ¼ì²â
}
}
}
uchar key_deal(uchar temp)//
{
uchar num = 0;
switch(temp)
{
case 0xee : num = 1;
break;
case 0xed : num = 5;
break;
case 0xeb : num = 9;
break;
case 0xe7 : num = 13;
break;
case 0xde : num = 2;
break;
case 0xdd : num = 6;
break;
case 0xdb : num = 10;
break;
case 0xd7 : num = 14;
break;
case 0xbe : num = 3;
break;
case 0xbd : num = 7;
break;
case 0xbb : num = 11;
break;
case 0xb7 : num = 15;
break;
case 0x7e : num = 4;
break;
case 0x7d : num = 8;
break;
case 0x7b : num = 12;
break;
case 0x77 : num = 16;
break;
default : ;
}
return num;
}
求bug所在?