Arduino Nano 33 IoT - 74HC595 4-Digit 7-Segment Display

Discover how to drive a 4-digit 7-segment display with a 74HC595 shift register using the Arduino Nano 33 IoT. The Nano 33 IoT runs a SAMD21 Cortex-M0+ processor at 48 MHz, includes built-in Wi-Fi and Bluetooth Low Energy, and operates at 3.3V logic. Despite all that, it keeps the same compact Nano footprint.

Along the way, you will discover:

Arduino Nano 33 IoT 74HC595 4-Digit 7-Segment Display

Hardware Preparation

1×Arduino Nano 33 IoT
1×Micro USB Cable
1×74HC595 4-digit 7-segment Display
1×Jumper Wires
1×Recommended: Screw Terminal Expansion Board for Arduino Nano
1×Recommended: Breakout Expansion Board for Arduino Nano
1×Recommended: Power Splitter for Arduino Nano

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Disclosure: Some of the links provided in this section are Amazon affiliate links. We may receive a commission for any purchases made through these links at no additional cost to you.
Additionally, some of these links are for products from our own brand, DIYables .

Introducing the 74HC595 4-Digit 7-Segment Display

This module puts four 7-segment digits behind a 74HC595 shift register so you only need 3 data pins. The shift register accepts serial data and converts it to parallel segment outputs. The library multiplexes through each digit rapidly, making all four appear lit at the same time.

Function Pin Description
SCLK (SH_CP) Serial Clock Clocks data into the shift register
RCLK (ST_CP) Register Clock Latches data to the output pins
DIO (DS) Data Input Serial data line
VCC Power 3.3V or 5V
GND Ground Common ground

Note: The Nano 33 IoT uses 3.3V logic. The 74HC595 module works fine at 3.3V.

Wiring Diagram

Connect the display module to the Nano 33 IoT:

  • SCLK to D7
  • RCLK to D6
  • DIO to D5
  • VCC to 3.3V
  • GND to GND
The wiring diagram between Arduino Nano and 33 IoT 74HC595 4-Digit 7-Segment Display

This image is created using Fritzing. Click to enlarge image

Preparing the Library

  1. Connect the Arduino Nano 33 IoT to your computer using a Micro-B USB cable.
  2. In Arduino IDE, choose Arduino NANO 33 IoT as the board and select the correct port.
  3. Open the Libraries panel from the left sidebar.
  4. Search for "DIYables_4Digit7Segment_74HC595" and locate the one published by DIYables.
  5. Press Install to add it. Select version 2.0.0 or later.
Arduino Nano 33 IoT 74HC595 4-Digit 7-Segment Display library

No additional dependencies needed - everything is bundled in.

Core Sketch

The core structure that every DIYables_4Digit7Segment_74HC595 sketch builds on:

#include <DIYables_4Digit7Segment_74HC595.h> #define SCLK_PIN 7 #define RCLK_PIN 6 #define DIO_PIN 5 DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); void setup() { display.begin(); display.print(1234); } void loop() { display.loop(); }

Initialize with begin(), set the value with print(), and keep display.loop() running. The multiplexing is handled internally. For waits, use display.delay() instead of delay().

Discover - Display Integers

Displays a series of integers and demonstrates zero-padding.

