第十四届蓝桥杯单片机组学习笔记(2):按键
- 前言
- 区分高低电平驱动
- 按键消抖
- 软件消抖
- 触发处理的方式
- 矩阵键盘
最简单常用的人机交互手段——按键
前言
实现按键检测需要解决的问题:
- 按键是低电平按下还是高电平按下;
- 按键消抖;
- 搞清楚需要实现功能的需求,按键检测是脉冲触发还是电平触发;电平触发比较适合长按参数递增,脉冲触发则规定了用户按下一次只能执行一次处理检测的是一个状态的改变;
区分高低电平驱动
- 将跳线短接3和2即为独立按键,我们可以看到独立按键的触发方式是低电平触发,即:我们去检测单片机接按键的引脚是否为低电平就能检测出按键是否被按下了
按键消抖
- 就像我们的键盘,你手放过去的时候,在犹豫是否要按下时,按键会有轻微的扰动,这时候如果只是单纯的去检测是否低电平去判断按键按下,是会误判的,并且按下的时候是会有机械抖动,你按下一次可能高会产生多个脉冲,所以这个时候我们就要加上按键消抖;按键消抖分为硬件消抖和软件消抖;
软件消抖
- 延迟函数消抖
在检测到按键按下的时候加一点点延迟之后再去判断是否按下if(key==KEY_PRESS) { delay_ms(10); if(key==KEY_PRESS) { //按键处理 } }
触发处理的方式
一般按键的需求分为两种:
- 按下一次按键处理一次,直到下一次按下,也只处理了一次;
- 按下按键处理一次,长按不松手,按键处理继续处理第二次,第三次…
第一种:检测按键按下,写一个while等待按键被释放,然后再执行处理
if(key==KEY_PRESS)
{
delay_ms(10);//去抖延时,如果10MS之后按键松开了可能是误触
if(key==KEY_PRESS)
{
//按键处理
while(key==KEY_PRESS);//等待按键被释放
}
}
- 通常我们在检测单片机的按键时,要等按键确认释放后才去执行相应的代码
否则,死循环不断扫描串口电压的时候,会不断的执行相应的代码,直到用户松手,所以用松手来判断用户是否选择才是合理的
第二种:则不进行等待按键释放,而是使用延迟函数来代替,如果过了一会还是低电平就再次执行处理;
矩阵键盘
持续更新…