发新帖我要提问
12
返回列表
打印
[STM32F1]

求助各位坛友 如何实现一个按键按顺序执行三个功能呢

[复制链接]
楼主: babyrabbit
手机看帖
扫描二维码
随时随地手机跟帖
21
lihui567| | 2018-4-13 16:31 | 只看该作者 回帖奖励 |倒序浏览
本帖最后由 lihui567 于 2018-4-13 17:21 编辑

case KeySureDown:    // È·ÈÏÏû¶¶
            if(!KeyPress)
            {
                state = OnceKeyDown;
                TimeCount = 0;
            }

            else
            {
                state = NoKeyDown;
            }
            break;
加个这样类似的消抖程序,用定时器10ms中断,每次中断对按键的状态进行判断就可以了

使用特权

评论回复
22
xch| | 2018-4-14 13:12 | 只看该作者
babyrabbit 发表于 2018-4-12 14:02
我之前写的是没按一次加1,但是也不行,
void key3()
{       


void key3()
{        
    static k=0;               
        if(k==0&&KEY==KEY2_ONE_DOWN)
        {
     n=444;
         k++;
return;
         }
    if(k==1&&KEY==KEY2_ONE_DOWN)
        {        
         n=111;        
         k++;        
return;
        }
        if(k==2&&KEY==KEY2_ONE_DOWN)
        {        
        n=345;
        k=0;     
//return;      
        }
               
}

漏了return吧

使用特权

评论回复
23
babyrabbit|  楼主 | 2018-4-15 17:09 | 只看该作者
感谢大家的帮助  问题已经解决。我的问题出在确认按键之后还延时了10MS,而这10ms执行了一段程序,加一个抬起就好了。

使用特权

评论回复
24
babyrabbit|  楼主 | 2018-4-15 17:16 | 只看该作者
xch 发表于 2018-4-14 13:12
void key3()
{        
    static k=0;               

和return无关 因为状态机10ms扫描一次按键状态 在10ms内 KEY值一直等于按键按下的状态 key3函数里的判断都是真 导致变量k加了好多次 直到10ms后再次扫描按键得到它已经处于抬起状态 才会让判断变为假 我在key3函数的最后手动加了一个另KEY等于抬起状态的语句就解决了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则