/* http://www.bristolwatch.com/arduino/arduino_max7219a.htm Arduino RTC Clock with MAX7219 8-Digit LED Display Author: Lewis Loflin lewis@bvu.net http://www.bristolwatch.com */ #define RB5 7 // CS #define RB6 8 // DATA #define RB7 9 // CLK // pattern for 8 X 8 LED matrix char array1[] = { 0x00, 0x00, 0x81, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }; void setup() { pinMode(RB5, OUTPUT); pinMode(RB6, OUTPUT); pinMode(RB7, OUTPUT); digitalWrite(RB5, LOW); } void loop() { delay(1000); init_MAX7219(); int k = 0; while (1) { for (int j = 1; j < 9; j++) { writeMAX7219(j + k, array1[j]); } delay(50); k++; if (k > 8) k = 0; } } // shift data to MAX7219 // RB7 -> CLK, RB6 -> DATA, RB5 -> CS not void ssrOut(unsigned char val) { int j; for (j = 1; j <= 8; j++) { // shift out MSB first unsigned char temp = val & 0x80; // MSB out first if (temp == 0x80) digitalWrite(RB6, 1); // RB6 DATA else digitalWrite(RB6, 0); digitalWrite(RB7, 1); delayMicroseconds(10); digitalWrite(RB7, 0); val = val << 1; // shift one place left } // next j } void pulseCS(void) { digitalWrite(RB5, 1); delay(1); digitalWrite(RB5, 0); } void init_MAX7219(void) { digitalWrite(RB5, 0); // CS NOT // set decode mode ssrOut(0x09); ssrOut(0x00); // no decode pulseCS(); // set intensity ssrOut(0x0A); ssrOut(0x08); // 0 - F pulseCS(); // set scan limit ssrOut(0x0B); ssrOut(0x07); // 8 digits pulseCS(); // set for normal operation ssrOut(0x0C); ssrOut(0x01); pulseCS(); } void writeMAX7219(char address, char data) { if ((address < 1) || (address > 8)) return; ssrOut(address); // valid numbers 1-8 ssrOut(data); pulseCS(); }