| 就只是做流水灯的话,用4017不是更简单,一个时钟信号就行了,非用单片机的话,循环程序就一句。 |
dugu@520 发表于 2021-5-2 14:30 CD4094可以用74HC595代替,楼上已经有介绍,只是74HC595我很少用,CD4094用习惯了,现在发现74HC595布线更容易,速度应该更快。 |
kmsj 发表于 2019-10-27 11:36 cd4094可以用什么代替吗? |
| 单片机扩展40个输出口点亮流水灯,用5片74138是最差方案,只能做到同时亮5个LED,最佳方案是用5片CD4094,最多占用单片机4个I/O口,就是扩展100个输出口也是占用单片机4个I/O口,可以做到40个LED全亮全灭,想编出什么花样都可以。 |
寂寞的大饼 发表于 2019-10-25 15:29 我也不会,我从来都没有用过74138,端口扩展也没有用过 但就算我没有用过,我也可以说这很简单 当你学到单片机编程这一块的时候,你就应该在这之前把数字电路和模拟电路的基础打好,如果你现在还不会这些,那就说你不会就可以了,"我不会"这三个字说出来不丢人,人都是从不会学过来的,如果你还想在这条路上走下去,那就还得回去学数字电路 你在这问,人家给了你代码和电路,你依然还是不会的 当然,如果你没有在这条路继续走下去的打算,就当我什么也没说 |
wulin 发表于 2019-10-25 14:36 大佬能将每一段小程序解释一下吗,谢谢啦,惭愧了 |
Y_G_G 发表于 2019-10-25 14:36 老哥,师傅要求用32个I/O口的单片机并通过数电知识拓展口来点亮40个流水灯,俺是新手,基本不会。 |
|
先看一下基础吧 |
|
哥们,你不会连流水灯怎么实现都不知道吧? 不要折腾那么多了,直接上一个引脚多的STC单片机就可以了,什么译码器都不要,只要串联电阻LED就可以了的 程序就一个一个亮过去就可以了,完了就有流水的效果了 |
寂寞的大饼 发表于 2019-10-25 12:58 由于40个流水灯是轮流点亮的,编程就极其简单,与8个流水灯的程序几乎一样。主循环周期约500ms,也就是0.5s左移1位,初始e1=0xfe;1111 1110,左移1位后+1=1111 1101,以此类推,循环8次就是1111 1111,以0xff作为进位判断条件,重复5次就完成一轮40个LED流水。如果把40个LED做成花样流水就比较复杂些,需要事先设计几个二维数组保存预定花样,由按键或其它方法控制和调用这些数组完成花样流水。 |
wulin 发表于 2019-10-24 09:06 能不能通篇说一下,尤其是整个原理的工作流程,如何实现流水灯的 |
寂寞的大饼 发表于 2019-10-23 22:19 40位数据已经超出无符号长整型数据类型32位,不能一次传输,所以用for嵌套,将8位数据连续传输5次。 特殊功能寄存器PSW中,CY表示的含义是溢出标志位。也可以写成如下代码,由高到低传输,只是效率略低。 for(j=0;j<8;j++) { Ds=(k&0x80)>>7;//读取最高位 Sh=0; Sh=1; k<<=1; } |
寂寞的大饼 发表于 2019-10-23 22:19 CY是寄存器PSW的最高位,进行移位时,会把1位数据移入到这里存储 |
| 38译码可以达到要求 |
wulin 发表于 2019-10-22 22:02 能解释说明一下代码的意思吗?还有那个cY是什么意思呢 |
wulin 发表于 2019-10-22 22:02 谢谢,很有用 |
| 五个74138,依次控制输入CBA对应0-7的同时,P30-P35依次只控制有一根为低电平,不过你的电路是错误的,74138的E1应该接高电平 |
给你写了一个示例参考
595驱动LED仿真.zip
(103.94 KB, 下载次数: 27)
|