74HC595 IC – 8-Bit Serial-In Serial/Parallel-Out Shift Register
🔲 74HC595 IC – 8-Bit Serial-In Serial/Parallel-Out Shift Register
The 74HC595 (or 74595) is a widely used 8-bit shift register with serial input and serial/parallel output, ideal for expanding the number of digital outputs on microcontrollers such as Arduino, ESP32, and Raspberry Pi. It allows you to control 8 outputs using just 3 pins, and multiple 74595 ICs can be cascaded to control even more outputs.
⚙️ Technical Specifications
Parameter | Specification |
---|---|
IC Type | 8-bit Shift Register |
Inputs | Serial Data (DS), Clock (SHCP), Latch (STCP) |
Outputs | Q0 to Q7 (parallel), Q7’ (serial out) |
Voltage Range | 2V to 6V (typically 5V) |
Output Current | ±35 mA per pin |
Package | DIP-16 |
Max Clock Frequency | ~25 MHz |
Logic Family | HC (High-Speed CMOS) |
📌 Pinout (DIP-16)
Pin | Name | Description |
---|---|---|
1 | Q1 | Parallel output 1 |
2 | Q2 | Parallel output 2 |
3 | Q3 | Parallel output 3 |
4 | Q4 | Parallel output 4 |
5 | Q5 | Parallel output 5 |
6 | Q6 | Parallel output 6 |
7 | Q7 | Parallel output 7 |
8 | GND | Ground |
9 | Q7’ | Serial out (to next 74595) |
10 | MR | Master Reset (active LOW) |
11 | SHCP | Shift Register Clock Input |
12 | STCP | Storage Register Clock (Latch) |
13 | OE | Output Enable (active LOW) |
14 | DS | Serial Data Input |
15 | Q0 | Parallel output 0 |
16 | Vcc | Power Supply (2–6V) |
🧠 How It Works
Send data serially using DS (data) and SHCP (shift clock).
Latch data to outputs using STCP.
Enable/disable outputs with OE (active LOW).
Cascade multiple 74HC595s using Q7’ to control many outputs.
🛠️ Applications
LED matrix and 7-segment display control
Driving multiple relays or LEDs
Keypad scanning
Expanding Arduino digital outputs
Multiplexing systems
🎮 Arduino Wiring Example
int latchPin = 5; // STCP int clockPin = 6; // SHCP int dataPin = 4; // DS void setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, B10101010); // Send pattern digitalWrite(latchPin, HIGH); delay(500); }