You are on page 1of 5

#include "LedControl.

h" // include the the library


// pin 9 is connected to the MAX7219 pin 1
// pin 8 is connected to the CLK pin 13
// pin 7 is connected to LOAD pin 12
LedControl lc=LedControl(9,8,7,5); // 5 matrices, 5 MAX7219s.
// Message goes here.
char msg[] = "
--- THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG
--- 40x8 LED Matrix - ATmega 328 - MAX7219 --";
int msgsize = strlen(msg);
// The character set courtesy of cosmicvoid. It is rowwise
byte Font8x5[104*8] =
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00,
0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0A, 0x0A, 0x1F, 0x0A, 0x1F, 0x0A, 0x0A, 0x00,
0x0E, 0x15, 0x05, 0x0E, 0x14, 0x15, 0x0E, 0x00,
0x13, 0x13, 0x08, 0x04, 0x02, 0x19, 0x19, 0x00,
0x06, 0x09, 0x05, 0x02, 0x15, 0x09, 0x16, 0x00,
0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x04, 0x00,
0x01, 0x02, 0x04, 0x04, 0x04, 0x02, 0x01, 0x00,
0x00, 0x0A, 0x15, 0x0E, 0x15, 0x0A, 0x00, 0x00,
0x00, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01,
0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x00,
0x0E, 0x11, 0x19, 0x15, 0x13, 0x11, 0x0E, 0x00,
0x04, 0x06, 0x04, 0x04, 0x04, 0x04, 0x0E, 0x00,
0x0E, 0x11, 0x10, 0x0C, 0x02, 0x01, 0x1F, 0x00,
0x0E, 0x11, 0x10, 0x0C, 0x10, 0x11, 0x0E, 0x00,
0x08, 0x0C, 0x0A, 0x09, 0x1F, 0x08, 0x08, 0x00,
0x1F, 0x01, 0x01, 0x0E, 0x10, 0x11, 0x0E, 0x00,
0x0C, 0x02, 0x01, 0x0F, 0x11, 0x11, 0x0E, 0x00,
0x1F, 0x10, 0x08, 0x04, 0x02, 0x02, 0x02, 0x00,
0x0E, 0x11, 0x11, 0x0E, 0x11, 0x11, 0x0E, 0x00,
0x0E, 0x11, 0x11, 0x1E, 0x10, 0x08, 0x06, 0x00,
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x01,
0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x00,
0x00, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x00, 0x00,
0x01, 0x02, 0x04, 0x08, 0x04, 0x02, 0x01, 0x00,
0x0E, 0x11, 0x10, 0x08, 0x04, 0x00, 0x04, 0x00,
0x0E, 0x11, 0x1D, 0x15, 0x0D, 0x01, 0x1E, 0x00,
0x04, 0x0A, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x00,
0x0F, 0x11, 0x11, 0x0F, 0x11, 0x11, 0x0F, 0x00,
0x0E, 0x11, 0x01, 0x01, 0x01, 0x11, 0x0E, 0x00,
0x07, 0x09, 0x11, 0x11, 0x11, 0x09, 0x07, 0x00,
0x1F, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x1F, 0x00,
0x1F, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x01, 0x00,
0x0E, 0x11, 0x01, 0x0D, 0x11, 0x19, 0x16, 0x00,
0x11, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11, 0x00,

0x07,
0x1C,
0x11,
0x01,
0x11,
0x11,
0x0E,
0x0F,
0x0E,
0x0F,
0x0E,
0x1F,
0x11,
0x11,
0x41,
0x11,
0x11,
0x1F,
0x07,
0x01,
0x07,
0x00,
0x00,
0x01,
0x00,
0x01,
0x00,
0x10,
0x00,
0x04,
0x00,
0x01,
0x01,
0x04,
0x01,
0x03,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x04,
0x02,
0x01,
0x00,
0x00,
0x1C,
0x1C,
0x1C,
0x1C,
0x1C,

0x02,
0x08,
0x09,
0x01,
0x1B,
0x13,
0x11,
0x11,
0x11,
0x11,
0x11,
0x04,
0x11,
0x11,
0x41,
0x11,
0x11,
0x10,
0x01,
0x01,
0x04,
0x04,
0x00,
0x01,
0x00,
0x01,
0x00,
0x10,
0x00,
0x0A,
0x00,
0x01,
0x00,
0x00,
0x01,
0x02,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x02,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x02,
0x02,
0x02,
0x00,
0x00,
0x2A,
0x22,
0x22,
0x22,
0x22,

