Answers:
如前所述,仅使用1个IO引脚,您就可以使用1线扩展器/移位寄存器或将其他设备添加到I2C总线。尚未提及的唯一事情是可以在SPI端口中添加另一个从设备。
SPI被称为4线协议-您有两条数据线,一条时钟线和一条选择线(以及公共地线,但这通常并不重要)。但是,前三个在总线上的所有设备之间共享,因此,第一个之后的每个设备仅占用一条导线。SPI还可以将您的总线增加到全双工状态,但这对于此应用而言并不重要。
如果您确实只有1针可用,那么达拉斯1线总线看起来是最明显的事情。但是,由于这仅是输出,因此有更便宜的解决方案。既可以传送数据又可以传送时钟的串行PWM总线很容易设置;参见davidcary也提到过的Roman Black的页面。您只需要像74VHC164这样的串行输入并行输出移位寄存器,就可以将其级联为任意数量的输出(一个'164具有8个输出)。
在这种解决方案中,LED是静态驱动的。
如果您还有其他I / O可以共享,例如I2C的SPI,则可以选择更豪华的解决方案,例如Maxim的MAX6950。MAX6950具有闪烁和亮度控制以及压摆率限制等功能。LED是多路复用的,这意味着您只需要一个16针驱动器。
罗曼·布莱克(Roman Black)介绍了shift1系统,该系统使您可以通过单个微控制器引脚独立控制任意数量的LED。
@Fake Name,@ Tim,@ pingsept都建议将一些移位寄存器链接在一起,其中一个DO数据输出引脚馈入另一个DI数据输入引脚。74HC595可以正常工作。(也许其他一些芯片会更好地工作)。
(@reemrevnivek,采用这种菊花链式SPI,与许多人所说的相反,在第一个器件之后的每个器件都不需要微控制器上的更多引脚了-为什么要听它们?:-)。
通常,这需要微控制器上的4个引脚-MISO,MOSI,SCLK和锁存器。由于仅执行输出,因此不需要MISO输入引脚。
罗曼·布莱克(Roman Black)发现,通过在单个微控制器输出上进行一些非常仔细的定时,以及对模拟电路进行一些仔细的调整,单个微控制器引脚可以驱动外观简单的模拟电路,从而将常见的SCLK,DI链中第一个芯片的引脚(MOSI)和公共锁存信号。
然后,该微控制器可以通过单个引脚控制25个LED。