int DIN_pin = 11;
int LOAD_pin = 10;
int CLOCK_pin = 13;
// set pin definition
int DIN_pin = 11;
int LOAD_pin = 10;
int CLOCK_pin = 13;
int NUM_segment = 4;
// MAX7219 register address
byte max7219_REG_noop = 0x00;
byte max7219_REG_digit0 = 0x01;
byte max7219_REG_digit1 = 0x02;
byte max7219_REG_digit2 = 0x03;
byte max7219_REG_digit3 = 0x04;
byte max7219_REG_digit4 = 0x05;
byte max7219_REG_digit5 = 0x06;
byte max7219_REG_digit6 = 0x07;
byte max7219_REG_digit7 = 0x08;
byte max7219_REG_decodeMode = 0x09;
byte max7219_REG_intensity = 0x0a;
byte max7219_REG_scanLimit = 0x0b;
byte max7219_REG_shutdown = 0x0c;
byte max7219_REG_displayTest = 0x0f;
byte matrixData1_left[8] = { // simbol panah kiri
B00010000,B00100000,B01000000,B11111111,B11111111,B01000000,B00100000,B00010000};
byte matrixData_center1[8] = {
B00000000,B00000000,B11101110,B10000100,B11100100,B00100100,B11100100,B00000000};
byte matrixData_center2[8] = { // Matrix pattern
B00000000,B00000000,B11101111,B10101001,B10101111,B10101000,B11101000,B00000000};
byte matrixData_right[8] = { // Matrix pattern
B00001000,B00000100,B00000010,B11111111,B11111111,B00000010,B00000100,B00001000};
byte matrixData_blank[8] = { // Matrix pattern
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000};
// Control one MAX7219 module
void MAX7219_1Unit(byte reg_addr, byte reg_data) {
// First, send the register address
shiftOut(DIN_pin,CLOCK_pin,MSBFIRST,reg_addr);
shiftOut(DIN_pin,CLOCK_pin,MSBFIRST,reg_data);
// Next, send the data
// After transmission, set the DIN pin to LOW
digitalWrite(DIN_pin,LOW);
}
void MAX_update() {
digitalWrite(LOAD_pin,HIGH);
digitalWrite(LOAD_pin,LOW);
}
void Draw_left () // Display data to LED matrix
{
MAX7219_1Unit(max7219_REG_digit0, matrixData_left[0]); MAX7219_1Unit(max7219_REG_digit0, matrixData_blank[0]);MAX7219_1Unit(max7219_REG_digit0, matrixData_blank[0]);MAX7219_1Unit(max7219_REG_digit0, matrixData_blank[0]),MAX_update();
MAX7219_1Unit(max7219_REG_digit1, matrixData_left[1]); MAX7219_1Unit(max7219_REG_digit1, matrixData_blank[1]);MAX7219_1Unit(max7219_REG_digit1, matrixData_blank[1]);MAX7219_1Unit(max7219_REG_digit1, matrixData_blank[1]),MAX_update();
MAX7219_1Unit(max7219_REG_digit2, matrixData_left[2]); MAX7219_1Unit(max7219_REG_digit2, matrixData_blank[2]);MAX7219_1Unit(max7219_REG_digit2, matrixData_blank[2]);MAX7219_1Unit(max7219_REG_digit2, matrixData_blank[2]),MAX_update();
MAX7219_1Unit(max7219_REG_digit3, matrixData_left[3]); MAX7219_1Unit(max7219_REG_digit3, matrixData_blank[3]);MAX7219_1Unit(max7219_REG_digit3, matrixData_blank[3]);MAX7219_1Unit(max7219_REG_digit3, matrixData_blank[3]),MAX_update();
MAX7219_1Unit(max7219_REG_digit4, matrixData_left[4]); MAX7219_1Unit(max7219_REG_digit4, matrixData_blank[4]);MAX7219_1Unit(max7219_REG_digit4, matrixData_blank[4]);MAX7219_1Unit(max7219_REG_digit4, matrixData_blank[4]),MAX_update();
MAX7219_1Unit(max7219_REG_digit5, matrixData_left[5]); MAX7219_1Unit(max7219_REG_digit5, matrixData_blank[5]);MAX7219_1Unit(max7219_REG_digit5, matrixData_blank[5]);MAX7219_1Unit(max7219_REG_digit5, matrixData_blank[5]),MAX_update();
MAX7219_1Unit(max7219_REG_digit6, matrixData_left[6]); MAX7219_1Unit(max7219_REG_digit6, matrixData_blank[6]);MAX7219_1Unit(max7219_REG_digit6, matrixData_blank[6]);MAX7219_1Unit(max7219_REG_digit6, matrixData_blank[6]),MAX_update();
MAX7219_1Unit(max7219_REG_digit7, matrixData_left[7]); MAX7219_1Unit(max7219_REG_digit7, matrixData_blank[7]);MAX7219_1Unit(max7219_REG_digit7, matrixData_blank[7]);MAX7219_1Unit(max7219_REG_digit7, matrixData_blank[7]),MAX_update();
}
void Draw_right () // Display data to LED matrix
{
MAX7219_1Unit(max7219_REG_digit0, matrixData_blank[0]); MAX7219_1Unit(max7219_REG_digit0, matrixData_blank[0]);MAX7219_1Unit(max7219_REG_digit0, matrixData_blank[0]);MAX7219_1Unit(max7219_REG_digit0, matrixData_right[0]),MAX_update();
MAX7219_1Unit(max7219_REG_digit1, matrixData_blank[1]); MAX7219_1Unit(max7219_REG_digit1, matrixData_blank[1]);MAX7219_1Unit(max7219_REG_digit1, matrixData_blank[1]);MAX7219_1Unit(max7219_REG_digit1, matrixData_right[1]),MAX_update();
MAX7219_1Unit(max7219_REG_digit2, matrixData_blank[2]); MAX7219_1Unit(max7219_REG_digit2, matrixData_blank[2]);MAX7219_1Unit(max7219_REG_digit2, matrixData_blank[2]);MAX7219_1Unit(max7219_REG_digit2, matrixData_right[2]),MAX_update();
MAX7219_1Unit(max7219_REG_digit3, matrixData_blank[3]); MAX7219_1Unit(max7219_REG_digit3, matrixData_blank[3]);MAX7219_1Unit(max7219_REG_digit3, matrixData_blank[3]);MAX7219_1Unit(max7219_REG_digit3, matrixData_right[3]),MAX_update();
MAX7219_1Unit(max7219_REG_digit4, matrixData_blank[4]); MAX7219_1Unit(max7219_REG_digit4, matrixData_blank[4]);MAX7219_1Unit(max7219_REG_digit4, matrixData_blank[4]);MAX7219_1Unit(max7219_REG_digit4, matrixData_right[4]),MAX_update();
MAX7219_1Unit(max7219_REG_digit5, matrixData_blank[5]); MAX7219_1Unit(max7219_REG_digit5, matrixData_blank[5]);MAX7219_1Unit(max7219_REG_digit5, matrixData_blank[5]);MAX7219_1Unit(max7219_REG_digit5, matrixData_right[5]),MAX_update();
MAX7219_1Unit(max7219_REG_digit6, matrixData_blank[6]); MAX7219_1Unit(max7219_REG_digit6, matrixData_blank[6]);MAX7219_1Unit(max7219_REG_digit6, matrixData_blank[6]);MAX7219_1Unit(max7219_REG_digit6, matrixData_right[6]),MAX_update();
MAX7219_1Unit(max7219_REG_digit7, matrixData_blank[7]); MAX7219_1Unit(max7219_REG_digit7, matrixData_blank[7]);MAX7219_1Unit(max7219_REG_digit7, matrixData_blank[7]);MAX7219_1Unit(max7219_REG_digit7, matrixData_right[7]),MAX_update();
}
void Draw_stop () // Display data to LED matrix
{
MAX7219_1Unit(max7219_REG_digit0, matrixData_blank[0]); MAX7219_1Unit(max7219_REG_digit0, matrixData_center1[0]);MAX7219_1Unit(max7219_REG_digit0, matrixData_center2[0]);MAX7219_1Unit(max7219_REG_digit0, matrixData_blank[0]),MAX_update();
MAX7219_1Unit(max7219_REG_digit1, matrixData_blank[1]); MAX7219_1Unit(max7219_REG_digit1, matrixData_center1[1]);MAX7219_1Unit(max7219_REG_digit1, matrixData_center2[1]);MAX7219_1Unit(max7219_REG_digit1, matrixData_blank[1]),MAX_update();
MAX7219_1Unit(max7219_REG_digit2, matrixData_blank[2]); MAX7219_1Unit(max7219_REG_digit2, matrixData_center1[2]);MAX7219_1Unit(max7219_REG_digit2, matrixData_center2[2]);MAX7219_1Unit(max7219_REG_digit2, matrixData_blank[2]),MAX_update();
MAX7219_1Unit(max7219_REG_digit3, matrixData_blank[3]); MAX7219_1Unit(max7219_REG_digit3, matrixData_center1[3]);MAX7219_1Unit(max7219_REG_digit3, matrixData_center2[3]);MAX7219_1Unit(max7219_REG_digit3, matrixData_blank[3]),MAX_update();
MAX7219_1Unit(max7219_REG_digit4, matrixData_blank[4]); MAX7219_1Unit(max7219_REG_digit4, matrixData_center1[4]);MAX7219_1Unit(max7219_REG_digit4, matrixData_center2[4]);MAX7219_1Unit(max7219_REG_digit4, matrixData_blank[4]),MAX_update();
MAX7219_1Unit(max7219_REG_digit5, matrixData_blank[5]); MAX7219_1Unit(max7219_REG_digit5, matrixData_center1[5]);MAX7219_1Unit(max7219_REG_digit5, matrixData_center2[5]);MAX7219_1Unit(max7219_REG_digit5, matrixData_blank[5]),MAX_update();
MAX7219_1Unit(max7219_REG_digit6, matrixData_blank[6]); MAX7219_1Unit(max7219_REG_digit6, matrixData_center1[6]);MAX7219_1Unit(max7219_REG_digit6, matrixData_center2[6]);MAX7219_1Unit(max7219_REG_digit6, matrixData_blank[6]),MAX_update();
MAX7219_1Unit(max7219_REG_digit7, matrixData_blank[7]); MAX7219_1Unit(max7219_REG_digit7, matrixData_center1[7]);MAX7219_1Unit(max7219_REG_digit7, matrixData_center2[7]);MAX7219_1Unit(max7219_REG_digit7, matrixData_blank[7]),MAX_update();
}
void setup ( ) {
pinMode(DIN_pin, OUTPUT);
pinMode(CLOCK_pin, OUTPUT);
pinMode(LOAD_pin, OUTPUT);
digitalWrite(CLOCK_pin, HIGH);
// Initialize MAX7219 registers
MAX7219_1Unit(max7219_REG_scanLimit, 0x07); // Display digits 0 1 2 3 4 5 6 7
MAX7219_1Unit(max7219_REG_scanLimit, 0x07);
MAX7219_1Unit(max7219_REG_scanLimit, 0x07);
MAX7219_1Unit(max7219_REG_scanLimit, 0x07);
MAX_update();
MAX7219_1Unit(max7219_REG_decodeMode, 0x00); // Disable decoding
MAX7219_1Unit(max7219_REG_decodeMode, 0x00);
MAX7219_1Unit(max7219_REG_decodeMode, 0x00);
MAX7219_1Unit(max7219_REG_decodeMode, 0x00);
MAX_update();
// Not shutdown mode
MAX7219_1Unit(max7219_REG_shutdown, 0x01); //normal operation
MAX7219_1Unit(max7219_REG_shutdown, 0x01);
MAX7219_1Unit(max7219_REG_shutdown, 0x01);
MAX7219_1Unit(max7219_REG_shutdown, 0x01);
MAX_update();
// Not test mode
MAX7219_1Unit(max7219_REG_displayTest, 0x00); //normal operation
MAX7219_1Unit(max7219_REG_displayTest, 0x00);
MAX7219_1Unit(max7219_REG_displayTest, 0x00);
MAX7219_1Unit(max7219_REG_displayTest, 0x00);
MAX_update();
for(int i=1; i<=8; i++) {// Set all LED intensity to low
MAX7219_1Unit(i,0);
MAX7219_1Unit(i,0);
MAX7219_1Unit(i,0);
MAX7219_1Unit(i,0);
MAX_update();
}
// Set LED intensity range: 0x00 ~ 0x0f
MAX7219_1Unit(max7219_REG_intensity, 0x0a);
MAX7219_1Unit(max7219_REG_intensity, 0x0a);
MAX7219_1Unit(max7219_REG_intensity, 0x0a);
MAX7219_1Unit(max7219_REG_intensity, 0x0a);
MAX_update();
delay(1000);
}
void loop () {
Draw();
}