1. 程式人生 > >按鍵鬆手檢測 - 檢測是否連續按下

按鍵鬆手檢測 - 檢測是否連續按下



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