微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 一个松手检测程序不能理解 谁能帮忙解答一下 谢谢

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

时间:10-02 整理:3721RD 点击:
                        while((a<50) && (GPIO_KEY!=0xf0))         //检测按键松手检测
                        {
                                Delay10ms(1);
                                a++;
                        }

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

while(!key);
比如现在按键是已经按下(就是单片机的一个引脚接了低电平即key=0),!key就是!0,因为!0=1,所以就是变成while(1);也就是进入循环,知道松开按键key=1时,那么!key=0,也就是while(0);这是就跳出循环。检测完毕

打错一个词,把“知道”改为“当”

就是检测按键输入在一段时间内是否放开,两个条件,小于50ms并且键值不等于0xf0
只要其中一个不满足,就退出循环
                        while((a<50) && (GPIO_KEY!=0xf0))         //检测按键松手检测
                        {
                                 Delay10ms(1);
                                 a++;
                         }
单单看这个片段,这个松手检测有一些问题
1、如果50ms内按键不变,那么意味着程序要在这里循环50ms,就是说,按键的时候,程序卡一下,无论在中断内还是主循环,等待50ms显然是低效率的行为。
2、如果50ms超过了,键值没变,检测到的数据可能是错误的

限时检测,时间是500ms,时间到或GPIO_KEY输入无变化放弃检测。

(a<50) && (GPIO_KEY!=0xf0)的意思是当这两个条件有一个不满足是就跳出等待,之所以加一个(a<50) 是为了防止程序死在这里,好多检测应答的程序都是这样的,当超过一定时间后就默认达到自己想要的那个要求了,有效防止由于程序死循环导致程序跑飞发生。

哦  明白了  谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top