常用键盘方案设计[通用外围专题
大多电子产品中都需要使用到按键作为操作的界面,无论是电子消费品还是专业设备,几乎都不可避免的需要使用键盘。而键盘的实现有很多种方案,这里就目前常用的几种键盘方案进行一下对比。
就笔者所知,常用的方案有:IO键、阵列键、ADC键、触控键、遥控键以及专用接口键盘等。
IO键,就是一个IO口上通过上拉或下拉的方式实现的按键(如图1A所示),这种按键使用相当广泛,优点是程序处理简单,还可以支持直接中断,多键时还可以实现复键功能,但缺点为键数受IO数量的限制,并且由于所占用的IO需要有中断功能,键数还受到支持中断的IO口数量的限制。若有其它外设也需要使用IO中断,将进一步减少可用的IO键数量。最主要的一点,这种方式的IO利用率最低,使得IO资源浪费大,成本较高。所以,IO键适合于在键数不多且要求有独立的中断功能,特别是低功耗应用中使用,当然也可以和其它方案混合使用,比如IO键用于电源开关,而其它方案的键作为开机后的控制键。
INCLUDEPICTURE "http://bbs.eeworld.com.cn/images/default/attachimg.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://bbs.eeworld.com.cn/attachments/month_1004/20100411_9b96bb7340f5ba4c2516mqhV0CnQC0A0.gif" \* MERGEFORMATINET
INCLUDEPICTURE "http://bbs.eeworld.com.cn/images/attachicons/image.gif" \* MERGEFORMATINET HYPERLINK "http://bbs.eeworld.com.cn/attachment.php?aid=42582&k=c484c27bb401724aa20baacb15c33939&t=1311477826¬humb=yes" \t "_blank" Key_case1.gif (15.77 KB)
2010-4-11 12:17
阵列键,是通过一组IO口通过对XY两个方向的若干条线的交叉点进行扫描实现的按键方案。例如6个IO可以通过3*3的组合实现9键(如图1B所示),8个IO更可以达到4*4共16个键,键数超过了占用IO的数量,使有限的IO可以支持更多的键数。另外,阵列键也可以支持中断方式工作,不必持续扫描,也可以用在低功耗方案中。在图中我们可见,只有Y轴4条线拥有中断能力即可实现整个键盘的中断控制,而无须像IO键那样每个键都必须可以中断,这样可以省下可中断的IO资源给其它外设。
阵列键的实现有多种不同的形式,最简单的方式中,只要在XY轴的线交叉点上加按钮就可以实现了,但是这种方式的缺点是会有误判,而且很多的阵列键处理程序多采用优先编码的方案,更会导致按羊头出狗肉的结果。原因不仅分析,为了简单的理解这个错误的产生,可以看图1B的结构来分析一下,假设该图中的键依先行后列,先上后下,先左后右的次顺依次为K1-K9,当X1与Y1交点的键按下后,X1与Y1相连,当扫到Y1列时,X1对应IO的电平改变,可以得到K1按下的结论,但当K1、K2同时按下时,Y1和Y2都与X1相连,而K4此时若也按下的话,X2与Y1相连,这样,X2通过Y1连接到X1,再通过X1连接到Y2,成了X2与Y2也导通,这时K5按与不按就没有区别了。为了防止这种情形的出现,我们通常会在键上串联一个1N4148类的开关二极管(见图1C),以防止上述现象的发生,在这种电路中,对角的二极管与检测导通所需的极性刚好相反,所以不会产生误判。
当然阵列键也有很高级的实现方法,一种经典的方法可以用4个IO实现16个键(见图2C),但是由于这种方法需要轮换的交替扫描上下两个三角矩阵,所以无论是否有键按下,都需要定时对键盘进行扫描,而无法使用中断方式实现,但是如果IO很紧张,需要在开机后使用较多键的应用还是可以采取这种方案的。
INCLUDEPICTURE "http://bbs.eeworld.com.cn/images/default/attachimg.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://bbs.eeworld.com.cn/attachments/month_1004/20100411_95200db2c41f31a8cbe4uX30pWXH5Opx.gif" \* MERGEFORMATINET
INCLUDEPICTURE "http://bbs.eeworld.com.cn/images/attachicons/image.gif" \* MERGEFORMATINET HYPERLINK "http://bbs.eeworld.com.cn/attachment.php?aid=42583&k=efbde7448e9209868281db49a6d68bd2&t=1311477826¬humb=yes" \t "_blank" Key_case2.gif (15.12 KB)
2010-4-11 12:17
ADC键,是通过ADC实现的模拟键盘,通过一个ADC输入端口上接入不同电阻分压时产生的ADC值不同来区别按下的键(见图2A)。这种方式实现的时候,只要电阻值设计巧妙,两个甚至N个键同时按下也不会与其它任意键或组合所产生的电阻值相同的话,理论上就可以支持复键功能。但由于阻值小的键与阻值大的键同时按下时,大电阻对小电阻阻值的影响太小,所以并不能很容易实现所有键的复键,只能对部分键实现复键功能。另外,参考电压的稳定性甚至潮湿都将影响ADC对键的识别,所以ADC键需要一个容差的问题,即在预定值的正负一个区间内都认为是这个键,否则将很难触发。ADC键的优点是引出线很少,以至于只需要ADC端和地两条线这么简单,适合于键与主机板分离的方案,若是机器的IO很紧张但有空余ADC资源的场合。不过缺点也是显而易见的,ADC要在不停的扫描中,耗电略大,理想的使用方式就是在不用时将它关闭,所以还