zoukankan      html  css  js  c++  java
  • 3.STM32F4按键扫描函数

    //按键处理函数
    //返回按键值
    //mode:0,不支持连续按;1,支持连续按;
    //0,没有任何按键按下
    //1, KEY0 按下 2, KEY1 按下 3, KEY2 按下 4, WKUP 按下 WK_UP
    //注意此函数有响应优先级,KEY0>KEY1>KEY2>WK_UP!!
    u8 KEY_Scan(u8 mode)
    {
    static u8 key_up=1;//按键按松开标志
    if(mode)key_up=1; //支持连按
    if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
    {
    delay_ms(10);//去抖动
    key_up=0;
    if(KEY0==0)return 1;
    else if(KEY1==0)return 2;
    else if(KEY2==0)return 3;
    else if(WK_UP==1)return 4;
    }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1; 
    return 0;// 无按键按下
    }

    KEY_Scan 函数,则是用来扫描这 4 IO 口是否有按键按下。 KEY_Scan 函数, 支持两种扫描方式,通过 mode 参数来设置。

    mode 0 的时候, KEY_Scan 函数将不支持连续按, 扫描某个按键,该按键按下之后必须要松开,才能第二次触发,否则不会再响应这个按键,这样的好处就是可以防止按一次多次触发,而坏处就是在需要长按的时候比较不合适。 

    mode 1 的时候, KEY_Scan 函数将支持连续按,如果某个按键一直按下,则会一直返回这个按键的键值,这样可以方便的实现长按检测。 该函数有返回值,如果有按键按下,则返回非 值,如果没有或者按键不正确,则返回 0。 

    注:因为该函数里面有 static 变量,所以该函数不是一个可重入函数

    static u8 key_up=1;//按键按松开标志

    静态变量复习例子

    #include<stdio.h>
    int fun(int n)
    {
        static int f=1;
        f=f*n;
        return f;
    }
    void main()
    {
        int i;
        for(i=1;i<=5;i++)
        printf("fun(%d)=%d
    ",i,fun(i));
    }
    
    运行结果:
    fun(1)=1 fun(2)=2 fun(3)=6 fun(4)=24 fun(5)=120

      说明f在加了static的类型限制之后,就相当于全局变量,函数调用完了之后,修改过的f的值仍然是有效的(即这个程序相当于求i的阶乘了)。而如果不加static的类型限制,那么,会是什么结果呢,我们看下面的代码:

     

    #include<stdio.h>
    int fun(int n)
    {
        int f=1;
        f = f * n;
        return f;
    }
    void main()
    {
        int i;
        for(i=1;i<=5;i++)
            printf("fun(%d)=%d
    ",i,fun(i));
    }
    

    运行结果:

    fun(1)=1
    fun(2)=2
    fun(3)=3
    fun(4)=4
    fun(5)=5
    也就是说,这时函数fun中的变量f的生命周期就仅限于fun函数的范围内了,在main中每次传入新的参数i,f就会计算1*i的值并返回,而不会像之前那样不断的累乘了。

     

     

  • 相关阅读:
    test!
    Visual Studio 中的单元测试 UNIT TEST
    Jquery结合div+css实现文字间断停顿向上滚动效果
    asp.net中使用HttpWebRequest发送上传文件
    分享一个可以灵活控制的实现Javascript滚动效果的程序
    VeryCodes.Log让日志记录和读取变的更简单
    实现MyXLS设置行高的功能
    设计模式学习笔记建造者模式
    设计模式学习笔记原型模式
    设计模式学习笔记模板方法
  • 原文地址:https://www.cnblogs.com/wangguchao/p/7381755.html
Copyright © 2011-2022 走看看