max7219.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. /*
  2. * max7219.h
  3. *
  4. * Created on: 29 січ. 2016
  5. * Author: shilov
  6. */
  7. #ifndef INCLUDE_MAX7219_H_
  8. #define INCLUDE_MAX7219_H_
  9. // symbols
  10. // Для BCD
  11. #define MAX7219_CHAR_MINUS 0x0A
  12. #define MAX7219_CHAR_E 0x0B
  13. #define MAX7219_CHAR_H 0x0C
  14. #define MAX7219_CHAR_L 0x0D
  15. #define MAX7219_CHAR_P 0x0E
  16. #define MAX7219_CHAR_BLANK 0x0F
  17. // без кодирования
  18. #define SYM_Gradus 0x63
  19. #define SYM_LGradus 0x1D
  20. #define SYM_Temp 0x0F
  21. #define SYM_Minus 0x01
  22. #define SYM_Minus2L 0x09
  23. #define SYM_Minus2H 0x41
  24. #define SYM_Minus3 0x49
  25. #define SYM_BLANK 0x00
  26. #define SYM_FULL 0xFF
  27. #define SYM_H 0x37
  28. #define SYM_C 0x4E
  29. #define SYM_C_sm 0x0D
  30. #define MAX7219_ON 0x01
  31. #define MAX7219_OFF 0x00
  32. #define MAX7219_BRIGHT 0x08
  33. // режимы работы
  34. #define MAX7219_MODE_DECODE 0x09
  35. #define MAX7219_MODE_INTENSITY 0x0A
  36. #define MAX7219_MODE_SCAN_LIMIT 0x0B
  37. #define MAX7219_MODE_POWER 0x0C
  38. #define MAX7219_MODE_TEST 0x0F
  39. #define MAX7219_MODE_NOOP 0x00
  40. // соответствие разрядов
  41. #define MAX7219_DIGIT0 0x01
  42. #define MAX7219_DIGIT1 0x02
  43. #define MAX7219_DIGIT2 0x03
  44. #define MAX7219_DIGIT3 0x04
  45. #define MAX7219_DIGIT4 0x05
  46. #define MAX7219_DIGIT5 0x06
  47. #define MAX7219_DIGIT6 0x07
  48. #define MAX7219_DIGIT7 0x08
  49. // соответсвие бит сегментам
  50. #define SEG_A 6
  51. #define SEG_B 5
  52. #define SEG_C 4
  53. #define SEG_D 3
  54. #define SEG_E 2
  55. #define SEG_F 1
  56. #define SEG_G 0
  57. #define SEG_DP 7
  58. /*
  59. * Цифры для секунд "Pseudo Gray Code"
  60. * 0 1 2 3 4 5 6 7 8 9
  61. * │ ┌── ──── ───┐ │ │ │ │ │ │ │
  62. * │ │ │ │ │ │ └──┘ ───┘ ──── └───
  63. */
  64. // Коды GRAY для десятков секунд
  65. #define SYM_GRAY_0x 0x02
  66. #define SYM_GRAY_1x 0x42
  67. #define SYM_GRAY_2x 0x40
  68. #define SYM_GRAY_3x 0x60
  69. #define SYM_GRAY_4x 0x20
  70. #define SYM_GRAY_5x 0x22
  71. const uint8_t max7219_grayH[6] = {
  72. SYM_GRAY_0x,
  73. SYM_GRAY_1x,
  74. SYM_GRAY_2x,
  75. SYM_GRAY_3x,
  76. SYM_GRAY_4x,
  77. SYM_GRAY_5x
  78. };
  79. // Коды GRAY для единиц секунд
  80. #define SYM_GRAY_x0 0x04
  81. #define SYM_GRAY_x1 0x05
  82. #define SYM_GRAY_x2 0x01
  83. #define SYM_GRAY_x3 0x11
  84. #define SYM_GRAY_x4 0x10
  85. #define SYM_GRAY_x5 0x14
  86. #define SYM_GRAY_x6 0x1C
  87. #define SYM_GRAY_x7 0x18
  88. #define SYM_GRAY_x8 0x08
  89. #define SYM_GRAY_x9 0x0C
  90. const uint8_t max7219_grayL[10] = {
  91. SYM_GRAY_x0,
  92. SYM_GRAY_x1,
  93. SYM_GRAY_x2,
  94. SYM_GRAY_x3,
  95. SYM_GRAY_x4,
  96. SYM_GRAY_x5,
  97. SYM_GRAY_x6,
  98. SYM_GRAY_x7,
  99. SYM_GRAY_x8,
  100. SYM_GRAY_x9
  101. };
  102. // final second code
  103. #define SYM_GRAY_CODE(sec) (max7219_grayH[sec/10] | max7219_grayL[sec%10])
  104. /*
  105. * Цифры для секунд "Pseudo Bin Code"
  106. * 0 1 2 3 4 5 6 7 8 9
  107. * │ ──── ┌── │ │ │ ───┐ ┌──┐ │
  108. * │ │ │ │ │ │ │ │ ──── └───
  109. */
  110. // Коды BIN для десятков секунд
  111. #define SYM_BIN_0x 0x00
  112. #define SYM_BIN_1x 0x02
  113. #define SYM_BIN_2x 0x40
  114. #define SYM_BIN_3x 0x42
  115. #define SYM_BIN_4x 0x20
  116. #define SYM_BIN_5x 0x22
  117. const uint8_t max7219_binH[6] = {
  118. SYM_BIN_0x,
  119. SYM_BIN_1x,
  120. SYM_BIN_2x,
  121. SYM_BIN_3x,
  122. SYM_BIN_4x,
  123. SYM_BIN_5x
  124. };
  125. // Коды BIN для единиц секунд
  126. #define SYM_BIN_x0 0x00
  127. #define SYM_BIN_x1 0x04
  128. #define SYM_BIN_x2 0x01
  129. #define SYM_BIN_x3 0x05
  130. #define SYM_BIN_x4 0x10
  131. #define SYM_BIN_x5 0x14
  132. #define SYM_BIN_x6 0x11
  133. #define SYM_BIN_x7 0x15
  134. #define SYM_BIN_x8 0x08
  135. #define SYM_BIN_x9 0x0C
  136. const uint8_t max7219_BINL[10] = {
  137. SYM_BIN_x0,
  138. SYM_BIN_x1,
  139. SYM_BIN_x2,
  140. SYM_BIN_x3,
  141. SYM_BIN_x4,
  142. SYM_BIN_x5,
  143. SYM_BIN_x6,
  144. SYM_BIN_x7,
  145. SYM_BIN_x8,
  146. SYM_BIN_x9
  147. };
  148. // final second BIN code
  149. #define SYM_BIN_CODE(sec) (max7219_binH[sec/10] | max7219_binL[sec%10])
  150. void MAX7219_writeData (uint8_t data_register, uint8_t data);
  151. void MAX7219_Init (void);
  152. void MAX7219_FillMinus(void);
  153. #endif /* INCLUDE_MAX7219_H_ */