Run out of digital pins on an Arduino Uno with a project that needs eight or sixteen LEDs, a big 7-segment display, or a wall of status lights? The 74HC595 is the standard fix — it turns just three microcontroller pins into eight extra outputs, and multiple 74HC595s can be chained to add eight more per chip with no extra pins needed at all.
Pinout
Hover or tap a pin above to see what it does.
| Pin | Name | What it does |
|---|---|---|
| 1–7 | Q1–Q7 | Parallel outputs 1 through 7 |
| 8 | GND | Ground |
| 9 | Q7' | Serial data output — chain to the next chip’s DS pin to cascade |
| 10 | MR | Master reset, active low — tie to VCC for normal use |
| 11 | SH_CP | Shift register clock |
| 12 | ST_CP | Storage/latch clock — this is what actually updates the outputs |
| 13 | OE | Output enable, active low — tie to GND to keep outputs active |
| 14 | DS | Serial data input |
| 15 | Q0 | Parallel output 0 |
| 16 | VCC | Positive supply, 2–6V |
Notice Q0 sits at pin 15, deliberately separated from the Q1–Q7 block at pins 1–7 — an easy detail to miss when wiring outputs in numeric order across a breadboard, since it means Q0 isn’t physically adjacent to Q1.
How it actually works
Internally the 74HC595 is two 8-bit registers stacked on top of each other: a shift register and a storage register, and understanding that split explains both the wiring and the most common bug.
Shifting data in happens on SH_CP: each rising edge shifts whatever bit is currently on DS into the shift register, pushing everything already in there along by one position. Do this eight times and the shift register holds a full byte — but nothing on the actual Q0–Q7 output pins has changed yet.
Updating the outputs happens separately, on ST_CP: a rising edge here copies the entire shift register’s contents into the storage register all at once, and it’s the storage register’s contents that actually drive the eight output pins. This two-stage design is deliberate — it means all eight outputs change simultaneously on one clean edge, rather than flickering through intermediate states as bits shift in one at a time, which would visibly ripple across a row of LEDs if the outputs updated live during shifting.
In an Arduino sketch using shiftOut(), this maps directly: shiftOut() handles the eight SH_CP pulses that load a byte into the shift register, and it’s the code’s job to separately pulse ST_CP (typically LOW, shiftOut(), then HIGH) to actually latch that byte onto the outputs.
Cascading multiple chips
Chain chips by wiring the first chip’s Q7’ (pin 9) to the second chip’s DS (pin 14), and share SH_CP and ST_CP across every chip in the chain. Shifting 16 bits through two chained chips (most-significant byte first) fills both shift registers, and a single ST_CP pulse latches both simultaneously — from the microcontroller’s point of view, driving 8 outputs or 64 outputs across eight chained chips costs exactly the same three pins.
Common mistakes
Pulsing SH_CP without ever pulsing ST_CP. The single most common “why don’t my outputs change” report — data is shifting into the shift register correctly, but without a ST_CP rising edge, none of it reaches the actual output pins. If shiftOut() is being called but nothing on the LEDs changes, check the latch pulse is actually happening.
MR left floating. Pin 10 is active-low and not internally pulled high by default on every variant — tie it firmly to VCC unless the project specifically needs to reset the register in software.
OE left floating instead of tied low. Pin 13 needs to be actively pulled to GND to guarantee outputs stay enabled; leaving it floating can produce outputs that flicker or sit in a high-impedance state unpredictably, especially on a breadboard with any nearby electrical noise.
Driving an LED directly off a Q pin without a resistor. Same current-limiting rule as driving an LED from any digital output — the 74HC595’s outputs aren’t exempt from needing a series resistor. See how to choose the right resistor value for an LED if you haven’t sized one before.
If you’re chaining several of these to drive a run of LEDs, the CD4017 decade counter is worth knowing about too — it solves a related but distinct problem (sequencing one output at a time, like a classic LED chaser) with far simpler wiring when you don’t need arbitrary patterns.