+// From http://www.electrodragon.com/w/Dot_Matrix_Display_Kit_w/MAX7219_IC,_PCB
+
+unsigned char i;
+unsigned char j;
+/*Port Definitions*/
+int Max7219_pinCLK = 10;
+int Max7219_pinCS = 9;
+int Max7219_pinDIN = 8;
+
+unsigned char disp1[38][8]={
+ {
+ 0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C }
+ ,//0
+ {
+ 0x10,0x18,0x14,0x10,0x10,0x10,0x10,0x10 }
+ ,//1
+ {
+ 0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E }
+ ,//2
+ {
+ 0x3E,0x2,0x2,0x3E,0x2,0x2,0x3E,0x0 }
+ ,//3
+ {
+ 0x8,0x18,0x28,0x48,0xFE,0x8,0x8,0x8 }
+ ,//4
+ {
+ 0x3C,0x20,0x20,0x3C,0x4,0x4,0x3C,0x0 }
+ ,//5
+ {
+ 0x3C,0x20,0x20,0x3C,0x24,0x24,0x3C,0x0 }
+ ,//6
+ {
+ 0x3E,0x22,0x4,0x8,0x8,0x8,0x8,0x8 }
+ ,//7
+ {
+ 0x0,0x3E,0x22,0x22,0x3E,0x22,0x22,0x3E }
+ ,//8
+ {
+ 0x3E,0x22,0x22,0x3E,0x2,0x2,0x2,0x3E }
+ ,//9
+ {
+ 0x8,0x14,0x22,0x3E,0x22,0x22,0x22,0x22 }
+ ,//A
+ {
+ 0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C,0x0 }
+ ,//B
+ {
+ 0x3C,0x40,0x40,0x40,0x40,0x40,0x3C,0x0 }
+ ,//C
+ {
+ 0x7C,0x42,0x42,0x42,0x42,0x42,0x7C,0x0 }
+ ,//D
+ {
+ 0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x7C }
+ ,//E
+ {
+ 0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x40 }
+ ,//F
+ {
+ 0x3C,0x40,0x40,0x40,0x40,0x44,0x44,0x3C }
+ ,//G
+ {
+ 0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44 }
+ ,//H
+ {
+ 0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x7C }
+ ,//I
+ {
+ 0x3C,0x8,0x8,0x8,0x8,0x8,0x48,0x30 }
+ ,//J
+ {
+ 0x0,0x24,0x28,0x30,0x20,0x30,0x28,0x24 }
+ ,//K
+ {
+ 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C }
+ ,//L
+ {
+ 0x81,0xC3,0xA5,0x99,0x81,0x81,0x81,0x81 }
+ ,//M
+ {
+ 0x0,0x42,0x62,0x52,0x4A,0x46,0x42,0x0 }
+ ,//N
+ {
+ 0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C }
+ ,//O
+ {
+ 0x3C,0x22,0x22,0x22,0x3C,0x20,0x20,0x20 }
+ ,//P
+ {
+ 0x1C,0x22,0x22,0x22,0x22,0x26,0x22,0x1D }
+ ,//Q
+ {
+ 0x3C,0x22,0x22,0x22,0x3C,0x24,0x22,0x21 }
+ ,//R
+ {
+ 0x0,0x1E,0x20,0x20,0x3E,0x2,0x2,0x3C }
+ ,//S
+ {
+ 0x0,0x3E,0x8,0x8,0x8,0x8,0x8,0x8 }
+ ,//T
+ {
+ 0x42,0x42,0x42,0x42,0x42,0x42,0x22,0x1C }
+ ,//U
+ {
+ 0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18 }
+ ,//V
+ {
+ 0x0,0x49,0x49,0x49,0x49,0x2A,0x1C,0x0 }
+ ,//W
+ {
+ 0x0,0x41,0x22,0x14,0x8,0x14,0x22,0x41 }
+ ,//X
+ {
+ 0x41,0x22,0x14,0x8,0x8,0x8,0x8,0x8 }
+ ,//Y
+ {
+ 0x0,0x7F,0x2,0x4,0x8,0x10,0x20,0x7F }
+ ,//Z
+};
+
+
+
+void Write_Max7219_byte(unsigned char DATA)
+{
+ unsigned char i;
+ digitalWrite(Max7219_pinCS,LOW);
+ for(i=8;i>=1;i--)
+ {
+ digitalWrite(Max7219_pinCLK,LOW);
+ digitalWrite(Max7219_pinDIN,DATA&0x80);// Extracting a bit data
+ DATA = DATA<<1;
+ digitalWrite(Max7219_pinCLK,HIGH);
+ }
+}
+
+
+void Write_Max7219(unsigned char address,unsigned char dat)
+{
+ digitalWrite(Max7219_pinCS,LOW);
+ Write_Max7219_byte(address); //address,code of LED
+ Write_Max7219_byte(dat); //data,figure on LED
+ digitalWrite(Max7219_pinCS,HIGH);
+}
+
+void Init_MAX7219(void)
+{
+ Write_Max7219(0x09, 0x00); //decoding :BCD
+ Write_Max7219(0x0a, 0x03); //brightness
+ Write_Max7219(0x0b, 0x07); //scanlimit;8 LEDs
+ Write_Max7219(0x0c, 0x01); //power-down mode:0,normal mode:1
+ Write_Max7219(0x0f, 0x00); //test display:1;EOT,display:0
+}
+
+
+
+void setup()
+{
+
+ pinMode(Max7219_pinCLK,OUTPUT);
+ pinMode(Max7219_pinCS,OUTPUT);
+ pinMode(Max7219_pinDIN,OUTPUT);
+ delay(50);
+ Init_MAX7219();
+}
+
+
+void loop()
+{
+ for(j=0;j<38;j++)
+ {
+ for(i=1;i<9;i++)
+ Write_Max7219(i,disp1[j][i-1]);
+ delay(500);
+ }
+}
+