max7219.h 4.1 KB

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