标题: 36个LED不同单片机IO口的驱动问题,想了一天了求指导 [打印本页]

作者: toaaa    时间: 2019-1-11 15:44
标题: 36个LED不同单片机IO口的驱动问题,想了一天了求指导
本人单片机小白,只会用玩同一个IO口4*4的矩阵。在一个IO口上可以用十六进制设置4个引脚高,4个引脚低,P1=0xF0;  12*3的36个灯怎么驱动,想了一天了跪求大佬

IMG_20190111_112752.jpg (981.41 KB, 下载次数: 40)

IMG_20190111_112752.jpg

作者: jeffwang2011    时间: 2019-1-11 16:05
P1=0xF0是全亮啊,你这36个LED也是要全亮和全灭吗?

全亮:P1&=0xf8;P2=0xff;P0|=0xff;
全灭:P1|=0xff;P2=0xff;P0|=0xff;

好久没搞51了,都不敢肯定对不对。。。
作者: xuyaqi    时间: 2019-1-11 16:35
要L1头一个灯亮,p10低,p11与p12高,p20高,p21-p27以及p00-p03全低。
要L1第二个灯亮,p10低,p11与p12高,p21高,p20-p27以及p00-p03全低。



要L2头一个灯亮,p11低,p10与p12高,p20高,p21-p27以及p00-p03全低。



以此类推。
作者: l6931639    时间: 2019-1-11 16:49
相信P0和P2的数据你都会了,P1你可以这样:P1=10000000B 表示第一行,P1=01000000B表示第二行,P1=00100000B表示第三行
作者: yzwzfyz    时间: 2019-1-11 16:49
如法炮制:6高6低。
作者: l6931639    时间: 2019-1-11 16:51
相信P0,P2的数据你都会了,P1可以这样表示:第一行P1=10000000B,第二行P1=01000000B,第三行P1=00100000B
作者: yzwzfyz    时间: 2019-1-11 16:59
如果必须用8个IO来做可以这样:4*3*3。
3*3用6个IO可以做成9个驱动,这样的驱动做4组,这4四组用剩下的两IO做选通,刚好可以有4个状态的选通。不过,3*3之后,如何再被选通要下功夫了。需要增加其它器件,得不偿失。
所以几乎无人采用这种方式,但作为学习,你可以按照这个思路试试。
大多会采用6*6的方案。即用12个IO口。
作者: yzwzfyz    时间: 2019-1-11 17:01
其实,这是个数学分解质因素的问题。
作者: gordonzhang240    时间: 2019-1-11 17:03
可以考虑采用扫描方式控制,只要扫频大于20Hz,人眼基本就分辨不出来。
作者: wulin    时间: 2019-1-11 17:59
本帖最后由 wulin 于 2019-1-12 08:00 编辑

最简单的方法就像操作数码管一样,设置unsigned int 数组控制行,设置unsigned char 数组控制列,把不同组的端口组合成一个unsigned int变量来操作。参看我以前的回坛友的帖子:“异组端口组成矩阵键盘的读写操作方法”。也可以按点阵LED方法驱动。

作者: yaoji123    时间: 2019-1-12 13:39
根据你的电路用动态扫描方式,列提供数据,行扫描,频率在50*12Hz,每次单片机一个引脚上只有一个LED点亮,关键程序的写好,单片机引脚能承受电流的20MA,要加限流电阻。
作者: toaaa    时间: 2019-1-14 22:22
wulin 发表于 2019-1-11 17:59
最简单的方法就像操作数码管一样,设置unsigned int 数组控制行,设置unsigned char 数组控制列,把不同组 ...

大佬牛逼,这么多方法,我还是觉得这种比较易实现多种功能组合
作者: weidoit    时间: 2019-1-18 15:36
动态扫描,Proteus仿真。




作者: 璀璨星芒    时间: 2019-1-19 15:45
两个P0总共可以驱动8*8=64个灯,方式原理与4*4一般




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1