按键输入设置。这个一般是按下,松开两种状态,单次的状态。其中需要加上一部分防抖的操作,比如延时个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的用法。