/* * This Arduino Nano 33 IoT code was developed by newbiely.com * * This Arduino Nano 33 IoT code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-iot/arduino-nano-33-iot-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN 7 // The Arduino Nano 33 IoT pin connected to the Serial clock pin of 7-segment display #define RCLK_PIN 6 // The Arduino Nano 33 IoT pin connected to the Register clock / latch pin of 7-segment display #define DIO_PIN 5 // The Arduino Nano 33 IoT pin connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); int numbers[] = {0, 42, 1234, -5, -123, 9999}; int numCount = 6; int currentIndex = 0; bool showZeroPad = false; unsigned long lastChange = 0; void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Integer Example"); } void loop() { display.loop(); // Must be called frequently to refresh the display if (millis() - lastChange >= 2000) { lastChange = millis(); if (!showZeroPad) { display.print(numbers[currentIndex]); Serial.print("Displaying: "); Serial.println(numbers[currentIndex]); currentIndex++; if (currentIndex >= numCount) { currentIndex = 0; showZeroPad = true; } } else { display.print(42, true); // Shows "0042" Serial.println("Displaying: 0042 (zero-padded)"); showZeroPad = false; } } }

Give It a Try

  • Wire the display to the Nano 33 IoT as shown above.
  • Connect the Nano 33 IoT to your computer with a Micro-B USB cable.
  • In Arduino IDE, select the board and port, paste the code, and press Upload.
  • Open the Serial Monitor to see what happens.

The display runs through 0, 42, 1234, -5, -123, 9999, then 0042 (zero-padded).

API Essentials

Method Role Usage Example
print(int) Display an integer display.print(1234)
print(int, true) Integer with leading zeros display.print(42, true)
loop() Keep display refreshed display.loop()

Discover - Display Floats

Shows floats with auto and fixed decimal places.

/* * This Arduino Nano 33 IoT code was developed by newbiely.com * * This Arduino Nano 33 IoT code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-iot/arduino-nano-33-iot-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN 7 // The Arduino Nano 33 IoT pin connected to the Serial clock pin of 7-segment display #define RCLK_PIN 6 // The Arduino Nano 33 IoT pin connected to the Register clock / latch pin of 7-segment display #define DIO_PIN 5 // The Arduino Nano 33 IoT pin connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Float Example"); } void loop() { // Auto decimal placement display.print(1.5); // Shows " 1.5" Serial.println("Auto decimal: 1.5"); display.delay(2000); display.print(12.34); // Shows "12.34" Serial.println("Auto decimal: 12.34"); display.delay(2000); display.print(3.141); // Shows "3.141" Serial.println("Auto decimal: 3.141"); display.delay(2000); display.print(-1.2); // Shows "-1.20" Serial.println("Auto decimal: -1.20"); display.delay(2000); display.print(0.5); // Shows " 0.5" Serial.println("Auto decimal: 0.5"); display.delay(2000); // Fixed decimal places display.print(23.5, 1); // 1 decimal place: shows "23.5" Serial.println("1 decimal place: 23.5"); display.delay(2000); display.print(1.5, 2); // 2 decimal places: shows "1.50" Serial.println("2 decimal places: 1.50"); display.delay(2000); // Zero-padded display.print(1.5, 2, true); // Shows "01.50" Serial.println("2 decimal places, zero-padded: 01.50"); display.delay(2000); }

Give It a Try

  • Upload the sketch and open the Serial Monitor.

Cycles through auto-decimal floats, then 1 and 2 fixed decimal places, and zero-padded output.

Discover - Text and Temperature

Displays text strings, degree symbols, and temperature readings.

/* * This Arduino Nano 33 IoT code was developed by newbiely.com * * This Arduino Nano 33 IoT code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-iot/arduino-nano-33-iot-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN 7 // The Arduino Nano 33 IoT pin connected to the Serial clock pin of 7-segment display #define RCLK_PIN 6 // The Arduino Nano 33 IoT pin connected to the Register clock / latch pin of 7-segment display #define DIO_PIN 5 // The Arduino Nano 33 IoT pin connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); const char* texts[] = {"HELP", "Hi", "COOL", "done"}; int textCount = 4; int currentIndex = 0; int phase = 0; unsigned long lastChange = 0; void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Text and Degree Example"); } void loop() { display.loop(); // Must be called frequently to refresh the display if (millis() - lastChange >= 2000) { lastChange = millis(); if (phase == 0) { // Display text strings display.print(texts[currentIndex]); Serial.print("Text: "); Serial.println(texts[currentIndex]); currentIndex++; if (currentIndex >= textCount) { currentIndex = 0; phase = 1; } } else if (phase == 1) { // Display temperature 25 degrees C display.printTemperature(25, 'C'); Serial.println("Temperature: 25 C"); phase = 2; } else if (phase == 2) { // Display temperature 72 degrees F display.printTemperature(72, 'F'); Serial.println("Temperature: 72 F"); phase = 3; } else if (phase == 3) { // Display degree symbol using string with DEGREE_CHAR constant char degStr[5]; degStr[0] = '2'; degStr[1] = '5'; degStr[2] = DEGREE_CHAR; degStr[3] = 'C'; degStr[4] = '\0'; display.print(degStr); Serial.println("String with degree: 25 deg C"); phase = 4; } else { // Display string with dots display.print("1.2.3.4"); Serial.println("Dots: 1.2.3.4"); phase = 0; } } }

Give It a Try

  • Upload the sketch and open the Serial Monitor.

Shows "HELP", "Hi", "COOL", "done", then temperatures and inline dots.

Discover - Time Display

Clock-style HH.MM with a blinking separator dot.

/* * This Arduino Nano 33 IoT code was developed by newbiely.com * * This Arduino Nano 33 IoT code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-iot/arduino-nano-33-iot-74hc595-4-digit-7-segment-display */ #include <DIYables_4Digit7Segment_74HC595.h> // Pin configuration - change these to match your wiring #define SCLK_PIN 7 // The Arduino Nano 33 IoT pin connected to the Serial clock pin of 7-segment display #define RCLK_PIN 6 // The Arduino Nano 33 IoT pin connected to the Register clock / latch pin of 7-segment display #define DIO_PIN 5 // The Arduino Nano 33 IoT pin connected to the Data (DS) pin of 7-segment display DIYables_4Digit7Segment_74HC595 display(SCLK_PIN, RCLK_PIN, DIO_PIN); int hours = 12; int minutes = 30; bool colonOn = true; unsigned long lastToggle = 0; void setup() { Serial.begin(9600); display.begin(); Serial.println("4-Digit 7-Segment 74HC595 - Time Example"); Serial.println("Displaying 12:30 with blinking dot separator"); } void loop() { display.loop(); // Must be called frequently to refresh the display if (millis() - lastToggle >= 500) { lastToggle = millis(); display.printTime(hours, minutes, colonOn); colonOn = !colonOn; // Toggle dot separator every 500ms for blinking effect } }

Give It a Try

  • Upload the sketch and open the Serial Monitor.

Displays 12.30 with the dot blinking every half second.

Troubleshoot

  • Display stays blank -- Check VCC and GND wiring. Verify SCLK, RCLK, DIO match your code. Confirm begin() and display.loop() are in place.
  • Wrong characters -- Default is common anode. For common cathode, use DIYables_4Digit7Segment_74HC595 display(7, 6, 5, false).
  • Flickering -- Replace any delay() calls with display.delay().
  • Board not recognized -- Make sure you have the Arduino SAMD Boards core installed via the Boards Manager.

Platform Support

Built on Arduino standard APIs - runs on every Arduino-compatible platform (architectures=*).

※ OUR MESSAGES

  • As freelancers, We are AVAILABLE for HIRE. See how to outsource your project to us
  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!