我们都知道,任何芯片的IO资源是有限的,往往有的器件,如数码管等简单的器件却需要大量的IO口,这样造成大量的IO资源被占用,而74hc595以及74hc164等芯片可以解决这样的简单器件对IO口的需求。
下面我们来看看一个最简单的例子,用595来实现LED的流水灯,连接图如下:
二进制模拟显示代码:
int latchPin=12;
int clockPin=8;
int dataPin=11;
void setup () {
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
}
void loop()
{
for(int x=0; x<255; x++)
{
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,x);
digitalWrite(latchPin,HIGH);
delay(10);
}
}
}
流水灯显示代码:
int latchPin=8; //ST CP of 74HC595
int clockPin=12;//SH CP of 74HC595
int dataPin=11; //DS of 74HC595
char LED_pin=0x00;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop()
{
for(int i=0; i<8; i++)
{
LED_pin=~(0x01<<i);
digitalWrite(latchPin,LOW); //低电位表示启动
shiftOut(dataPin,clockPin,LSBFIRST,~LED_pin);
digitalWrite(latchPin,HIGH); //高电位表示停止
delay(25);
}
LED_pin=0x01;
}
注意: 函数shiftout目的在于1个执行时间内输出第4个参数j的某一个位。1个字符有8个位,若希望从高位(左边)开始,第三个参数设定为MSBFIRST;若从低位右边)开始,则设定为LSBFIRST。前两个参数只是引脚定义。shiftOut的详细用法可以参看我的博文《Arduino中shiftOut怎么用?》