#include <SPI.h>
#define MAX7219_REG_DECODEMODE 0x09
#define MAX7219_REG_INTENSITY 0x0A
#define MAX7219_REG_SCANLIMIT 0x0B
#define MAX7219_REG_SHUTDOWN 0x0C
#define MAX7219_REG_DISPLAYTEST 0x0F
const int csPin = 10;
void setup() {
SPI.begin();
pinMode(csPin, OUTPUT);
sendCommand(MAX7219_REG_DECODEMODE, 0x00);
sendCommand(MAX7219_REG_INTENSITY, 0x0A);;
sendCommand(MAX7219_REG_SCANLIMIT, 0x07);
sendCommand(MAX7219_REG_SHUTDOWN, 0x01);
sendCommand(MAX7219_REG_DISPLAYTEST, 0x00);
}
void loop() {
sendCommand(1, 0b00000000);
sendCommand(2, 0b01000010);
sendCommand(3, 0b10100101);
sendCommand(4, 0b00000000);
sendCommand(5, 0b00011000);
sendCommand(6, 0b01000010);
sendCommand(7, 0b00111100);
sendCommand(8, 0b00011000);
delay(1000);
numberFive();
delay(1000);
numberSix();
delay(1000);
numberSeven();
delay(1000);
numberThree();
delay(1000);
}
void numberFive(){
sendCommand(1, 0b01111110);
sendCommand(2, 0b00000010);
sendCommand(3, 0b00000010);
sendCommand(4, 0b01111110);
sendCommand(5, 0b01000000);
sendCommand(6, 0b01000000);
sendCommand(7, 0b01111110);
sendCommand(8, 0b00000000);
}
void numberSix(){
sendCommand(1, 0b01111110);
sendCommand(2, 0b00000010);
sendCommand(3, 0b00000010);
sendCommand(4, 0b01111110);
sendCommand(5, 0b01000010);
sendCommand(6, 0b01000010);
sendCommand(7, 0b01111110);
sendCommand(8, 0b00000000);
}
void numberSeven(){
sendCommand(1, 0b11111111);
sendCommand(2, 0b01000000);
sendCommand(3, 0b00100000);
sendCommand(4, 0b00010000);
sendCommand(5, 0b00001000);
sendCommand(6, 0b00000100);
sendCommand(7, 0b00000010);
sendCommand(8, 0b00000001);
}
void numberThree(){
sendCommand(1, 0b01111111);
sendCommand(2, 0b01000000);
sendCommand(3, 0b01000000);
sendCommand(4, 0b01111111);
sendCommand(5, 0b01000000);
sendCommand(6, 0b01000000);
sendCommand(7, 0b01111111);
sendCommand(8, 0b00000000);
}
void sendCommand(byte reg, byte data) {
digitalWrite(csPin, LOW);
SPI.transfer(reg);
SPI.transfer(data);
digitalWrite(csPin, HIGH);
}