Arduino Mega - TM1637 4-Digit 7-Segment Display

Got an Arduino Mega and want to add a numeric display to your project? The TM1637 4-digit 7-segment display module needs only two wires for data and works with any digital pin on the Mega. With the DIYables_4Digit7Segment_TM1637 library you can start writing code in minutes.

This step-by-step walkthrough covers:

The Mega brings extra I/O, more SRAM, and additional hardware serial ports - handy when your project needs to talk to sensors or other peripherals alongside the display.

Arduino Mega TM1637 4-Digit 7-Segment Display

Hardware Preparation

1×Arduino Mega
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×TM1637 4-digit 7-segment Display (colon-separated)
1×Jumper Wires
1×Recommended: Screw Terminal Block Shield for Arduino Uno/Mega
1×Recommended: Sensors/Servo Expansion Shield for Arduino Uno/Mega
1×Recommended: Breadboard Shield for Arduino Mega
1×Recommended: Enclosure for Arduino Mega

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 .

Understanding the TM1637 Display Module

The TM1637 is a dedicated LED driver that takes care of multiplexing four 7-segment digits. It communicates over a 2-wire protocol (CLK and DIO) and stores digit data in its own internal memory. That means the display keeps showing whatever you wrote to it, even if your code moves on to do other things.

What you get with this module:

  • 4 digits, each with 7 segments and a decimal point
  • A colon separator between the second and third digit
  • 8 brightness settings
  • 2-wire interface, compatible with 3.3V and 5V
  • No refresh loop required
Function Pin
CLK Clock signal
DIO Data I/O
VCC 3.3V or 5V
GND Ground

You can hook CLK and DIO to any digital pin on the Mega. The examples use pins 2 and 3.

Wiring Diagram

Wire up the TM1637 module:

  • CLK to Mega pin 9
  • DIO to Mega pin 10
  • VCC to 5V
  • GND to GND
The wiring diagram between Arduino Mega TM1637 4-Digit 7-Segment Display

This image is created using Fritzing. Click to enlarge image

Installing the Library

  1. Connect your Arduino Mega to the computer via a USB cable.
  2. Open the Arduino IDE. Pick Arduino Mega or Mega 2560 as the board and choose the correct port.
  3. Go to the Libraries panel on the left side.
  4. Search for "DIYables_4Digit7Segment_TM1637". Find the entry from DIYables.
  5. Press Install.
Arduino TM1637 4-Digit 7-Segment Display library

The library has zero external dependencies.

Code Skeleton

The bare minimum to get started:

#include <DIYables_4Digit7Segment_TM1637.h> #define CLK_PIN 9 #define DIO_PIN 10 DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { display.begin(); display.print(1234); } void loop() { }

Create the display object, call begin(), and write to the display. That is all you need to see digits light up.

Example - Display Integer Numbers

Shows various integers on the display including negative numbers and zero-padded values.

