74HC595 Shift Register With Arduino UNO
by Rachana Jain in Circuits > Arduino
22 Views, 0 Favorites, 0 Comments
74HC595 Shift Register With Arduino UNO

When working on Arduino projects, you often find yourself needing to control multiple devices like LEDs, sensors, displays, or other modules. However, the number of GPIO (General-Purpose Input/Output) pins on an Arduino board is limited. For example, the Arduino Uno provides only 14 digital I/O pins, which can be insufficient for complex projects involving numerous peripherals.
So how do you expand the number of available input/output pins without upgrading to a more expensive microcontroller? The answer lies in using shift registers, which allow you to control multiple devices using just a few pins from the Arduino.
What Is a Shift Register?
A shift register is an integrated circuit (IC) that allows you to shift data serially (one bit at a time) and convert it to parallel output, or vice versa. It acts like a bridge that extends the I/O capabilities of your microcontroller.
There are two main types of shift registers:
- SIPO (Serial-In Parallel-Out) – Used to increase the number of output pins. A popular example is the 74HC595 IC.
- PISO (Parallel-In Serial-Out) – Used to increase the number of input pins. A common example is the 74HC165 IC.
In this tutorial, we’ll focus on the 74HC595, a widely-used SIPO shift register that is especially useful when you need to control multiple output devices, such as LEDs, using only three Arduino pins. Even better, you can daisy-chain multiple 74HC595 chips to control dozens of outputs with minimal wiring.
Whether you're creating LED animations, building a multiplexed display, or simply need more digital outputs, the 74HC595 is a powerful and cost-effective solution. This guide will walk you through the inner workings of the IC, its features, and how to use it with an Arduino board.
Supplies
1 Arduino Uno R3
1 74HC595 shift register
8 LEDs
8 Resistor 220Ω
Connecting wires
Breadboard
USB cable type A/B
Shift Register 74HC595
.png)

🧠What is a Shift Register and Why Use It?
A shift register stores and shifts data bits in a sequential manner. The 74HC595 is an 8-bit Serial-In-Parallel-Out (SIPO) shift register with a storage register (latch) and three-state outputs. This means it takes data in serial form (bit-by-bit) and outputs it in parallel (all at once across 8 output pins).
Example Application
Consider building an 8×8 LED matrix for a visual animation. That’s 64 LEDs, each needing control. Using direct GPIO control would require 64 I/O pins—far beyond what the Arduino offers. However, by using two 74HC595 ICs, one for rows and one for columns, you can control all 64 LEDs with just 6 Arduino pins!
⚙️ Features of the 74HC595 Shift Register
- 8-bit serial-in, parallel-out data capability
- Three-state outputs: HIGH, LOW, High-Impedance
- Operates on a wide supply range: 2.0V to 6.0V
- Compatible with 5V logic levels (ideal for Arduino)
- Low power consumption
- Daisy-chain support for expanding outputs
- High-speed operation (tens of MHz)
- Compact 16-pin DIP packaging
🔩 How Does the 74HC595 Work?
Internally, the 74HC595 contains two separate registers:
- Shift Register (SR) – Temporarily holds serial input data bit by bit.
- Storage Register (Latch) – Holds the final 8-bit value and controls the output pins.
Step-by-step Working:
- Step 1: Data is sent serially to the SER (Serial Data Input) pin.
- Step 2: On each rising edge of the SRCLK (Shift Register Clock), the data is shifted into the shift register.
- Step 3: After 8 bits are entered, a rising edge on the RCLK (Register Clock/Latch) pin transfers data from the shift register to the storage register.
- Step 4: The output pins QA to QH reflect the data in the storage register.
Pinout

- QA to QH: These 8 pins output the final parallel data. Each corresponds to a bit in the storage register.
- SER (Pin 14): Serial data input pin. The Arduino sends data here one bit at a time.
- SRCLK (Pin 11): A clock pulse here shifts bits into the shift register.
- RCLK (Pin 12): A pulse here transfers data from the shift register to the output latch.
- QH’ (Pin 9): Used to cascade data to another 74HC595. It outputs the last bit of the shift register.
- OE (Pin 13): Output Enable. Active LOW. If HIGH, outputs are in high-impedance state. Can be used with PWM to dim LEDs.
- SRCLR (Pin 10): Clears the shift register when pulled LOW. Does not affect the output latch.
- VCC (Pin 16): Connect to 5V supply.
- GND (Pin 8): Connect to ground.
Wiring a 74HC595 Shift Register to an Arduino


Let’s start interfacing 74HC595 shift register with an Arduino UNO.
We will use the shift register to control 8 red LEDs connected to output pins QA to QH.
Place the 74HC595 IC on your breadboard, with each side of pins on separate breadboard rails.
Identify Pin 1 — it’s just to the left of the small notch or dot on the IC.
Connect Power Pins:
- Pin 16 (VCC) → 5V on Arduino
- Pin 10 (SRCLR) → 5V on Arduino (disables clearing)
- Pin 8 (GND) → GND on Arduino
Enable Output:
- Pin 13 (OE) → Arduino Pin 9 (PWM-enabled for brightness control)
Connect Control Pins:
- Pin 11 (SRCLK) → Arduino Pin 12 (Shift Clock)
- Pin 12 (RCLK) → Arduino Pin 10 (Latch Clock)
- Pin 14 (SER) → Arduino Pin 11 (Serial Data Input)
Connect Anode of LEDs to Output Pins (QA to QH):
Pins 15 (QA), 1 (QB), 2 (QC), 3 (QD), 4 (QE), 5 (QF), 6 (QG), 7 (QH)
- Connect a 220Ω resistor in series with each LED.
- LED anodes go to the shift register outputs; cathodes go to GND.
Arduino Code for Interfacing 74HC595 Shift Register With Arduino
Upload the following code to Arduino and observe how the LEDs sequentially turn ON and OFF with varying brightness.
To learn more checkout: How 74HC595 Shift Register Works & Interfacing it with Arduino UNO