Урок 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. Внешний вид и распиновка

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

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 — выводим один байт
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
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 с землёй |
Порядок светодиодов неправильный |
Не тот порядок битов |
Замените LSBFIRST ↔ MSBFIRST |
Свет слабый |
Большое сопротивление или общий ток |
Используйте 220 Ω и 5 В |
10. Идеи для расширения
Подключите 7-сегментный индикатор: один байт — одна цифра.