stm32按键单击,双击,长按检测

u8 click_check(void){
	// 可修改的局部变量
	u8 short_time=50,long_time=200;
	// 定义全局变量
	static u8 flag_click,first_click,second_click;	
	static u16 first_count,second_count;
	
	//当按键按下,即KEY==0,first_count 就计数,松开就清零
	if(KEY==0){
		first_count++;
		flag_click=1;
	}else{
		first_count=0;
		flag_click=0;
		first_click=0;
	}
	
	// 标记按下一次,并记录次数
	if(first_click==0&&flag_click==1){
		second_click++;
		first_click=1;
		if(second_click==2){
			second_click=0;
			second_count=0;
			flag_click=0;
			return 2;
		}
	}
	
	// 如果已有一次按下,就开始计数
	if(second_click==1){
		second_count++;
		// 判定为单击
		if(first_count<short_time&&short_time<second_count){
			second_click=0;
			second_count=0;
			flag_click=0;
			return 1;
		}
		// 一直按住,达到长按时间
		if(long_time<first_count){
			second_click=0;
			second_count=0;
			flag_click=0;
			return 3;
		}
	}
	return 0;
}

常量short_time,long_time是次数,是无单位数据,根据扫描频率来确定时间。

我的每次扫描间隔10ms,所以双击要在0.5s内完成,长按要超过2s。

返回值:

0:无

1:单击

2:双击

3:长按

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值