0x02,
0x08,
0x05,
0x01,
0x15,
0x13,
0x11,
0x11,
0x11,
0x11,
0x01,
0x04,
0x11,
0x11,
0x41,
0x0A,
0x11,
0x08,
0x01,
0x02,
0x04,
0x0A,
0x00,
0x02,
0x06,
0x0D,
0x06,
0x16,
0x06,
0x02,
0x06,
0x0D,
0x01,
0x06,
0x09,
0x02,
0x15,
0x0D,
0x06,
0x0D,
0x16,
0x0D,
0x0E,
0x07,
0x11,
0x11,
0x11,
0x11,
0x09,
0x0F,
0x02,
0x02,
0x02,
0x00,
0x00,
0x49,
0x51,
0x41,
0x41,
0x41,

0x02,
0x08,
0x03,
0x01,
0x15,
0x15,
0x11,
0x0F,
0x11,
0x0F,
0x0E,
0x04,
0x11,
0x11,
0x49,
0x04,
0x0A,
0x04,
0x01,
0x04,
0x04,
0x11,
0x00,
0x00,
0x08,
0x13,
0x09,
0x19,
0x09,
0x07,
0x09,
0x13,
0x01,
0x04,
0x05,
0x02,
0x2B,
0x13,
0x09,
0x13,
0x19,
0x13,
0x01,
0x02,
0x11,
0x11,
0x11,
0x0A,
0x09,
0x08,
0x01,
0x02,
0x04,
0x00,
0x00,
0x49,
0x49,
0x79,
0x49,
0x49,

0x02,
0x08,
0x05,
0x01,
0x11,
0x19,
0x11,
0x01,
0x15,
0x05,
0x10,
0x04,
0x11,
0x0A,
0x2A,
0x0A,
0x04,
0x02,
0x01,
0x08,
0x04,
0x00,
0x00,
0x00,
0x0E,
0x11,
0x01,
0x11,
0x07,
0x02,
0x09,
0x11,
0x01,
0x04,
0x03,
0x02,
0x29,
0x11,
0x09,
0x13,
0x19,
0x01,
0x06,
0x02,
0x11,
0x11,
0x15,
0x04,
0x09,
0x06,
0x02,
0x02,
0x02,
0x00,
0x00,
0x41,
0x41,
0x41,
0x51,
0x49,

0x02,
0x09,
0x09,
0x01,
0x11,
0x19,
0x11,
0x01,
0x09,
0x09,
0x11,
0x04,
0x11,
0x0A,
0x2A,
0x11,
0x04,
0x01,
0x01,
0x10,
0x04,
0x00,
0x00,
0x00,
0x09,
0x13,
0x09,
0x19,
0x01,
0x02,
0x06,
0x11,
0x01,
0x04,
0x05,
0x02,
0x29,
0x11,
0x09,
0x0D,
0x16,
0x01,
0x08,
0x02,
0x19,
0x0A,
0x15,
0x0A,
0x0E,
0x01,
0x02,
0x02,
0x02,
0x00,
0x00,
0x22,
0x22,
0x22,
0x22,
0x2A,

0x07,
0x06,
0x11,
0x0F,
0x11,
0x11,
0x0E,
0x01,
0x16,
0x11,
0x0E,
0x04,
0x0E,
0x04,
0x14,
0x11,
0x04,
0x1F,
0x07,
0x10,
0x07,
0x00,
0x1F,
0x00,
0x0E,
0x0D,
0x06,
0x16,
0x0E,
0x02,
0x08,
0x11,
0x02,
0x04,
0x09,
0x02,
0x29,
0x11,
0x06,
0x01,
0x10,
0x01,
0x07,
0x04,
0x16,
0x04,
0x0A,
0x11,
0x08,
0x0F,
0x04,
0x02,
0x01,
0x00,
0x00,
0x1C,
0x1C,
0x1C,
0x1C,
0x1C,

0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x07,
0x00,
0x00,
0x03,
0x00,
0x00,
0x00,
0x00,
0x00,
0x01,
0x10,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x06,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,

