论坛元老
 
- 积分
- 4510
- 金钱
- 4510
- 注册时间
- 2018-5-11
- 在线时间
- 944 小时
|
发表于 2018-6-16 22:10:05
|
显示全部楼层
[ 本帖最后由 warship 于 2018-6-16 22:17 编辑 ]\n\n[ 本帖最后由 warship 于 2018-6-16 22:14 编辑 ]\n\n[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=847822&ptid=273335][color=#999999]归荑洵 发表于 2018-6-16 18:38[/color][/url][/size]
如果低多个按键怎么检测 ?[/quote]
如果按键比较多, 可以用数组来干活,
借上面朋友的代码, 这样修改:
#define KEYTOTAL 6 //这里定义按键总数
struct
{
int8_t keyval; //按键值
int8_t state;//当前状态:0 = 松开 , 1 = 按下 , -1 = 消抖阶段
uint32_t last_down_time;//最后一次按下的时间:单位ms
}key[KEYTOTAL];//所有按键状态信息
void MyKeyScan(void)
{
u8 i;
for(i=0;i<KEYTOTAL;i++)
{
if(key[i].keyval== 0)//当前被按下
{
if(key[i].state == 0)
{ //松开时被按下,进入消抖
key[i].state = -1;
}
else if(key[i].state == -1) //确定被按下
{
key[i].state = 1;
//重新开始计时
key[i].last_down_time = 0;
//在此添加按键按下回调函数
}
else if(key[i].state == 1) //已处于按下状态, 则累计持续按键的时间
{
key[i].last_down_time += 10;//10ms
}
}
else
{
key[i].state = 0;
//在此添加按键松开回调函数
}
}
} |
|