设为首页 加入收藏

TOP

按键长短按
2019-09-04 00:59:38 】 浏览:35
Tags:按键 长短

u8 key_return = NO_KEY;
u8 key_tmp = NO_KEY;
u8 key_lock = 0;//按键自锁标志,自己加的

if (key_val == NO_KEY || key_val != key_ctl.key_val) //按键没有按下或者本次按键与上一次按键不相同
{
if (key_ctl.key_up < KEY_UP_TIMES) //抬键防抖延时
{
key_ctl.key_up++;//抬键计数
}
else
{
if (key_ctl.key_cnt >= KEY_LONG_TIMES) { //长按抬键
key_return = key_ctl.key_val | T_KEY_LONG_UP;
} else if (key_ctl.key_cnt >= KEY_SCAN_TIMES) { //短按抬键
key_return = key_ctl.key_val | T_KEY_SHORT_UP;
}
key_tmp = key_ctl.key_val;

key_ctl.key_val = key_val; //把最后一次的按键存起来,留待下次使用
key_ctl.key_cnt = 0; //按键计时清0
key_lock = 0;
}
}
else
{
key_ctl.key_cnt++;
if (key_ctl.key_cnt == KEY_SCAN_TIMES && key_lock == 0) { //去抖
key_ctl.key_up = 0;
key_lock = 1;//自锁标志置1,防止按住按键不松手后一直触发
key_return = key_ctl.key_val | T_KEY_SHORT; //短按,暂存按键值
} else if (key_ctl.key_cnt == KEY_LONG_TIMES && key_lock == 0) { //长按
key_lock = 1;
key_return = key_ctl.key_val | T_KEY_LONG;
} else if (key_ctl.key_cnt == KEY_LONG_HOLD_TIMES && key_lock == 0) { //连按
key_lock = 1;
key_return = key_ctl.key_val | T_KEY_HOLD;
key_ctl.key_cnt = KEY_LONG_TIMES;
}
key_tmp = key_ctl.key_val;
}
if(key_tmp > 0x1f && key_return >= 0x80) //32-127这些键值不支持长按
{
key_return = NO_KEY;
}
return key_return;

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇信号量整理 下一篇汇编语言初探

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目