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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/p1126500468/article/details/50529661


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






猜你喜欢

转载自blog.csdn.net/p1126500468/article/details/50529661
今日推荐