4x4矩阵按键检测方法
鉴于逐行(列)扫描检测比较常见在此不予赘述.
按键检测关键在于削抖处理,本着能用软件解绝就不用硬件的原则.介绍两种软件处理按键削抖方法,说是两种,但本质上没什么区别都是鉴于按键抖动时间,跳过抖动时间(注意非等待),取理论稳定时间检测.
在此之前先说下区别于逐行(列)扫描检测的另一种方法--高低电平翻转法(假设按键接在P1)
P10 | key1 | key2 | key3 | key4 | P11 | key5 | key6 | key7 | key8 | P12 | key9 | key10 | key11 | key12 | P13 | key13 | key14 | key15 | key16 | \ | P14 | P15 | P16 | P17 |
若MCU置P1=0xf0(即P10~P13为 低电平/0; P14~P17为 高电平/1 ); 假设此时仅key3被按下(即相当于P10与P16直接相连) 则由 (&)线与关系 ,P16会变为 低电平/0. 那么此刻MCU可检测到P16~P14分别为 1 0 1 1; 之后立刻 若MCU置P1=0x0f, 同理可知 此时MCU可检测到P13~P10分别为 1 1 1 0 . 好了到此合并可得到一个数据-- 1 0 1 1 1 1 1 0 B(即0xBE) 这就是key3按下时的对应标识(键码) , 同样类似直角坐标系 16个按键都有自己独立的键码 只要我们取按键稳定时间进行上述检测 就可以得到键码再一对照就可以准确得知哪个按键被按下. 下面进入真正的主题1.计时法
2.按键状态机检测
PS:如有疑问请留言,我们可以共同谈论.
|