按键松手检测 - 检测是否连续按下



u8 KEY_Scan(void)
{	
	static u8 keyup=1;      //防止检测多次
	if(keyup&&(KEY0==0||KEY1==0||KEY3==0))
	{
		delay_ms(50);//去抖
		if(KEY0==0||KEY1==0||KEY3==0)
		{	
			keyup=0;			
			if (KEY0==0)
					return KEY0_PRES;
			else if(KEY1==0)
				    return KEY1_PRES;
			else if(KEY3==0)
					return WKUP_PRES;
		    
		} 
	}
	else  if(KEY0==1&&KEY1==1&&KEY3==1)  //若按键全部松开
		          keyup=1; 
	return 0;
}

今天写按键的一个小程序,发现没有松手检测,如果一直按着按键不松开,会一直触发,执行程序。然后发现例程的检测程序,感觉不错。

设置一个静态变量,当此变量为一,并且有按键按下时,进入按键判断函数。进入后把变量设置为0。若一直按着按键,一直执行不到最后若按键全部松开,keyup=1,所以,不会执行多次。

还可以设置一个参数,确定是否需要检测多次:

<pre name="code" class="objc">u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键按松开标志
	if(mode)
         key_up=1;  //支持连按		  
	if(key_up&&(KEY0==0||KEY1==0||KEY3==0))
	{
		delay_ms(10);//去抖动 
		key_up=0;
		if(KEY0==0)return KEY0_PRES;
		else if(KEY1==0)return KEY1_PRES;
		else if(KEY3==0)return WKUP_PRES; 
	}else if(KEY0==1&&KEY1==1&&KEY3==1)key_up=1; 	     
	return 0;// 无按键按下
}


 

若mode置一,说明支持连按,则keyup一直为一,会重复检测 吐舌头 吐舌头

2016/1/16






  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值