打印
[51单片机]

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

[复制链接]
1170|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
季冬|  楼主 | 2020-2-5 15:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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();
}
}

使用特权

评论回复

相关帖子

沙发
gx_huang| | 2020-2-5 15:50 | 只看该作者
return key_return;就是错误的,并非每次都有赋值,显然错误的。

使用特权

评论回复
板凳
释放判断+双键判断解决

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