1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /* 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 <user_config.h>
- #include <SmingCore/SmingCore.h>
- #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;
- }
- }
|