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

共17条 1/2 1 2 跳转至

识别按键长短扫描?

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

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

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

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

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

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




关键词: 按键长短扫描    

高工
2013-06-02 23:55:14     打赏
2楼
用定时器。按下按键开始计时。根据时间,做不同动作

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

现在有一些想法:

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

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

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

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


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

如果我计数实现的话会不会占用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:04:03     打赏
5楼

看这个帖子

http://forum.eepw.com.cn/thread/201946/1

马潮老师的示例


高工
2013-06-03 20:04:22     打赏
6楼

http://218.16.124.207/thread-4991902-1-1.html

原贴


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

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

高工
2013-06-04 11:42:53     打赏
9楼

这就是长按的功能啊

按键功能无非单击,双向,长按这么几种


工程师
2013-06-06 15:21:48     打赏
10楼
是给你交流交流思想呢,还是直接给你源码你看呢?

共17条 1/2 1 2 跳转至

回复

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