1 短按以鬆手作爲觸發條件
2 長按以2秒鐘未鬆手作爲觸發條件
3 按鍵按下爲0 鬆開爲1
4 key_return 0 未按下 1 短按 2 長按
僞代碼如下:
enum key_state
{
S0=1, S1, S2, S3
};
char key_scan()
{
static char key_state = 0, key_time = 0;
static char key_press = 0, key_return = 0;
key_press = readKEY();
switch(key_state)
{
case S0://無按鍵按下
if(!key_press)
key_state = S1;
break;
case S1: //有按鍵按下
if(!key_press)
{
key_state = S2;
key_time = 0;
}
else
{
key_state = S0;//消抖
key_return = 0;
}
break;
case S2://計時1
if(key_press)//按鍵鬆開
{
key_state = S0;//短按已鬆開,返回初始狀態
key_return = 1;
}
else if(++key_time >= 2000)
{
key_state = S3;//計時滿2秒,表示是長按
key_time = 0;
key_return = 2;
}
break;
case S3://計時2
if(key_press) //按鍵鬆開
key_state = S0;//此時按鍵已經持續了2秒了 等待按鍵鬆開返回初始狀態
break;
}
return key_return;
}
還未測試