/* * max7219.cpp * * Created: 17-10-17 21:26:30 * Author: Adrien */ #define F_CPU 16000000UL #include "max7219.h" #include "util.h" #include #include #include #include max7219::max7219(uint8_t din, uint8_t load, uint8_t clk, uint8_t nOfDigit) { this->din = pinArduinoToPINXX(din); this->load = pinArduinoToPINXX(load); this->clk = pinArduinoToPINXX(clk); this->nOfDigit = nOfDigit; pinDin = pinToPINX(din); pinLoad = pinToPINX(load); pinClk = pinToPINX(clk); ddrDin = pinDin+1; ddrLoad=pinLoad+1;ddrClk=pinClk+1; portDin = pinDin+2; portLoad=pinLoad+2;portClk=pinClk+2; *ddrDin |= _BV(pinArduinoToPINXX(din)); *ddrLoad |= _BV(pinArduinoToPINXX(load)); *ddrClk |= _BV(pinArduinoToPINXX(clk)); setLoadTo(1); setClkTo(0); setDataTo(0); _delay_ms(50); sendRAWdata(nOfDigit, SCANLIMIT); sendRAWdata((0xff),DECODEMODE); on(); } void max7219::sendRAWdata(volatile uint8_t data, volatile address ad) { int i = 0; setClkTo(0); setLoadTo(0); _NOP(); _NOP(); for (i=0; i<8 ; i++) { setDataTo(ad&(0b10000000>>i)); _NOP(); _NOP(); setClkTo(1); _delay_us(1); setClkTo(0); _NOP(); _NOP(); } for (i=0; i<8 ; i++) { setClkTo(0); setDataTo(data&(0b10000000>>i)); _NOP(); _NOP(); setClkTo(1); _delay_us(1); setClkTo(0); _NOP(); _NOP(); } setLoadTo(1); _delay_us(1); } void max7219::on() { sendRAWdata(0x01, SHUTDOWN); } void max7219::off() { sendRAWdata(0x00, SHUTDOWN); } void max7219::sendDigitFromArray(uint8_t *array, uint8_t s) { sendRAWdata(0xFF, DECODEMODE); for (int i=0;i