当前位置:文档之家› C语言按键代码

C语言按键代码

C语言按键代码
C语言按键代码

C语言按键代码

unsigned int Key2Process()

{

if (KEY2==1)

{

//有按键

if (startkey2flag==0)

{

//是新的按键按下

startkey2flag=1;

key2downtime=G_timebase;

shortkey2flag=0;

return NOKEY;

}

else

{

//已经开始按键计时,当检测按键计时超过长按时间则不管释放没有,直接判断一次长按,并清除标志

if (G_timebase-key2downtime>LONGKEYTIME)

{

//大于长按时间,判断为长按

startkey2flag=0;

return LONGKEY;

}

else

{

//判断是否是双击第二次按下

if (key2doubleflag==2)

{

if (G_timebase-key2doublewaittime

{

//在没有超过双击等待时间内检测到再次按键,把标志改为1,并设置时间等待释放

key2doubleflag=1;

key2downtime=G_timebase;

return NOKEY;

}

else

{

//超了时间,属于新的一次按键

startkey2flag=1;

key2doubleflag=0;

key2downtime=G_timebase;

shortkey2flag=0;

return NOKEY;

}

}

else

{

//没事做

return NOKEY;

}

}

}

}

else

{

//无按键,或是按键抖动或是按键释放

if (startkey2flag==1)

{

//当前有按键待决

if (G_timebase-key2downtime>LONGKEYTIME) {

//大于长按时间,判断为长按

startkey2flag=0;

return LONGKEY;

}

else

{

//不到长按时间,可能是短按或是长按的抖动

if (G_timebase-key2downtime>SHORTKEYTIME)

{

//大于短按时间,下面开始计时,判断是抖动还是真正释放if (shortkey2flag==1)

{

if (G_timebase-key2uptime>JITTERTIME)

{

//大于抖动时间,判断是真正的短按释放

if (key2doubleflag==1)

{

//有双击标志,说明是双击的第二次释放

key2doubleflag=0;

startkey2flag=0;

shortkey2flag=0;

return DOUBLEKEY;

}

else

{

//没有双击标志,看时间是否超过双击等待间隔

if (G_timebase-key2uptime>WAITDOUBLETIME)

{

//大于双击间隔,说明是单击

startkey2flag=0;

key2doubleflag=0;

shortkey2flag=0;

return SHORTKEY;

}

else

{

//可能是双击第一次释放,也可能是单击释放,先做

2标志,表示待定,如果在规定时间又按下,说明是双击key2doubleflag=2;

key2doublewaittime=G_timebase;

return NOKEY;

}

}

}

else

{

//时间短,是抖动,继续检测,啥事都不做

return NOKEY;

}

}

else

{

//第一次碰到释放,做标志,开始记录释放时间

shortkey2flag=1;

key2uptime=G_timebase;

return NOKEY;

}

}

}

}

else

{

//当前没有按键,啥事都不做return NOKEY;

}

}

return NOKEY;

}

相关主题
文本预览
相关文档 最新文档