为什么使用74HC595:因为开发板上的IO口不够用,所以采用74HC595来拓展IO口,用3个开发板上的IO口资源,就可以拓展出8个IO口。
74HC595就是二进制移位寄存器。
595有三条重要的线:数据线(data),锁存线(latch),时钟线(clock)。
74HC595操作动作 | |
latch = LOW | 只有为low时才可以输入数据 |
data | 通过data传输数据第一位,HIGH/LOW |
clock = HIGH | 数据锁存, |
clock = LOW | 准备下一个 |
data… | 继续上面步骤,直到传输完成 |
clock = HIGH | 储存全部的数据 |
clock = LOW | 禁止数据再进行传输 |
latch = HIGH | 并行送出数据 |
引脚接线方法
14脚DS数据引脚data 单片机引脚
12脚ST_CP锁存线LATCH 单片机引脚
11脚SH_CP时钟线引脚clock 单片机引脚
/*********************************
arduino连接74HC595,595上各个输出IO
口上连接一个LED,指定某个灯亮或者灭
*********************************/
int clockPin = 5;//时钟引脚设置
int dataPin = 2;//数据引脚设置
int latchPin = 4;//锁存引脚设置
//将三个引脚全部设置为输出
void setup() {
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
pinMode(latchPin,OUTPUT);
}
void loop() {
int led_state = 5;//将要点亮或者关闭的LED个数或者位置
HC595(led_state);
}
//设置led变化函数
void HC595(byte led_state)
{
boolean ledPin;//led的状态变量,0或者1
digitalWrite(latchPin,LOW);//开始输入数据
for(int i = 0; i <= 7;i++){
//将1按位左移,&上led_state可以判断led_state的各位是1或者0,从而决定ledPin的HIGH或者LOW
if(led_state &(1<<i)){
ledPin = HIGH;
}
else
ledPin = LOW;
digitalWrite(dataPin,ledPin);//往data里存入数据
digitalWrite(clockPin,HIGH);//锁存数据
digitalWrite(clockPin,LOW);//准备输入下一个数据
}
digitalWrite(clockPin,LOW);//全部输入完毕
digitalWrite(latchPin,HIGH);//送出数据
/*
送出数据之后,你可能发现,你输入的数字和实际亮的灯的顺序不对,首先,你要将灯按照D0-D7顺序排好,
最重要的是,你要知道74HC595的数据时怎样输入的。
*/
}
文章中的595芯片管脚图及内容参考来自《Arduino从基础到实践》。
至于数据到底是从低位输入595,还是高位输入到595,建议浏览https://blog.csdn.net/jbh18401/article/details/75334562