7.在有限的IO中扩展按键数量
前面我们讲到两种多按键的处理方法,仔细观察可以发现,这两种处理方法都是基于多个IO的,也就是说有多少个IO我们就能扩展出多少个按键。如果我只有6个可用的IO,那么能不能实现多于6个按键呢?答案是肯定的。回想一下单片机中我们是如何做的,当时,我们提出了一个3*3矩阵键盘的概念,那么在触摸按键中能否用矩阵键盘呢?下图给出了这个问题的实现。
在上图中,每个触摸按键不再是一块铜皮,而是由两块铜皮构成,每块铜皮分别连接在不同的IO端口上,当我们触摸了某个按键后,显然两块铜皮上的电容都会变化,这样我们通过检测那两块铜皮的电容变化了,也就确定了哪个按键被按下了。
这种方法完全借鉴了矩阵键盘的思想,但如果只是简单的把一块铜皮分成两块的话,也会带来一个严重的问题:有的时候人的手指会按偏,比如说只是按到了一个按键的一块铜皮上,那么这时算法如何处理?为了解决这个问题,于是提出了下面这种按键的设计方法,即采用交错走线法:
采用交错走线后,将会很有效的避免按键时按偏的问题。
采用矩阵键盘法可以实现在有限的IO中实现多个按键,但它也不是无限制的使用。例如:如果一个按键有两个IO来确定则每个IO铜皮所占的面积只占了这个按键的面积的1/2,如果由三个IO来确定则每个IO只占了1/3,而我们前面又提到过,产生的寄生电容和接触面积A成正比,当每个IO接触面积减少时,其寄生电容也就随之减少。换句话说就是越难检测到这个寄生电容的变化。所以,对于采用矩阵键盘思想扩充按键数目的方法只适用于按键比较少的情况,一般来说,10个按键比较合适,如触摸滑条等。
那么如果确实要超过10个按键的扩展该怎么办呢?这时我们可以考虑用外围IO扩展芯片。
如上图所示,我们把一个IO口引出来,外接到一个IO扩展芯片上,通过这个扩展芯片实现了一个到多个IO的扩展。但这种方法也有一个很大的缺点:对于IO扩展芯片来说其内部有一个寄生电容:
这个寄生电容将会影响到我们的基本电容,而手指按下按键产生的电容总是一定的,这样在手指按下按键前后电容的变化率将会变小,也就是说按键的灵敏度将会下降。这当然是用户所不希望看到的。为了减少这种变化所带来的影响,我们只有延长检测窗口的时间。