case S1: //狀態1
if(key==0xFF) state = S0; //判斷輸入是否為1,為1返回狀態0
else //否則,轉入狀態2,執行按鍵程序
{
state=S2;
}
break;
case S2: //狀態2
if(key != 0xff) //還是按下的狀態
{
state = S3;
}
else //松開了,短按
{
switch(key)
{
case 0x7F: 執行短按任務; break;
case 0xfe: 執行短按任務; break;
case 0xFB: 執行短按任務; break;
case 0xBF: 執行短按任務; break;
case 0xF7: 執行短按任務; break;
case 0xEF: 執行短按任務; break;
default:break;
}
}
break;
case S3: //判斷長按短按
if(key != 0xff)
{
if(++cnt > 150) //1500ms
{
cnt = 190;
state = S4;
}
}
break;
case S4: //長按松手檢測
if(key == 0xff) //松開了
{
cnt = 0;
switch(key)
{
case 0xfe: 此鍵執行長按任務 ; break;
}
}
else if (++cnt>=200) //連按
{
cnt = 190; //100ms觸發一次
switch(key)
{
case 0x7F: 執行連按任務; break;
case 0xFB: 執行連按任務; break;
default:break;
}
break;