首先在.h文件里用结构体创建5个变量,用来判断按键是否按下以及计时按下时间
我要说的是for循环里面的csae2部分
前面case0和case1还是正常判断按键是否被按下,如果消抖之后确实按键是被按下了就跳到case2部分
判断按键是否松开,如果没有松开,那么key_time就++,key_time加1就表示10ms过去了(定时器PSC设置为800-1,ARR设置为1000-1)然后一直循环,等按键松开之后判断时间,key_time值小于100就表示按键按下时间在1s以内,于是短按标志位置1;key_time值大于100就表示按键按下时间大于1s,于是长按标志位置1。
然后就是按键匹配的功能,我这里在main函数里测试,结果是可以使用的,就是要注意打开定时器的中断 和 标志位在用完之后要置0
在STM32G431RBT6蓝桥杯开发板中有两个基本定时器:TIM6和TIM7;6个通用定时器:TIM2和TIM3,TIM4(全通道) TIM15,TIM16,TIM17(只有一个或两个通道,但是用来定时还是ok的)2个高级定时器TIM1,TIM8。