野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17771|回复: 5

如何检测同一按键按下总次数

[复制链接]
发表于 2015-4-15 22:16:03 | 显示全部楼层 |阅读模式
求教:STM32用什么库函数能检测并记录同一按键按下的总次数
回复

使用道具 举报

发表于 2015-4-16 07:28:37 | 显示全部楼层
你是如何检测某个按銉按下的?在检测后面加一变量累加即可,加在等待按键抬起语句之后
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-16 19:34:59 | 显示全部楼层
11kxmx 发表于 2015-4-16 07:28
你是如何检测某个按銉按下的?在检测后面加一变量累加即可,加在等待按键抬起语句之后

[code]uint8_t Key_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin,uint8_t Down_state)
{
        if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == Down_state)
        {       
                Key_Delay(100);
                if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == Down_state)
                {
                                while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == Down_state)
                                {
                                        m++;
                                }
                                return m;
                }
                else  
                        return 0;
        }
        else  
                return 0;
}

是这样子加吗?我是用系统定时器定时,在定时周期里检测按键被按下的次数,我是想实现这样的程序
回复 支持 反对

使用道具 举报

发表于 2015-4-17 08:09:20 | 显示全部楼层
我覺得應該如下:
else可以不要
或直接定義m為全局變量

[code]uint8_t Key_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin,uint8_t Down_state)
{
        if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == Down_state)
        {        
                Key_Delay(100);
                if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == Down_state)
                {
                                while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == Down_state);
                                  m++;
                                return m;
                }
        }
     }

                              
回复 支持 反对

使用道具 举报

发表于 2015-4-17 08:43:16 | 显示全部楼层
我怎么觉得上述方法不对呢?  楼主试过了?
如果按下按钮的时间比较长,长于100ms,就会进入while循环,m值就会使劲地增加。
这里的m值貌似不代表任何实际物理值。

楼主的问题不严谨,检测并统计次数,时间是多久?
应该检测按键按下后延时100ms后再检测弹起后计数+1,然后循环检测,有需要的时候中断一下输出计算值。
这样很不好。CPU得一直跑在循环检测上。建议采用中断的方式检测按键和计数。系统定时器做时基获取系统运行的ms数。按键按下中断记录时间,如果20ms内还有按键弹起和按键按下中断则忽视,这是按键抖动。如果按键弹起时间距离按下时间超过20ms了,认为是一次有效按钮动作,按键次数+1.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-17 18:33:23 | 显示全部楼层
yinhao 发表于 2015-4-17 08:43
我怎么觉得上述方法不对呢?  楼主试过了?
如果按下按钮的时间比较长,长于100ms,就会进入while循环,m值 ...

恩,就想实现这样的一个功能,但是条件语句不知道如何写
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 11:09 , Processed in 0.027387 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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