Всем привет! имеется дисплей от Motorola C201. Разрешение 96*64. Подключается по I2C. Схему подсмотрел здесь: http://vrtp.ru/index.php?showtopic=9846#
Подошла инициализация от Motorola T190(T191). Привожу код, но написан он не для Ардуино IDE, если не ошибаюсь, для CodeVisionAVR, я использую такой же код, только для Ардуино, и он разбит на несколько файлов, по этому привожу код для CodeVisionAVR:
001 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
014 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
018 | #define Device_SDA PIN_C4 |
019 | #define Device_SLC PIN_C3 |
020 | #use i2c(master, sda=Device_SDA, scl=Device_SLC) |
021 | char char_row,charsel,charpos,chardata; |
026 | BYTE const TABLE5[240]= |
027 | {0x00,0x00,0x00,0x00,0x00, |
028 | 0x00,0x00,0x5f,0x00,0x00, |
029 | 0x00,0x07,0x00,0x07,0x00, |
030 | 0x14,0x7f,0x14,0x7f,0x14, |
031 | 0x24,0x2a,0x7f,0x2a,0x12, |
032 | 0x23,0x13,0x08,0x64,0x62, |
033 | 0x36,0x49,0x55,0x22,0x50, |
034 | 0x00,0x05,0x03,0x00,0x00, |
035 | 0x00,0x1c,0x22,0x41,0x00, |
036 | 0x00,0x41,0x22,0x1c,0x00, |
037 | 0x14,0x08,0x3e,0x08,0x14, |
038 | 0x08,0x08,0x3e,0x08,0x08, |
039 | 0x00,0x50,0x30,0x00,0x00, |
040 | 0x08,0x08,0x08,0x08,0x08, |
041 | 0x00,0x60,0x60,0x00,0x00, |
042 | 0x20,0x10,0x08,0x04,0x02, |
043 | 0x3e,0x51,0x49,0x45,0x3e, |
044 | 0x00,0x42,0x7f,0x40,0x00, |
045 | 0x42,0x61,0x51,0x49,0x46, |
046 | 0x21,0x41,0x45,0x4b,0x31, |
047 | 0x18,0x14,0x12,0x7f,0x10, |
048 | 0x27,0x45,0x45,0x45,0x39, |
049 | 0x3c,0x4a,0x49,0x49,0x30, |
050 | 0x01,0x71,0x09,0x05,0x03, |
051 | 0x36,0x49,0x49,0x49,0x36, |
052 | 0x06,0x49,0x49,0x29,0x1e, |
053 | 0x00,0x36,0x36,0x00,0x00, |
054 | 0x00,0x56,0x36,0x00,0x00, |
055 | 0x08,0x14,0x22,0x41,0x00, |
056 | 0x14,0x14,0x14,0x14,0x14, |
057 | 0x00,0x41,0x22,0x14,0x08, |
058 | 0x02,0x01,0x51,0x09,0x06, |
059 | 0x32,0x49,0x79,0x41,0x3e, |
060 | 0x7e,0x11,0x11,0x11,0x7e, |
061 | 0x7f,0x49,0x49,0x49,0x36, |
062 | 0x3e,0x41,0x41,0x41,0x22, |
063 | 0x7f,0x41,0x41,0x22,0x1c, |
064 | 0x7f,0x49,0x49,0x49,0x41, |
065 | 0x7f,0x09,0x09,0x09,0x01, |
066 | 0x3e,0x41,0x49,0x49,0x7a, |
067 | 0x7f,0x08,0x08,0x08,0x7f, |
068 | 0x00,0x41,0x7f,0x41,0x00, |
069 | 0x20,0x40,0x41,0x3f,0x01, |
070 | 0x7f,0x08,0x14,0x22,0x41, |
071 | 0x7f,0x40,0x40,0x40,0x40, |
072 | 0x7f,0x02,0x0c,0x02,0x7f, |
073 | 0x7f,0x04,0x08,0x10,0x7f, |
074 | 0x3e,0x41,0x41,0x41,0x3e |
078 | BYTE const TABLE6[240]= {0x7f,0x09,0x09,0x09,0x06, |
079 | 0x3e,0x41,0x51,0x21,0x5e, |
080 | 0x7f,0x09,0x19,0x29,0x46, |
081 | 0x46,0x49,0x49,0x49,0x31, |
082 | 0x01,0x01,0x7f,0x01,0x01, |
083 | 0x3f,0x40,0x40,0x40,0x3f, |
084 | 0x1f,0x20,0x40,0x20,0x1f, |
085 | 0x3f,0x40,0x38,0x40,0x3f, |
086 | 0x63,0x14,0x08,0x14,0x63, |
087 | 0x07,0x08,0x70,0x08,0x07, |
088 | 0x61,0x51,0x49,0x45,0x43, |
089 | 0x00,0x7f,0x41,0x41,0x00, |
090 | 0x02,0x04,0x08,0x10,0x20, |
091 | 0x00,0x41,0x41,0x7f,0x00, |
092 | 0x04,0x02,0x01,0x02,0x04, |
093 | 0x40,0x40,0x40,0x40,0x40, |
094 | 0x00,0x01,0x02,0x04,0x00, |
095 | 0x20,0x54,0x54,0x54,0x78, |
096 | 0x7f,0x48,0x44,0x44,0x38, |
097 | 0x38,0x44,0x44,0x44,0x20, |
098 | 0x38,0x44,0x44,0x48,0x7f, |
099 | 0x38,0x54,0x54,0x54,0x18, |
100 | 0x08,0x7e,0x09,0x01,0x02, |
101 | 0x0c,0x52,0x52,0x52,0x3e, |
102 | 0x7f,0x08,0x04,0x04,0x78, |
103 | 0x00,0x44,0x7d,0x40,0x00, |
104 | 0x20,0x40,0x44,0x3d,0x00, |
105 | 0x7f,0x10,0x28,0x44,0x00, |
106 | 0x00,0x41,0x7f,0x40,0x00, |
107 | 0x7c,0x04,0x18,0x04,0x78, |
108 | 0x7c,0x08,0x04,0x04,0x78, |
109 | 0x38,0x44,0x44,0x44,0x38, |
110 | 0x7c,0x14,0x14,0x14,0x08, |
111 | 0x08,0x14,0x14,0x18,0x7c, |
112 | 0x7c,0x08,0x04,0x04,0x08, |
113 | 0x48,0x54,0x54,0x54,0x20, |
114 | 0x04,0x3f,0x44,0x40,0x20, |
115 | 0x3c,0x40,0x40,0x20,0x7c, |
116 | 0x1c,0x20,0x40,0x20,0x1c, |
117 | 0x3c,0x40,0x30,0x40,0x3c, |
118 | 0x44,0x28,0x10,0x28,0x44, |
119 | 0x0c,0x50,0x50,0x50,0x3c, |
120 | 0x44,0x64,0x54,0x4c,0x44, |
121 | 0x00,0x08,0x36,0x41,0x00, |
122 | 0x00,0x00,0x7f,0x00,0x00, |
123 | 0x00,0x41,0x36,0x08,0x00, |
124 | 0x10,0x08,0x08,0x10,0x08, |
125 | 0x78,0x46,0x41,0x46,0x78 |
128 | BYTE const TABLE7[240]= |
130 | 0x7E, 0x11, 0x11, 0x11, 0x7E, |
131 | 0x7F, 0x49, 0x49, 0x49, 0x30, |
132 | 0x7F, 0x49, 0x49, 0x49, 0x36, |
133 | 0x7F, 0x01, 0x01, 0x01, 0x01, |
134 | 0x60, 0x3E, 0x21, 0x3F, 0x60, |
135 | 0x7F, 0x49, 0x49, 0x49, 0x41, |
136 | 0x67, 0x18, 0x7F, 0x18, 0x67, |
137 | 0x22, 0x41, 0x49, 0x49, 0x36, |
138 | 0x7F, 0x10, 0x08, 0x04, 0x7F, |
139 | 0x7F, 0x10, 0x09, 0x04, 0x7F, |
140 | 0x7F, 0x08, 0x14, 0x22, 0x41, |
141 | 0x40, 0x3E, 0x01, 0x01, 0x7E, |
142 | 0x7F, 0x02, 0x04, 0x02, 0x7F, |
143 | 0x7F, 0x08, 0x08, 0x08, 0x7F, |
144 | 0x3E, 0x41, 0x41, 0x41, 0x3E, |
145 | 0x7F, 0x01, 0x01, 0x01, 0x7F, |
146 | 0x7F, 0x09, 0x09, 0x09, 0x06, |
147 | 0x3E, 0x41, 0x41, 0x41, 0x22, |
148 | 0x01, 0x01, 0x7F, 0x01, 0x01, |
149 | 0x27, 0x48, 0x48, 0x48, 0x3F, |
150 | 0x1E, 0x21, 0x7F, 0x21, 0x1E, |
151 | 0x63, 0x14, 0x08, 0x14, 0x63, |
152 | 0x3F, 0x20, 0x20, 0x3F, 0x40, |
153 | 0x1F, 0x10, 0x10, 0x10, 0x7F, |
154 | 0x7F, 0x40, 0x7F, 0x40, 0x7F, |
155 | 0x3F, 0x20, 0x3F, 0x20, 0x7F, |
156 | 0x01, 0x7F, 0x44, 0x44, 0x38, |
157 | 0x7F, 0x44, 0x7C, 0x00, 0x7F, |
158 | 0x7F, 0x44, 0x44, 0x44, 0x38, |
159 | 0x22, 0x41, 0x49, 0x49, 0x3E, |
160 | 0x7F, 0x08, 0x7F, 0x41, 0x7F, |
161 | 0x46, 0x29, 0x19, 0x09, 0x7F, |
162 | 0x20, 0x54, 0x54, 0x54, 0x78, |
163 | 0x3C, 0x4A, 0x4A, 0x4B, 0x30, |
164 | 0x7C, 0x54, 0x54, 0x58, 0x20, |
165 | 0x7C, 0x04, 0x04, 0x04, 0x04, |
166 | 0x60, 0x38, 0x24, 0x3C, 0x60, |
167 | 0x38, 0x54, 0x54, 0x54, 0x18, |
168 | 0x74, 0x08, 0x7C, 0x08, 0x74, |
169 | 0x28, 0x44, 0x54, 0x54, 0x28, |
170 | 0x7C, 0x20, 0x10, 0x08, 0x7C, |
171 | 0x7C, 0x21, 0x12, 0x09, 0x7C, |
172 | 0x7C, 0x10, 0x10, 0x28, 0x44, |
173 | 0x40, 0x78, 0x04, 0x04, 0x7C, |
174 | 0x7C, 0x08, 0x10, 0x08, 0x7C, |
175 | 0x7C, 0x10, 0x10, 0x10, 0x7C, |
176 | 0x38, 0x44, 0x44, 0x44, 0x38, |
177 | 0x7C, 0x04, 0x04, 0x04, 0x7C |
179 | BYTE const TABLE8[80]= |
181 | 0x7C, 0x14, 0x14, 0x14, 0x08, |
182 | 0x38, 0x44, 0x44, 0x44, 0x28, |
183 | 0x04, 0x04, 0x7C, 0x04, 0x04, |
184 | 0x0C, 0x50, 0x50, 0x50, 0x3C, |
185 | 0x18, 0x24, 0x7C, 0x24, 0x18, |
186 | 0x44, 0x28, 0x10, 0x28, 0x44, |
187 | 0x3C, 0x20, 0x20, 0x3C, 0x40, |
188 | 0x1C, 0x20, 0x20, 0x20, 0x7C, |
189 | 0x7C, 0x40, 0x7C, 0x40, 0x7C, |
190 | 0x3C, 0x20, 0x3C, 0x20, 0x7C, |
191 | 0x04, 0x7C, 0x48, 0x48, 0x30, |
192 | 0x7C, 0x48, 0x48, 0x30, 0x7C, |
193 | 0x7C, 0x48, 0x48, 0x48, 0x30, |
194 | 0x28, 0x44, 0x54, 0x54, 0x38, |
195 | 0x7C, 0x38, 0x44, 0x44, 0x38, |
196 | 0x48, 0x34, 0x14, 0x14, 0x7C, |
202 | void video_mode(unsigned char mode); |
203 | void lph_write_data( char byteforlph_data); |
204 | void lph_gotoxy(int8 xlph, int8 ylph); |
205 | void lph_erase_y(int8 ylph); |
206 | void lph_erase_x(int8 xlph); |
207 | void lph_printchar(int8 cvar); |
208 | void table_to_lphlcd( void ); |
209 | void lph_clear_screen( void ); |
210 | void lph_clear_xy(int8 xlph, int8 ylph); |
211 | void lph_print_uparrow( void ); |
212 | void lph_print_downarrow( void ); |
213 | void lph_print_leftarrow( void ); |
214 | void lph_print_rightarrow( void ); |
215 | void lph_print_degree( void ); |
216 | void lph_print_lowbatdegree( void ); |
219 | void video_mode(unsigned char mode) |
226 | i2c_write(0x78);i2c_write(0x00);i2c_write(0x20);i2c_write(0x0C); |
231 | i2c_write(0x78);i2c_write(0x00);i2c_write(0x20);i2c_write(0x0D); |
235 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
241 | output_float(PIN_C3); |
242 | output_float(PIN_C4); |
263 | ///////////////////////////////////////////////////////////////////////////////// |
264 | void lph_write_data( char byteforlph_data) |
269 | i2c_write(byteforlph_data); |
272 | ////////////////////////////////////////////////////////////////////////////////// |
273 | void lph_gotoxy(int8 xlph, int8 ylph) |
276 | i2c_write(0x78);i2c_write(0x00);i2c_write(0x30);i2c_write(0x40|(ylph&0x07));i2c_write(0x80|(xlph&0x7f)); |
279 | ////////////////////////////////////////////////////////////////////////////////// |
280 | void lph_erase_y(int8 ylph) |
287 | for (i = 0; i < 98; i++) |
293 | ////////////////////////////////////////////////////////////////////////////////// |
294 | void lph_erase_x(int8 xlph) |
299 | for (column=0;column!=8;column++){ |
300 | lph_gotoxy(xlph,column); |
301 | lph_write_data(0x00); |
302 | lph_write_data(0x00); |
303 | lph_write_data(0x00); |
304 | lph_write_data(0x00); |
305 | lph_write_data(0x00); |
306 | lph_write_data(0x00); |
310 | ////////////////////////////////////////////////////////////////////////////////// |
312 | void lph_printchar(int8 cvar) |
317 | ////////////////////////////////////////////////////////////////////////////////// |
318 | void table_to_lphlcd( void ) |
320 | if (charsel<0x20) return ; |
321 | if ((charsel<0xc0)&(charsel>0x7f)) return ; |
323 | for (char_row=0;char_row<5;char_row++) { |
325 | if (charsel<0x50){charpos=(((charsel&0xff)-0x20)*5);chardata=TABLE5[(charpos+char_row)];} |
326 | else if (charsel<0x80){charpos=(((charsel&0xff)-0x50)*5);chardata=TABLE6[(charpos+char_row)];} |
327 | else if (charsel<0xf0){charpos=(((charsel&0xff)-0xc0)*5);chardata=TABLE7[(charpos+char_row)];} |
328 | else {charpos=(((charsel&0xff)-0xf0)*5);chardata=TABLE8[(charpos+char_row)];} |
331 | lph_write_data(chardata); |
334 | lph_write_data(0x00); |
337 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
340 | void lph_clear_screen( void ) |
352 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
355 | void lph_clear_xy(int8 xlph, int8 ylph) |
358 | lph_gotoxy(xlph,ylph); |
363 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
364 | void lph_print_uparrow( void ) |
366 | lph_write_data(0x04); |
367 | lph_write_data(0x02); |
368 | lph_write_data(0x7f); |
369 | lph_write_data(0x02); |
370 | lph_write_data(0x04); |
371 | lph_write_data(0x00); |
374 | void lph_print_downarrow( void ) |
376 | lph_write_data(0x10); |
377 | lph_write_data(0x20); |
378 | lph_write_data(0x7f); |
379 | lph_write_data(0x20); |
380 | lph_write_data(0x10); |
381 | lph_write_data(0x00); |
384 | void lph_print_leftarrow( void ) |
386 | lph_write_data(0x08); |
387 | lph_write_data(0x1c); |
388 | lph_write_data(0x2a); |
389 | lph_write_data(0x08); |
390 | lph_write_data(0x08); |
391 | lph_write_data(0xf8); |
394 | void lph_print_rightarrow( void ) |
396 | lph_write_data(0x08); |
397 | lph_write_data(0x08); |
398 | lph_write_data(0x2a); |
399 | lph_write_data(0x1c); |
400 | lph_write_data(0x08); |
401 | lph_write_data(0x00); |
404 | void lph_print_degree( void ) |
406 | lph_write_data(0x00); |
407 | lph_write_data(0x06); |
408 | lph_write_data(0x09); |
409 | lph_write_data(0x09); |
410 | lph_write_data(0x06); |
411 | lph_write_data(0x00); |
416 | void lph_print_lowbatdegree( void ) |
418 | lph_write_data(0x00); |
419 | lph_write_data(0x06); |
420 | lph_write_data(0x0f); |
421 | lph_write_data(0x0f); |
422 | lph_write_data(0x06); |
423 | lph_write_data(0x00); |
426 | ////////////////////////////////////////////////////////////////////////////////////////////////////////// |
В общем дисплей работает, все отображает. Но есть один огромный минус: он показывает верхногами. То есть начало координат находится не слева вверху, а справа внизу. Текст выводится справа на лево и снизу вверх...
Надо как-то перевернуть дисплей. Но что-то не могу найти регистр, который за это отвечает. Может кто-то может подсказать? Физически перевернуть дисплей нельзя, просто не станет на свое место. Вот команды инициализации:
0x00
0x31
0x14
0x06
0x30
0x11
0x05
0x31
0x9A - contrast 0x9A*/,
0x0C
0x30
0x0C - D - inverse, C - normal,
0x40
0x80
Я попробовал изменять биты в командах 0x0C, 0x30 и 0x0C (D - inverse, C - normal), единственное что удалось добиться - отражение букв по горизонтали или вертикали, именно каждого символа по отдельности, а не строк целиком.
Если контроллер ST7558, ковыряй регистр Ext. display control MX, MY (см.даташит, попробуй добавить в инициализацию 0x2E)
Очень похоже. Но инициализация от ST7558 не подходит. Вот пример инициализации:
0x2E, // MXMY
Есть несколько одинаковых моментов, но в остальном инициализации разные. Только что попробовал инициализацию из даташита на ST7558, страница 48. Но дисплей молчит. Скорее всего используется другой контроллер.
Есть инфа, что возможно контроллер PCF8548, посмотри даташит