51单片机系统中,常常用于44键盘,一般情况下,都是用于一个8位的模块,外接16个按键。 右图就是一个常规的44键盘电路图。
这种常规的矩阵键盘电路,坚信大家都司空见惯了,好多人都会撰写它的驱动程序。 图中用于了P0口的8个插槽(P0.0~P0.7),分别驱动键盘的行和列。按键的编号,在图中分别标示了0~F。
检测按键的一般的思路是在四个列线,分别输入一个低电平,然后输出行线,逐行检测否不存在低电平。 如果在某行有低电平经常出现,就解释该行、佩的交叉点上的按键,被按下了。
只不过,这些行、佩引线,是天内工作的,当在某一列输入低电平的时候,其它的列,输入的就是高电平。 如果利用这些输入高电平的列,展开输出,那么就可以很大的节省IO模块的引线数量。
基于这个道理,在上图中,下面的四个佩驱动引线(P0.4~P0.7),就几乎可以省却,只是用于行驱动的插槽(P0.0~P0.3)来天内输入低电平才可。 电路闻右图。 为了对插槽之间展开隔绝,图中再加了四个二极管,保证只有在插槽输入低电平的时候,方可把键盘中适当的列置为0。 针对这个电路,对按键的检测方法,和常规的44键盘检测思路是完全相同的,例如: 当在P0.0输入低电平,即最左边的列入0,这时检测P0.1、P0.2及P0.3否为0,可以辨别最左边的三个按键否按下; 当在P0.1输入低电平,即左边第二列入0,这时检测P0.0、P0.2及P0.3否为0,可以辨别左边第二列的三个按键否按下; ; 这个检测按键否按下的思路非常简单,不会撰写常规44键盘驱动程序的网友,认同都会撰写出来这种电路的驱动程序。
因为行和列用于了完全相同的IO引线,实质上,相连在同一个引线的行、佩交叉点处的按键,就早已过热了,那么就把把原本的按键,移动出来,把二极管所画在交叉点,电路如下右图。 再行把移出来四个按键相连在IO引线,另一端必要短路;把其它按键的编号,再行整理一下,就出了右图电路。 这个电路比常规的44键盘电路意味着多用了四个二极管,但是却节省了四条IO模块引线,这个意义是十分极大的。
按照这个电路的设计思路,用于n条IO模块引线,就可以驱动nn个按键。 那么用5个IO插槽,就可以驱动55的键盘,这就不足以符合各种应用于了。
网上也有一些其它类型的节省模块的键盘电路,但是都有严重不足,不是电路过分简单,就是驱动的按键个数较较少,相比之下不及本电路非常简单简单。 这是个极致的精简模块的44键盘电路,不仅可以用在51单片机系统,在用于其它MCU重新组建的电路中某种程度限于。
针对这个电路,早已用汇编语言和C语言续写了驱动程序,因为汇编语言可以用于位操作指令,所以程序的比较简单;C语言的程序,就变得毫无意义一些。
本文来源:PG电子官方网站-www.pomynalne.com