C语言按键代码

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

{

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

key2doubleflag=1; key2downtime=G_timebase; return NOKEY;

}

else

{

// 超了时间,属于新的一次按键startkey2flag=1;

key2doubleflag=0; key2downtime=G_timebase;

shortkey2flag=0;

return NOKEY;直接判断

1,

}

}

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;

}

相关文档
最新文档