两个P0总共可以驱动8*8=64个灯,方式原理与4*4一般 |
动态扫描,Proteus仿真。![]() |
wulin 发表于 2019-1-11 17:59 大佬牛逼,这么多方法,我还是觉得这种比较易实现多种功能组合 |
根据你的电路用动态扫描方式,列提供数据,行扫描,频率在50*12Hz,每次单片机一个引脚上只有一个LED点亮,关键程序的写好,单片机引脚能承受电流的20MA,要加限流电阻。 |
本帖最后由 wulin 于 2019-1-12 08:00 编辑 最简单的方法就像操作数码管一样,设置unsigned int 数组控制行,设置unsigned char 数组控制列,把不同组的端口组合成一个unsigned int变量来操作。参看我以前的回坛友的帖子:“异组端口组成矩阵键盘的读写操作方法”。也可以按点阵LED方法驱动。 |
可以考虑采用扫描方式控制,只要扫频大于20Hz,人眼基本就分辨不出来。 |
其实,这是个数学分解质因素的问题。 |
如果必须用8个IO来做可以这样:4*3*3。 3*3用6个IO可以做成9个驱动,这样的驱动做4组,这4四组用剩下的两IO做选通,刚好可以有4个状态的选通。不过,3*3之后,如何再被选通要下功夫了。需要增加其它器件,得不偿失。 所以几乎无人采用这种方式,但作为学习,你可以按照这个思路试试。 大多会采用6*6的方案。即用12个IO口。 |
相信P0,P2的数据你都会了,P1可以这样表示:第一行P1=10000000B,第二行P1=01000000B,第三行P1=00100000B |
如法炮制:6高6低。 |
相信P0和P2的数据你都会了,P1你可以这样:P1=10000000B 表示第一行,P1=01000000B表示第二行,P1=00100000B表示第三行 |
要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全低。 。 。 。 以此类推。 |
P1=0xF0是全亮啊,你这36个LED也是要全亮和全灭吗? 全亮:P1&=0xf8;P2=0xff;P0|=0xff; 全灭:P1|=0xff;P2=0xff;P0|=0xff; 好久没搞51了,都不敢肯定对不对。。。 |