16个按键如果直接一个一个接,要占16个引脚太浪费。4x4矩阵键盘用行列扫描的办法,把16个按键排成4行乘4列,只用8根线(4行+4列)就能全部读出来,是数字键盘、密码锁、选菜单的首选输入。这篇讲接线、行列扫描原理和做密码锁的实现。

矩阵键盘的引脚和行列结构
矩阵键盘一般引出8根排针,分别对应4个行引脚和4个列引脚。它的内部不是16颗独立开关,而是把按键交叉排列在行线和列线的交汇处——按下一个键,就等于把对应的行和列接通。所以读按键的关键,就是找出“哪一行”和“哪一列”同时被触发交的那一点。

图上展示了矩阵键盘内部行线与列线交叉的结构,这正是它为什么能用8根线读16个键的原因。要用它,只需要把这8根线按顺序接Arduino的8个数字脚,再配合库把行列映射关系声明出来即可。
Arduino用Keypad库读按键
驱动矩阵键盘最省事的是Keypad库。初始化时先定义按键对应的字符矩阵(和实物布局一致),再指定行引脚和列引脚,然后声明一个Keypad对象,循环里调keypad.getKey()就能拿到当前按下的那个字符。按键被按住不放时,还可以用getState()区分“刚按下”和“一直按着”。
行列顺序接对了就能正确读到数字,接反了就按A出1这类错位。先写个最简单的“按哪个键串口打印哪个字符”的例程验证接线,再接后续逻辑,排错快很多。
做密码锁和菜单选择的思路
密码锁思路:设一个目标密码字符串,用户按键的字符逐个拼进一个临时变量,拼满或按下确认键后和密码比对,一致就驱动继电器/电磁锁开门,不一致就清空提示“密码错误”。为了体验好,可以加一个LCD显示输入进度,再加一颗LED或蜂鸣器做反馈,按错限制次数还能加防爆破。
矩阵键盘省引脚,非常适合配OLED、舵机、锁具做门禁系统,也适合做选菜单(0~9和*#分别映射不同功能)。核心就一句:Row和Col交叉扫描确定按键位置,把它当“8个IO换16个键”的输入设备用。




加个LCD显示输入进度体验更好,防爆破还能限次数
8根线读16个键确实省IO,密码锁选它没错
密码比对用串口拼临时变量按确认键,一致再驱动继电器开门
行列顺序接错了会按A出1这种错位,先烧个打印字符的例程验证