I am planning to build a clock / thermometer / info display. I have ordered 10 pieces of 8x8 LED matrixes from ebay (http://www.ebay.co.uk/itm/331064583297). As this is not a pre-built one I have got to design some sort of circuit which will be able to do the trick.

  • The commercial ones work by segments, each 8x8 is one segment and you has to shift the code though each segment to get to the last one. (I would rather go this way as this requires more components.)
  • My idea is to make it one big Matrix, not 8 smaller one. A TLC5940 or two 74hc595 would be able to control the lines and i would be able to controll this way the colls as well. (2 TLC5940 or 4 74hc595). (Or 5 74hc595-s and make it 16x40)

So I think I have got this part figured (maybe not share your ideas), but how am I going to display text on these pixels? How am I going to produce the "image" (the array), which should be shifted out? (Not to mention running text, animations, etc..) I am not quite sure how this is going to work.

Oh and the Arduino can be any type, I prefer the MEGA2560 so we don't have to worry about the program size. And I will be able to hook up my RTC, Ethernet Module, Temp sensors, buttons, etc...

Every bit of info is a plus on this. The displays will arrive in 3-4 weeks so it would be nice to have this figured by the time they arrive.

  • \$\begingroup\$ This is way too general. Get a pen and paper and draw a schematic of 16x32 matrix and ten 8x8 matrices and figure out which wire goes where. Then get a another paper (with grid), draw the desired image, break it up to 1x8 strips and express them as 8-bit numbers. \$\endgroup\$
    – venny
    Sep 21, 2014 at 21:48
  • \$\begingroup\$ Well, yeah wiring this up was not the problem, more likely how and what to display on it. But thanks! :) \$\endgroup\$
    – Zoszko
    Sep 22, 2014 at 12:14
  • \$\begingroup\$ My new MAX7221s and 7219s arrived, I have tried to use the library from the Arduino.cc nojoy. :( \$\endgroup\$
    – Zoszko
    Nov 18, 2014 at 12:42

1 Answer 1


You have a few different layers here:

  • Hardware (actual electrical connections, and chip selections)
  • Display Driver software
  • Text/Graphics Rendering software

I recommend solving these problems individually.

On the hardware side, you have to find a datasheet that gives you the pinout for the modules (it doesn't appear included in the listing, and until you know how the LEDs connect to the pins, trying to choose a driver chip is a waste of time)

For the display driver, you want something like: display_pixel_draw(x, y, on_or_off)

For text rendering, your best bet would be to look for some open-source, monospaced console fonts. Then you represent a character with something like this:

struct display_character{
    boolean active;
    uint16_t x, y;
    uint8_t bitmap[8];  //< 8 * 8-bits == 8x8 display

If you wanted to make them all scroll off the right edge, you'd do something like

static displayed_characters[MAX_DISPLAY_CHARACTERS];

#define SCROLL_DELAY_MS 50

// some init code for your characters

    for(uint16_t i = 0; i < MAX_DISPLAY_CHARACTERS; i++){

        // Make the character move right
        displayed_characters[i].x += SCROLL_X_INCREMENT;

        // Pass a pointer to the character to the render function

        // This function will mark the character as !active if it scrolled
        // off the display (meaning you can re-use it for something else)


I leave writing these functions to you.

  • \$\begingroup\$ Hello, The way you have mentioned (display_pixel_draw(x, y, on_or_off) is how led cubes work, this is what I was thinking too... I am still confused about the overall graphics. Ok I know how I am going to shift out the grid (16x40) but how do I get the array of bits? Correct me if I am wrong, but this should work like render the grid -> shift out -> repeat. EDIT: The 8x8 matrix works like 8 row 8 colls like any keypad... \$\endgroup\$
    – Zoszko
    Sep 22, 2014 at 12:12
  • \$\begingroup\$ You won't have an array of bits. You'll use a bitmap. \$\endgroup\$
    – user45605
    Sep 22, 2014 at 14:52
  • \$\begingroup\$ Ah so i will have 8x8 spaces to display something there? SO we are going to break the 16x40 display onto 10 places where I can put a bitmap? If so how am I going to shift this to the display? \$\endgroup\$
    – Zoszko
    Sep 22, 2014 at 17:45
  • \$\begingroup\$ You can't answer that without the pinout for the LED module (it's like asking how you would carpet a house without a floor plan). Further, if you read what I wrote, you'll see that 8x8 is to frame a character. This is arbitrary. You're not limited to 10 fixed positons. \$\endgroup\$
    – user45605
    Sep 22, 2014 at 18:21
  • \$\begingroup\$ A little update: The matrices are here, I have wired one of them according to the tutorial on the Arduino website with a MAX7221 and I have used the example code. Every single led was on, so basically it did nothing. I will play around the commands, hopefully it's in some sort of test state. \$\endgroup\$
    – Zoszko
    Oct 24, 2014 at 12:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.