NOKIA 3310 n3310_h

  1. //Автор : Xander Gresolio <xugres@gmail.com>
  2.  
  3. #ifndef _N3310_H_
  4. #define _N3310_H_
  5.  
  6. // закомментируйте эту директиву, если ваш дисплей оригинальный
  7. //#define CHINA_LCD
  8.  
  9. // Порт к которому подключен LCD (здесь пример распиновки для ATmega8)
  10. // Библиотека использует аппаратный SPI, поэтому если хотите иной порт - придется реализовать SPI программно)
  11. #define LCD_PORT PORTB
  12. #define LCD_DDR DDRB
  13.  
  14. // Распиновка порта
  15. #define LCD_DC_PIN PB1
  16. #define LCD_CE_PIN PB2
  17. #define SPI_MOSI_PIN PB3 // SDIN дисплея обязательно подключаем к MOSI аппаратного SPI
  18. #define LCD_RST_PIN PB4
  19. #define SPI_CLK_PIN PB5 // SCLK дисплея обязательно подключаем к SCK аппаратного SPI
  20.  
  21. // Разрешение дисплея в пикселях
  22. #define LCD_X_RES 84 // разрешение по горизонтали
  23. #define LCD_Y_RES 48 // разрешение по вертикали
  24.  
  25. // Настройки для рисования группы прямоугольников функцией LcdBars ( byte data[], byte numbBars, byte width, byte multiplier )
  26. #define EMPTY_SPACE_BARS 2 // расстояние между прямоугольниками
  27. #define BAR_X 30 // координата x
  28. #define BAR_Y 47 // координата y
  29.  
  30. // Размер кэша ( 84 * 48 ) / 8 = 504 байта
  31. #define LCD_CACHE_SIZE ( ( LCD_X_RES * LCD_Y_RES ) / 8 )
  32.  
  33. #define FALSE 0
  34. #define TRUE 1
  35.  
  36. // Для возвращаемых значений
  37. #define OK 0 // Безошибочная отрисовка
  38. #define OUT_OF_BORDER 1 // Выход за границы дисплея
  39. #define OK_WITH_WRAP 2 // Переход на начало (ситуация автоинкремента указателя курсора при выводе длинного текста)
  40.  
  41. typedef unsigned char byte;
  42.  
  43. // Перечисления
  44. typedef enum
  45. {
  46. LCD_CMD = 0, // Команда
  47. LCD_DATA = 1 // Данные
  48.  
  49. } LcdCmdData;
  50.  
  51. typedef enum
  52. {
  53. PIXEL_OFF = 0, // Погасить пиксели дисплея
  54. PIXEL_ON = 1, // Включить пиксели дисплея
  55. PIXEL_XOR = 2 // Инвертировать пиксели
  56.  
  57. } LcdPixelMode;
  58.  
  59. typedef enum
  60. {
  61. FONT_1X = 1, // Обычный размер шрифта 5x7
  62. FONT_2X = 2 // Увеличенный размер шрифта
  63.  
  64. } LcdFontSize;
  65.  
  66. // Прототипы функций, детальную информацию смотрим внутри n3310lcd.c
  67. void LcdInit ( void ); // Инициализация
  68. void LcdClear ( void ); // Очистка буфера
  69. void LcdUpdate ( void ); // Копирование буфера в ОЗУ дисплея
  70. void LcdImage ( const byte *imageData ); // Рисование картинки из массива в Flash ROM
  71. void LcdContrast ( byte contrast ); // Установка контрастности дисплея
  72. byte LcdGotoXYFont ( byte x, byte y ); // Установка курсора в позицию x,y
  73. byte LcdChr ( LcdFontSize size, byte ch ); // Вывод символа в текущей позиции
  74. byte LcdStr ( LcdFontSize size, byte dataArray[] ); // Вывод строки сохраненной в RAM
  75. byte LcdFStr ( LcdFontSize size, const byte *dataPtr ); // Вывод строки сохраненной в Flash ROM
  76. byte LcdPixel ( byte x, byte y, LcdPixelMode mode ); // Точка
  77. byte LcdLine ( byte x1, byte y1, byte x2, byte y2, LcdPixelMode mode ); // Линия
  78. byte LcdCircle ( byte x, byte y, byte radius, LcdPixelMode mode); // Окружность
  79. byte LcdRect ( byte x1, byte y1, byte x2, byte y2, LcdPixelMode mode ); // Прямоугольник
  80. byte LcdSingleBar ( byte baseX, byte baseY, byte height, byte width, LcdPixelMode mode ); // Один
  81. byte LcdBars ( byte data[], byte numbBars, byte width, byte multiplier ); // Несколько
  82.  
  83.  
  84. /*
  85.  * Таблица для отображения символов (ASCII[0x20-0x7F] + CP1251[0xC0-0xFF] = всего 160 символов)
  86.  */
  87. static const byte FontLookup [][5] PROGMEM=
  88. {
  89. { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x20 32
  90. { 0x00, 0x00, 0x5F, 0x00, 0x00 }, // ! 0x21 33
  91. { 0x00, 0x07, 0x00, 0x07, 0x00 }, // " 0x22 34
  92. { 0x14, 0x7F, 0x14, 0x7F, 0x14 }, // # 0x23 35
  93. { 0x24, 0x2A, 0x7F, 0x2A, 0x12 }, // $ 0x24 36
  94. { 0x4C, 0x2C, 0x10, 0x68, 0x64 }, // % 0x25 37
  95. { 0x36, 0x49, 0x55, 0x22, 0x50 }, // & 0x26 38
  96. { 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' 0x27 39
  97. { 0x00, 0x1C, 0x22, 0x41, 0x00 }, // ( 0x28 40
  98. { 0x00, 0x41, 0x22, 0x1C, 0x00 }, // ) 0x29 41
  99. { 0x14, 0x08, 0x3E, 0x08, 0x14 }, // * 0x2A 42
  100. { 0x08, 0x08, 0x3E, 0x08, 0x08 }, // + 0x2B 43
  101. { 0x00, 0x00, 0x50, 0x30, 0x00 }, // , 0x2C 44
  102. { 0x10, 0x10, 0x10, 0x10, 0x10 }, // - 0x2D 45
  103. { 0x00, 0x60, 0x60, 0x00, 0x00 }, // . 0x2E 46
  104. { 0x20, 0x10, 0x08, 0x04, 0x02 }, // / 0x2F 47
  105. { 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 0x30 48
  106. { 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 0x31 49
  107. { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 0x32 50
  108. { 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 0x33 51
  109. { 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4 0x34 52
  110. { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 0x35 53
  111. { 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 0x36 54
  112. { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 0x37 55
  113. { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 0x38 56
  114. { 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 0x39 57
  115. { 0x00, 0x36, 0x36, 0x00, 0x00 }, // : 0x3A 58
  116. { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; 0x3B 59
  117. { 0x08, 0x14, 0x22, 0x41, 0x00 }, // < 0x3C 60
  118. { 0x14, 0x14, 0x14, 0x14, 0x14 }, // = 0x3D 61
  119. { 0x00, 0x41, 0x22, 0x14, 0x08 }, // > 0x3E 62
  120. { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? 0x3F 63
  121. { 0x32, 0x49, 0x79, 0x41, 0x3E }, // @ 0x40 64
  122. { 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A 0x41 65
  123. { 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B 0x42 66
  124. { 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C 0x43 67
  125. { 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D 0x44 68
  126. { 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E 0x45 69
  127. { 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F 0x46 70
  128. { 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G 0x47 71
  129. { 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H 0x48 72
  130. { 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I 0x49 73
  131. { 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J 0x4A 74
  132. { 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K 0x4B 75
  133. { 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L 0x4C 76
  134. { 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M 0x4D 77
  135. { 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N 0x4E 78
  136. { 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O 0x4F 79
  137. { 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P 0x50 80
  138. { 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q 0x51 81
  139. { 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R 0x52 82
  140. { 0x46, 0x49, 0x49, 0x49, 0x31 }, // S 0x53 83
  141. { 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T 0x54 84
  142. { 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U 0x55 85
  143. { 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V 0x56 86
  144. { 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W 0x57 87
  145. { 0x63, 0x14, 0x08, 0x14, 0x63 }, // X 0x58 88
  146. { 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y 0x59 89
  147. { 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z 0x5A 90
  148. { 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ 0x5B 91
  149. { 0x02, 0x04, 0x08, 0x10, 0x20 }, // \ 0x5C 92
  150. { 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] 0x5D 93
  151. { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ 0x5E 94
  152. { 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ 0x5F 95
  153. { 0x00, 0x01, 0x02, 0x04, 0x00 }, // ` 0x60 96
  154. { 0x20, 0x54, 0x54, 0x54, 0x78 }, // a 0x61 97
  155. { 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b 0x62 98
  156. { 0x38, 0x44, 0x44, 0x44, 0x20 }, // c 0x63 99
  157. { 0x38, 0x44, 0x44, 0x48, 0x7F }, // d 0x64 100
  158. { 0x38, 0x54, 0x54, 0x54, 0x18 }, // e 0x65 101
  159. { 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f 0x66 102
  160. { 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g 0x67 103
  161. { 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h 0x68 104
  162. { 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i 0x69 105
  163. { 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j 0x6A 106
  164. { 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k 0x6B 107
  165. { 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l 0x6C 108
  166. { 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m 0x6D 109
  167. { 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n 0x6E 110
  168. { 0x38, 0x44, 0x44, 0x44, 0x38 }, // o 0x6F 111
  169. { 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p 0x70 112
  170. { 0x08, 0x14, 0x14, 0x18, 0x7C }, // q 0x71 113
  171. { 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r 0x72 114
  172. { 0x48, 0x54, 0x54, 0x54, 0x20 }, // s 0x73 115
  173. { 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t 0x74 116
  174. { 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u 0x75 117
  175. { 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v 0x76 118
  176. { 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w 0x77 119
  177. { 0x44, 0x28, 0x10, 0x28, 0x44 }, // x 0x78 120
  178. { 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y 0x79 121
  179. { 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z 0x7A 122
  180. { 0x00, 0x08, 0x36, 0x41, 0x00 }, // { 0x7B 123
  181. { 0x00, 0x00, 0x7F, 0x00, 0x00 }, // | 0x7C 124
  182. { 0x00, 0x41, 0x36, 0x08, 0x00 }, // } 0x7D 125
  183. { 0x08, 0x04, 0x08, 0x10, 0x08 }, // ~ 0x7E 126
  184. { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, //  0x7F 127
  185.  
  186. { 0x7C, 0x12, 0x11, 0x12, 0x7C }, // А 0xC0 192
  187. { 0x7F, 0x49, 0x49, 0x49, 0x31 }, // Б 0xC1 193
  188. { 0x7F, 0x49, 0x49, 0x49, 0x36 }, // В 0xC2 194
  189. { 0x7F, 0x01, 0x01, 0x01, 0x01 }, // Г 0xC3 195
  190. { 0x60, 0x3F, 0x21, 0x3F, 0x60 }, // Д 0xC4 196
  191. { 0x7F, 0x49, 0x49, 0x49, 0x41 }, // Е 0xC5 197
  192. { 0x77, 0x08, 0x7F, 0x08, 0x77 }, // Ж 0xC6 198
  193. { 0x22, 0x41, 0x49, 0x49, 0x36 }, // З 0xC7 199
  194. { 0x7F, 0x10, 0x08, 0x04, 0x7F }, // И 0xC8 200
  195. { 0x7E, 0x10, 0x09, 0x04, 0x7E }, // Й 0xC9 201
  196. { 0x7F, 0x08, 0x14, 0x22, 0x41 }, // К 0xCA 202
  197. { 0x40, 0x3E, 0x01, 0x01, 0x7F }, // Л 0xCB 203
  198. { 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // М 0xCC 204
  199. { 0x7F, 0x08, 0x08, 0x08, 0x7F }, // Н 0xCD 205
  200. { 0x3E, 0x41, 0x41, 0x41, 0x3E }, // О 0xCE 206
  201. { 0x7F, 0x01, 0x01, 0x01, 0x7F }, // П 0xCF 207
  202. { 0x7F, 0x09, 0x09, 0x09, 0x06 }, // Р 0xD0 208
  203. { 0x3E, 0x41, 0x41, 0x41, 0x22 }, // С 0xD1 209
  204. { 0x01, 0x01, 0x7F, 0x01, 0x01 }, // Т 0xD2 210
  205. { 0x07, 0x48, 0x48, 0x48, 0x3F }, // У 0xD3 211
  206. { 0x0E, 0x11, 0x7F, 0x11, 0x0E }, // Ф 0xD4 212
  207. { 0x63, 0x14, 0x08, 0x14, 0x63 }, // Х 0xD5 213
  208. { 0x3F, 0x20, 0x20, 0x3F, 0x60 }, // Ц 0xD6 214
  209. { 0x07, 0x08, 0x08, 0x08, 0x7F }, // Ч 0xD7 215
  210. { 0x7F, 0x40, 0x7E, 0x40, 0x7F }, // Ш 0xD8 216
  211. { 0x3F, 0x20, 0x3F, 0x20, 0x7F }, // Щ 0xD9 217
  212. { 0x01, 0x7F, 0x48, 0x48, 0x30 }, // Ъ 0xDA 218
  213. { 0x7F, 0x48, 0x30, 0x00, 0x7F }, // Ы 0xDB 219
  214. { 0x00, 0x7F, 0x48, 0x48, 0x30 }, // Ь 0xDC 220
  215. { 0x22, 0x41, 0x49, 0x49, 0x3E }, // Э 0xDD 221
  216. { 0x7F, 0x08, 0x3E, 0x41, 0x3E }, // Ю 0xDE 222
  217. { 0x46, 0x29, 0x19, 0x09, 0x7F }, // Я 0xDF 223
  218. { 0x20, 0x54, 0x54, 0x54, 0x78 }, // а 0xE0 224
  219. { 0x3C, 0x4A, 0x4A, 0x4A, 0x31 }, // б 0xE1 225
  220. { 0x7C, 0x54, 0x54, 0x28, 0x00 }, // в 0xE2 226
  221. { 0x7C, 0x04, 0x04, 0x0C, 0x00 }, // г 0xE3 227
  222. { 0x60, 0x3C, 0x24, 0x3C, 0x60 }, // д 0xE4 228
  223. { 0x38, 0x54, 0x54, 0x54, 0x18 }, // е 0xE5 229
  224. { 0x6C, 0x10, 0x7C, 0x10, 0x6C }, // ж 0xE6 230
  225. { 0x00, 0x44, 0x54, 0x54, 0x28 }, // з 0xE7 231
  226. { 0x7C, 0x20, 0x10, 0x08, 0x7C }, // и 0xE8 232
  227. { 0x7C, 0x21, 0x12, 0x09, 0x7C }, // й 0xE9 233
  228. { 0x7C, 0x10, 0x28, 0x44, 0x00 }, // к 0xEA 234
  229. { 0x40, 0x38, 0x04, 0x04, 0x7C }, // л 0xEB 235
  230. { 0x7C, 0x08, 0x10, 0x08, 0x7C }, // м 0xEC 236
  231. { 0x7C, 0x10, 0x10, 0x10, 0x7C }, // н 0xED 237
  232. { 0x38, 0x44, 0x44, 0x44, 0x38 }, // о 0xEE 238
  233. { 0x7C, 0x04, 0x04, 0x04, 0x7C }, // п 0xEF 239
  234. { 0x7C, 0x14, 0x14, 0x14, 0x08 }, // р 0xF0 240
  235. { 0x38, 0x44, 0x44, 0x44, 0x00 }, // с 0xF1 241
  236. { 0x04, 0x04, 0x7C, 0x04, 0x04 }, // т 0xF2 242
  237. { 0x0C, 0x50, 0x50, 0x50, 0x3C }, // у 0xF3 243
  238. { 0x08, 0x14, 0x7C, 0x14, 0x08 }, // ф 0xF4 244
  239. { 0x44, 0x28, 0x10, 0x28, 0x44 }, // х 0xF5 245
  240. { 0x3C, 0x20, 0x20, 0x3C, 0x60 }, // ц 0xF6 246
  241. { 0x0C, 0x10, 0x10, 0x10, 0x7C }, // ч 0xF7 247
  242. { 0x7C, 0x40, 0x7C, 0x40, 0x7C }, // ш 0xF8 248
  243. { 0x3C, 0x20, 0x3C, 0x20, 0x7C }, // щ 0xF9 249
  244. { 0x04, 0x7C, 0x50, 0x50, 0x20 }, // ъ 0xFA 250
  245. { 0x7C, 0x50, 0x20, 0x00, 0x7C }, // ы 0xFB 251
  246. { 0x00, 0x7C, 0x50, 0x50, 0x20 }, // ь 0xFC 252
  247. { 0x28, 0x44, 0x54, 0x54, 0x38 }, // э 0xFD 253
  248. { 0x7C, 0x10, 0x38, 0x44, 0x38 }, // ю 0xFE 254
  249. { 0x48, 0x54, 0x34, 0x14, 0x7C } // я 0xFF 255
  250. };
  251.  
  252. #endif /* _N3310_H_ */