#include "max7219.h" void max7219_init( max7219_t *display, spi_ch_t *spi_ch) { display->spiCH = spi_ch; } void max7219_testDisplay( max7219_t *display, uint8_t logic) { spiWriteReg(display->spiCH,0x0F, (logic) ? 0x01 : 0x00); } void max7219_shutdownDiaply( max7219_t *display, uint8_t logic) { spiWriteReg(display->spiCH,0x0C, (logic) ? 0x00 : 0x01); } void max7219_setDecodeMode( max7219_t *display, max7219_decodeMode_t dmode) { spiWriteReg(display->spiCH,0x09,(uint8_t) dmode); } void max7219_setIntensity( max7219_t *display, uint8_t intensity) { spiWriteReg(display->spiCH, 0x0A, intensity & 0x0F); } void max7219_setScanLimit( max7219_t *display, max7219_scanLimit_t slimit) { spiWriteReg(display->spiCH, 0x0B, ((uint8_t) slimit) & 0x0F); } void max7219_setAllLEDsOff( max7219_t *display) { uint8_t i; for(i = 0; i < 9; i++) { spiWriteReg(display->spiCH, i, 0x00); } } void max7219_ledMatrixSetLED( max7219_t *display, uint8_t row, uint8_t col) { //uint8_t val = 0xAE; // Unused variable warning commented by KeY row = (row & 0x07) + 1; col = 1 << (col & 0x07); spiWriteReg(display->spiCH, row,col); } void max7219_rawWrite( max7219_t *display, uint8_t reg, uint8_t data) { spiWriteReg(display->spiCH, reg, data); } void max7219_printLedMatrix( max7219_t *display, uint8_t matrix[]) { uint8_t i = 0; for(i = 0; i < 8; i ++) { spiWriteReg(display->spiCH, i+1, matrix[i]); } } void max7219_ledMatrixUnsetLED( max7219_t *display, uint8_t row, uint8_t col) { row = (row & 0x07) + 1; col = 1 << (col & 0x07); // TODO: find out how to turn off LED spiWriteReg(display->spiCH, row,col+1); } #if 0 // daysichained matrix typedef struct{ spi_ch_t *spiCH; uint8_t nDevices; }max7219_dm_t; void max7219_dm_write( max7219_dm_t *matrix, uint8_t **data) { uint8_t i = 0; uint8_t j = 0; // TODO: Test it out for(i = 0; i < 8; i++) { pinWrite(matrix->spiCH->pin, 0); for(j = 0; j < matrix->nDevices; j++) { spiTrx8BitPolling(matrix->spiCH->spi, i+1); // reg spiTrx8BitPolling(matrix->spiCH->spi, data[j][i]); } pinWrite(matrix->spiCH->pin, 1); } } #endif