本帖最后由 robinsonlin 于 2021-4-8 13:54 编辑
1,在1ms定时器中断里面建一个 unsigned long SysTick++;
2,当检测到按键响应时,变量TKey = SysTick,采集此时的系统时钟,同时KeyCount变量+1;
3,在SysTick - Tkey<=1500时,如果还有按键响应,就KeyCount++;
4,当SysTick - TKey>1500时,执行switch(KeyCount), break后KeyCount变量清零。
附长短周期判断,长短周期判断,实际是检测按键的连续性, 需要再加一个10ms的定时器做按键判断。在10ms定时器中,设定按键检测标志,并记录SysTick,如按下时,TFlag = 1; KeyDelay = SysTick;这个操作记得加锁,只执行一次。 当检测到按键弹起,TFlag = 0; 然后判断 SysTick - KeyDelay是否大于500,如果大于就是长按键,KeyCount += 10;如果SysTick - KeyDelay小于500ms,就是短按键,KeyCount ++ ; KeyCount 十位就是长按次数,个位是短按次数。 SysTick - Tkey > 1500时,记得清理keyCount。
|