本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页
最热资讯


亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」
使用微控制器时经常出现的一个常见问题是,项目所需的所有输入的 IO 都用完了。所以我想出了这个解决方案,它允许用户只使用 4 行 IO 就有多达 4096 个按钮输入。这是通过使用 SN74Hc595 移位寄存器发送数据并从 CD4021BE 读取数据来完成的。
零件清单:
第 1 步:工作原理
该键盘的硬件是 3 个移位寄存器。两台 74HC595 和一台 CD4021BE。它们连接到 10X3 按钮矩阵。第一个 74HC595 的引脚 15 变为高电平。这将第一列中的每个按钮连接到正 5V。如果按下第一列中的三个按钮中的任何一个,它会将 CD4021BE 上的相应引脚设置为高电平。然后将来自 CD4021BE 的数据移入。因此此时 Arduino 知道当时哪一列高,哪一行变高。该信息为我们提供了按下按钮的坐标。CD4021BE 然后复位,下一个输出引脚脉冲为高电平。
仅使用了 Arduino 的四个 IO 引脚
DataOut - 移出的位。仅 74HC595
DataIn - 移入的位。仅 CD4021BE
我能想到的最有用的应用程序是键盘。显然这只有 30 个输入,而不是规定的 4096。然而,这种方法可以通过添加更多的移位寄存器轻松扩展。您可以将 8 个移位寄存器连在一起。每个移位寄存器有 8 个移出或移入的引脚。因此,如果有 8 个移位寄存器移入和 8 个移出,则总共提供 (8*8)^2 = 4096 个输入,同时仍仅使用 4 个 IO。
第 2 步:在面包板上安装电路
像大多数电子项目一样,这个项目是从面包板上开始的。在我开始插入东西之前,我画了一个示意图。我有一些使用移位寄存器的经验,只用了一点谷歌搜索,我在第一次尝试时就绘制了最终的工作原理图。我将 74HC595 移位寄存器上的每个引脚都连接到 LED 上。这使得故障排除变得非常容易,能够在任何给定时刻看到移位寄存器上的哪个引脚为高,在这个阶段我只需要连接一个按钮,只需移动一个跳线来测试引脚CD4021BE
第 3 步:编写代码
在大多数情况下,代码的编写相当容易。它真正做的只是将一列调高,然后检查该行以查看是否按下了按钮来完成电路。根据该数据,它知道按下按钮的行和列。然后将行和列值插入一个 2 位十进制数组,然后在键盘上吐出字母。
在编写这段代码时,我只有一个主要问题。这是随着 CD4021BE 上数据的转移。当我测试输入时,我发现其中一个引脚没有返回任何值,而其他引脚返回一个值,它有点太高了。因此,如果 pin7 的值应该是 1 (00000001),它将变成 2 (00000010)。而 pin1 (10000000) 只会被推出。我上网,但找不到任何有用的东西。所以我把电路板连接到示波器上做一些调查。发生的事情是每个输入都向上移动了一点。这是因为缺少第一个输入的时钟脉冲和没有输入的末尾脉冲。
解决方案:您需要先将clockPin 设置为高,然后再将latch 拉低,然后shiftIn,然后将latch 拉高。
以下链接仅供参考
第 4 步:焊接电路板
现在我们知道电路可以工作了,它需要转移到一个永久性电路板上。这并不难,只是需要时间。我使用芯片插座以防万一我搞砸了我不必拆焊任何东西。我只能重新开始。但是,如果您打算使用插座,就知道这意味着您的电路板将占用更多的垂直空间。我还为电源和 IO 连接器使用了插头引脚,因此它不会硬连线到任何东西,并且可以轻松拆卸。
第 5 步:构建按钮矩阵
我没有将轻触开关焊接到 PCB 上,而是选择为轻触开关打印一个盒子,然后将它们强力粘合到位。打印盒子可以轻松地将开关准确放置在我想要的位置,并且轻而易举地将其安装在机箱内。对于所有接线,我只是直接焊接到开关的引线上。我使用电阻器的剩余引线焊接行,并且列与我从一些旧的以太网电缆获得的电线连接。然后每一行连接到 CD4021BE,每一列连接到 74HC595。
第 6 步:3D 打印外壳
整个键盘采用 360 度融合和 3D 打印在我的 Ender3 上。为了让键盘更突出一点,我将按钮帽喷成红色。一旦电路板在外壳内,您将无法再接触到插头引脚。所以我做了一个头销支架。6 个排针粘在支架上,连接到排针的电线焊接到排针背面。然后将支架超级粘在外壳上。
第 7 步:最终组装
在这一点上,唯一要做的就是把整个事情放在一起。按钮帽放在轻触开关上,而不是面板放在顶部。四个 3 毫米螺钉和螺母用于将面板固定在按钮盒上。完成后,Molex 连接器从头针插头连接到电路板上的接头。然后将电路板放入盒子中。比按钮组件连接到顶部。最后是刻字。现在肯定有更好的刻字方法,但是,我这样做的方法是在 inscape 中输入线条并确保它们的大小合适。
第 8 步:总结
我唯一不喜欢它有点厚,但这可以通过不为芯片使用插槽并花更多时间规划布局来解决。对于需要大量用户输入的键盘的产品,我有很多想法,这是朝着构建它们迈出的重要一步。我希望你们中的一些人发现这个教程有用或有趣,非常感谢您的阅读。
索尼WF-1000XM3拆解:电路设计优异,方案不逊Airpods
2019-07-31
50个经典电路设计汇总,让你快速成为技术高手
2019-06-18
第二代Airpods以及Airpods充电盒拆解:电路设计更上一层楼
2019-07-15
联想ThinkBook 13s拆解:英特尔傲腾可媲美DRAM?
2019-12-05
4款升降摄像头模块拆解:带你了解其中电路原理
2019-07-18
解决树莓派4B散热问题:更新下固件就行
2019-07-23
如何将按钮与 Arduino 连接起?
2021-07-13
基于树莓派和Arduino打造的PLC EtherCAT电路设计
2020-02-25
入门指南:TFT彩色显示屏,带Arduino和ESP8266
2020-04-23
Arduino最小系统板设计PCB板及原理图
2020-01-17
讨论