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); }



