I have this sample code:

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#define MAX_DEVICES 4
#define CLK_PIN   11
#define DATA_PIN  12
#define CS_PIN    10


void setup(void) {

void loop(void) {

And this is how it lights up the display:

enter image description here

I presume that the code displays text incorrectly, because the display manufacturer has connected individual 8x8 displays "differently than any library expects" (i.e. in red I have annotated the column addresses for my display, while with green I have annotated what they would have to be for this library to show text correctly).

I have two questions:

  1. Is there any good Arduino graphics library that would allow me to fix from software the addressing issue specific to my display?
  2. Since in the future I plan to make a 16x64 display out of 4 of these, then is there a library capable of doing that as well (i.e. have vertical font size of 12-16 pixels)?
  • No software will work properly when hardware doesn't. Dec 3, 2017 at 20:26
  • @IgnacioVazquez-Abrams I imagine that if there was graphics library that would allow me to render pixels in memory buffer instead of hardware directly, then I could compensate this hardware bug by using LedControl library and calling something like setColumn((7-addr&0x7)+addr&252,value). So is there a library that allows to render pixlels in memory buffer? Dec 3, 2017 at 20:35
  • This may help. It's hard to say if you have bad hardware or a bad library.
    – Nick Gammon
    Jan 3, 2018 at 6:11

2 Answers 2


The issue is minor. It looks like the library was designed for a slightly different matrix display / wiring.

Take a look at the library and it likely maps the input buffer to segment / dot-matrix information. Play with that.

The author did 99% of the work for you. You just need to finish the last 1%.

  • You mean to change the code in library itself? This somewhat puts maintenance burden on me to share a fork of patched Parola library with my code until I get these Parola changes upstreamed and downstream (ie. Arduino Web IDE) picks them up. So I would prefer to use a library that can deal with this issue out of the box, if there is one. Dec 3, 2017 at 21:01
  • 2
    the solution is really simple: swap bit orders. so you just need to write a function that swaps bit 7 <-> bit 0, bit 6 <-> bit 1, bit 5 <-> bit 2, bit 4 <-> bit 3. very easy to do.
    – dannyf
    Dec 4, 2017 at 1:55

I experienced the same problem. This is a hardware design problem. It is probably why these things were so cheep on EBAY.

These things shift 1 bit at a time in a serpentine pattern. They were wired wrong. They should have been wired to display bits

1-8 in col 1, 
9-16 in col 2,
17-24 in col 3,
25-32 in col 4,
33-40 in col 5,
41-48 in col 6,
49-56 in col 7,
57-64 in col 8.

however they were wired to have

1-8 in col 8, 
9-16 in col 7,
17-24 in col 6,
25-32 in col 5,
33-40 in col 4,
41-48 in col 3,
49-56 in col 2,
57-64 in col 1.

This could be fixed in software with some slight problems. The chips they used are basically shift registers. But they don't have the ability to blank the screen. You could use some timing tricks to paint the entire display then pause then paint the entire display again. This is the only way I see that you could achieve motion. You would experience a quick blur of motion between each movement. Generally undesirable.

No software will work properly when hardware doesn't. – Ignacio Vazquez-Abrams Dec 3, 2017 at 20:26


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.