野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8015|回复: 7

按键松手检测分析

[复制链接]
发表于 2021-10-14 21:40:39 | 显示全部楼层 |阅读模式
火哥,看到请回复,谢谢火哥

按键控制LED灯的亮灭,我思考了一下为什么不加按键松手检测灯会一直亮,程序如下:
                      if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON)、
                             {
                                while(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON);           //如果把这句去掉
                                return        KEY_ON;
                       }

                       如果把我写注释的那句去掉,也就是不加按键松手检测,那么按键按下,灯是不会灭的,而是会变得相对暗一点,根本看不到灯熄灭
                       按程序分析下来,只要按键按下,就能检测到对应的IO口变为高电平,那么就一定会执行LED_RED_TOGGLE,原本灯是亮的,也就是ODR对应的位是0,与引脚异或之后,变为1,
                      灯应该是要灭掉的,但是实际上的灯却变暗了,没有熄灭,不知道是不是机械按键有抖动的原因,导致IO口的电平变化很快导致的。火哥出现这种情况的原因是什么
回复

使用道具 举报

发表于 2021-10-15 14:07:06 | 显示全部楼层
debug仿真一下,查它的高低电平,就可以证明的结果
野火论坛202110151405281742..png
回复 支持 反对

使用道具 举报

发表于 2021-10-15 18:38:06 | 显示全部楼层
这个要看你下面的代码怎么写的,在if语句里return感觉很别扭
回复 支持 反对

使用道具 举报

发表于 2023-3-2 20:23:25 | 显示全部楼层
我也想问哈这个问题
回复 支持 反对

使用道具 举报

发表于 2023-3-2 21:39:06 | 显示全部楼层
当按键按下时,while()的作用应该是阻止程序往下执行,没有while(),当你按下按键时,程序会继续往下执行,所以当你按下按键时,程序已经执行很多遍了,会表现出来变暗。当你松开时,pin脚刚好是低电平吧
回复 支持 反对

使用道具 举报

发表于 2023-3-3 09:04:48 | 显示全部楼层
程序跑的很快的,一下亮一下灭,你看到的就不是亮和灭,人眼感受不出来,所以看到的就是变暗了
回复 支持 反对

使用道具 举报

发表于 2023-3-4 22:16:29 | 显示全部楼层
楼上是正解。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-26 00:27 , Processed in 0.046024 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表