这种矩阵键盘用反转法比较简单,给你一个参考代码。 { P1 = 0x0f; //行置低,列置高(读列) if(P1!=0x0f) { // P1 = 0x0f; delaym(40); //延时去抖。约60MS,可根据实际情况修改 if(P1!=0x0f) { switch(P1)//扫描列 { case 0x07:i=3;break; case 0x0b:i=2;break; case 0x0d:i=1;break; case 0x0e:i=0;break; default:break; } //反转行列电平,读行 P1 = 0xf0; switch(P1) { case 0x70:j=3;break; case 0xb0:j=2;break; case 0xd0:j=1;break; case 0xe0:j=0;break; default:break; } while(P1!=0xf0); //等待键释放 return key_word[i][j];//返回键值 } |
![]()
|
![]() ![]()
|
个人觉得你的代码逻辑有很大的问题,没有理解按键检测的原理。 首先,你定义了一个temp,然后P1=0x0f,怎么突然之间就跳到while(temp!=0x0f)了?中间不应该有个temp=P1的过程? 其次,检测到temp!=0x0f后,为什么让P1=0xfe<<1?这也不会令P1最终得到真实的按键状态啊。最终只会导致P1==0x00。 最后,switch(temp)这,temp并没有得到真实的按键状态(P1口)对应的电平状态,自然会导致switch(temp)下面的语句没起任何作用。 建议找本教材,比如郭天祥的,看看按键检测的原理以及例程。或者看看视频的讲解,理解原理之后再写代码。 |