查看: 3411|回复: 8

扩展库使用说明——长短按键处理

[复制链接]

19

主题

81

帖子

639

积分

版主

Rank: 7Rank: 7Rank: 7

积分
639
发表于 2021-2-2 15:58:16 | 显示全部楼层 |阅读模式
本帖最后由 陈哲东 于 2021-6-30 19:30 编辑

按键计时函数,需要放到1ms定时中断程序里,用来判断按键按下时间。

范例程序:

093202p2u2vqzteuvcamae.jpg


测试视频

回复

使用道具 举报

0

主题

4

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2021-5-13 18:38:28 | 显示全部楼层
值得学习加油
回复

使用道具 举报

0

主题

8

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2021-11-28 09:20:19 | 显示全部楼层
学习了!谢谢!
回复

使用道具 举报

1

主题

4

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2022-2-12 13:33:01 | 显示全部楼层
那要是多个按键怎么办呢?
回复

使用道具 举报

0

主题

8

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2022-3-10 23:09:47 | 显示全部楼层
312439374 发表于 2022-2-12 13:33
那要是多个按键怎么办呢?

你怎么解决这个多按键问题?
回复

使用道具 举报

4

主题

15

帖子

94

积分

注册会员

Rank: 2

积分
94
发表于 2022-9-23 15:49:47 | 显示全部楼层
Spring1380 发表于 2022-3-10 23:09
你怎么解决这个多按键问题?

为什么长按键无效
回复

使用道具 举报

0

主题

1

帖子

38

积分

注册会员

Rank: 2

积分
38
发表于 2022-10-18 21:15:57 | 显示全部楼层
本帖最后由 展华威 于 2022-11-12 11:20 编辑

长按;松手判定,体验感差;人对时间不敏感!长按最好改为,时间为触发条件;
回复

使用道具 举报

1

主题

5

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2023-3-19 10:15:00 | 显示全部楼层
同问   那要是多个按键怎么办呢?
回复

使用道具 举报

0

主题

1

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2024-7-6 09:22:13 | 显示全部楼层
//判断按键长按或者短按
#ifndef __BLUE_KEY_H
#define __BLUE_KEY_H

//根据实际情况做修改
#ifndef BLUE_KEY_LONG_TIME
#define BLUE_KEY_LONG_TIME 3000//3000ms 长按短按区分阈值
#endif

#ifndef BLUE_KEY_PRESSED_STATUS
#define BLUE_KEY_PRESSED_STATUS 0 //定义按键按下的电平状态
#endif

//定义按键引脚
#ifndef BLUE_KEY_PIN
#define BLUE_KEY_PIN P3_2
#endif

#ifndef BLUE_KEY_MODE
#define BLUE_KEY_MODE {P3M1|=0x043M0&=~0x04;}//高阻输入
#endif

//供外部调用
uint8 bluekey_type = 0;
#define BLUE_KEY_NO_PRESSED    0
#define BLUE_KEY_SHORT_PRESSED 1
#define BLUE_KEY_LONG_PRESSED  2

//内部使用
uint16 _bluekey_pressed_count; //按键按下的计数器
uint8 _bluekey_cnt_flag; //是否开始计算按键时间
#define BLUE_KEY_CNTING     1
#define BLUE_KEY_NOT_CNTING 0

//========================================================================
// 描述: 按键扫描.
// 参数: none.
// 返回: none.
//========================================================================
void bluekey_scan()
{
  if(BLUE_KEY_PIN==BLUE_KEY_PRESSED_STATUS && _bluekey_cnt_flag==BLUE_KEY_NOT_CNTING )
  {
    _bluekey_pressed_count=0; //设置键按下后,重新开始计时
    _bluekey_cnt_flag=BLUE_KEY_CNTING;//开始计算按下时间
  }
   if(_bluekey_pressed_count>BLUE_KEY_LONG_TIME ) //
    {   
      bluekey_type = BLUE_KEY_LONG_PRESSED;
    }
  if(BLUE_KEY_PIN!=BLUE_KEY_PRESSED_STATUS && _bluekey_cnt_flag==BLUE_KEY_CNTING)
  {
    _bluekey_cnt_flag=BLUE_KEY_NOT_CNTING;//停止计时
   
    //短按
    if(_bluekey_pressed_count<BLUE_KEY_LONG_TIME )
    {   
      bluekey_type = BLUE_KEY_SHORT_PRESSED;
    }
  
  }
}

//========================================================================
// 描述: 按键计时,需要放在1ms定时器里调用.
// 参数: none.
// 返回: none.
//========================================================================
void bluekey_count()
{
QQ截图20240706091931.png
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-7-16 16:51 , Processed in 0.113740 second(s), 28 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

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