case S1: //狀態(tài)1
if(key==0xFF) state = S0; //判斷輸入是否為1,為1返回狀態(tài)0
else //否則,轉(zhuǎn)入狀態(tài)2,執(zhí)行按鍵程序
{
state=S2;
}
break;
case S2: //狀態(tài)2
if(key != 0xff) //還是按下的狀態(tài)
{
state = S3;
}
else //松開了,短按
{
switch(key)
{
case 0x7F: 執(zhí)行短按任務; break;
case 0xfe: 執(zhí)行短按任務; break;
case 0xFB: 執(zhí)行短按任務; break;
case 0xBF: 執(zhí)行短按任務; break;
case 0xF7: 執(zhí)行短按任務; break;
case 0xEF: 執(zhí)行短按任務; 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: 此鍵執(zhí)行長按任務 ; break;
}
}
else if (++cnt>=200) //連按
{
cnt = 190; //100ms觸發(fā)一次
switch(key)
{
case 0x7F: 執(zhí)行連按任務; break;
case 0xFB: 執(zhí)行連按任務; break;
default:break;
}
break;