实践/硬件DIY

4x4矩阵键盘怎么接线?Arduino矩阵扫描读取16个按键详解

硬件DIY 2026-10-15 22:56:36 6阅读 3讨论 举报
4x4矩阵键盘怎么接线?Arduino矩阵扫描读取16个按键详解

想给机器人加个密码锁、做个计算器或者手动输入参数,4x4矩阵键盘是常见又便宜的方案。它最妙的地方在省引脚:16个按键内部按4行4列接成矩阵,只引出8个引脚,Arduino用8个数字口就能全部读到,比一个个按键去接省下整整8个脚。这篇把它的矩阵原理、接线和扫描方法讲清楚。

为什么会省引脚

普通独立按键,16个就要16个脚。矩阵键盘把按键内部连成网格:同一行的所有按键连到一根公共线,同一列又连到另一根公共线,这样4行4列只需要4根行线加4根列线,一共8个引脚就覆盖16个按键。按下一个键,就等于把某一行和某一列短路了,主控通过扫描就能定位是哪个。

8个引脚接Arduino数字口

4x4矩阵键盘一般引出一根8pin排线,前面4个对应列(或行)、后面4个对应另一维。常用接法是把这8个脚依次接到Arduino的D9到D2(具体行、列由代码里的rowPins、colPins数组决定,对应上就行)。不用额外接电阻,代码里会用Arduino的内部上拉。接线最大的坑是引脚顺序:如果按键读出来字符全乱,多半是行和列的顺序对不上,改代码里的顺序而不是重新接线更省事。

扫描原理一句话

扫描的思路是:先把所有列设为输出并逐列拉低,同时把行设为输入并读行电平,哪一行被拉低,就知道"当前拉低的这一列"和"被拉低的那一行"交叉处按键被按下。比如先让第1列拉低,读行发现第2行也是低,那就是第1列第2行的键被按了。4行4列轮流做一遍,就能知道所有键的状态。

用Keypad库几行搞定

手写扫描有点繁琐,好在Arduino有现成的Keypad库。用法是:先定义一个4x4字符表keys[4][4](比如数字1-9、*、0、#和A-D),再定义rowPins和colPins两个数组指明每行每列接的Arduino引脚步,最后用Keypad(makeKeymap(keys), rowPins, colPins, 4, 4)建一个对象,循环里调getKey()就能拿回按下的字符,没按返回空。这样读写简洁,还能自动消抖。

引脚太紧张怎么办

如果Arduino的数字口被传感器占满了,矩阵键盘也可以连同PCF8574这类I2C IO扩展一起用,让扩展芯片去接键盘的8根线,主控走两根SDA/SCL总线就能读键盘,几乎不占GPIO。这样在IO紧缺的板子上也能轻松加键盘输入。

8根线接对、顺序对上、用Keypad库扫描,4x4矩阵键盘就是个又便宜又省脚的输入神器。卡壳大都在引脚顺序和行列表里顺序不一致,顺着代码数组对齐就行。

版权声明:
作者:工位上的小周
链接:https://www.aiddithome.com/p/16d49731a40fbd.html
来源:硬件DIY
实践版权归作者所有,未经允许请勿转载,若此实践存在违规行为,您可以点击 “举报”。


登录 后发表评论
3条评论
刷着刷着入坑了
1楼 · 7小时前

配PCF8574走I2C这个路子对我IO不够的板子真救命,两根线解决

调参到凌晨
2楼 · 7小时前

行列顺序对不上按键全乱这个坑,改代码数组比重新接线省事,亲测

拆开看看再说
3楼 · 7小时前

Keypad库的getKey用起来很省心,自动消抖,几行就搞定16键

本文作者
工位上的小周
工位上的小周 实践者
最近更新:2026-10-15 22:56