SN74HC595 Arduino Wiring: Complete Guide to Expanding Outputs Efficiently

Running out of Arduino pins is frustrating. Painfully limiting. Yet completely avoidable.
The SN74HC595 shift register is one of the simplest, cheapest, and most reliable ways to multiply your outputs—without changing boards.
This guide is deep, practical, and wiring-focused.
No fluff. No guessing. Just clear explanations, stable circuits, and proven best practices.
“Simplicity is the ultimate sophistication.” — Leonardo da Vinci
That philosophy perfectly fits the SN74HC595.
Understanding SN74HC595 and Why It’s Used with Arduino
The SN74HC595 is an 8-bit Serial-In Parallel-Out (SIPO) shift register.
It lets you control 8 outputs using only 3 Arduino pins.
That’s the magic.
How It Works (Plain English)
- Arduino sends data one bit at a time (serial)
- The chip stores those bits internally
- A latch signal updates all outputs at once
- Result: stable, flicker-free outputs
Internally, there are two registers:
- Shift Register – receives serial data
- Storage (Latch) Register – controls output pins
This separation prevents random flickers during data updates.
Why Arduino Users Love It
- Saves I/O pins
- Cheap and widely available
- Easy to chain (8 → 16 → 32 outputs)
- Works on breadboards and PCBs
- Rock-solid for LEDs, displays, and indicators
If your project needs many digital outputs, this chip is hard to beat.
Key Features and Electrical Specifications
Understanding limits keeps components alive.
| Parameter | Typical Value |
|---|---|
| Operating Voltage | 2V – 6V (5V ideal for Arduino) |
| Logic Level | CMOS (HC family) |
| Max Current per Pin | ~6 mA |
| Max Total Output Current | ~70 mA |
| Output Type | Push-pull (not open drain) |
Critical Electrical Rules
- Never power LEDs without resistors
- Do not drive motors or relays directly
- Total current matters more than per-pin current
The SN74HC595 is a logic device, not a power driver.
When higher current is needed, add:
- Transistors
- MOSFETs
- ULN2803 driver IC
SN74HC595 Pinout Explained for Arduino Wiring
Understanding the pinout eliminates 90% of mistakes.

Control Pins (The Big Three)
- DS (Data) – serial data input
- SHCP (Clock) – shifts data on rising edge
- STCP (Latch) – updates outputs
Must-Not-Float Pins
- OE (Output Enable)
Active LOW → connect to GND - SRCLR (Shift Register Clear)
Active LOW → connect to VCC
Floating these pins causes random behavior.
Outputs
- Q0–Q7 → parallel outputs
- Q7’ → serial out for chaining more chips
Timing, Latching, and Bit Order (Why Outputs Behave Strangely)
Timing is everything.
Key Timing Rule
- Data shifts on clock rising edge
- Outputs update only when latch goes HIGH
This prevents mid-update glitches.
Bit Order Explained
Arduino offers:
MSBFIRST→ most significant bit firstLSBFIRST→ least significant bit first
Mapping example (MSBFIRST):
| Bit Sent | Output Pin |
|---|---|
| Bit 7 | Q7 |
| Bit 6 | Q6 |
| … | … |
| Bit 0 | Q0 |
If your LEDs appear reversed—bit order is the reason.
Basic SN74HC595 Arduino Wiring (Correct and Stable)


Required Components
- SN74HC595
- Arduino (Uno, Nano, etc.)
- 8 × resistors (220Ω–1kΩ for LEDs)
- 0.1µF ceramic capacitor
- Breadboard and wires
Recommended Arduino Pin Mapping
| Arduino Pin | SN74HC595 Pin |
|---|---|
| D11 | DS |
| D13 | SHCP |
| D10 | STCP |
| GND | OE |
| 5V | VCC & SRCLR |
Decoupling Capacitor (Non-Negotiable)
Place 0.1µF between VCC and GND, as close to the chip as possible.
This prevents:
- Flicker
- Random resets
- Data corruption
Programming SN74HC595 with Arduino (Clean and Predictable)
Basic Example: LED Control
int dataPin = 11;
int clockPin = 13;
int latchPin = 10;
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B10101010);
digitalWrite(latchPin, HIGH);
delay(500);
}
Debugging Tips
- Outputs reversed? → Change bit order
- Random flicker? → Check OE & capacitor
- Nothing works? → Verify latch timing
Short code. Big results.
Cascading Multiple SN74HC595 Chips (Unlimited Outputs)

Cascading is where this chip shines.
How It Works
- Q7’ of chip #1 → DS of chip #2
- Share clock and latch lines
- Send multiple bytes in sequence
Example: Two Chips (16 Outputs)
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, byte2);
shiftOut(dataPin, clockPin, MSBFIRST, byte1);
digitalWrite(latchPin, HIGH);
First byte shifted ends up on the last chip.
This scales cleanly:
- 2 chips → 16 outputs
- 4 chips → 32 outputs
- 8 chips → 64 outputs
Practical Applications and Power Safety

Common Use Cases
- LED arrays
- 7-segment displays
- Status indicators
- Menu systems
- Control panels
What NOT to Do
- Drive relays directly
- Power motors
- Exceed current limits
- Skip resistors
Safe High-Power Driving
Use:
- NPN transistors
- Logic-level MOSFETs
- ULN2803 driver IC
“The bitterness of poor design remains long after the sweetness of quick wiring is forgotten.”
When to Use (and Not Use) SN74HC595
Ideal Use Cases
- Many ON/OFF outputs
- Limited Arduino pins
- LEDs and indicators
- Static or slow-changing signals
Not Ideal For
- PWM-heavy RGB LEDs
- High-current loads
- Bidirectional I/O
- Input expansion
Alternatives (Quick Comparison)
| Option | Strength | Trade-Off |
|---|---|---|
| SN74HC595 | Simple, fast | Output only |
| MCP23017 | I²C, inputs + outputs | Slower |
| TPIC6B595 | High current sink | Output sink only |
Conclusion: Expand Smarter, Not Harder
The SN74HC595 is small—but powerful.
Key Takeaways
- Use 3 pins to control 8+ outputs
- Always tie OE to GND, SRCLR to VCC
- Add decoupling capacitors
- Respect current limits
- Cascade confidently
Once you master this chip, pin limitations disappear.
Next steps?
- Add SPI for speed
- Design a custom PCB
- Combine with display drivers
- Build scalable control systems
Expand efficiently.
Wire correctly.
And let your Arduino breathe.
