最符合楼主要求的就是充分利用高阻,一个I/O口驱动2个LED,两个口可以驱动4个LED。在楼主另一个板块同样的提问已经有方案了,可是有价值的都没有回复不知完成的怎么样了。其实最主要的就是在高阻时要保证2个LED都不亮,2个二极管是为了更可靠保证高阻时不亮,加大电阻是没用的,前边已经说了IO口要有高阻和推挽方式,要用压降大的发光管,压降不够加二极管,下图是经过验证的。
![]() |
3个IO,控制3个LED和一个按键。楼主非要用一个IO控制按键,2个IO控制3个LED,自讨苦吃。IO复用是有讲究的,不是随意,明显用一个IO控制一个LED和一个按键,其他2个IO控制2个LED才是正解。![]() |
188610329 发表于 2022-9-19 14:59 加上电阻就好了 |
12#楼的同志很有想法,充满智慧。值得学习 |
lkc8210 发表于 2022-9-19 14:33 5V供电, 3个LED都是红色 LED 的话, 全高阻,3灯都会亮, 虽然亮的比较暗 |
逍遥111111 发表于 2022-9-15 11:42 妙啊,动态输出就可以任意控制LED的亮灭 |
1.jpeg (134.75 KB, 下载次数: 119)
用芯片控制,I2C通信,想控制多少个灯都可以,一个或多个灯随便亮。![]() |
songb11 发表于 2022-9-15 14:52 我是想实现,1亮2灭,12亮,12灭 |
如果你不介意多用两个三极管的话,可以用两个三极管通过与逻辑控制一个LED,另外两个LED用电平本身控制。电路图如下:![]() Q1和Q2是两个NPN三极管,如果两个IO同时高电平,LED1和LED2两侧电平相同,不亮,此时Q1和Q2饱和,LED3亮;如果两个IO中只有一个高电平,那么可以对应地导通LED1或LED2,此时Q1和Q2中也只有一个导通,LED3不亮;如果两个IO都是低电平,那么三个LED自然都不会亮。这样一来,我们就可以单独地控制三个LED的亮灭了,进而可以通过频闪的原理控制三个LED的8种组合状态。 我简单搭了个小电路,用两个IO控制三个LED的流水灯,实现8个LED状态的循环转移(000→001→010→...→111→000→001→...),验证了上面电路的有效性。IO使用了STC8G1K08A-8PIN 的P3.2和P3.3,电阻均为1kΩ,两个三极管均使用S8050。代码以及实现效果如下: 代码:
实现效果: ![]() 效果还不错的,就是要加两个三极管,不知道你能不能接受。 ![]() 证明一下,只用了两个引脚哦,哈哈~ |
每个IO可以控制2个LED,2个电阻接VCC、GND,分压点接两个LED背靠背,LED另一端接IO。 IO高电平亮LED1,低电平亮LED2,高阻则两个都不亮,方波驱动则两个同时亮,PWM驱动还可以独立调光。 所以,2个IO可以独立控制4个LED互不干扰。 |
电路结构是可以的,有的充电器跳灯就是这样的结构,要调节LED输入电压大于一个LED小于两个LED,所以只串电阻没啥用,还得串二极管,或用稳压管稳压芯片之类的。 |
用尽量少的IO口控制尽量多的LED通常采用查理复用方法。计算公式N *(N - 1)= 个LED。这显然不能满足楼主“两个IO口控制三个LED”的要求。解决这个问题有多种方法,沙发提供的方法最简单,但前提条件是IO口要能设置为推挽模式。 |
你的问题是不是想问:一个IO实现两个LED的三种状态[1亮2灭、2亮1灭、1 2都灭]控制? |
首先你要搞清楚你想要得到或实现一个怎样的亮灯结果,再考虑设计电路。 就你贴出来的电路而言D6就独占了一个IO,D2\D3共享一个IO。对于独占来说LED亮灭自由控制,而你这个共享就要看你想实现怎样的一个LED亮灭逻辑了,如IO为三态就可想你现在这个下的LED几种状态了 |
这玩意搞个编码器可以吗 |
同时熄灭,同时亮两个LED并联不可以吗 |
可以用逻辑矛盾的方式 |
楼主没有看到51板块8楼的解决方案吗?高阻不亮是经过验证的。 |
这个电路再加几个电阻不知道行不行得通,电阻位置不合适的话处于00状态的话应该3个灯都可能亮吧.... |
25012ba8ab373196cd5ba13012a7d4f.jpg (115.4 KB, 下载次数: 124)