设置了两个按键,但是先摁S4的话再摁S5就没用了,哪位大神能帮忙看下

2020-03-07 17:52发布

#define key_input P3
#define key_state_0 0
#define key_state_1 1
#define key_state_2 2
sbit L1=P0^0;
sbit buzzer=P0^6;
char read_key(void)
{
        unsigned char key_press=0;
unsigned char key_return;
static char key_state=0;
key_press=key_input&0x0f;
        if(key_press!=0x0f)
        {
   switch(key_state)
                {
     case key_state_0:
                         if(key_press!=0x0f)
                                 key_state=key_state_1;
                         break;
                 case key_state_1:
                         if(key_press!=0x0f)
                         {
         if(key_press==0x07)key_return=4;
                                 if(key_press==0x0b)key_return=5;
                                 if(key_press==0x0d)key_return=6;
                                 if(key_press==0x0e)key_return=7;
         key_state=key_state_2;
        }
                         else key_state=key_state_0;
                                break;
                                case key_state_2:
                                        if(key_press==0x0f)key_state=key_state_0;
                                break;
    }
  }
        return key_return;
}
unsigned char key_val;
unsigned char i;
void Delay10ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 108;
        j = 145;
        do
        {
                while (--j);
        } while (--i);
}

void main()
{
while(1)
{
       
       
key_val=read_key();
        if(key_val==4){P2=0x80;L1=~L1;}

        if(key_val==5){P2=0xa0;buzzer=0;}
Delay10ms();
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
gx_huang
1楼-- · 2020-03-07 21:56
return key_return;就是错误的,并非每次都有赋值,显然错误的。
一事无成就是我
2楼-- · 2020-03-08 03:24
释放判断+双键判断解决

一周热门 更多>