矩阵键盘简介
矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。
当设备所需按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。
矩阵式结构的键盘,结构和识别上显然要复杂一些:在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如PA口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。
由此可见,在需要的按键数量比较多时,采用矩阵法来做键盘是合理的。(原理图如下所示)
![]()
![]()
## 键盘识别方法
如上原理图1所示,当按键没有按下时,所有的输入端都是高电平,代表无键按下。
下面介绍一种常规的键盘识别方法——电平翻转法:
识别步骤如下:
- 判断键盘中有无键按下:将全部行线ROW_1-4设置为输出低电平,然后检测列线COL_1-4的输入状态。只要有一列的电平为低,则表示键盘中已有按键被按下,而且闭合的按键恰好位于低电平列线(COL_y)与4根行线(ROW)相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。
- 判断闭合按键的具体位置:执行步骤1,且确定有按键按下后,将全部列线COL_1-4设置为输出高电平,检测行线ROW_1-4的输入状态。由于步骤1中按下的按键未变更,此时闭合的按键必定位于低电平行线(ROW_x)与列线(COL_y)相交叉的按键位置。
- 按键识别完毕。
![]()
当然键盘识别的方法有很多,比如扫描法。扫描法又可称为逐行(或列)扫描查询法,也是一种常用的按键识别方法。
具体项目中,开发者可根据自身实际进行方案选择。
Arduino演示例程:
下面基于Arduino UNO Rev3开发板给出一个具体的例子,当然例子来自网络。
开源代码参考链接:Arduino Playground - Keypad Library
仿写代码如下:
/*
Name: Keypads.ino
Created: 2018/7/3 17:26:41
Author: 禾灮\HeGuang
*/
// Define User Types below here or use a .h file
#include <Key