对于 LED,显而易见的方法是为棋盘的每一行和每一列提供一个输出:总共 8+8=16 个引脚。阳极将连接到行线,而阴极将连接到列线。对于要点亮的 LED,您可以使其阳极线为正极(逻辑 1),阴极线为负极(逻辑 0),同时将其他 LED 保持在反向状态(因此剩余的 LED 具有中性或反向偏置。)
我在这里假设微控制器提供足够高/低的电压,以便您能够将 LED 从一个桥接到另一个。如果不是这种情况,则每条线都需要一个晶体管或缓冲器。使用 5V 电源时,它很紧,考虑到 LED 下降约 2V,并且您希望在限流电阻上有一个合理的压降(请注意,您只需将它们安装在行线或列线中,而不是同时安装。)
如果您的输出是三态(也就是说,除了逻辑 0 和逻辑 1,它们还可以设置为高阻抗状态,也许可以通过临时将它们配置为输入),那么您可以变得聪明并使用带有 LED 的 4x8 网格以反平行对连接。在此设置中将未使用的输出设置为高阻抗非常重要,否则不需要的 LED 会亮起。
在任何一种情况下,您都必须考虑电流消耗,以及是否可以冒软件错误同时点亮一排所有 LED 的风险(如果不考虑,可能会使微控制器的行线过流.)
传感器的情况更复杂。我将假设您使用电阻传感器,尽管光电晶体管不一定保证仅在一个方向上传导。
您可以使用与点亮 LED 相同的 8 行输出,但您需要专门用于感应的 8 列输入。毫无疑问,你会看到这样的键盘电路。请记住,这些只是设计为一次按下一个键。如果用户同时按下 1、3、7 和 9,则键盘无法检测到用户是否松开了这四个键中的任何一个,因为仍然存在通过其他三个开关的电流路径。
音乐键盘上使用的一种解决方案(设计为一次使多个矩阵元素导电)是在每个开关上串联一个二极管。
另一种解决方案是购买四个具有开路集电极输出(或开漏,如果使用 MOSFET IC)的 4 到 16 解码器 IC,例如:http ://www.unicornelectronics.com/ftp/Data%20Sheets/74159.pdf集电极开路意味着 IC 的输出只会吸收电流,不会提供电流。因此,您可以将 16 个传感器连接到芯片的 16 个输出,并将另一端与一个上拉电阻共用(您也可以在此处连接您的 ADC)。您将一个输出拉低(导通),而其他 15 个保持高电平(不导通)。这与标准逻辑输出形成对比,其中其他 15 个输出将电流注入公共点。
这些 IC 的输入是 4 位二进制以选择 16 个输出之一,但它们还有一个额外的输入来启用/禁用芯片。因此,您可能有一个由 64 个集电极开路接收器组成的阵列,连接到 64 个传感器,传感器的另一端全部共用一个上拉电阻和模数转换器。为此,您的微控制器上总共需要 8 个输出:四个用于接收 4 到 16 选择信号(所有四个芯片通用),四个用于接收启用信号(每个芯片一个。)
编辑:3 到 8 个解码器(也称为 1 of 8 = 1 line out of 8)似乎比 4 到 16 个更可用,但 8 个 IC 比 4 个更混乱。另一种可能有用的 IC 是八进制计数器(及其更常见的表亲十进制计数器,可以通过将其第九个输出连接到复位线来将其配置为八进制计数器。)这些需要串行脉冲从一个输出推进到下一个输出,因此需要更少微控制器上的 I/O 引脚比解码器 IC 上的引脚。它们通常具有用于复位和启用的附加输入。还有一种叫做移位寄存器的IC ,它有两种类型:一种用于将串行转换为并行,另一种用于将并行转换为串行。最后,有buffers,你可以把它放在你的 Rasberry Pi 和你的棋盘之间,这样 Pi 在过流的情况下不会被破坏。所有这些都可用于多路复用电路。