STM32库函数的学习3——按键的读取

        按键输入设置。这个一般是按下,松开两种状态,单次的状态。其中需要加上一部分防抖的操作,比如延时个delay ms(10)的时候再检测管脚,确认确实按键按下了,而不是电路里面干扰造成的电压变化。
 

        这里意外学到了static的使用。之前有总工在程序里面,大量的static,之前并不知道,以为跟平常的不加static的一样,只是定义不同罢了。

        查找到,C语言中的static用法和作用,至于C++,因为并没有研究过,所以这里就不提出来了。

         ①静态全局变量‌:在全局变量前加上static关键字,该变量就被定义成为一个静态全局变量。这种变量只能在定义它的文件内部访问,不能被其他文件访问,从而避免了全局变量的命名冲突问题。

        ②静态局部变量‌:使用static修饰的局部变量,在编译过程中会在数据区为该变量开辟空间,并对其进行初始化。如果代码中未对其进行初始化,系统默认初始化为0。静态局部变量的值在函数调用结束后不会销毁,下次调用时仍然保留上次的值。

        ③静态函数‌:使用static修饰的函数只能在定义它的文件中被调用,不能被其他文件中的代码调用。这有助于封装函数的实现细节,防止外部访问。

    下面是按键按下的函数    

u8 KEY_Scan(void)

{     
    u8 key_up=0,key;//这是跟按键按下标志位跟按键按下的累计计数

                                //这里主要按下按键不松手就会多次扫描按键按下,这个一般是设置数据的快速累加作用,比如设置时间,每次累加1秒的话定时10分钟,需要累加。
    //static u8 key_up=0,key;

                                //如果使用这行代码的话,这个如果不松手,static后面的key_up=0是不会运行,而保存的是key_up=1,也就是按下了按键不论按多久,只要不松手就会一直是key_up=1,永远不会变为key_up=0,也就不是连续变化,只是一次。

        delay_ms(10);//这里的延时是防抖作用
    if(key_up==0)
    {
        key++;

        delay_ms(100);

        if(key_up==0)

        {

                key+=5;//这里就是按下的时间继续变长,则变成每次累加5

                delay_ms(100);//这里根据需要做等待时间

                if(key_up==0)

                        {

                        key+=10;//这里就是按的时间长了变成每次累加10,根据需要来添加

                       ……

                         }

                        else key_up=1;//如果加上break;则是跳出while等循环

       }

        else key_up=1;//break;则是跳出while等循环

}
       return 0;//无按键按下。
}

        我这里是参照正点原子改了一下那种长按可以秒加的情况。

        补:目前我是正在学习正点原子的视频,用的也是一块STM32F103的mini板子。不过测过了好像不太好用,可能按键没选对,有点问题,不过大体是这个方法了,因为打了一堆,就不删了,等学到后面我再回来调整。实际上主要还是学习了static的用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

esmember

感谢大家喜欢我遇到的问题分享。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值