单片机进不了else if?

 int main(void)
{    
    int a,b;
    a=0;b=0;
    delay_init();                
    LED_Init();        
    KEY_Init();
  LED0=0;
    
    while(1)
    {
        Show_Number(a,b);
      if(KEY_Scan(0)==1)//如果KEY1被按下
        {
            a+=1;
        LED0=1;
        delay_ms(100);
        LED0=0;
        }
      else if(KEY_Scan(0)==2)//如果KEY2被按下
        {
      b+=1;
      LED0=1;
      delay_ms(100);
        LED0=0;
        }
        //else continue;
    }
}

单片机为什么进不了这个else if???

按KEY2完全没反应,按KEY1就正常

如果把if的条件换位KEY_Scan(0)==2,else if 的条件换为KEY_Scan(0)==1,那么就只有KEY2正常

求问!

先把KEY_Scan(0)赋值给一个变量,再用变量判断

要让KEY_Scan(0)每次循环只读取一次

定义一个变量,在if前面获取KEY_Scan(0)的值,看看究竟是什么值

	while (1) {
	   	Show_Number(a, b);
	   	int k = KEY_Scan(0);
	   	if (k == 1) //如果KEY1被按下
	   	{
	   		a += 1;
	   		LED0 = 1;
	   		delay_ms(100);
	   		LED0 = 0;
	   	}
	   	else if (k == 2) //如果KEY2被按下
	   	{
	   		b += 1;
	   		LED0 = 1;
	   		delay_ms(100);
	   		LED0 = 0;
	   	}
	   	//else continue;
	}

 

这只有一种可能就是你的KEY_Scan(0)/KEY_Scan(1)始终返回1,这两个函数是本地变量还是实时从硬件读取的信号量?如果是本地变量确认变量是否已经初始化成确定值

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html