【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《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; }
本文来源:https://www.wddqxz.cn/819f720eac51f01dc281e53a580216fc710a5381.html