u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=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;
return 0;// 无按键按下
}
消除抖动以后如果没确定按下呢,最后key_up=0还是表示按下啊,
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))这句执行0的时候才会执行这句else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1; ?
如果if(KEY0==0)return KEY0_PRES;
else if(KEY1==0)return KEY1_PRES;
else if(WK_UP==1)return WKUP_PRES;这三句都为假的话是直接执行return 0吗 求大神解释一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=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;
}
return 0;// 无按键按下
}
这个程序对吗,求大神讲解一下
可以直接放弃这种代码.
利用系统TICK定时器,做一个 10MS运行一次的接口.
再调用一个KeySweep();
void KeySweep(void)
{
int key;
static int lk=0;
staitc int n=0;
key = getkey();
if(lk != key)
{
lk = key;
n = 0;
}
else
{
if(n<1000)n++;
if(n == 8) // 短按事件
{
processKey(key);
}
else if (n == 300)//长按事件
{
processLongPresskey(key);
}
}
// getkey() processKey() processLongPressKey() 自己去发挥
}
恩恩 因为是新手 还不够了解
初始化结果出现了这个错误,,
main.c(22): error: #165: too few arguments in function call
一周热门 更多>