51单片机体系中,常常运用4×4键盘,一般情况下,都是运用一个8位的接口,外接16个按键。
下图便是一个惯例的4×4键盘电路图。
这种惯例的矩阵键盘电路,信任我们都习以为常了,好多人都会编写它的驱动程序。
图中运用了P0口的8个引脚(P0.0~P0.7),别离驱动键盘的行和列。按键的编号,在图中别离标示了0~F。
检测按键的一般的思路是在四个列线,别离输出一个低电平,然后输入行线,逐行检测是否存在低电平。
假如在某行有低电平呈现,就阐明该行、列的交叉点上的按键,被按下了。
其实,这些行、列引线,是“分时”作业的,当在某一列输出低电平的时分,其它的列,输出的便是高电平。
假如运用这些输出高电平的列,进行输入,那么就能够极大的节约IO接口的引线数量。
根据这个道理,在上图中,下面的四个列驱动引线(P0.4~P0.7),就完全能够省去,只是运用行驱动的引脚(P0.0~P0.3)来分时输出低电平即可。
电路见下图。
为了对引脚之间进行阻隔,图中加上了四个二极管,保证只要在引脚输出低电平的时分,方可把键盘中相应的列置为0。
针对这个电路,对按键的检测办法,和惯例的4×4键盘检测思路是相同的,例如:
当在P0.0输出低电平,即最左面的列为0,这时检测P0.1、P0.2及P0.3是否为0,能够判别最左面的三个按键是否按下;
当在P0.1输出低电平,即左面第二列为0,这时检测P0.0、P0.2及P0.3是否为0,能够判别左面第二列的三个按键是否按下;
…………;
这个检测按键是否按下的思路非常简略,会编写惯例4×4键盘驱动程序的网友,必定都会编写出来这种电路的驱动程序。
由于行和列运用了相同的IO引线,实际上,连接在同一个引线的行、列交叉点处的按键,就现已失效了,那么就把把本来的按键,移动出来,把二极管画在交叉点,电路如下所示。
再把移出来四个按键连接在IO引线,另一端直接接地;把其它按键的编号,再收拾一下,就成了下图电路。
这个电路比惯例的4×4键盘电路只是多用了四个二极管,可是却节约了四条IO接口引线,这个含义是非常巨大的。
依照这个电路的规划思路,运用 n 条IO接口引线,就能够驱动 n×n 个按键。
那么用5个IO引脚,就能够驱动5×5的键盘,这就足以满意各种应用了。
网上也有一些其它类型的节约接口的键盘电路,可是都有缺乏,不是电路过于杂乱,便是驱动的按键个数较少,远远不及本电路简略有用。
这是个完美的精简接口的4×4键盘电路,不只能够用在51单片机体系,在运用其它MCU组成的电路中相同适用。
针对这个电路,现已用汇编言语和C言语编写出了驱动程序,由于汇编言语能够运用“位操作”指令,所以程序的比较简略;C言语的程序,就显得负担一些。