/* * MaxMatrix * Version 1.0 Feb 2013 * Copyright 2013 Oscar Kin-Chung Au */ #include "Arduino.h" #include "MaxMatrix.h" MaxMatrix::MaxMatrix(byte _data, byte _load, byte _clock, byte _num) {//_num为LED矩阵个数 data = _data; load = _load; clock = _clock; num = _num; for(int i=0;i<64;i++) status[i]=0x00; for (int i=0; i<80; i++) buffer[i] = 0; } void MaxMatrix::init() { pinMode(data, OUTPUT); pinMode(clock, OUTPUT); pinMode(load, OUTPUT); digitalWrite(clock, HIGH); setCommand(max7219_reg_scanLimit, 0x07); setCommand(max7219_reg_decodeMode, 0x00); // using an led matrix (not digits) setCommand(max7219_reg_shutdown, 0x01); // not in shutdown mode setCommand(max7219_reg_displayTest, 0x00); // no display test // empty registers, turn all LEDs off clear(); setIntensity(0x0f); // the first 0x0f is the value you can set } void MaxMatrix::setIntensity(byte intensity) { setCommand(max7219_reg_intensity, intensity); } void MaxMatrix::clear() { for (int i=0; i<8; i++) setColumnAll(i,0); for (int i=0; i<80; i++) buffer[i] = 0; } void MaxMatrix::setCommand(byte command, byte value) { digitalWrite(load, LOW); for (int i=0; i=num) return; if(row<0 || row>7) return; offset=addr*8; status[offset+row]=value; spiTransfer(addr, row+1,status[offset+row]); } void MaxMatrix::setColumn(byte col, byte value) { int n = col / 8; int c = col % 8; digitalWrite(load, LOW); for (int i=0; i=0 && c<80) setColumn(c, sprite[i+2]); } else for (int i=0; i=0 && c<80 && r>=0 && r<8) setDot(c, r, bitRead(sprite[i+2], j)); } } void MaxMatrix::reload() { for (int i=0; i<8; i++) { int col = i; digitalWrite(load, LOW); for (int j=0; j0; i--) buffer[i] = buffer[i-1]; if (rotate) buffer[0] = old; else if (fill_zero) buffer[0] = 0; reload(); } void MaxMatrix::shiftUp(bool rotate) { for (int i=0; i>= 1; if (rotate) bitWrite(buffer[i], 7, b); } reload(); } void MaxMatrix::shiftDown(bool rotate) { for (int i=0; i0;i--) //发送数据 shiftOut(data,clock,MSBFIRST,spidata[i-1]); //latch the data onto the display digitalWrite(load,HIGH); }