我用矩阵键盘的状态机写法,但是有一列根本检测不出,这是什么情况,请各位大佬指教
#include <stc15f2k60s2.h>
#include <intrins.h>
#define key_state_0 0
#define key_state_1 1
#define key_state_2 2
#define key P3
char keyresult();
void main()
{
unsigned char key_val;
while(1)
{
P2=0XA0;P2=0X1F;P0=0X00;
key_val=keyresult();
if(key_val==1){P2=0X80;P2=0X1F;P0=0X00;}
}
}
char keyresult(void)
{
static char key_state=0;
unsigned char key_return=0,key_press;
unsigned char key1,key2;
key=0Xf0;
key1=key&0Xf0;
key=0X0f;
key2=key&0X0f;
key_press=key1|key2;
switch(key_state)
{
case key_state_0:
if(key_press!=0XFF)key_state=key_state_1;break;
case key_state_1:
if(key_press!=0XFF)
{
if(key_press==0X7e)key_return=1;
if(key_press==0Xdd)key_return=2;
key_state=key_state_2;
}
else
key_state=key_state_0;
break;
case key_state_2:
if(key_press==0XFF)
{
key_state=key_state_0;
}
break;
}
return key_return;
}