这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 识别按键长短扫描?

共8条 1/1 1 跳转至

识别按键长短扫描?

高工
2013-06-02 23:13:22     打赏

实验要求:识别按键的长短扫描,短按相应的标志变量赋1,长按相应的标志变量赋2,最后读取变量的值来进行相应的操作。

短按:除去抖动时间,大致在1.5s之内。

长按: 按键按下时间超过2s则认为是长按。

现在考虑在ucos_ii下延时识别,但问题是在延时时间内,按键多次按下会对判断带来误判、错判。

有做过的朋友还望指点迷津。。。




关键词: 按键长短扫描    

高工
2013-06-03 15:07:56     打赏
2楼

现在有一些想法:

1、如楼上所说,用定时器或连续累计计数处理

2、短按键松手检测,长按键直接处理。

松手检测:实现防止键值的误判断,例如一次按键误以为是一长+一短

另外可以加入按键的状态判别来实现按键的长短扫描和一次键值的锁存。


高工
2013-06-03 16:44:42     打赏
3楼

如果我计数实现的话会不会占用CPU太多时间呢,代码如下:

unsigned int   key_num4=0;//键值         确定键
unsigned char  key_lock4=0;//按键锁
unsigned char  key_short4=0;//短按记忆

//KEY4  PC10    确定键
  if(GPIO_ReadInputDataBit(GPIOC, KEY4)==0)
  {
    if(!key_lock4)    
  {
   key_num4++;
   if(key_num4>100)
   {key_short4=1;}//短按记忆
   if(key_num4>5000)
   {
     key_short4=0;
     key_flag=8; //长按
     key_lock4=1;
   }
  }
  }
  else
  {
  if(key_short4)
  {
   key_flag=4;
  }
     key_num4=0;
     key_short4=0;
     key_lock4=0;
  }
}
其中key_flag为全局变量,代码已得到验证


高工
2013-06-03 20:27:50     打赏
4楼
多谢老大提供优秀的资源,3Q

高工
2013-06-03 20:44:37     打赏
5楼
正好符合我的需求啊,今老师又提了一个需求,按住之后使数据迅速的增减,这篇文章得仔细研究研究

高工
2013-06-06 15:45:11     打赏
6楼
党和国家向来注重思想教育,还望得到您的思想洗礼,愿洗耳恭听。。。

高工
2013-06-06 19:41:19     打赏
7楼

按键状态机确实是个很好的解决方案,我在此有一个疑问,在实现长短按键的识别的过程中,计数会不会占用CPU的时间呢?因为实时性的要求,不得不考虑这一点。

多谢大侠的指点,在此表示衷心的感谢!


高工
2013-06-08 11:23:03     打赏
8楼
我是在uCOSII下用的,过几天把代码搞搞,多谢指点

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]