Using 4 max7219 for four 8X8 matrix from a 20m2


Senior Member
Hello everyone
I bought one of these 16 8X8 matrix s that use's 16 max7219 driver chips
Since I am a rookie I only made code to display 4 of the matrix s
after reading westaust55 forums and many others I was able to make a simple code
So if a person has four matrix s and wants to test them out this code should work
and if you want to add/delete more matrix's then it shouldn't be hard to add/minus the code
Maybe after I play around with it more I can try to make it more compact

I know its simple code and takes about 704 bytes of memory

your friends friend from north dakota
View attachment using four 8X8 matrix max7219 displays simple code.bas


Senior Member
I was coding some more
I managed to get all the 16 8X8 matrix displays working
whats funny since my code isn't "professional" and if you ignore the setfreq M32 it takes like 3 minutes to update the displays
but with setfreq m32 added it can update the display to about 22 seconds but i love it because it works for me
I still am super proud of the picaxe 20m2 even if I have to bootleg SHIFTOUT it still is my friend

If you want a true 16 8X8 matrix this is in NO shape or form or way to go (because of speed and my input in the code)
I just put this project here to in case someone wanted a simple code to make it light up

your friend



Senior Member
Have you the schématic please?
I cannot help with the specifics of that but the MAX7219 has three input signals DIN, CLK and LOAD, plus a DOUT output.

I would guess the MAX7219 are daisy-chained while CLK and LOAD are paralleled up. The PICAXE clocks out command data for all MAX7219's and then pulses LOAD.

Any output pins could be used for that but it would be appropriate to connect the DIN and CLK to the HSPIOUT and HSPICLK pins for fastest data transfer.

If you can point to a datasheet for a particular board you are thinking of using, members will be able to help determine what a suitable schematic would be.


if you ignore the setfreq M32 it takes like 3 minutes to update the displays
but with setfreq m32 added it can update the display to about 22 seconds but i love it because it works for me
If you wish to update the display faster you could try a drop in PICAXE 20X2.

Then the clock frequency can be increased to 64 MHz - double the speed.
Next The X1/X2 inbuilt SHIFTOUT command is faster - by around a factor of 4 from recollect of some tests I did years ago
for bit-bang versus inbuilt SHIFTOUT versus i2c.
i2c was the fastest for a project at that time where I decided to go with i2c I/O Expander chips.


Senior Member
Thanks Westaust55
Always cool to learn about more speed from the picaxe
although I haven't tried your suggestions and will someday but I also thought about using a
40X2 with a faster clock and see if I can make some sort of scrolling display
since I cut all the 8X8 displays to line up in a row (it came with all of them on one board)

@duschmualle sorry I don't have one yet ...and the late reply but if you follow
hippys post ...and use a good power supply like 5volt 1.5 amp or greater should work great
I used a low power supply like .500 amp and the first four 8X8's worked but the rest of the 12 went delusional!
I did finally get it work okay with the small power supply with brightness on very low and alot of caps. (because it was the only one i had at the time)

Jeremy Harris

Senior Member
Interesting to see how you get on with the scrolling message using these modules. I'm embarking on an attempt to make a display to fit to the rear window of my car to display a fixed number of preset messages, using these same modules but driven by a 20X2, in order to increase the speed.

My goal is to make a simple unit with perhaps a handful of messages that can be triggered to display for a fixed time when a dedicated message button on a very simple dashboard mounted remote is pressed. The messages will just be the sort of common things I would find useful, like saying "thanks!" to someone that has stopped to allow me out of a junction, "Sorry" if I've accidentally been rude on the road to someone, or "Please overtake" if it's clear that someone behind me wishes to get past but can't see if the road ahead is clear. I can think of a few uncomplimentary messages, too, but will try and refrain from including those!

My idea was prompted by a combination of reading about your experiments with these modules, and this news item from CES2018: I'm not convinced that the "Car Wink" "emojis" are a good idea, as I believe they may well confuse drivers behind rather that clarify things. I reckon a simple text message will be a lot more user friendly. I've ordered a stack of the cheap 32 x 8 modules (really just 4 off 8 x 8 modules in a row) and will see how well I can get them to work with a faster Picaxe (hope the chips aren't fakes!).


Senior Member
@ Jeremy
my two cents is a little late but seems in order to "scroll messages" a person would need a picaxe chip with a external clock for higher speed
unless you live in my town where the car behind you stays behind you for 20 minutes +/- for the display to update :) (joking)
I am working on a project using a 40X2 ...thinking of clocking it to 40mhz see what it does ...but waiting to order to my clock :)
if you can do it with a 20X2 my hats off to you tho


Senior Member
Scrolling messages should be fairly easy. Each matrix is 8x8, four in a row is 32x8, so all you need to do is put out 32 bytes to set all the displays. Sequentially put out sets of 32 different bytes and you have an animated display. I would have thought that should be achievable for message scrolling using any PICAXE.

The challenge comes in how one creates the 32 bytes to put out, but that shouldn't be too hard either. It is a bit involved to describe but should be a straight forward process.

The basic idea I would use is to keep a 'counter' to what's in the first column of the display. If characters are fixed width, 5 pixels plus a blank, 6 in all sequencing is 1:1, 1st char:1st column of character, 1:2, 1:3, 1:4, 1:5, 1:6 then 2:1, 2:2 etc.

You can 'increment' that to scroll a column at a time. Then it's just a question of mapping the counter to those 32 bytes. Something like ...

  startFrom = 1:1
  displayCol = startFrom
  For n = 1 To 32
     Send GetCol(displayCol,"Hello World")


Senior Member
thanks hippy would be awesome to get a 20X2 to work for scrolling ...when I have time I will check your sample out