发新帖我要提问
12
返回列表
打印
[程序源码]

while语句嵌套if else问题

[复制链接]
楼主: 小西瓜
手机看帖
扫描二维码
随时随地手机跟帖
21
AKKan| | 2016-9-23 08:06 | 只看该作者 回帖奖励 |倒序浏览
程序里最好加个10ms左右延时去抖,另外KEY接的端口都是什么输入,上拉?下拉?浮空?楼主详细一说

使用特权

评论回复
22
shauew| | 2016-9-23 08:28 | 只看该作者
注意按下和按住的不同,
以及按下过程中的抖动,
建议消抖,
如果是分别按下,那逻辑没有问题的,可以在每个if里面消抖试试看(简单的延时再判断)。

使用特权

评论回复
23
小西瓜|  楼主 | 2016-9-23 08:44 | 只看该作者
谢谢各位大神,我可能还是没表示明白,我再重新说明哈。
首先我的芯片是atmega32,然后按键口初始化是输入,没有上拉,DDRA=0X00;PORTA=0X00;  LED输出口初始化是输出高电平,DDRB=0XFF;PORTB=0XFF. 先假设我8个口都用了哈,然后按键检测是高电平有效,led灯亮是低电平有效,头文件里面我有宏定义。 想实现的功能是:按键是点动的,按完就松开的那种,但是灯的状态是一直都显示的,只有切换按键才改变状态,我实际程序不是用KEY 和 LED表示的,只是为了看起来方便才这么写  不知道我这次有没有说清楚呢

使用特权

评论回复
24
yichunshan| | 2016-9-23 08:56 | 只看该作者
小西瓜 发表于 2016-9-23 08:44
谢谢各位大神,我可能还是没表示明白,我再重新说明哈。
首先我的芯片是atmega32,然后按键口初始化是输入 ...

按键检测高电平有效为啥写 if(KEY1==0)

使用特权

评论回复
25
小西瓜|  楼主 | 2016-9-23 09:16 | 只看该作者
我加上延时消抖也没反应,还是按键只能按一次,就是按完1,按2,再按3,如果再循环回来按1或2或3 ,就没反应了

使用特权

评论回复
26
datouyuan| | 2016-9-23 10:00 | 只看该作者
小西瓜 发表于 2016-9-23 08:44
谢谢各位大神,我可能还是没表示明白,我再重新说明哈。
首先我的芯片是atmega32,然后按键口初始化是输入 ...

这就是大家常用的按键.

按键是否有效,必须要有当前按键状态+之前按键状态等几个参数才能判断.

你这种只根据当前按键状态判断肯定不行.

还有你的定义也不好.

建议你看看这个帖子.
https://bbs.21ic.com/icview-1611138-2-1.html

按键程序最通常的做法:
定时获得键值,根据键值和持续时间来确定按键状态,根据按键状态和按键值做相应的按键处理.
获得键值要用1个函数或表达式完成.这样不管你是哪种按键,AD 独立 阵列式按键,你只需要改写这部分,多省事.
按键处理也单独开来,主要精力就是写该部分代码.
这样处理按键的优点:占用mcu时间短,几乎是0耗时,可以很方便的嵌入到任何应用中.

使用特权

评论回复
27
小西瓜|  楼主 | 2016-9-23 11:24 | 只看该作者
datouyuan 发表于 2016-9-23 10:00
这就是大家常用的按键.

按键是否有效,必须要有当前按键状态+之前按键状态等几个参数才能判断.

谢谢,我再研究研究,我按键扫描执行这边一直整不明白怎么判断电平 怎么判断上升沿下降沿。。。

使用特权

评论回复
28
songchenping| | 2016-9-23 16:27 | 只看该作者
这种程序一看就是考虑不周全,限定条件不充分啊

使用特权

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

本版积分规则