基于arduino的74HC595模块的原理与使用

为什么使用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

猜你喜欢

转载自blog.csdn.net/Xiao_peng117/article/details/79677856