heat control  r71
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
lcd_lib.c
Go to the documentation of this file.
1 //*****************************************************************************
2 //
3 // File Name : 'lcd_lib.h'
4 // Title : 8 and 4 bit LCd interface + mixed pins modes
5 // Author : Scienceprog.com - Copyright (C) 2007
6 // Created : 2007-03-29
7 // Revised : 2011-12-13
8 // Version : 2.0
9 // Target MCU : Atmel AVR series
10 //
11 // This code is distributed under the GNU Public License
12 // which can be found at http://www.gnu.org/licenses/gpl.txt
13 //
14 //*****************************************************************************
15 #include "lcd_lib.h"
16 #include <inttypes.h>
17 #include <avr/io.h>
18 #include <avr/pgmspace.h>
19 #include <util/delay.h>
20 #include <stdlib.h>
21 #include <string.h>
22 
23 #ifdef LCD_4BIT_M
24 static void LCDMix_4Bit(uint8_t data);
25 #endif
26 #ifdef LCD_8BIT_M
27 static void LCDMix_8Bit(uint8_t data);
28 #endif
29 #ifdef USE_PROGBAR
30 const uint8_t LcdCustomChar[] PROGMEM=//define 8 custom LCD chars
31 {
32  0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, // 0. 0/5 full progress block
33  0x00, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x00, // 1. 1/5 full progress block
34  0x00, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, // 2. 2/5 full progress block
35  0x00, 0x1F, 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0x00, // 3. 3/5 full progress block
36  0x00, 0x1F, 0x1E, 0x1E, 0x1E, 0x1E, 0x1F, 0x00, // 4. 4/5 full progress block
37  0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, // 5. 5/5 full progress block
38  0x03, 0x07, 0x0F, 0x1F, 0x0F, 0x07, 0x03, 0x00, // 6. rewind arrow
39  0x18, 0x1C, 0x1E, 0x1F, 0x1E, 0x1C, 0x18, 0x00 // 7. fast-forward arrow
40 };
41 #endif
42 
43 #ifdef LCD_4BIT_M
44 //sets four port pins to corresponding nibble
45 //for high nibble use mask data & 0b11110000
46 //for low nibble use (data & 0b00001111)<<4
47 static void LCDMix_4Bit(uint8_t data)
48 {
49  if((data)&(0b10000000)) LDPD7 |=1<<LCD_D7;
50  else LDPD7 &=~(1<<LCD_D7);
51  if((data)&(0b01000000)) LDPD6 |=1<<LCD_D6;
52  else LDPD6 &=~(1<<LCD_D6);
53  if((data)&(0b00100000)) LDPD5 |=1<<LCD_D5;
54  else LDPD5&=~(1<<LCD_D5);
55  if((data)&(0b00010000)) LDPD4 |=1<<LCD_D4;
56  else LDPD4 &=~(1<<LCD_D4);
57 }
58 #endif
59 #ifdef LCD_8BIT_M
60 static void LCDMix_8Bit(uint8_t data)
61 {
62  if((data)&(0b10000000)) LDPD7 |=1<<LCD_D7;
63  else LDPD7 &=~(1<<LCD_D7);
64  if((data)&(0b01000000)) LDPD6 |=1<<LCD_D6;
65  else LDPD6 &=~(1<<LCD_D6);
66  if((data)&(0b00100000)) LDPD5 |=1<<LCD_D5;
67  else LDPD5&=~(1<<LCD_D5);
68  if((data)&(0b00010000)) LDPD4 |=1<<LCD_D4;
69  else LDPD4 &=~(1<<LCD_D4);
70  if((data)&(0b00001000)) LDPD3 |=1<<LCD_D3;
71  else LDPD3 &=~(1<<LCD_D3);
72  if((data)&(0b00000100)) LDPD2 |=1<<LCD_D2;
73  else LDPD2 &=~(1<<LCD_D2);
74  if((data)&(0b00000010)) LDPD1 |=1<<LCD_D1;
75  else LDPD1&=~(1<<LCD_D1);
76  if((data)&(0b00000001)) LDPD0 |=1<<LCD_D0;
77  else LDPD0 &=~(1<<LCD_D0);
78 }
79 #endif
80 void LCDinit(void)//Initializes LCD
81 {
82 #ifdef LCD_4BIT
83  //4 bit part
84  _delay_ms(15);
85  //zero to data pins
86  LDP &=~(1<<LCD_D7|1<<LCD_D6|1<<LCD_D5|1<<LCD_D4);
87  //zero to control pins
88  LCP &= ~(1<<LCD_E|1<<LCD_RW|1<<LCD_RS);
89  LDDR|=1<<LCD_D7|1<<LCD_D6|1<<LCD_D5|1<<LCD_D4;
90  LCDR|=1<<LCD_E|1<<LCD_RW|1<<LCD_RS;
91  //---------one------
92  LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4; //4 bit mode
93  LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;
94  _delay_ms(1);
95  LCP&=~(1<<LCD_E);
96  _delay_ms(1);
97  //-----------two-----------
98  LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4; //4 bit mode
99  LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;
100  _delay_ms(1);
101  LCP&=~(1<<LCD_E);
102  _delay_ms(1);
103  //-------three-------------
104  LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|0<<LCD_D4; //4 bit mode
105  LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;
106  _delay_ms(1);
107  LCP&=~(1<<LCD_E);
108  _delay_ms(1);
109  //--------4 bit--dual line---------------
110  LCDsendCommand(0b00101000);
111  //-----increment address, invisible cursor shift------
112  LCDsendCommand(0b00001100);
113 #endif
114 #ifdef LCD_8BIT
115  //8 bit part
116  _delay_ms(15);
117  //zero to datapins
118  LDP =0x00;
119  //zero to control pins
120  LCP &=(1<<LCD_E|1<<LCD_RW|1<<LCD_RS);
121  //set direction pins for data and control
122  LDDR|=1<<LCD_D7|1<<LCD_D6|1<<LCD_D5|1<<LCD_D4|1<<LCD_D3
123  |1<<LCD_D2|1<<LCD_D1|1<<LCD_D0;
124  LCDR|=1<<LCD_E|1<<LCD_RW|1<<LCD_RS;
125  //---------one------
126  LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4|0<<LCD_D3
127  |0<<LCD_D2|0<<LCD_D1|0<<LCD_D0; //8 it mode
128  LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;
129  _delay_ms(1);
130  LCP&=~(1<<LCD_E);
131  _delay_ms(1);
132  //-----------two-----------
133  LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4|0<<LCD_D3
134  |0<<LCD_D2|0<<LCD_D1|0<<LCD_D0; //8 it mode
135  LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;
136  _delay_ms(1);
137  LCP&=~(1<<LCD_E);
138  _delay_ms(1);
139  //-------three-------------
140  LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4|0<<LCD_D3
141  |0<<LCD_D2|0<<LCD_D1|0<<LCD_D0; //8 it mode
142  LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;
143  _delay_ms(1);
144  LCP&=~(1<<LCD_E);
145  _delay_ms(1);
146  //--------8 bit dual line----------
147  LCDsendCommand(0b00111000); //8 bit mode
148  /*LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4|1<<LCD_D3
149  |0<<LCD_D2|0<<LCD_D1|0<<LCD_D0;
150  LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;
151  _delay_ms(1);
152  LCP&=~(1<<LCD_E);
153  _delay_ms(1); */
154  //-----increment address, invisible cursor shift------
155  LCDsendCommand(0b00001100);
156  /*LDP=0<<LCD_D7|0<<LCD_D6|0<<LCD_D5|0<<LCD_D4|1<<LCD_D3
157  |1<<LCD_D2|0<<LCD_D1|0<<LCD_D0;
158  LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;
159  _delay_ms(1);
160  LCP&=~(1<<LCD_E);
161  _delay_ms(5);*/
162 
163 #endif
164 
165 #ifdef LCD_4BIT_M
166  //4 mixed bit part
167  _delay_ms(15);
168  //zero to data pins
169  LCDMix_4Bit(0b00000000);
170  //zero to control pins
171  LDPRS &=~(1<<LCD_RS);
172  LDPRW &=~(1<<LCD_RW);
173  LDPE &=~(1<<LCD_E);
174  //set data direction
175  LDDD4 |=1<<LCD_D4;
176  LDDD5 |=1<<LCD_D5;
177  LDDD6 |=1<<LCD_D6;
178  LDDD7 |=1<<LCD_D7;
179  //control direction pins
180  LDDRS |=1<<LCD_RS;
181  LDDRW |=1<<LCD_RW;
182  LDDE |=1<<LCD_E;
183  //---------one------
184  LCDMix_4Bit(0b00110000);
185  LDPE |=1<<LCD_E;
186  _delay_ms(1);
187  LDPE &=~(1<<LCD_E);
188  _delay_ms(1);
189  //-----------two-----------
190  LCDMix_4Bit(0b00110000);
191  LDPE |=1<<LCD_E;
192  _delay_ms(1);
193  LDPE &=~(1<<LCD_E);
194  _delay_ms(1);
195  //-------three-------------
196  LCDMix_4Bit(0b00100000);
197  LDPE |=1<<LCD_E;
198  _delay_ms(1);
199  LDPE &=~(1<<LCD_E);
200  _delay_ms(1);
201  //--------4 bit--dual line---------------
202  LCDsendCommand(0b00101000);
203  //-----increment address, invisible cursor shift------
204  LCDsendCommand(0b00001100);
205 #endif
206 
207 #ifdef LCD_8BIT_M
208  //8 mixed bits part
209  _delay_ms(15);
210  //zero to data pins
211  LCDMix_8Bit(0b00000000);
212  //zero to control pins
213  LDPRS &=~(1<<LCD_RS);
214  LDPRW &=~(1<<LCD_RW);
215  LDPE &=~(1<<LCD_E);
216  //set data direction
217  LDDD0 |=1<<LCD_D0;
218  LDDD1 |=1<<LCD_D1;
219  LDDD2 |=1<<LCD_D2;
220  LDDD3 |=1<<LCD_D3;
221  LDDD4 |=1<<LCD_D4;
222  LDDD5 |=1<<LCD_D5;
223  LDDD6 |=1<<LCD_D6;
224  LDDD7 |=1<<LCD_D7;
225  //control direction pins
226  LDDRS |=1<<LCD_RS;
227  LDDRW |=1<<LCD_RW;
228  LDDE |=1<<LCD_E;
229  //---------one------
230  LCDMix_8Bit(0b00110000);
231  /*LDPD4 |=1<<LCD_D4;
232  LDPD5 |=1<<LCD_D5;*/
233  LDPE |=1<<LCD_E;
234  _delay_ms(1);
235  LDPE &=~(1<<LCD_E);
236  _delay_ms(1);
237  //-----------two-----------
238  LDPE |=1<<LCD_E;
239  _delay_ms(1);
240  LDPE &=~(1<<LCD_E);
241  _delay_ms(1);
242  //-------three-------------
243  LDPE |=1<<LCD_E;
244  _delay_ms(1);
245  LDPE &=~(1<<LCD_E);
246  _delay_ms(1);
247  //--------8 bit dual line----------
248  LCDsendCommand(0b00111000);
249  //-----increment address, invisible cursor shift------
250  LCDsendCommand(0b00001100);
251 #endif
252 #ifdef USE_PROGBAR
253  //init 8 custom chars
254  uint8_t ch=0, chn=0;
255  while(ch<64)
256  {
257  LCDdefinechar((LcdCustomChar+ch),chn++);
258  ch=ch+8;
259  }
260 #endif
261 }
262 void LCDsendChar(uint8_t ch) //Sends Char to LCD
263 {
264 
265 #ifdef LCD_4BIT
266  //4 bit part
267  LDP=(ch & 0b11110000);
268  LCP|=1<<LCD_RS;
269  LCP|=1<<LCD_E;
270  _delay_ms(1);
271  LCP&=~(1<<LCD_E);
272  LCP&=~(1<<LCD_RS);
273  _delay_ms(1);
274  LDP=((ch & 0b00001111)<<4);
275  LCP|=1<<LCD_RS;
276  LCP|=1<<LCD_E;
277  _delay_ms(1);
278  LCP&=~(1<<LCD_E);
279  LCP&=~(1<<LCD_RS);
280  _delay_ms(1);
281 #endif
282 #ifdef LCD_8BIT
283  //8 bit part
284  LDP=ch;
285  LCP|=1<<LCD_RS;
286  LCP|=1<<LCD_E;
287  _delay_ms(1);
288  LCP&=~(1<<LCD_E);
289  LCP&=~(1<<LCD_RS);
290  _delay_ms(1);
291 #endif
292 #ifdef LCD_4BIT_M
293  LCDMix_4Bit(ch & 0b11110000);
294  LDPRS |=1<<LCD_RS;
295  LDPE |=1<<LCD_E;
296  _delay_ms(1);
297  LDPE &=~(1<<LCD_E);
298  LDPRS &=~(1<<LCD_RS);
299  _delay_ms(1);
300  LCDMix_4Bit((ch & 0b00001111)<<4);
301  LDPRS |=1<<LCD_RS;
302  LDPE |=1<<LCD_E;
303  _delay_ms(1);
304  LDPE &=~(1<<LCD_E);
305  LDPRS &=~(1<<LCD_RS);
306  _delay_ms(1);
307 #endif
308 #ifdef LCD_8BIT_M
309  LCDMix_8Bit(ch);
310  LDPRS |=1<<LCD_RS;
311  LDPE |=1<<LCD_E;
312  _delay_ms(1);
313  LDPE &=~(1<<LCD_E);
314  LDPRS &=~(1<<LCD_RS);
315  _delay_ms(1);
316 #endif
317 }
318 void LCDsendCommand(uint8_t cmd) //Sends Command to LCD
319 {
320 #ifdef LCD_4BIT
321  //4 bit part
322  LDP=(cmd & 0b11110000);
323  LCP|=1<<LCD_E;
324  _delay_ms(1);
325  LCP&=~(1<<LCD_E);
326  _delay_ms(1);
327  LDP=((cmd & 0b00001111)<<4);
328  LCP|=1<<LCD_E;
329  _delay_ms(1);
330  LCP&=~(1<<LCD_E);
331  _delay_ms(1);
332 #endif
333 #ifdef LCD_8BIT
334  //8 bit part
335  LDP=cmd;
336  LCP|=1<<LCD_E;
337  _delay_ms(1);
338  LCP&=~(1<<LCD_E);
339  _delay_ms(1);
340 #endif
341 #ifdef LCD_4BIT_M
342  LCDMix_4Bit(cmd & 0b11110000);
343  LDPE |=1<<LCD_E;
344  _delay_ms(1);
345  LDPE &=~(1<<LCD_E);
346  _delay_ms(1);
347  LCDMix_4Bit((cmd & 0b00001111)<<4);
348  LDPE |=1<<LCD_E;
349  _delay_ms(1);
350  LDPE &=~(1<<LCD_E);
351  _delay_ms(1);
352 #endif
353 #ifdef LCD_8BIT_M
354  LCDMix_8Bit(cmd);
355  LDPE |=1<<LCD_E;
356  _delay_ms(1);
357  LDPE &=~(1<<LCD_E);
358  _delay_ms(1);
359 #endif
360 }
361 void LCDclr(void) //Clears LCD
362 {
364 }
365 void LCDhome(void) //LCD cursor home
366 {
368 }
369 void LCDstring(uint8_t* data) //Outputs string to LCD
370 {
371  register uint8_t i, nBytes = 0;
372 
373  // check to make sure we have a good pointer
374  if (!data) return;
375  nBytes = strlen((char*)data);
376  // print data
377  for(i=0; i<nBytes; i++)
378  {
379  LCDsendChar(data[i]);
380  }
381 }
382 void LCDGotoXY(uint8_t x, uint8_t y) //Cursor to X Y position
383 {
384  register uint8_t DDRAMAddr;
385  // remap lines into proper order
386  switch(y)
387  {
388  case 0: DDRAMAddr = LCD_LINE0_DDRAMADDR+x; break;
389  case 1: DDRAMAddr = LCD_LINE1_DDRAMADDR+x; break;
390  case 2: DDRAMAddr = LCD_LINE2_DDRAMADDR+x; break;
391  case 3: DDRAMAddr = LCD_LINE3_DDRAMADDR+x; break;
392  default: DDRAMAddr = LCD_LINE0_DDRAMADDR+x;
393  }
394  // set data address
395  LCDsendCommand(1<<LCD_DDRAM | DDRAMAddr);
396 
397 }
398 //Copies string from flash memory to LCD at x y position
399 //const uint8_t welcomeln1[] PROGMEM="AVR LCD DEMO\0";
400 //CopyStringtoLCD(welcomeln1, 3, 1);
401 void CopyStringtoLCD(const uint8_t *FlashLoc, uint8_t x, uint8_t y)
402 {
403  uint8_t i;
404  LCDGotoXY(x,y);
405  for(i=0;(uint8_t)pgm_read_byte(&FlashLoc[i]);i++)
406  {
407  LCDsendChar((uint8_t)pgm_read_byte(&FlashLoc[i]));
408  }
409 }
410 //defines CHAR symbol in CGRAM
411 /*
412 const uint8_t backslash[] PROGMEM=
413 {
414 0b00000000,//back slash
415 0b00010000,
416 0b00001000,
417 0b00000100,
418 0b00000010,
419 0b00000001,
420 0b00000000,
421 0b00000000
422 };
423 LCDdefinechar(backslash,0);
424 */
425 void LCDdefinechar(const uint8_t *pc,uint8_t char_code){
426  uint8_t a, pcc;
427  uint16_t i;
428  a=(char_code<<3)|0x40;
429  for (i=0; i<8; i++){
430  pcc=pgm_read_byte(&pc[i]);
431  LCDsendCommand(a++);
432  LCDsendChar(pcc);
433  }
434 }
435 
436 void LCDshiftLeft(uint8_t n) //Scrol n of characters Right
437 {
438  for (uint8_t i=0;i<n;i++)
439  {
440  LCDsendCommand(0x1E);
441  }
442 }
443 void LCDshiftRight(uint8_t n) //Scrol n of characters Left
444 {
445  for (uint8_t i=0;i<n;i++)
446  {
447  LCDsendCommand(0x18);
448  }
449 }
450 void LCDcursorOn(void) //displays LCD cursor
451 {
452  LCDsendCommand(0x0E);
453 }
454 void LCDcursorOnBlink(void) //displays LCD blinking cursor
455 {
456  LCDsendCommand(0x0F);
457 }
458 void LCDcursorOFF(void) //turns OFF cursor
459 {
460  LCDsendCommand(0x0C);
461 }
462 void LCDblank(void) //blanks LCD
463 {
464  LCDsendCommand(0x08);
465 }
466 void LCDvisible(void) //Shows LCD
467 {
468  LCDsendCommand(0x0C);
469 }
470 void LCDcursorLeft(uint8_t n) //Moves cursor by n poisitions left
471 {
472  for (uint8_t i=0;i<n;i++)
473  {
474  LCDsendCommand(0x10);
475  }
476 }
477 void LCDcursorRight(uint8_t n) //Moves cursor by n poisitions left
478 {
479  for (uint8_t i=0;i<n;i++)
480  {
481  LCDsendCommand(0x14);
482  }
483 }
484 //adapted fro mAVRLIB
485 void LCDprogressBar(uint8_t progress, uint8_t maxprogress, uint8_t length)
486 {
487  uint8_t i;
488  uint16_t pixelprogress;
489  uint8_t c;
490 
491  // draw a progress bar displaying (progress / maxprogress)
492  // starting from the current cursor position
493  // with a total length of "length" characters
494  // ***note, LCD chars 0-5 must be programmed as the bar characters
495  // CHAR 0 = empty ... CHAR 5 = full
496 
497  // total pixel length of bargraph equals length*PROGRESSPIXELS_PER_CHAR;
498  // pixel length of bar itself is
499  pixelprogress = ((progress*(length*PROGRESSPIXELS_PER_CHAR))/maxprogress);
500 
501  // print exactly "length" characters
502  for(i=0; i<length; i++)
503  {
504  // check if this is a full block, or partial or empty
505  // (u16) cast is needed to avoid sign comparison warning
506  if( ((i*(uint16_t)PROGRESSPIXELS_PER_CHAR)+5) > pixelprogress )
507  {
508  // this is a partial or empty block
509  if( ((i*(uint16_t)PROGRESSPIXELS_PER_CHAR)) > pixelprogress )
510  {
511  // this is an empty block
512  // use space character?
513  c = 0;
514  }
515  else
516  {
517  // this is a partial block
518  c = pixelprogress % PROGRESSPIXELS_PER_CHAR;
519  }
520  }
521  else
522  {
523  // this is a full block
524  c = 5;
525  }
526 
527  // write character to display
528  LCDsendChar(c);
529  }
530 
531 }
#define LCD_D3
Definition: lcd_lib.h:43
void LCDcursorLeft(uint8_t n)
Definition: lcd_lib.c:470
void LCDstring(uint8_t *data)
Definition: lcd_lib.c:369
#define LDP
Definition: lcd_lib.h:77
#define LCD_D2
Definition: lcd_lib.h:42
#define LDDR
Definition: lcd_lib.h:79
void LCDshiftRight(uint8_t n)
Definition: lcd_lib.c:443
void LCDcursorRight(uint8_t n)
Definition: lcd_lib.c:477
void LCDprogressBar(uint8_t progress, uint8_t maxprogress, uint8_t length)
Definition: lcd_lib.c:485
#define LCD_LINE3_DDRAMADDR
Definition: lcd_lib.h:110
void LCDblank(void)
Definition: lcd_lib.c:462
void LCDshiftLeft(uint8_t n)
Definition: lcd_lib.c:436
void LCDsendCommand(uint8_t cmd)
Definition: lcd_lib.c:318
#define LCD_CLR
Definition: lcd_lib.h:84
#define LCD_DDRAM
Definition: lcd_lib.h:101
#define LCDR
Definition: lcd_lib.h:80
#define LCD_RS
Definition: lcd_lib.h:37
#define LCD_LINE2_DDRAMADDR
Definition: lcd_lib.h:109
#define LCD_D0
Definition: lcd_lib.h:40
#define LCD_D5
Definition: lcd_lib.h:45
void LCDclr(void)
Definition: lcd_lib.c:361
void LCDinit(void)
Definition: lcd_lib.c:80
#define LCD_D4
Definition: lcd_lib.h:44
void LCDcursorOnBlink(void)
Definition: lcd_lib.c:454
#define LCD_LINE1_DDRAMADDR
Definition: lcd_lib.h:108
void CopyStringtoLCD(const uint8_t *FlashLoc, uint8_t x, uint8_t y)
Definition: lcd_lib.c:401
#define LCD_LINE0_DDRAMADDR
Definition: lcd_lib.h:107
void LCDsendChar(uint8_t ch)
Definition: lcd_lib.c:262
void LCDcursorOFF(void)
Definition: lcd_lib.c:458
void LCDcursorOn(void)
Definition: lcd_lib.c:450
void LCDdefinechar(const uint8_t *pc, uint8_t char_code)
Definition: lcd_lib.c:425
#define LCD_HOME
Definition: lcd_lib.h:85
#define LCP
Definition: lcd_lib.h:78
void LCDvisible(void)
Definition: lcd_lib.c:466
#define LCD_E
Definition: lcd_lib.h:39
#define PROGRESSPIXELS_PER_CHAR
Definition: lcd_lib.h:112
#define LCD_D6
Definition: lcd_lib.h:46
#define LCD_D1
Definition: lcd_lib.h:41
#define LCD_D7
Definition: lcd_lib.h:47
void LCDGotoXY(uint8_t x, uint8_t y)
Definition: lcd_lib.c:382
#define LCD_RW
Definition: lcd_lib.h:38
void LCDhome(void)
Definition: lcd_lib.c:365