微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新手求助,按键长按+短按,定时器怎么写?

新手求助,按键长按+短按,定时器怎么写?

时间:10-02 整理:3721RD 点击:

求助论坛的大大,我百度了好多案例,感觉都不合适,也许是我不会搜索 。现在有2个按键,3个LED灯,当S1 长按5秒后,然后间歇的安S2按键,3个LED灯会有2的3次方=8个变化。请问下,这个按键实现我想用定时器实现,应该怎么写?求指导或者例子也行,或者有哪个帖子适合的,麻烦网址告知一下。先谢谢各位了。

定时器只用用来设定某一个时间片到达后就进入中断,其实就是相当于一个延时~只是用了时间片的思想啦~下面是我常用的一段扫描按键的方法~
/***按键扫描******/
void KeyScan()
{
        static unsigned char state=0;
        unsigned char temp;
        if(key1==0)      temp=key1_Value;
        else if(key2==0) temp=key2_Value;
        else if(key3==0) temp=key3_Value;
        else if(key4==0) temp=key4_Value;
        else                         temp=0;
        switch(state)
        {
                case 0:        if(temp!=0) state=1;
                                break;
                case 1:state=2;
                                break;
                case 2:        if(temp!=0) {state=3; KeyPress=temp;}
                                else state=0;
                                break;
                case 3: if(temp==0)         {HandleKeyPress(); state=0;}      / /按键扫描后的处理
                                break;                       
        }       
}

你只需要在定义一个变量,如ms_1=10,让它在中断里面做减减~然后用
         if(ms_1<=0)
           {
                   KeyScan();
                  ms_1=10;
            }
这样就可以扫描按键实现消抖。中断一般也就这么用的吧。看不懂小编的问题,希望对你有用~

先判断出按钮的按下动作,然后计数,根据定时器的定时时间计时就行了吧

非常感谢。磕磕碰碰的终于自己搞定了一个小程序。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top