OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4450|回复: 7

分享一下,几句代码便能完成按键多种状态的检测,按下,弹起,任然按下,未按下四种状态。。。

[复制链接]

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
发表于 2018-3-23 17:15:17 | 显示全部楼层 |阅读模式
bool keyLastStatus = false;/*用来记录按键上一次电平状态*/

#define KEY_STATUS      ((/*为引脚电平读取函数如:GPIO_PinRead(CORE_BOARD_KEY_GPIO, CORE_BOARD_KEY_GPIO_PIN) == KEY_ON*/)?true:false)

/*按键状态枚举值*/
typedef enum {
  KEY_PRESS,                        /*按下*/
  KEY_PRESSING,                        /*任然按下*/
  KEY_RELEASE,                        /*弹起*/
  KEY_NONE,                                /*未按下*/
}KeyState_t;

/*获取按键状态*/
KeyState_t GetKeyStatus(bool thisStatus,bool *lastStatus)
{
  KeyState_t KeyState = KEY_NONE;
        if ( (thisStatus) && (!(*lastStatus)) )
        {
                KeyState = KEY_PRESS;
        }
        else if ( (!thisStatus) && (*lastStatus) )
  {
    KeyState = KEY_RELEASE;
  }
        else if( thisStatus && (*lastStatus) )
  {
                KeyState = KEY_PRESSING;
        }
  else if( (!(thisStatus)) && (!(*lastStatus)) )
  {/*其实这里可要可不要*/
    KeyState = KEY_NONE;
  }

  *lastStatus = thisStatus;
        return KeyState;
}

/*用法,此函数按一定周期定时执行*/
void KeyScan(void)
{
        KeyState_t KeyState = GetKeyStatus(KEY_STATUS,&keyLastStatus);
        if(KeyState == KEY_PRESS)
        {
                /*do something*/
        }
        if(KeyState == KEY_RELEASE)
        {
                /*do something*/
        }
        if(KeyState == KEY_PRESSING)
        {
                /*do something*/
        }
}


QQ截图20180323163827.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10576
金钱
10576
注册时间
2017-2-18
在线时间
1915 小时
发表于 2018-3-23 17:47:07 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2018-3-5
在线时间
59 小时
发表于 2018-3-23 18:01:16 | 显示全部楼层
谢谢分享,这个是不是建立在按键可靠消抖的情况下检测的?
回复 支持 反对

使用道具 举报

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
 楼主| 发表于 2018-3-24 09:20:07 | 显示全部楼层
动次打次歌 发表于 2018-3-23 18:01
谢谢分享,这个是不是建立在按键可靠消抖的情况下检测的?

消抖我考虑过了,我的测试是没多次判断消抖的,但结果还是非常可靠的,按键不同可能有所影响,不过多多判断一下就没问题了。
回复 支持 反对

使用道具 举报

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
 楼主| 发表于 2018-3-24 09:20:46 | 显示全部楼层
peng1554 发表于 2018-3-23 17:47
多谢楼主分享!!

多谢支持!!
回复 支持 反对

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1669
金钱
1669
注册时间
2018-1-29
在线时间
160 小时
发表于 2018-3-24 20:22:30 | 显示全部楼层
感谢大神分享!
回复 支持 反对

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
发表于 2018-7-20 08:40:29 | 显示全部楼层
好的谢谢分享
回复 支持 反对

使用道具 举报

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
 楼主| 发表于 2018-8-23 09:45:20 | 显示全部楼层

11

......
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-11 10:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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