1、44 矩阵式键盘电路的改进本文向大家推荐一个精简 IO 接口的 44 键盘电路,该键盘电路仅仅使用 4 条 IO 接口引线,即可完成一般需要 8 位接口才能完成的功能。在 51 单片机系统中,经常使用 44 键盘,一般情况下,都是使用一个 8 位的接口,外接 16 个按键。下图就是一个常规的 44 键盘电路图。这种常规的矩阵键盘电路,相信大家都司空见惯了,好多人都会编写它的驱动程序。图中使用了 P0 口的 8 个引脚(P0.0P0.7),分别驱动键盘的行和列。按键的编号,在图中分别标注了 0F。检测按键的一般的思路是在四个列线,分别输出一个低电平,然后输入行线,逐行检测是否存在低电平。如果在某
2、行有低电平出现,就说明该行、列的交叉点上的按键,被按下了。其实,这些行、列引线,是“分时”工作的,当在某一列输出低电平的时候,其它的列,输出的就是高电平。如果利用这些输出高电平的列,进行输入,那么就可以极大的节省 IO 接口的引线数量。基于这个道理,在上图中,下面的四个列驱动引线(P0.4P0.7),就完全可以省去,只是使用行驱动的引脚(P0.0P0.3 )来分时输出低电平即可。电路见下图。为了对引脚之间进行隔离,图中加上了四个二极管,确保只有在引脚输出低电平的时候,方可把键盘中相应的列置为 0。针对这个电路,对按键的检测方法,和常规的 44 键盘检测思路是相同的,例如:当在 P0.0 输出低
3、电平,即最左边的列为 0,这时检测 P0.1、P0.2 及 P0.3 是否为 0,可以判断最左边的三个按键是否按下;当在 P0.1 输出低电平,即左边第二列为 0,这时检测 P0.0、P0.2 及 P0.3 是否为 0,可以判断左边第二列的三个按键是否按下;这个检测按键是否按下的思路非常简单,会编写常规 44 键盘驱动程序的网友,肯定都会编写出来这种电路的驱动程序。因为行和列使用了相同的 IO 引线,实际上,连接在同一个引线的行、列交叉点处的按键,就已经失效了,那么就把把原来的按键,移动出来,把二极管画在交叉点,电路如下所示。再把移出来四个按键连接在 IO 引线,另一端直接接地;把其它按键的编
4、号,再整理一下,就成了下图电路。这个电路比常规的 44 键盘电路仅仅多用了四个二极管,但是却节省了四条 IO 接口引线,这个意义是十分巨大的。按照这个电路的设计思路,使用 n 条 IO 接口引线,就可以驱动 nn 个按键。那么用 5 个 IO 引脚,就可以驱动 55 的键盘,这就足以满足各种应用了。网上也有一些其它类型的节省接口的键盘电路,但是都有不足,不是电路过于复杂,就是驱动的按键个数较少,远远不及本电路简单实用。做而论道已经按照这个电路制作了 PCB 板,外形和常规 44 键盘电路板相差无几。二极管体积很小,布线并没有障碍。实践证明,这是个完美的精简接口的 44 键盘电路,不仅可以用在 51 单片机系统,在使用其它MCU 组建的电路中同样适用。针对这个电路,做而论道已经用汇编语言和语言编写出了驱动程序,因为汇编语言可以使用“位操作”指令,所以程序的比较简单;语言的程序,就显得累赘一些。程序暂时就不公布了,有兴趣的网友可以来讨论。