Arduino实验–移位寄存器

74HC595 简单说来就是具有8 位移位寄存器和一个存储器,以及三态输出功能。 这里我们用它来控制8 个LED 小灯。我们为什么要用74HC595 来控制小灯呢?一定会有很多朋友会问这个问题,我想问的是我们要是单纯的用Arduino 控制8 个小灯的话要占用多少个I/O 呢?答案是8 个,但是我们的Arduino 168 有几个I/O 口呢?加上模拟接口也就20 个吧,这8 个小灯占用了太多的资源了,我们用74HC595 的目的就是减少I/O 口的使用数量。用74HC595 以后我们可以用3 个数字I/O 口控制8 个LED 小灯岂不美哉。下面是我们要准备的元器件。

74HC595 直插芯片*1595

红色直插LED*8:led

220Ω直插电阻*8电阻

准备好元件我们就按下面的原理图连接电路

001

此电路图看似复杂,我们仔细分析以后再结合参考实物就会发现很简单。

下面是参考源程序:

int dataPin= 11;
int clockPin = 12;
int latchPin= 8;
int ledState = 0;
const int ON = HIGH;
const int OFF = LOW;
void setup()
{
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
}
void loop()
{
int delayTime = 100;
for(int i = 0; i < 256; i++)
{
updateLEDs(i);
delay(delayTime);
}
}
void updateLEDs(int value)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, value);
digitalWrite(latchPin, HIGH);
}

先来说说代码,代码在这里是比较简单的,最主要的搞清楚下面这句代码就OK了,其他的很简单。

shiftOut(dataPin, clockPin, MSBFIRST, value);

shiftOut函数能够将数据通过串行的方式在引脚上输出,相当于一般意义上的同步串行通信,这是控制器与控制器、控制器与传感器之间常用的一种通信方式。

shiftOut函数无返回值,有4个参数:dataPin、clockPin、bitOrder、val,具体说明如下:

dataPin:数据输出引脚,数据的每一位将逐次输出。引脚模式需要设置成输出。

clockPin:时钟输出引脚,为数据输出提供时钟,引脚模式需要设置成输出。

bitOrder:数据位移顺序选择位,该参数为byte类型,有两种类型可选择,分别是高位先入MSBFIRST和低位先入LSBFIRST。我们这里采用的是高位先入。大家可以将高位先入改成低位先入哦,看看有什么不一样的事情发生。

val:所要输出的数据值。

再来解释一下74HC595芯片的动作。首先,latchPin(对应芯片的RCK)为LOW,允许数据进入,然后就是输入数据,最后latchPin为HIGH,并行送出8位数。

具体的74HC595芯片的工作方式,将在后面讲解

0 Comments
Leave a Reply