How to Interface a Dot Matrix Display with Arduino: Code & Circuit Diagram

A dot matrix display is a matrix of LEDs, you might have seen on Railway Platforms shops, etc. understand how to interface a Dot Matrix Display with arduino.

A red light with multiple dots, representing the letter M, is displayed on a Dot Matrix Display table.

Displays play a crucial role in communicating information, in any institute, organization, or public. The information may be related to current situations, updates, or can be advertisements about the products. People are currently adapting to the idea of the world having information at their fingertips. A Dot-Matrix Display is made up of LEDs arranged or wired in the form of a matrix. Symbols, Graphics, Characters, Alphabets, and Numbers can be displayed with a Dot Matrix Display.

Understanding Dot Matrix Displays

A Dot-Matrix Display is made up of light-emitting diodes arranged or wired in the form of a matrix. Symbols, Graphics, Characters, Alphabets, and Numbers are displayed in applications by using Dot-Matrix Display and can be displayed together in constant as well as scrolling motion. Variable dimensions in which Dot Matrix Displays are manufactured include 5x7, 8x8, 16x8, 128x16, 128x32, and 128x64, where the first number shows LEDs in rows and the second number shows LEDs in columns, respectively. Displays are available in different colours such as Red, Green, Yellow, Blue, Orange, White, and multicolour.

In DMD, If we powered different LEDs separately we need different I/O pins physically which is not reliable In an 8×8 matrix, the LEDs would need 64 I/O pins, one for each LED pixel. to minimize the number of pins required to drive them many LEDs are wired together in rows and columns therefore By wiring all the anodes together in rows (R1 through R8), and cathodes in columns (C1 through C8), the required number of I/O pins is reduced to 16. Each LED is addressed by its row and column number. You may manufacture it as the common cathode or common anode. The matrix pattern is made either in row anode-column cathode or row cathode-column anode pattern. In the row anode-column cathode pattern, the entire row is anode while all columns serve as cathode which is shown below and it is vice-versa in the row cathode-column anode pattern. If we want to display any character or number then according to that number we have to pull down or high the pins of the matrix for example, we have to enable row and column pins as per the table given below to display a character M where the on LED is denoted by a red dot.

Displaying the Letter "M" on a Dot Matrix Display

Chart for displaying character M on Dot matrix Display
Chart for displaying character M on Dot matrix Display

Creating the System Design and Circuit Diagram

The following fig shows the interfacing diagram of Dot Matrix Display With Arduino.

Circuit diagram of dot matrix display interfaced with Arduino
Circuit diagram of dot matrix display interfaced with Arduino

Above fig shows hardware interconnection between Arduino nano (ATMEGA328P), HUB(pins) of Dot matrix display(DMD 16*96)

Pin Configuration of the Dot Matrix Display (DMD)

  • Pin no. 1: It is a (N0E) enable pin used to enable our main element of the project which is a dot matrix display
  • Pin no. 2: Digital communication pin A is connected to pin no 9 which is the D6 pin that is the digital out pin of Arduino
  • Pin no. 3, 5, 7, 9, 11, 13, 15: are connected to pin no. 4 which is the ground pin of the Arduino
  • Pin no. 4: digital communication pin B is connected to pin no 10 which is a D7 pin which is also a digital out pin
  • Pin no. 6: Data line C for communication
  • Pin no. 8: this is the CLK pin connected to pin no 16 which is the D13 pin of the Arduino
  • Pin no. 10: This is a system clock pin connected to pin 11 of Arduino, which is the D8 pin
  • Pin no. 12: which is a system ready check is connected to pin no 14 of the Arduino which is a D14 pin

Scrolling Text on a Dot Matrix Display (DMD)

The coding part

c
#include <SPI.h>
#include <DMD.h>
#include <TimerOne.h>
#include "SystemFont5x7.h"
#include "Arial_Black_16_ISO_8859_1.h"

#define DISPLAYS_ACROSS 3
#define DISPLAYS_DOWN 1

DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

void ScanDMD() {
  dmd.scanDisplayBySPI();
}

void setup() {
  Timer1.initialize( 3000 );
  Timer1.attachInterrupt( ScanDMD );
  dmd.clearScreen( true );
  Serial.begin(115200);
}

void loop() {
  dmd.clearScreen( true );
  dmd.selectFont(Arial_Black_16_ISO_8859_1);
  const char *MSG = "WELCOME TO VED ELECTRONICS";
  dmd.drawMarquee(MSG, strlen(MSG), (30 * DISPLAYS_ACROSS) - 1, 0);
  long start = millis();
  long timer = start;

  while(1) {
    if ((timer + 39.9) < millis()) {
      dmd.stepMarquee(-1, 0);
      timer = millis();
    }
  }
}

Hardware Power Requirements & Best Practices

Dot Matrix Displays (like standard P10 32x16 LED modules) contain hundreds of LEDs:

  • Never power the DMD directly from the Arduino's 5V pin: When full columns light up, a single P10 matrix can draw up to 2A - 3A at peak brightness. The Arduino onboard linear regulator can only supply ~400mA-500mA. Drawing more will cause immediate voltage brownouts, MCU reboots, or damage to your development board.
  • External 5V Power Supply: Always use an external regulated 5V (3A to 5A) DC power adapter connected directly to the display power terminals.
  • Common Ground: Ensure the external power supply GND is connected to the Arduino GND pin so signal logic levels remain aligned.

Troubleshooting Common DMD Issues

IssueProbable CauseSolution
Arduino keeps rebootingExcessive current draw on 5V pinConnect an external 5V 3A+ power supply directly to the display VCC and GND.
Display is scrambled or dimLoose ribbon cable / SPI timing conflictCheck the 16-pin ribbon cable crimping; verify pins D6, D7, D8, D9, and D13 connections.
TimerOne compile errorArchitecture incompatibilityEnsure you are using AVR boards (like Arduino UNO or Nano) or use compatible DMD ESP32 fork libraries.

Conclusion

The prototype of the Arduino-based display toolkit was effectively designed. This prototype has to be facilities to be integrated with the display board it can solve the problem of instant information transfer on the campus, and it is the best replacement for regular flex boards, In the future, we can add an IR sensor to detect human motion where the display is mounted and the output of that sensor given to primary of the relay utilizing IR sensor detects human around display then its output is given to display and the NO of the relay get closed, and the display will display our message for some programmed time if there is no action around display then it will undergo standby mode and reduced power consumption.

PrevInterfacing a 16x2 LCD with 8051/8052 microcontrollerNextArduino UNO Features Explained: Shields, IDE: Nano, ESP32

photo of Vedprakash Aamale