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;