/* * max7219.h * * Created on: 29 січ. 2016 * Author: shilov */ #ifndef INCLUDE_MAX7219_H_ #define INCLUDE_MAX7219_H_ // symbols // Для BCD #define MAX7219_CHAR_MINUS 0x0A #define MAX7219_CHAR_E 0x0B #define MAX7219_CHAR_H 0x0C #define MAX7219_CHAR_L 0x0D #define MAX7219_CHAR_P 0x0E #define MAX7219_CHAR_BLANK 0x0F // без кодирования #define SYM_Gradus 0x63 #define SYM_LGradus 0x1D #define SYM_Temp 0x0F #define SYM_Minus 0x01 #define SYM_Minus2L 0x09 #define SYM_Minus2H 0x41 #define SYM_Minus3 0x49 #define SYM_BLANK 0x00 #define SYM_FULL 0xFF #define SYM_H 0x37 #define SYM_H_SM 0x17 #define SYM_C 0x4E #define SYM_C_sm 0x0D #define MAX7219_ON 0x01 #define MAX7219_OFF 0x00 #define MAX7219_BRIGHT 0x08 // режимы работы #define MAX7219_MODE_DECODE 0x09 #define MAX7219_MODE_INTENSITY 0x0A #define MAX7219_MODE_SCAN_LIMIT 0x0B #define MAX7219_MODE_POWER 0x0C #define MAX7219_MODE_TEST 0x0F #define MAX7219_MODE_NOOP 0x00 // соответствие разрядов #define MAX7219_DIGIT0 0x01 #define MAX7219_DIGIT1 0x02 #define MAX7219_DIGIT2 0x03 #define MAX7219_DIGIT3 0x04 #define MAX7219_DIGIT4 0x05 #define MAX7219_DIGIT5 0x06 #define MAX7219_DIGIT6 0x07 #define MAX7219_DIGIT7 0x08 // соответсвие бит сегментам #define SEG_A 6 #define SEG_B 5 #define SEG_C 4 #define SEG_D 3 #define SEG_E 2 #define SEG_F 1 #define SEG_G 0 #define SEG_DP 7 /* * Цифры для секунд "Pseudo Gray Code" * 0 1 2 3 4 5 6 7 8 9 * │ ┌── ──── ───┐ │ │ │ │ │ │ │ * │ │ │ │ │ │ └──┘ ───┘ ──── └─── */ // Коды GRAY для десятков секунд #define SYM_GRAY_0x 0x02 #define SYM_GRAY_1x 0x42 #define SYM_GRAY_2x 0x40 #define SYM_GRAY_3x 0x60 #define SYM_GRAY_4x 0x20 #define SYM_GRAY_5x 0x22 const uint8_t max7219_grayH[6] = { SYM_GRAY_0x, SYM_GRAY_1x, SYM_GRAY_2x, SYM_GRAY_3x, SYM_GRAY_4x, SYM_GRAY_5x }; // Коды GRAY для единиц секунд #define SYM_GRAY_x0 0x04 #define SYM_GRAY_x1 0x05 #define SYM_GRAY_x2 0x01 #define SYM_GRAY_x3 0x11 #define SYM_GRAY_x4 0x10 #define SYM_GRAY_x5 0x14 #define SYM_GRAY_x6 0x1C #define SYM_GRAY_x7 0x18 #define SYM_GRAY_x8 0x08 #define SYM_GRAY_x9 0x0C const uint8_t max7219_grayL[10] = { SYM_GRAY_x0, SYM_GRAY_x1, SYM_GRAY_x2, SYM_GRAY_x3, SYM_GRAY_x4, SYM_GRAY_x5, SYM_GRAY_x6, SYM_GRAY_x7, SYM_GRAY_x8, SYM_GRAY_x9 }; // final second code #define SYM_GRAY_CODE(sec) (max7219_grayH[sec/10] | max7219_grayL[sec%10]) /* * Цифры для секунд "Pseudo Bin Code" * 0 1 2 3 4 5 6 7 8 9 * │ ──── ┌── │ │ │ ───┐ ┌──┐ │ * │ │ │ │ │ │ │ │ ──── └─── */ // Коды BIN для десятков секунд #define SYM_BIN_0x 0x00 #define SYM_BIN_1x 0x02 #define SYM_BIN_2x 0x40 #define SYM_BIN_3x 0x42 #define SYM_BIN_4x 0x20 #define SYM_BIN_5x 0x22 const uint8_t max7219_binH[6] = { SYM_BIN_0x, SYM_BIN_1x, SYM_BIN_2x, SYM_BIN_3x, SYM_BIN_4x, SYM_BIN_5x }; // Коды BIN для единиц секунд #define SYM_BIN_x0 0x00 #define SYM_BIN_x1 0x04 #define SYM_BIN_x2 0x01 #define SYM_BIN_x3 0x05 #define SYM_BIN_x4 0x10 #define SYM_BIN_x5 0x14 #define SYM_BIN_x6 0x11 #define SYM_BIN_x7 0x15 #define SYM_BIN_x8 0x08 #define SYM_BIN_x9 0x0C const uint8_t max7219_BINL[10] = { SYM_BIN_x0, SYM_BIN_x1, SYM_BIN_x2, SYM_BIN_x3, SYM_BIN_x4, SYM_BIN_x5, SYM_BIN_x6, SYM_BIN_x7, SYM_BIN_x8, SYM_BIN_x9 }; // final second BIN code #define SYM_BIN_CODE(sec) (max7219_binH[sec/10] | max7219_binL[sec%10]) void MAX7219_writeData (uint8_t data_register, uint8_t data); void MAX7219_Init (void); void MAX7219_FillMinus(void); #endif /* INCLUDE_MAX7219_H_ */