矩阵键盘的使用
基本原理
键盘分为编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的较多的是非编码键盘。非编码键盘又分为独立键盘和行列式键盘(常说的矩阵键盘)。在键盘中按键数量较多时,为了减少I/O口的占用,(通常)将按键排列成矩阵排列的形式。
矩阵键盘本质是使用8个io口来进行16个按键的控制读取,可以减小io口的使用,用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上,设置一个按键。而这样的按键中按键的个数是4 X 4个。
这样的行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。节约单片机的资源,其本质和独立按键类似,就是进行逐行扫描和逐列扫描,然后判断是第几行的第几列个按键,进而进行整体按键值得确定,我们使用的矩阵键盘是接到了单片机的P1口通过读取P1口电平变换即可完成矩阵键盘的数值读取,具体原理图如下:
矩阵键盘的扫描方式
矩阵键盘扫描的方式有两种: 1.行列扫描,2.逐行/逐列扫描
其中行列扫描适用于8个IO口接到了单片机8个连续的IO口,则可以进行行列扫描
逐行/逐列扫描 适用于矩阵键盘接到了任意的IO口,则使用逐行,逐列扫描
接下来我们分别介绍这两种方式:
行列扫描原理:
先从P1口的高四位(四个行)输出高电平,低四位(四个列)输出低电平,假设有按键按下,从P1口的高四位读取键盘状态。判断高四位的四行哪一行变成了低电平,就知道是第几行,再从P1口的低四位(四个列)输出高电平,高四位(四个行)输出低电平,从P1口的低四位读取键盘状态。判断低四位的四列哪一行变成了低电平,就知道是第几列,将两次读取结果组合起来就可以得到当前按键的特征编码。使用上述方法我们得到16个键的特征编码。
逐行/列扫描:
逐行,逐列扫描的本质和行列扫描比较类似,本质是给某一行/某一列,低电平,其余七个全部为高电平,这时候读取电平变换,有电平变低表示按键按下,即可读取按键数据。
逐行扫描:
置第1行为低电平,其余N-1行和N列为高电平,
读取列线数据,列线有低电平表示此行有按键按下,比如按下的是1行三列(1x3),那么第三列的列线IO口就为低电平。
置第2行为低电平,其余N-1行和N列为高电平,,读取列线数据,列线有低电平表示此行有按键按下。
以此类推,进行逐行扫描。
根据行线列线的电平不同可以识别是否有按键按下,哪一个按键按下,获取按键号。(N) 根据按键号跳转至对应的按键处理程序。
主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网