这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 独立键盘扫描程序,带松手检测,可区别长击与短击

共2条 1/1 1 跳转至

独立键盘扫描程序,带松手检测,可区别长击与短击

助工
2012-06-10 19:10:01     打赏
 花了一个星期写出来的,四个按键的独立键盘扫描程序。可以区别长击和短击,同时采用计数方式来消抖。按下键一定时间内,松手后返回对应值;按下键超过一定时间,返回对应值。短击的返回值是在松手后才产生,长击则是超过时间就产生,长击松手后不会返回短击的值。

u8 Key_Scan(void)
{
u8 key_ret = 0;
static u8 key_num = 0,del_count,tim_count;
static bit key_flag = 0;
if((!SET)||(!KUP)||(!KDN)||(!KOK)){/*判断是否有键按下*/
if(++del_count==5){/*计数消抖*/
del_count = 0;
if(++tim_count>4){/*长按识别*/
key_flag = 0;/*短按无效*/
tim_count = 4;/*锁定长按*/
switch(key_num){
case 1:key_ret = 5;break;
case 2:key_ret = 6;break;
case 3:key_ret = 7;break;
case 4:key_ret = 8;break;
}
}
else{/*短按有效*/
key_flag = 1;/*短按标志位*/
if(!SET)key_num = 1;/*一下用于识别按键*/
if(!KUP)key_num = 2;
if(!KDN)key_num = 3;
if(!KOK)key_num = 4;
}
}
}else{/*松手之后*/
tim_count = 0;
if(key_flag){/*松手*/
key_flag = 0;
switch(key_num){
case 1:key_ret = 1;break;
case 2:key_ret = 2;break;
case 3:key_ret = 3;break;
case 4:key_ret = 4;break;
}
}
}
return key_ret;
}

不过感觉程序还有地方可以改进。贴出来跟大家一起讨论。共享一份文档
——回复可见内容——



关键词: 独立     键盘     扫描     程序     松手     检测     区别     长击         

助工
2012-06-11 15:20:41     打赏
2楼

我也想有连发的功能,不过跟短击松手有冲突。等待高手出现解决


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]