电子商务网站开发策划,可以讨论网站建设的论坛,砍价小程序怎么制作,广西壮族自治区皮肤病医院今天#xff0c;还是一个问题#xff0c;在QQ群(300384358)里有小伙伴一直在问一个问题#xff0c;如上图。一个按键控制电机的转动#xff0c;按键按下后#xff0c;电机转动#xff0c;按键释放#xff0c;电机停止#xff0c;再加一个按键按下时长的检测#xff0c… 今天还是一个问题在QQ群(300384358)里有小伙伴一直在问一个问题如上图。一个按键控制电机的转动按键按下后电机转动按键释放电机停止再加一个按键按下时长的检测当按下超过5秒后电机也得停止。也就说每次按下按键后电机转动的时间不得超过5秒就算按键按下时时长超过5秒。问题其实很简单才开始的小伙伴就是没想法其他小伙伴出谋划策后还是没解决问题今天我们就来慢慢叨叨。这个问题的难点一是在按键按下5秒的识别小伙伴说了不要求精确的5秒大概是5秒就可以了。难点二是按键释放的检测好多小伙伴想不到办法还是用检测按键按下的if语句效果不佳小代在这呢推荐大家用while循环的方式去实现具体怎么实现呢往下看直接上代码按键识别还是采用大家最能接受的二次检测加延时的方式便于好理解。小代说的while循环检测按键释放其实 就是第23行循环结束标志是按键的状态(0或1)再做“非”运算。解释一下从上面我们的二次检测加延时的方式能看出按键按下去后状态值是0那我们再做一个“非”运算后就变成了1相反按键没按下的时候“非”运算后是0当while语句的条件变为0了自然循环就结束了这里说的按键没按下其实也可以说是按键从按下到释放的这个过程。我们来捋一捋这段代码的运行首先到了while(KEY){}这个循环就说明按键已经按下了此时有两种情况一种是最简单的按下时间没到5秒钟那按键释放后直接停止电机转动就好第二种情况是按键按下时长大于等于5秒钟这时需要在按下时长到5秒的时候关闭电机。上面我们分析过了按键按下以后while(!KEY){}循环继续执行只要按键释放自动跳出此循环这样一来我就只需要在这个while循环里去检测时间有没有到达5秒钟时间精确度又不要求太高那我们完全可以采用简单的记录次数来实现时间的计算在以上代码中我假设while循环2000次的时间是5秒钟while循环一次对计次变量加1完了再去检测有没有大于等于2000了当大于等于2000了就说明按下时间大于等于5秒钟了此时我们需要关闭电机。当出现第一种情况就是按下时长小于5秒钟时间这时直接退出while循环在循环后面紧跟着关闭电机再把按下计次变量清零准备下一次的按键记录。这样一来就实现对时间的记录分情况控制。分析问题时我们做了2种情况的分析写代码时其实我们只是对按键释放做了识别又在按键释放之前做了计次的处理。这样的按键释放检测方式可以用在其他的地方比如我们的按键调整时钟时间计算器等等。这样的检测方式也是有弊端的第一我们在做按键释放时候只做了按键的检测如果有其他实时性要求高的代码段需要放到这里的while循环中去比如数码管显示的动态扫描。第二循环计次的变量这里我定义成了uint型最大范围是65535当记录次数大于这个值的时候代码就有问题了当我们长时间的按着按键不释放比如按着1分钟。要解决这个问题需要我们此时好一个最长按键时间比如10秒只要大于我们要求的时间就好当到记录次数大于这个值后将不再加1运算。好了今天的问题就叨叨到这里希望我们都有所收获。·END·单片机技术宅以最简单的方式服务初学者微信号单片机技术宅