一个松手检测程序不能理解 谁能帮忙解答一下 谢谢

2019-07-15 15:25发布

                        while((a<50) && (GPIO_KEY!=0xf0))         //检测按键松手检测
                        {
                                Delay10ms(1);
                                a++;
                        }


就是(a<50) && (GPIO_KEY!=0xf0)这里

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
破力达
1楼-- · 2019-07-15 19:59
while(!key);
比如现在按键是已经按下(就是单片机的一个引脚接了低电平即key=0),!key就是!0,因为!0=1,所以就是变成while(1);也就是进入循环,知道松开按键key=1时,那么!key=0,也就是while(0);这是就跳出循环。检测完毕
破力达
2楼-- · 2019-07-15 22:17
 精彩回答 2  元偷偷看……
andy_wsj
3楼-- · 2019-07-15 23:29
就是检测按键输入在一段时间内是否放开,两个条件,小于50ms并且键值不等于0xf0
只要其中一个不满足,就退出循环
                        while((a<50) && (GPIO_KEY!=0xf0))         //检测按键松手检测
                        {
                                 Delay10ms(1);
                                 a++;
                         }
单单看这个片段,这个松手检测有一些问题
1、如果50ms内按键不变,那么意味着程序要在这里循环50ms,就是说,按键的时候,程序卡一下,无论在中断内还是主循环,等待50ms显然是低效率的行为。
2、如果50ms超过了,键值没变,检测到的数据可能是错误的
lichuan_ken
4楼-- · 2019-07-16 01:12
限时检测,时间是500ms,时间到或GPIO_KEY输入无变化放弃检测。
@曲终人散@
5楼-- · 2019-07-16 06:24
(a<50) && (GPIO_KEY!=0xf0)的意思是当这两个条件有一个不满足是就跳出等待,之所以加一个(a<50) 是为了防止程序死在这里,好多检测应答的程序都是这样的,当超过一定时间后就默认达到自己想要的那个要求了,有效防止由于程序死循环导致程序跑飞发生。
郑鹏丹
6楼-- · 2019-07-16 06:26
lichuan_ken 发表于 2015-12-08 17:51
限时检测,时间是500ms,时间到或GPIO_KEY输入无变化放弃检测。

哦  明白了  谢谢

一周热门 更多>