while语句嵌套if else问题

程序如下,请大神们帮帮忙,C语言新手一枚。
出现问题:如果先按key1,则1、2两个灯都亮,再按key2和key3则都没反应;如果先按key2,一个灯亮,再按key3,另一个灯亮,再按key1,两灯都亮,但是再按其他的又没反映了。。。。总结一下就是:按了key1,再按其他就没反应,如果先按其他的,也只能轮回一次,不能重复按,例如按了key2.按key3,再按key2也不行了。。。不知道我表达明白没,请指教,谢谢
while(1)
{
    if(KEY1==0)
    {
        LED1=0;
        LED2=1;
     }
     else if(KEY2==0)
     {
         LED1=1;;
         LED2=0;;
      }
     else if(KEY3==0)
     {
          LED1=0;
          LED2=0;
      }
     else
     {
          LED1=1;
          LED2=1;  
     }
}

首先我的芯片是atmega32,然后按键口初始化是输入,没有上拉,DDRA=0X00;PORTA=0X00;  LED输出口初始化是输出高电平,DDRB=0XFF;PORTB=0XFF. 先假设我8个口都用了哈,然后按键检测是高电平有效,led灯亮是低电平有效,头文件里面我有宏定义。 想实现的功能是:按键是点动的,按完就松开的那种,但是灯的状态是一直都显示的,只有切换按键才改变状态,我实际程序不是用KEY 和 LED表示的,只是为了看起来方便才这么写

永不止步步 发表于09-23 09:11 浏览65535次
分享到:

已有2条评论

  • 畅学电子
    畅学电子 09-23 09:27

    KEY1,KEY2,KEY3是怎么判断的,上下拉如何处理,都对这个程序有影响。
    另外一个大问题是,点灯程序里没有延时,那么如果你的程序和硬件都没错误,那么你应该看不到灯亮才对,因为没有任何按键按下才是在绝大多数时间内发生的事情。

  • EEskill
    EEskill 09-23 09:27

    注意按下和按住的不同,
    以及按下过程中的抖动,
    建议消抖,
    如果是分别按下,那逻辑没有问题的,可以在每个if里面消抖试试看(简单的延时再判断)。

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:345377个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号