金牌会员
- 积分
- 1770
- 金钱
- 1770
- 注册时间
- 2014-6-27
- 在线时间
- 961 小时
|
发表于 2018-1-30 10:27:11
|
显示全部楼层
给你一个模板,可以实现你要的功能
void scan_key( u8 *key_val)
{
static u8 keyValue;
static u8 tmp_keyValue;
static u8 keyTrigger;
static u8 keyKeep;
static u16 keyDelayNum;
static u16 keyDelayNumValue;
u8 x;
keyValue = getKeyState(); // 得到按键的物理状态
while(1)
{
if(keyValue != tmp_keyValue)
{
tmp_keyValue = keyValue;
keyDelayNumValue = 10; //设置去抖节拍数
keyDelayNum = 0;
keyTrigger = 0;
keyKeep = 0;
break;
}
else
{
if(keyDelayNum < keyDelayNumValue)
{
keyDelayNum++;
break;
}
}
keyTrigger = keyValue & (keyValue ^ keyKeep);
keyKeep = keyValue;
if(keyValue)
{
if(keyTrigger)
{
keyDelayNum = 0;
keyDelayNumValue = 400;//设置长按键节拍数
//处理短按,得到键值*key_val = x;
}
else
{
//处理长按键和连按键,如果不需要,这里不添加代码
}
}
else
{
//处理释放后要的键值,如同鼠标单击功能,多击也在这里处理,不需要,直接清键值
*key_val = NULL;
}
break;
}
} |
|