面上很多Arduino板最多只有13个?I/O接口,更别说还想要增加什么控制单元了。
为了解决这个问题,所以引入了74HC595芯片来相对应的减少Arduino板上所需的?I/O接口。
以下是74HC595芯片的封装图:
74HC595封装图
这里简单说一下74HC595芯片的作用吧。
它是一个将串行信号输入后并行输出的芯片。比如,输入的信号为?8那么输出信号就是8的二进制信号(00001000)的并行输出。如果将LEDs矩阵8个针脚看做是二进制的信号,那么两个74HC595芯片正好可以控制LEDs矩阵正负极的16个针脚。
同时说明一下,74HC595最大的输出信号为255(11111111),也就是说它可以也仅可以单独输出0(00000000)-255(11111111)的信号。
不过,控制一个8X8的LEDs矩阵是绰绰有余了。?
注:多个74HC595串连的输出以及74HC595的连接控制方式等详细说明请查阅有关74HC595芯片的相关博文。?
接下来,就是硬件连接了:
LEDs矩阵及74HC595硬件连接
LEDs矩阵及74HC595硬件连接示意图
在示意图中,1号74HC595芯片负责控制LEDs矩阵正极,将正极序A-H分别连接芯片Q0-Q7管脚,同理2号负责负极,为了保护LEDs矩阵,负极连接时需通过电阻限流,笔者用的是300Ω的8个电阻。两个74HC595芯片Vcc电源管脚和SCLR管脚连接Arduino板的5V,GND连接Arduino板的GND。
因为是同时控制两个芯片,所以两个芯片的RCK脚可以同时连接到同一个Arduino板的输出?接口5,而SI和SCK管脚则需分别连接在四个Arduino板的输出?接口上。
笔者将2、3输出接口分别连接在1、2号芯片的SI管脚上,4、6?分别连接两个SCK管脚。
至于这些管脚的作用和其他管脚的作用及使用,详见?有关74HC595芯片的相关博文。
在编程中我们使用shiftOut()函数,所以这些连接好后其他的可以先不考虑。
三、程序
所有的硬件连接完毕后就可以下载程序了。如下就是一个简单的程序:
int latch=5;
int clock1=4;
int clock2=6;
int data1=2;
int data2=3;
void setup()
{
pinMode(latch,OUTPUT);
pinMode(clock1,OUTPUT);
pinMode(clock2,OUTPUT);
pinMode(data1,OUTPUT);
pinMode(data2,OUTPUT);
}
void loop()
{
for(int i=1;i<>
{
digitalWrite(latch,LOW);
shiftOut(data1,clock1,MSBFIRST,i);
shiftOut(data2,clock2,MSBFIRST,0);
digitalWrite(latch,HIGH);
delay(1000);
}
}
它的效果如下:
再来一发:
int latch=5;
int clock1=4;
int clock2=6;
int data1=2;
int data2=3;
void setup()
{
pinMode(latch,OUTPUT);
pinMode(clock1,OUTPUT);
pinMode(clock2,OUTPUT);
pinMode(data1,OUTPUT);
pinMode(data2,OUTPUT);
}
void loop()
{
for(int i=1;i<>
{
digitalWrite(latch,LOW);
shiftOut(data1,clock1,MSBFIRST,i);
shiftOut(data2,clock2,MSBFIRST,255-i);
digitalWrite(latch,HIGH);
delay(500);
}
}
它的效果如下:
这仅是两个简单的例子,但可以看出这种方式控制方法要比将LEDs矩阵直接连接在Arduino板上要方便快捷。因为仅需依照自己的需求更改shiftOut()函数的输出信号就可以形象的控制LEDs矩阵的效果了。:-D
之后我会陆续放出自测成功的各种LEDs变化效果的函数,或是其他好玩的程序出来分享。?
四、之后的探讨
在试过各种效果之后我们不难发现,这种原理的LEDs矩阵也有着不能实现的效果。
例如:
示意图
当我们需要让左面两个灯亮起来时,A、C分别给予信号1。2给予信号0。
当我们需要让右边那个灯亮起来时,B给予信号1。3给予信号0。
可当这样的时候,B2、A3、C3的灯也会亮起来。
所以,这种形式的效果在这种原理的单个LEDs矩阵中是无法实现的。??
声明:如需转载请告知本人。
想和我一起探讨更多有关Arduino的,可以订阅我的博客或是关注我的微博哦。?:-D