/* * This Arduino Mega code was developed by newbiely.com * * This Arduino Mega code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-mega/arduino-mega-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - Integer Example * * Displays various integer values on a 4-digit 7-segment display * with TM1637 driver, including zero-padded numbers. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 9 // The Arduino pin connected to the CLK pin of TM1637 4-digit 7-segment display #define DIO_PIN 10 // The Arduino pin connected to the DIO pin of TM1637 4-digit 7-segment display DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Integer Example"); } void loop() { // Display various integers int numbers[] = {0, 42, 1234, -5, -123, 9999}; int count = sizeof(numbers) / sizeof(numbers[0]); for (int i = 0; i < count; i++) { display.print(numbers[i]); Serial.print("Displaying: "); Serial.println(numbers[i]); delay(2000); } // Display with zero padding display.print(42, true); // Shows "0042" Serial.println("Displaying: 0042 (zero-padded)"); delay(2000); }

Steps to Upload

  • Connect the TM1637 module to the Mega as shown in the wiring diagram.
  • Plug in the USB cable.
  • Paste the code into Arduino IDE, select the board and port, and hit Upload.
  • Open the Serial Monitor (9600 baud) to watch the output.

The display cycles through 0, 42, 1234, -5, -123, 9999, and then shows "0042" with zero-padding.

API at a Glance

Method Effect Sample Call
print(int) Shows an integer on the display display.print(1234)
print(int, true) Adds leading zeros display.print(42, true)
clear() Blanks all digits display.clear()

Example - Display Text and Temperature

Shows text strings and formatted temperature with the degree symbol.

/* * This Arduino Mega code was developed by newbiely.com * * This Arduino Mega code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-mega/arduino-mega-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - TextAndDegree Example * * Displays text strings, special characters, and temperature * on a 4-digit 7-segment display with TM1637 driver. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 9 // The Arduino pin connected to the CLK pin of TM1637 4-digit 7-segment display #define DIO_PIN 10 // The Arduino pin connected to the DIO pin of TM1637 4-digit 7-segment display DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Text and Degree Example"); } void loop() { // Display text strings const char* texts[] = {"HELP", "Hi", "COOL", "done"}; for (int i = 0; i < 4; i++) { display.print(texts[i]); Serial.print("Displaying: "); Serial.println(texts[i]); delay(2000); } // Display temperature with degree symbol display.printTemperature(25, 'C'); // Shows "25°C" Serial.println("Displaying: 25 degrees C"); delay(2000); display.printTemperature(72, 'F'); // Shows "72°F" Serial.println("Displaying: 72 degrees F"); delay(2000); // Display string with degree constant char buf[5]; buf[0] = '2'; buf[1] = '5'; buf[2] = DIYables_4Digit7Segment_TM1637::DEGREE; buf[3] = 'C'; buf[4] = '\0'; display.print(buf); // Same as printTemperature(25, 'C') Serial.println("Displaying: 25 degrees C (via print)"); delay(2000); }

Steps to Upload

  • Wire the module as described above.
  • Upload and open the Serial Monitor.

The display shows "HELP", "Hi", "COOL", "done", then "25°C" and "72°F".

API at a Glance

Method Effect Sample Call
print(const char*) Shows text (up to 4 characters) display.print("HELP")
printTemperature(int, char) Shows temperature with degree/unit display.printTemperature(25, 'C')
DEGREE Degree symbol for strings display.DEGREE

Example - Display Time with Colon

Shows time in HH:MM format with the colon blinking every 500ms.

/* * This Arduino Mega code was developed by newbiely.com * * This Arduino Mega code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-mega/arduino-mega-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - Time Example * * Displays time in HH:MM format with blinking colon separator * on a 4-digit 7-segment display with TM1637 driver. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 9 // The Arduino pin connected to the CLK pin of TM1637 4-digit 7-segment display #define DIO_PIN 10 // The Arduino pin connected to the DIO pin of TM1637 4-digit 7-segment display DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); int hours = 12; int minutes = 30; bool colonOn = true; void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Time Example"); Serial.println("Displaying 12:30 with blinking colon"); } void loop() { display.printTime(hours, minutes, colonOn); delay(500); // Toggle colon every 500ms for blinking effect colonOn = !colonOn; }

Steps to Upload

  • Wire the module and upload the sketch.
  • The display shows "12:30" with a blinking colon.

API at a Glance

Method Effect Sample Call
printTime(int, int) Displays HHMM with colon display.printTime(12, 30)
printTime(int, int, bool) Controls colon on/off display.printTime(12, 30, false)

Example - Individual Digit Control

Sets each digit independently with numbers, characters, and colon.

/* * This Arduino Mega code was developed by newbiely.com * * This Arduino Mega code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-mega/arduino-mega-tm1637-4-digit-7-segment-display */ /* * DIYables_4Digit7Segment_TM1637 - IndividualDigits Example * * Sets individual digits, characters, and colon on a 4-digit * 7-segment display with TM1637 driver. * * Tutorial: https://diyables.io/products/4-digit-7-segment-display-led-tm1637-with-colon * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables Nano R3: https://diyables.io/nano-board * - DIYables ESP32 Board: https://diyables.io/esp32-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_4Digit7Segment_TM1637.h> // Pin configuration - change to match your wiring #define CLK_PIN 9 // The Arduino pin connected to the CLK pin of TM1637 4-digit 7-segment display #define DIO_PIN 10 // The Arduino pin connected to the DIO pin of TM1637 4-digit 7-segment display DIYables_4Digit7Segment_TM1637 display(CLK_PIN, DIO_PIN); void setup() { Serial.begin(9600); display.begin(); Serial.println("TM1637 Individual Digits Example"); } void loop() { // Set individual numbers on each digit position display.clear(); display.setNumber(0, 1); display.setNumber(1, 2); display.setNumber(2, 3); display.setNumber(3, 4); Serial.println("Displaying: 1234"); delay(2000); // Turn colon on display.setColon(true); Serial.println("Displaying: 12:34"); delay(2000); // Turn colon off display.setColon(false); Serial.println("Displaying: 1234"); delay(2000); // Set individual characters display.clear(); display.setChar(0, 'H'); display.setChar(1, 'E'); display.setChar(2, 'L'); display.setChar(3, 'P'); Serial.println("Displaying: HELP"); delay(2000); // Mix characters and numbers with colon display.clear(); display.setChar(0, 'A'); display.setNumber(1, 3); display.setChar(2, 'b'); display.setNumber(3, 7); display.setColon(true); Serial.println("Displaying: A3:b7"); delay(2000); // Blinking colon effect display.clear(); display.setNumber(0, 1); display.setNumber(1, 2); display.setNumber(2, 3); display.setNumber(3, 0); Serial.println("Blinking colon: 12:30"); for (int i = 0; i < 5; i++) { display.setColon(true); delay(500); display.setColon(false); delay(500); } delay(1000); }

Steps to Upload

  • Upload and observe the different digit combinations.

API at a Glance

Method Effect Sample Call
setNumber(int, int) Sets a digit 0-9 at a position display.setNumber(0, 1)
setChar(int, char) Sets a character at a position display.setChar(0, 'H')
setColon(bool) Controls the colon display.setColon(true)
setSegments(int, uint8_t) Sets raw segment bits display.setSegments(0, 0x76)

Common Problems and Fixes

Symptom Likely Cause Fix
Display is blank Wrong wiring or pins Verify CLK/DIO connections match code
Wrong characters appear CLK and DIO swapped Swap the two wires
Display too dim Low brightness setting Call setBrightness(7)
Compile error Library missing Install DIYables_4Digit7Segment_TM1637 from Library Manager

Platform Support

Built entirely on Arduino standard APIs - compatible with every Arduino-supported architecture.

※ 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!