Урок 16: Сдвиговый регистр 74HC595 — управляем 8 LED тремя пинами

1. Зачем нужен 74HC595

74HC595 — 8-разрядный сдвиговый регистр с последовательным входом и параллельным выходом (SIPO). Он позволяет управлять восьмью выводами при помощи всего трёх линий Arduino: данные (DS), тактовый импульс (SH_CP) и защёлка (ST_CP). При каскадировании одной шины хватает для 16, 24, 32 и более выходов.

2. Оборудование

Кол-во

Деталь

1

Плата Arduino UNO

1

Микросхема 74HC595

4

LED 5 мм красный

4

LED 5 мм зелёный

8

Резисторы 220 Ω

1

Макетная плата (breadboard)

Перемычки «папа-папа»

1

USB-кабель A-B

3. Внешний вид и распиновка

74HC595
Микросхема 74HC595N DIP-16
Распиновка DIP-16
Pinout 74HC595N
Таблица функций выводов 74HC595

4. Схема подключения

74HC595 + 8 LED; пины Arduino D2 (DS), D4 (ST_CP), D5 (SH_CP)
  • DS (14)D2

  • SH_CP (11)D5

  • ST_CP (12)D4

  • OE (13)GND

  • MR (10)5 V

  • VCC (16)5 V, GND (8)GND

  • Q0–Q7 → аноды LED через 220 Ω, катоды LED → GND

5. Код № 1 — выводим один байт

hc595_fixed_pattern.ino
int dataPin  = 2;   // DS
int clockPin = 5;   // SH_CP
int latchPin = 4;   // ST_CP

void setup() {
  pinMode(dataPin,  OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
}

void loop() {
  digitalWrite(latchPin, LOW);                 // открываем защёлку
  shiftOut(dataPin, clockPin, LSBFIRST, 0b10000000);
  digitalWrite(latchPin, HIGH);                // фиксируем данные
  while (true);                                // больше ничего
}

6. Результат № 1

После загрузки скетча горит один светодиод (Q7). Измените байт на «0b11111111» — загорятся все, на «0» — погаснут.

7. Код № 2 — управление из Serial Monitor

hc595_serial_control.ino
const int latchPin = 4;
const int clockPin = 5;
const int dataPin  = 2;

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin,  OUTPUT);
  Serial.begin(9600);
  Serial.println("Введите цифру 0–7, чтобы включить LED");
}

void loop() {
  if (Serial.available()) {
    int n = Serial.read() - '0';          // ASCII → число
    if (n >= 0 && n <= 7) writeBit(n, HIGH);
  }
}

void writeBit(int index, int state) {
  byte pattern = 0;
  bitWrite(pattern, index, state);
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, pattern);
  digitalWrite(latchPin, HIGH);
}

8. Результат № 2

Откройте Serial Monitor (9600 бод), введите цифру 0 – 7 — загорается соответствующий светодиод; повторный ввод той же цифры гасит LED (бит перезаписан нулём).

9. Типовые проблемы

Симптом

Причина

Решение

LED не светятся

OE не притянут к GND

Проверьте соединение вывода 13 с землёй

Порядок светодиодов неправильный

Не тот порядок битов

Замените LSBFIRSTMSBFIRST

Свет слабый

Большое сопротивление или общий ток

Используйте 220 Ω и 5 В

10. Идеи для расширения

  • Подключите 7-сегментный индикатор: один байт — одна цифра.