ESP8266 + SN74HC595N(8位移位寄存器)

目录

介绍

    使用SN74HC595N 为 ESP8266 扩展 
  • SN74HC595N(8位移位寄存器IC)

     1. Vcc 16引脚 电压输入 (必须)
     2. GND 地 (必须)
     3. OE 需要接GND(必须)
     4. MR 需要接高电压(必须)
     5. Q0 ~ Q7 并行输出引脚,一般是5v
     6. 12引脚 ST大平台
     7. 11引脚 SH活塞
     8. 14引脚 DS数据
     9. 9引脚 扩充使用
    
  • SN74HC595N (实物图DC图)

  • SN74HC595N(简洁图)

准备

  • 面包板
  • 杜邦线
  • SN74HC595N
  • ESP8266
  • LED * 8
  • 200k电阻 * 8

连线

  根据原理图,把 SN74HC595N 模块分为 4大块
  1. 大平台(ST)
  2. 数据(DS)
  3. 活塞(SH)
  4. GPIO引脚
  • ST(大平台) 连接 ESP8266引脚 5
  • DS(数据) 连接 ESP8266引脚 4
  • SH(活塞) 连接 ESP8266引脚 0
  • Vcc 连接 ESP8266引脚3V或者5V
  • GND 连接 ESP8266引脚 GND
  • OE 连接 GND(必须)
  • MR 连接 Vcc(必须)
  • Q0 ~ Q7 连接 LED灯和电阻

代码

#include <Arduino.h>
// SN74HC595 简称 N74
// ST 大平台  5
// DS 数据 4
// SH 活塞  0
const short N74_ST_BIG = 5;
const short N74_DS_DATA = 4;
const short N74_SH_PUSH = 0;

void setup()
{
  pinMode(N74_ST_BIG, OUTPUT);
  pinMode(N74_DS_DATA, OUTPUT);
  pinMode(N74_SH_PUSH, OUTPUT);
}

void loop()
{
  digitalWrite(N74_ST_BIG, LOW); // 放下大平台

  digitalWrite(N74_SH_PUSH, LOW);  // 活塞拉回
  digitalWrite(N74_DS_DATA, 0);    // 放入数据
  digitalWrite(N74_SH_PUSH, HIGH); // 活塞推动数据

  digitalWrite(N74_SH_PUSH, LOW);
  digitalWrite(N74_DS_DATA, 1);
  digitalWrite(N74_SH_PUSH, HIGH);

  digitalWrite(N74_SH_PUSH, LOW);
  digitalWrite(N74_DS_DATA, 0);
  digitalWrite(N74_SH_PUSH, HIGH);

  digitalWrite(N74_SH_PUSH, LOW);
  digitalWrite(N74_DS_DATA, 1);
  digitalWrite(N74_SH_PUSH, HIGH);

  digitalWrite(N74_SH_PUSH, LOW);
  digitalWrite(N74_DS_DATA, 0);
  digitalWrite(N74_SH_PUSH, HIGH);

  digitalWrite(N74_SH_PUSH, LOW);
  digitalWrite(N74_DS_DATA, 1);
  digitalWrite(N74_SH_PUSH, HIGH);

  digitalWrite(N74_SH_PUSH, LOW);
  digitalWrite(N74_DS_DATA, 0);
  digitalWrite(N74_SH_PUSH, HIGH);

  digitalWrite(N74_SH_PUSH, LOW);
  digitalWrite(N74_DS_DATA, 1);
  digitalWrite(N74_SH_PUSH, HIGH);

  digitalWrite(N74_ST_BIG, HIGH); // 拉起大平台
}

代码优化

#include <Arduino.h>
// SN74HC595 简称 N74
// ST 大平台  5
// DS 数据 4
// SH 活塞  0
const short N74_ST_BIG = 5;
const short N74_DS_DATA = 4;
const short N74_SH_PUSH = 0;

const int LED[] = {0, 1, 0, 1, 0, 1, 0, 1};

void pull_push_data(short num); // 数据活塞 num:0或1

void setup()
{
  pinMode(N74_ST_BIG, OUTPUT);
  pinMode(N74_DS_DATA, OUTPUT);
  pinMode(N74_SH_PUSH, OUTPUT);
}

void loop()
{
  digitalWrite(N74_ST_BIG, LOW); // 放下大平台

  for (unsigned short i = 0; i < 8; i++)
  {
    pull_push_data(LED[i]);
  }

  digitalWrite(N74_ST_BIG, HIGH); // 拉起大平台
}

void pull_push_data(short num)
{
  digitalWrite(N74_SH_PUSH, LOW);  // 活塞拉回
  digitalWrite(N74_DS_DATA, num);  // 放入数据
  digitalWrite(N74_SH_PUSH, HIGH); // 活塞推动数据
}

运行

ok

问题

总结

posted @ 2022-05-09 16:57  半截肥皂  阅读(1821)  评论(0编辑  收藏  举报