蓝桥杯——按键
一:按键得原理图
二:按键的代码配置
step1 按键原理图对应引脚配置为输入状态
step2 在GPIO中将对应引脚设置为上拉模式
step3 在fun.c中写按键扫描函数
写完后的扫描函数需放在主函数中不断扫描
扫描函数主要通过两个定义变量的值来判断,一个当前状态变量state读取对应按键引脚的gpio值,一个last_state 变量在判断条件结束后赋予当前state的值,state重新获取gpio值如此循环
三:长按键和短按键
1.基础依据
定时器开始时cnt就会从0开始一直加,直到cnt=arr+1时产生定时器中断,cnt=0又开始加一直反复
我们需要计算cnt每次加一所需要的时间t0是多少,t0根据公式推导,t0=(psc+1)/f(f为系统频率为8000),
此外还可以通过cnt来求cnt为某值(如cnt=10000)所需要的时间t,如此得到长按键的思路,按键按下时令cnt=0;用if语句判断cnt是否大于1000(即按键是否按下超过一秒钟),如果是长按键则在if语句中些需要进行的操作
2.长按键配置
step1.另外配置一个定时器(TIM3,钟源选内部时钟,配置psc值)
注意定时器中断不用打开,直接生成代码
step2.按照基础依据写代码,设置为1,因为初始化时默认为0,不设为1就会直接一开始时就认为按键B1按下松开count+=2;
注意:定时器配置时有中断要使能,没有中断也要使能,有IT说明与中断有关,即有中断的TIM用带IT的函数语句使能,没有中断的TIM用没有IT的使能
我们上述配置时为按键长按一秒的配置,如果想改长按时间不需重新配置,只要改代码的cnt比较值就好