Interfacing Multiple LEDS With Arduino Using Shift Registers for Expansion
You can control multiple LEDs with just three Arduino pins using 74HC595 shift registers, each adding 8 reliable outputs at up to 10 MHz, ideal for lighting or automation. Daisychaining lets you expand to 16, 24, or more outputs while maintaining flicker-free performance. Use shiftOut) for precise control, or the ShiftPWM library for smooth 8-bit dimming across 16+ LEDs at ~770 Hz. Real testers report clean signal timing and easy wiring-perfect for projects needing more GPIO. There’s a smarter way to scale your setup.
We are supported by our audience. When you purchase through links on our site, we may earn an affiliate commission, at no extra cost for you. Learn more. Last update on 28th May 2026 / Images from Amazon Product Advertising API.
Notable Insights
- Use a 74HC595 shift register to control 8 LEDs with only 3 Arduino GPIO pins.
- Connect LEDs from QA–QH outputs to ground through current-limiting resistors for proper operation.
- Send data serially using Arduino’s shiftOut() function followed by a latch pulse to update outputs.
- Daisy-chain multiple 74HC595 registers to control 16, 24, or more LEDs with the same 3 pins.
- Use the ShiftPWM library for independent 8-bit PWM dimming across all LEDs without flicker.
Solve Arduino’s Limited GPIO With Shift Registers
While your Arduino Uno only has 14 digital I/O pins, you can easily expand that output capability using the 74HC595 shift register, giving you control over 8 additional outputs with just three GPIO pins-SER (data), SRCLK (clock), and RCLK (latch). You’ll love how this shift register’s design helps overcome limited GPIO. With one IC, you expand the number of LEDs or components you can drive. Need more? Daisy-chaining multiple 74HC595 chips lets you control 16, 24, or even 32 outputs while still using only 3 pins. Shift data in with the Arduino’s shiftOut() function, then latch it to update all 8 output pins at once. It’s efficient, reliable, and perfect for projects like LED arrays or motor control. Using a shift register isn’t just clever-it’s essential for smart expansion in robotics or automation where space and pins are tight.
How the 74HC595 Shift Register Works
When you send data to a 74HC595 shift register, it takes that serial input bit by bit and lines it up internally before releasing it to 8 output pins all at once, giving you true 8-bit parallel control from just three Arduino pins-SER, SRCLK, and RCLK. Each pulse on the SRCLK pin shifts the next bit into the shift register, moving data from QA to QH. Once all 8 bits are loaded, you trigger the latch pin (RCLK), which copies the data from the shift register to the storage register, updating all outputs at once-no flicker, just clean changes. The QH’ pin lets you daisy-chain multiple 74HC595s, so you can control 16, 24, or more outputs using the same three pins. Real-world tests show reliable timing at up to 10 MHz, making this shift register a compact, efficient solution for expanding GPIO without sacrificing speed.
Connect 8 LEDs to a Single Shift Register
Since you’re looking to light up 8 LEDs without hogging all your Arduino’s pins, hooking them up to a single 74HC595 shift register is a smart, space-saving move that real-world testers consistently praise for its clean performance and reliable timing. Connect the shift register’s SER (pin 14), SRCLK (pin 11), and RCLK (pin 12) to Arduino digital pins 4, 6, and 5-your key data pins and clock pin. Each output (QA–QH) drives one LED, anodes to outputs, cathodes to ground via 100Ω resistors. Ignore the output enable pin (active-low); tie it to ground for full output. Use `shiftOut(dataPin, clockPin, LSBFIRST, byte)` to send data, ensuring QA lights first. A LOW-to-HIGH pulse on RCLK latches data, updating all outputs at once, no flicker. Send eight LOW bits and pulse RCLK to turn off all LEDs instantly.
| Function | Pin (74HC595) |
|---|---|
| Data In | SER (14) |
| Clock | SRCLK (11) |
| Latch | RCLK (12) |
Chain Multiple 74HC595 Registers for More Outputs
You’ve seen how a single 74HC595 can neatly manage 8 LEDs using just three Arduino pins, but what if your project-say, a scrolling LED matrix or an automated display board-needs 16, 24, or even more outputs without multiplying your wiring mess? Daisy-chaining multiple 74HC595 shift registers is your go-to solution for output expansion. Connect the data output (QH) of the first 74HC595 to the SER pin of the next, while sharing SRCLK and RCLK lines across all ICs. Each added register gives 8 more outputs-two chips handle 16, eight can manage 64. When sending data, shift 16 bits for two registers, with the second register’s data sent first. Use shiftOut) twice or loop through bytes, then pulse RCLK to update the data output. It’s reliable, scalable, and keeps your Arduino’s pins free.
Control LEDs in Sequence With Arduino
Though you’re only using three Arduino pins-data (SER) on pin 4, clock (SRCLK) on pin 6, and latch (RCLK) on pin 5-you can still create dynamic LED animations like the classic Knight Rider sweep by leveraging the 74HC595 shift register. You can expand control to eight LEDs without adding more pins on the Arduino. Using the `shiftOut()` function with LSB-first order, each bit is set to align QA–QH outputs correctly. For the sweep, shift a single high bit sequentially across the register, delaying 100ms between moves for smooth animation. Update the output data only after all bits are shifted by pulsing the latch pin high-this keeps the display stable and flicker-free. Testers confirm the shift register delivers precise timing and clean shifts. Whether you’re lighting one LED or chaining more registers, you maintain full control, making it easy to expand complex patterns while keeping your setup compact and efficient.
Add PWM Dimming With ShiftPWM Library
Now you can go beyond simple on-off control and add smooth brightness adjustment to your LED setup using the ShiftPWM library. With ShiftPWM, you get true PWM dimming across multiple 74HC595 shift registers using just three Arduino pins: the DATA pin, LATCH pin, and CLOCK pin. You can control up to 16 or more LEDs with independent brightness levels, all while the library handles rapid background updates at around 770 Hz PWM frequency and 8-bit resolution. This creates smooth, flicker-free dimming ideal for ambient lighting or visual indicators. Testers report reliable performance even with daisy-chained chips, thanks to ShiftPWM’s efficient bit manipulation. Install it easily via the Arduino Library Manager or from GitHub, then write minimal code to start fading LEDs instantly. Whether you’re building a display, robot eyes, or mood lighting, ShiftPWM turns basic 74HC595 outputs into fully dimmable channels-without hogging your Arduino’s pins.
On a final note
You’ve just activated 16+ LED outputs using two 74HC595 shift registers, saving precious Arduino pins, drawing under 80mA total, and achieving smooth sequences with ShiftPWM. Testers confirm stable performance at 5V, daisy-chaining clarity, and easy wiring via data, latch, and clock lines. For robotics or displays, this setup delivers precise, scalable control-proven in real builds-without complexity. Use it to expand your project’s reach, reliably, today.





