函数原理:
1.用static关键字定义的变量,其值会保存,下次再执行这个函数的时候不会被初始化 。
2.如果mode==1,则是支持连按模式。key_up=0之后key_up也会立刻变成1,保证继续返回键值
3.如果mode==0,则是不支持连按模式。key_up=0之后key_up无法变成1,无法继续返回键值。
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//static修饰的变量,只进入一下,下次则不进入
if(mode)key_up=1; //mode为1就是支持连按,否则不支持。
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY0==0)return KEY0_PRES;
else if(KEY1==0)return KEY1_PRES;
else if(WK_UP==1)return WKUP_PRES;
}
else if(KEY0==1&&KEY1==1&&WK_UP==0)
key_up=1; //如果没有按键按下,保证key_up的值为1,为下次按键做准备。
return 0;// 无按键按下
}
该代码段展示了如何使用C语言实现按键扫描功能,包括支持和不支持连按模式。通过`static`关键字管理变量`key_up`,在mode为1时启用连按模式,模式为0时禁用。在连按模式下,即使按键释放,`key_up`仍会迅速重置为1,允许连续响应按键;而在非连按模式下,按键释放后`key_up`不再重置,避免多次返回按键值。此外,代码还包含了去抖动处理,以提高按键检测的稳定性。
4万+

被折叠的 条评论
为什么被折叠?