0x1C, 0x22, 0x41, 0x49, 0x45, 0x22, 0x1C, 0x00,


0x1C, 0x22, 0x41, 0x4F, 0x41, 0x22, 0x1C, 0x00,
0x1C, 0x22, 0x45, 0x49, 0x41, 0x22, 0x1C, 0x00};
byte lentbl_S[104] =
{
2, 2, 3, 5, 5,
3, 3, 5, 5, 2,
5, 4, 5, 5, 5,
5, 5, 1, 2, 4,
5, 5, 5, 5, 5,
5, 3, 5, 5, 4,
5, 5, 5, 5, 5,
5, 5, 5, 3, 5,
2, 4, 5, 4, 5,
5, 2, 3, 4, 2,
5, 5, 5, 4, 3,
5, 4, 4, 3, 2,
7, 7, 7, 7, 7,
};

5,
5,
5,
4,
5,
5,
5,
3,
4,
6,
5,
3,
7,

5,
1,
5,
4,
5,
5,
5,
5,
4,
5,
5,
0,
7,

2,
5,
5,
5,
5,
5,
7,
5,
4,
4,
5,
0,
7

int curcharix = 0;
int curcharbit = 0;
int curcharixsave = 0;
int curcharbitsave = 0;
int curcharixsave2 = 0;
int curcharbitsave2 = 0;
char curchar;
void setup()
{
lc.shutdown(0,false);// turn off power saving, enables
lc.setIntensity(0,8);// sets brightness (0~15 possible
lc.clearDisplay(0);// clear screen
lc.shutdown(1,false);// turn off power saving, enables
lc.setIntensity(1,8);// sets brightness (0~15 possible
lc.clearDisplay(1);// clear screen
lc.shutdown(2,false);// turn off power saving, enables
lc.setIntensity(2,8);// sets brightness (0~15 possible
lc.clearDisplay(2);// clear screen
lc.shutdown(3,false);// turn off power saving, enables
lc.setIntensity(3,8);// sets brightness (0~15 possible
lc.clearDisplay(3);// clear screen
lc.shutdown(4,false);// turn off power saving, enables
lc.setIntensity(4,8);// sets brightness (0~15 possible
lc.clearDisplay(4);// clear screen
lc.shutdown(5,false);// turn off power saving, enables
lc.setIntensity(5,8);// sets brightness (0~15 possible
lc.clearDisplay(5);// clear screen
}
void loop()
{
int i,j,k;
while(1)
{
curcharixsave2 = curcharix;

display
values)
display
values)
display
values)
display
values)
display
values)
display
values)

curcharbitsave2 = curcharbit;
for (i=5;i>=0;i--) // Loop through our 8 displays
{
for (j=0;j<8;j++) // Set up rows on current display
{
byte outputbyte = 0;
curchar = msg[curcharix];
curcharixsave = curcharix;
curcharbitsave = curcharbit;
for (k=7;k>=0;k--) // Copy over data for 8 columns to current row and se
nd it to current display
{
// This byte is the bitmap of the current character for the current ro
w
byte currentcharbits = Font8x5[((curchar-32)*8)+j];
if (currentcharbits & (1<<curcharbit))
outputbyte |= (1<<k);
// advance the current character bit of current character
curcharbit ++;
if (curcharbit > lentbl_S[curchar-32]) // we are past the end of this
character, so advance.
{
curcharbit = 0;
curcharix += 1;
if (curcharix+1 > msgsize) curcharix=0;
curchar = msg[curcharix];
}
}
lc.setRow(i, j, outputbyte);
if (j != 7) // if this is not the last row, roll back advancement, if it
is, leave the counters advanced.
{
curcharix = curcharixsave;
curcharbit = curcharbitsave;
}
}
}
curcharix = curcharixsave2;
curcharbit = curcharbitsave2;
curchar = msg[curcharix];
// advance the current character bit of current character
curcharbit ++;
if (curcharbit > lentbl_S[curchar-32]) // we are past the end of this charac
ter, so advance.
{

curcharbit = 0;
curcharix += 1;
if (curcharix+1 > msgsize) curcharix=0;
curchar = msg[curcharix];
}
delay(0);
}
}

You might also like