打印
[程序源码]

while语句嵌套if else问题

[复制链接]
4445|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小西瓜|  楼主 | 2016-9-22 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下,请大神们帮帮忙,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;  
     }
}

相关帖子

沙发
小西瓜|  楼主 | 2016-9-22 11:15 | 只看该作者
我觉得大神们看了就会明白的,我看了半天也没觉得哪里出现问题了。。。在线等

使用特权

评论回复
板凳
datouyuan| | 2016-9-22 11:37 | 只看该作者
看不明白你文字的内容.

你代码的作用见下:
不按任何键 :   1灯灭,2灯灭
按住1#键    :   1灯亮,2灯灭
按住2#键    :   1灯灭,2灯亮
按住3#键    :   1灯亮,2灯亮
备注:这3个键的优先顺序是1-2-3,例如:同时按住2#3#键,算按2#键,同时按住1#2#3#键,算按1#键.

使用特权

评论回复
地板
liuyu305| | 2016-9-22 11:46 | 只看该作者
==0是按下?

使用特权

评论回复
5
小西瓜|  楼主 | 2016-9-22 13:03 | 只看该作者

对的 等于0是按下,我这段代码想实现的功能其实就是按键扫描,一个键对应一种功能,但是实现不了,请指点

使用特权

评论回复
6
小西瓜|  楼主 | 2016-9-22 13:04 | 只看该作者
datouyuan 发表于 2016-9-22 11:37
看不明白你文字的内容.

你代码的作用见下:

不好意思,我说得不清楚。按键不是同时按下的,每次只按一个按键,就像按键扫描那种,类似按1显示1,按2显示2,但是我现在就是实现不了,不知道程序哪里出现问题了

使用特权

评论回复
7
yichunshan| | 2016-9-22 13:38 | 只看该作者
本帖最后由 yichunshan 于 2016-9-22 13:44 编辑

KEY键均有上拉电阻,KEY123均定义为IO且已经设置为输入?

使用特权

评论回复
8
icecut| | 2016-9-22 13:51 | 只看该作者
把所有 else 这个单词都删了
最后那个不要
else 就是不能连续按键.排他...

使用特权

评论回复
9
两只岸上的鱼| | 2016-9-22 13:51 | 只看该作者
else if(KEY2==0)
     {
         LED1=1;;
         LED2=0;;
      }
怎么有两个 ;


使用特权

评论回复
评论
yichunshan 2016-9-22 14:05 回复TA
米有关系 
10
创隆电子| | 2016-9-22 14:00 | 只看该作者
原因1,是否接有上拉电阻,如果没有案件不能用P0口,

使用特权

评论回复
11
创隆电子| | 2016-9-22 14:01 | 只看该作者

2暂时把最后的ELSE1=1;2=1;屏蔽或删除,试试按键能否正常

使用特权

评论回复
12
焊丝滚成球| | 2016-9-22 15:06 | 只看该作者
建议要消除抖动,while(key);  延时也要做一下几毫秒的。

使用特权

评论回复
13
whtwhtw| | 2016-9-22 15:25 | 只看该作者
while(1)里没问题,有问题的可能是别的地方

使用特权

评论回复
14
李冬发| | 2016-9-22 15:33 | 只看该作者
改成
if(key==KEY1)
{
    ...
}
else if(key==KEY2)
{
    ...
}
else if(key==KEY2)
{
    ...
}
...

吧。

使用特权

评论回复
15
linyu1983| | 2016-9-22 16:44 | 只看该作者
最后的
else
     {
          LED1=1;
          LED2=1;  
     }
去掉

使用特权

评论回复
16
datouyuan| | 2016-9-22 16:51 | 只看该作者
实在看不懂你的文字.

假如某个按键要求在这种情况下是这个功能,换一种情况,是另一个功能.推荐你用状态机的方式编写.

假如这个按键在任何情况下,只有一种功能,楼主的这种编写方式ok.

使用特权

评论回复
17
datouyuan| | 2016-9-22 17:13 | 只看该作者
本帖最后由 datouyuan 于 2016-9-22 17:21 编辑
小西瓜 发表于 2016-9-22 13:04
不好意思,我说得不清楚。按键不是同时按下的,每次只按一个按键,就像按键扫描那种,类似按1显示1,按2 ...

你的程序的作用就是我在3楼给你分析的,请注意"按住""不按任何键"这2个词,代码没问题.
假如这不是你想要的功能,你再重新按你想要的功能写(我们都不明白你的要求).

按1显示1

松手后还显示1吗?还有这个显示是要一直刷新还是显示一次后就不用管了?

一个键对应一种功能

这描述也太模糊了.

我们一般一个键可以对应多种功能.
短按住
短按松手
长按住
长按松手
还有这个键和别的键组合,对应的功能实在太多了.

使用特权

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

使用特权

评论回复
19
ningling_21| | 2016-9-22 18:52 | 只看该作者
小西瓜 发表于 2016-9-22 13:04
不好意思,我说得不清楚。按键不是同时按下的,每次只按一个按键,就像按键扫描那种,类似按1显示1,按2 ...

按键没有消抖

使用特权

评论回复
20
datouyuan| | 2016-9-22 19:26 | 只看该作者
xinzha 发表于 2016-9-22 18:34
KEY1,KEY2,KEY3是怎么判断的,上下拉如何处理,都对这个程序有影响。
另外一个大问题是,点灯程序里没有 ...

不对."按住"时灯会亮,松手后所有灯才不亮,说不定这就是楼主想要的功能.

使用特权

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

本版积分规则

6

主题

43

帖子

0

粉丝