LED Scrolling Display

A light-dependent resistor (LDR) whose resistance is inversely proportional to the intensity of light is often used as a sensor in electronic projects that involve the use of light. This project uses an LDR to control the speed of a DC motor. --


Most outdoor LED displays and some indoor LED displays are built around individually mounted LEDs. Presented here is a LED scrolling display that uses 64 LEDS to display alphabets and numbers. A cluster of red, green and blue diodes is driven together to form a full-colour display.

In a dot-matrix LED display, the LEDs are wired together in rows and columns to minimise the number of pins required to drive them. For example, an 8×8 matrix of LEDs, shown in Fig. 1, would need 64 I/O pins—one for each LED pixel. By wiring all 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.

Fig. 1: Structure of an 8x8 LED dot-matrix display
Fig. 1: Structure of an 8×8 LED dot-matrix display

Each LED is addressed by its row and column number. In Fig. 1, if R4 is pulled high and C3 is pulled low, the LED in the fourth row and third column will turn on. Alphabets and numerals can be displayed by fast scanning of either rows or columns. In this project, column scanning has been used.

Fig. 2: 5×7 array of LEDs
Fig. 2: 5×7 array of LEDs

Working of a dot-matrix display

Fig. 2 shows which LEDs in a 5×7 matrix of LEDs are to be turned on to display the English alphabet A. The seven rows and five columns of the array are controlled through a microcontroller.

If we want to display alphabet A, we will first select column C1 (which means C1 is pulled low in this case) and deselect other columns by blocking their ground paths (one way of doing that is by pulling C2 through C5 pins to logic high). Now, the first column is active, and you need to turn on the LEDs in rows R2 through R7 of this column, which can be done by applying forward-bias voltages to these rows.

Fig. 3: Power supply and controller circuit
Fig. 3: LED Scrolling Display: Power supply and controller circuit

Next, select column C2 (and deselect all other columns) and apply forward-bias voltages to resistors R1 and R5, and similarly for columns C3 and C4. Then, activate column C5 by pulling it down and deselect other columns, and apply forward-bias voltages to LEDs in rows R2 through R7.

By repeating these steps quickly (>100 times per second), and turning on the respective LEDs in each row of that column, the persistence of vision comes into play and we perceive the displayed image of the alphabet A as still.

You must have noticed that across each row one pin is sourcing the current for only one LED at a time, but a column pin may have to sink the currents from more than one LED. For example, column C1 should be able to sink the current from six LEDs while displaying alphabet A. A microcontroller has low sourcing as well as sinking capabilities. To obviate this limitation, external transistor arrays or buffers are used. In this project, pnp transistor BC558 (T1-T8) has been used for this purpose. In the circuit an 8×8 dot-matrix has been used.

Brief description of the ICs used

IC1 is a 7805, 5V regulator IC, which provides the 5V output voltage for driving the circuit around microcontroller IC2. AT89C52 (IC2) is a low-power, high-performance CMOS 8-bit microcontroller. It has 8k bytes of Flash ROM, 256 bytes of RAM, 32 I/O lines, three 16-bit timers/counters, a six-vector two-level interrupt, a full duplex serial port, an on-chip oscillator and on-clock circuitry.

Fig. 4: Display unit
Fig. 4: LED Scrolling Display: Display unit

266_PartsCD4094 (IC3-IC5) is an 8-stage serial shift register, having a storage latch associated with each stage for stroking data from the serial input to parallel buffered 3-state outputs. The parallel outputs may be connected directly to common bus lines. Data is shifted on positive clock transition. Data in each shift register stage is transferred to the storage register when the strobe input is high. Data in the storage register appears at the outputs, whenever the Output-Enable signal is high. Two serial outputs are available for cascading a number of CD4094 devices.

Data is available at the Q serial output terminals on positive clock edges to allow for high-speed operation in cascaded system. The same serial information, available at the Q terminals on the next negative clock edge, provides a means for cascading CD4094 devices when the clock rise time is slow.

ULN2803 (IC6–IC8) is an octal high-voltage, high-current Darlington transistor array. The eight npn Darlington connected transistors (T1-T8) are ideally suited for interfacing between low-logic-level digital circuitry and the higher current/voltage requirements of lamps and relays. The device features open-collector outputs and freewheeling clamp diodes for transient suppression. It is designed to be compatible with standard TTL families of Ics.

LED scrolling display circuit and working

The circuit diagram is divided here into two parts. The first part has a power supply and controller circuit as shown in Fig. 3. The display unit is in the second part as shown in Fig. 4.

The power supply circuit is built around a step-down transformer, bridge rectifier and 5V regulator. The configuration is conventional. The circuit provides regulated 5V for operation of the circuit.

Fig. 5: An actual-size PCB layout for the power supply and microcontroller unit
Fig. 5: A PCB layout for the power supply and microcontroller unit
Fig. 6: Component layout of power supply and microcontroller unit
Fig. 6: Component layout of power supply and microcontroller unit

Microcontroller AT89C52 provides outputs to control the logic levels for the eight rows R0-R7 through port A (P0.0-P0.7). RNW1 is a network resistor, which acts as a pull-up resistor for port 0. An array of eight pnp BC558 transistors (T1-T8) working as current drivers takes care of the current required for LEDs of the dot-matrix; the microcontroller has low sourcing capabilities. The reset arrangement is made at pin 9 of the microcontroller with the help of capacitor C3, resistor R2 and switch S1.

Fig. 7: Track layout of the bottom layer of display unit
Fig. 7: Track layout of the bottom layer of display unit
Fig. 8: Track layout of the top layer of display unit
Fig. 8: Track layout of the top layer of display unit


  1. Plz send new codes
    in embaded c program for scrolling led display
    microcontroller at89c52
    and plz din’t send old codes those does not open

  2. This code is not suitable for this schematic diagram of fig. 3:. this code is working with your attached proteus project. If I use UNL2803 in proteus it is not working because its NPN type and need +ve volt to its input but Iam getting -ve form shift register CD4094 . And also getting +ve from P0.

    Please provide a new code for the schematic diagram of fig. 3:.


  3. This code is working for 3 nos 8×8 dot matrix scrolling display . I have modified the hardware by increasing another 3 nos of dot matrix (total 6 nos) by adding 3 nos of shift register in series. And I think there is no error in hardware but unfortunately I have no idea to modify .asm code to fit for the new 6nos 8×8 dot matrix display.

    The display is working but like a parallel display (like duplicate copy). If I display “WELCOME” , it is displaying “W E L W E L” instead ” W E L C O M E” . It start from both 6th and 3rd matrix and not merging all over the matrix .

    Scrolling from 6th to 4th and another scrolling from 3rd to 1st matrix

    please help me to modify the code.

  4. I need all parts pls give the rate of packade excluding led matrix i make it self.can you also provide the modification of programme and ckt also for 6(8*8)matrix


Please enter your comment!
Please enter your name here