新手按键真的好烦

2019-08-17 08:17发布

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吗 求大神解释一下

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
正点原子
1楼-- · 2019-08-17 09:22
 精彩回答 2  元偷偷看……
stm32f103ZE
2楼-- · 2019-08-17 11:29
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;// 无按键按下
}
这个程序对吗,求大神讲解一下
操作系统
3楼-- · 2019-08-17 13:59
本帖最后由 操作系统 于 2017-6-11 13:56 编辑

可以直接放弃这种代码.
利用系统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() 自己去发挥

}
stm32f103ZE
4楼-- · 2019-08-17 17:11
操作系统 发表于 2017-6-11 13:53
可以直接放弃这种代码.
利用系统TICK定时器,做一个 10MS运行一次的接口.
再调用一个KeySweep();

恩恩 因为是新手 还不够了解
stm32f103ZE
5楼-- · 2019-08-17 19:33
还有一个问题 ,为什么主函数中不用初始化KEY_Scan();
初始化结果出现了这个错误,,
main.c(22): error:  #165: too few arguments in function call
操作系统
6楼-- · 2019-08-17 23:58
 精彩回答 2  元偷偷看……

一周热门 更多>