/* max7219.cpp * MAX7219 Interaction Code * --------------------------- * For more information see * http://www.adnbr.co.uk/articles/max7219-and-7-segment-displays * * Created on: 29 січ. 2016 * Author: shilov */ #include #include #include "configuration.h" #include "max7219.h" // перевод числа 0-7 в номер индикатора //const uint8_t max7219_dig[8] = { // 0x05,0x01,0x07,0x03,0x04,0x08,0x06,0x02 //}; void MAX7219_writeData (uint8_t reg, uint8_t data) { PinRes(PIN_LOAD); // опустили защёлку // software spi uint8_t i; // счетчик бит uint16_t sdata = ((reg & 0x000F) << 8) | (data & 0x00FF); for (i = 16; i != 0; i--) { PinRes(PIN_CLK); // выдали строб if (sdata >= 0x8000) { // если старший бит == 1 PinSet(PIN_DIN); // MOSI = 1 } else { // если старший бит == 0 PinRes(PIN_DIN); // MOSI = 0 } PinSet(PIN_CLK); // защёлкнули строб sdata <<= 1; // сдвиг влево на 1 бит } PinSet(PIN_LOAD); // подняли защёлку PinSet(PIN_DIN); } void MAX7219_Init (void) { // настройка пинов SPI pinMode (PIN_LOAD, OUTPUT); pinMode (PIN_DIN, OUTPUT); pinMode (PIN_CLK, OUTPUT); PinSet(PIN_LOAD); PinSet(PIN_DIN); PinSet(PIN_CLK); // Настройка MAX71219 MAX7219_writeData (MAX7219_MODE_DECODE, MAX7219_DIG_MASK); MAX7219_writeData (MAX7219_MODE_SCAN_LIMIT, MAX7219_DIGITS - 1); // Scan limit runs from 0. MAX7219_writeData (MAX7219_MODE_INTENSITY, MAX7219_BRIGHT); // яркость MAX7219_writeData (MAX7219_MODE_POWER, MAX7219_ON); // включили питание } void MAX7219_FillMinus(void) { uint8_t i, m = MAX7219_DIG_MASK; for (i = 8; i > 0; i--) { if (m >= 0x80) { MAX7219_writeData (i, MAX7219_CHAR_MINUS); } else { MAX7219_writeData (i, SYM_Minus); } m <<= 1; } }