| 6 | kaklik | 1 | // LCD modul pro ovladani dvouradkoveho LCD modulu se standardnim Hitachi radicem
 | 
        
           |  |  | 2 | // (c)miho 2002,2005
 | 
        
           |  |  | 3 | //
 | 
        
           |  |  | 4 | // Historie:
 | 
        
           |  |  | 5 | //
 | 
        
           |  |  | 6 | // 0.00  Uvodni verze se snadnou definici portu LCD displeje
 | 
        
           |  |  | 7 | // 0.01  Oprava portu (zapomenute stare identifikatory)
 | 
        
           |  |  | 8 | // 0.02  Doplnena moznost pripojeni datoveho portu LCD na libovolne porty
 | 
        
           |  |  | 9 | // 0.03  Doplnena procedura lcd_clr pro smazani displeje
 | 
        
           |  |  | 10 | //
 | 
        
           |  |  | 11 | //
 | 
        
           |  |  | 12 | // Funkce:
 | 
        
           |  |  | 13 | //
 | 
        
           |  |  | 14 | //   lcd_init()            inicializuje LCD displej a porty, nutno volat jako prvni
 | 
        
           |  |  | 15 | //
 | 
        
           |  |  | 16 | //   lcd_putc(c)           zapis snaku do lcd displeje, zpracovava nasledujici ridici znaky
 | 
        
           |  |  | 17 | //                         \f = \x0C   - nova stranka - smazani displeje
 | 
        
           |  |  | 18 | //                         \n = \x0A   - odradkovani (prechod na druhou radku)
 | 
        
           |  |  | 19 | //                         \b = \x08   - backspace - posunuti kurzoru o 1 pozici zpet
 | 
        
           |  |  | 20 | //                         \r = \x0D   - goto home to position 1,1
 | 
        
           |  |  | 21 | //                         \0  .. \7   - definovatelne znaky v pozicich 0 az 7 v CGRAM
 | 
        
           |  |  | 22 | //                         \20 .. \27  - alternativne zapsane znaky (oktalove) v pozicich 0 az 7 CGRAM
 | 
        
           |  |  | 23 | //                         Pozor na to, ze funkce printf konci tisk pokud narazi na \0 (konec retezce)
 | 
        
           |  |  | 24 | //
 | 
        
           |  |  | 25 | //   lcd_gotoxy(x,y)       presune kurzor na uvedenou adresu
 | 
        
           |  |  | 26 | //                         nekontroluje parametry
 | 
        
           |  |  | 27 | //
 | 
        
           |  |  | 28 | //   lcd_cursor_on         zapne kurzor
 | 
        
           |  |  | 29 | //   lcd_cursor_off        vypne kurzor
 | 
        
           |  |  | 30 | //
 | 
        
           |  |  | 31 | //   lcd_clr               smaze displej
 | 
        
           |  |  | 32 | //
 | 
        
           |  |  | 33 | //   lcd_define_char(Index, Def)       Makro, ktere definuje znaky od pozice Index obsahem definicniho
 | 
        
           |  |  | 34 | //                                     retezce Def. Kazdych 8 znaku retezce Def definuje dalsi znak v CGRAM.
 | 
        
           |  |  | 35 | //                                     Kapacita CGRAM je celkem 8 znaku s indexem 0 az 7.
 | 
        
           |  |  | 36 | //                                     Na konci se provede lcd_gotoxy(1,1).
 | 
        
           |  |  | 37 | //                                     Na konci teto knihovny je priklad pouziti definovanych znaku
 | 
        
           |  |  | 38 | //
 | 
        
           |  |  | 39 | //
 | 
        
           |  |  | 40 | // Definice portu:                     // Datovy port displeje pripojeny na 4 bity za sebou na jeden port
 | 
        
           |  |  | 41 | //
 | 
        
           |  |  | 42 | // #define LCD_RS          PIN_B2      // rizeni registru LCD displeje
 | 
        
           |  |  | 43 | // #define LCD_E           PIN_B1      // enable LCD displeje
 | 
        
           |  |  | 44 | // #define LCD_DATA_LSB    PIN_C2      // pripojeni LSB bitu datoveho portu LCD displeje (celkem 4 bity vzestupne za sebou)
 | 
        
           |  |  | 45 | //
 | 
        
           |  |  | 46 | //
 | 
        
           |  |  | 47 | // Alternativni definice:              // Datovy port displeje pripojeny na libovolne 4 bitove porty (vede na kod delsi asi o 25 slov)
 | 
        
           |  |  | 48 | //
 | 
        
           |  |  | 49 | // #define LCD_RS          PIN_B2      // rizeni registru LCD displeje
 | 
        
           |  |  | 50 | // #define LCD_E           PIN_B1      // enable LCD displeje
 | 
        
           |  |  | 51 | // #define LCD_D0          PIN_C2      // D0 - datove bity pripojene na libovolne porty
 | 
        
           |  |  | 52 | // #define LCD_D1          PIN_C3      // D1
 | 
        
           |  |  | 53 | // #define LCD_D2          PIN_C4      // D2
 | 
        
           |  |  | 54 | // #define LCD_D3          PIN_C5      // D3
 | 
        
           |  |  | 55 |   | 
        
           |  |  | 56 |   | 
        
           |  |  | 57 |   | 
        
           |  |  | 58 |   | 
        
           |  |  | 59 | // Privatni sekce, cist jen v pripade, ze neco nefunguje
 | 
        
           |  |  | 60 |   | 
        
           |  |  | 61 |   | 
        
           |  |  | 62 |   | 
        
           |  |  | 63 |   | 
        
           |  |  | 64 | #ifdef LCD_DATA_LSB
 | 
        
           |  |  | 65 | // Generovane defince portu pro ucely teto knihovny aby kod generoval spravne IO operace a soucasne
 | 
        
           |  |  | 66 | // bylo mozne jednoduse deklarovat pripojene piny LCD displeje pri pouziti teto knihovny. Problem spociva
 | 
        
           |  |  | 67 | // v tom, ze se musi spravne ridit smery portu a soucasne datovy port zabira jen 4 bity ze zadaneho portu
 | 
        
           |  |  | 68 | //
 | 
        
           |  |  | 69 | #define LCD_SHIFT (LCD_DATA_LSB&7)                 // pocet bitu posuvu datoveho kanalu v datovem portu
 | 
        
           |  |  | 70 | #define LCD_PORT  (LCD_DATA_LSB>>3)                // adresa LCD datoveho portu
 | 
        
           |  |  | 71 | #define LCD_TRIS  (LCD_PORT+0x80)                  // adresa prislusneho TRIS registru
 | 
        
           |  |  | 72 | #define LCD_MASK  (0xF<<LCD_SHIFT)                 // maska platnych bitu
 | 
        
           |  |  | 73 | //
 | 
        
           |  |  | 74 | #if LCD_SHIFT>4                                    // kontrola mezi
 | 
        
           |  |  | 75 | #error LCD data port LSB bit not in range 0..4
 | 
        
           |  |  | 76 | #endif
 | 
        
           |  |  | 77 | #endif
 | 
        
           |  |  | 78 |   | 
        
           |  |  | 79 |   | 
        
           |  |  | 80 | // Definice konstant pro LCD display
 | 
        
           |  |  | 81 | //
 | 
        
           |  |  | 82 | #define LCD_CURSOR_ON_  0x0E     // kurzor jako blikajici radka pod znakem
 | 
        
           |  |  | 83 | #define LCD_CURSOR_OFF_ 0x0C     // zadny kurzor
 | 
        
           |  |  | 84 | #define LCD_LINE_2      0x40     // adresa 1. znaku 2. radky
 | 
        
           |  |  | 85 |   | 
        
           |  |  | 86 |   | 
        
           |  |  | 87 | // Definice rezimu LCD displeje
 | 
        
           |  |  | 88 | //
 | 
        
           |  |  | 89 | BYTE const LCD_INIT_STRING[4] =
 | 
        
           |  |  | 90 | {
 | 
        
           |  |  | 91 |    0x28,                         // intrfejs 4 bity, 2 radky, font 5x7
 | 
        
           |  |  | 92 |    LCD_CURSOR_OFF_,              // display on, kurzor off,
 | 
        
           |  |  | 93 |    0x01,                         // clear displeje
 | 
        
           |  |  | 94 |    0x06                          // inkrement pozice kurzoru (posun kurzoru doprava)
 | 
        
           |  |  | 95 | };
 | 
        
           |  |  | 96 |   | 
        
           |  |  | 97 |   | 
        
           |  |  | 98 | // Odesle nibble do displeje (posle data a klikne signalem e)
 | 
        
           |  |  | 99 | //
 | 
        
           |  |  | 100 | void lcd_send_nibble( BYTE n )
 | 
        
           |  |  | 101 | {
 | 
        
           |  |  | 102 |    #ifdef LCD_DATA_LSB
 | 
        
           |  |  | 103 |       // data jsou za sebou na 4 bitech jednoho portu
 | 
        
           |  |  | 104 |       *LCD_PORT = (*LCD_PORT & ~LCD_MASK) | ((n << LCD_SHIFT) & LCD_MASK);      // nastav datove bity portu a ostatni zachovej
 | 
        
           |  |  | 105 |    #else
 | 
        
           |  |  | 106 |       // data jsou na libovolnych 4 bitech libovolnych portu
 | 
        
           |  |  | 107 |       output_bit(LCD_D0,bit_test(n,0));
 | 
        
           |  |  | 108 |       output_bit(LCD_D1,bit_test(n,1));
 | 
        
           |  |  | 109 |       output_bit(LCD_D2,bit_test(n,2));
 | 
        
           |  |  | 110 |       output_bit(LCD_D3,bit_test(n,3));
 | 
        
           |  |  | 111 |    #endif
 | 
        
           |  |  | 112 |    output_bit(LCD_E,1);       // vzestupna hrana
 | 
        
           |  |  | 113 |    delay_us(1);               // pockej alespon 450ns od e nebo alespon 195ns od dat
 | 
        
           |  |  | 114 |    output_bit(LCD_E,0);       // sestupna hrana (minimalni perioda e je 1us)
 | 
        
           |  |  | 115 | }
 | 
        
           |  |  | 116 |   | 
        
           |  |  | 117 |   | 
        
           |  |  | 118 | // Odesle bajt do registru LCD
 | 
        
           |  |  | 119 | //
 | 
        
           |  |  | 120 | // Pokud je Adr=0 .. instrukcni registr
 | 
        
           |  |  | 121 | // Pokud je Adr=1 .. datovy registr
 | 
        
           |  |  | 122 | //
 | 
        
           |  |  | 123 | void lcd_send_byte( BOOLEAN Adr, BYTE n )
 | 
        
           |  |  | 124 | {
 | 
        
           |  |  | 125 |    output_bit(LCD_RS,Adr);    // vyber registr
 | 
        
           |  |  | 126 |    swap(n);
 | 
        
           |  |  | 127 |    lcd_send_nibble(n);        // posli horni pulku bajtu
 | 
        
           |  |  | 128 |    swap(n);
 | 
        
           |  |  | 129 |    lcd_send_nibble(n);        // posli spodni pulku bajtu
 | 
        
           |  |  | 130 |    delay_us(40);              // minimalni doba na provedeni prikazu
 | 
        
           |  |  | 131 | }
 | 
        
           |  |  | 132 |   | 
        
           |  |  | 133 |   | 
        
           |  |  | 134 | // Provede inicializaci LCD displeje, smaze obsah a nastavi mod displeje
 | 
        
           |  |  | 135 | //
 | 
        
           |  |  | 136 | // Tato procedura se musi volat pred pouzitim ostatnich lcd_ procedur
 | 
        
           |  |  | 137 | //
 | 
        
           |  |  | 138 | void lcd_init()
 | 
        
           |  |  | 139 | {
 | 
        
           |  |  | 140 |   | 
        
           |  |  | 141 |    int i;                              // pocitadlo cyklu
 | 
        
           |  |  | 142 |   | 
        
           |  |  | 143 |    delay_ms(20);                       // spozdeni pro provedeni startu displeje po zapnuti napajeni
 | 
        
           |  |  | 144 |   | 
        
           |  |  | 145 | #ifdef LCD_DATA_LSB
 | 
        
           |  |  | 146 |    // data jsou na 4 bitech za sebou, nastav smer pro vsechny dalsi prenosy
 | 
        
           |  |  | 147 |    *LCD_TRIS = *LCD_TRIS & ~LCD_MASK;  // nuluj odpovidajici bity tris registru datoveho portu LCD
 | 
        
           |  |  | 148 | #endif
 | 
        
           |  |  | 149 |   | 
        
           |  |  | 150 |    output_bit(LCD_RS,0);               // nastav jako vystup a nastav klidovy stav
 | 
        
           |  |  | 151 |    output_bit(LCD_E, 0);               // nastav jako vystup a nastav klidovy stav
 | 
        
           |  |  | 152 |   | 
        
           |  |  | 153 |    for (i=0; i<3; i++)                 // nastav lcd do rezimu 8 bitu sbernice
 | 
        
           |  |  | 154 |    {
 | 
        
           |  |  | 155 |       delay_ms(2);                     // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel
 | 
        
           |  |  | 156 |       lcd_send_nibble(3);              // rezim 8 bitu
 | 
        
           |  |  | 157 |    }
 | 
        
           |  |  | 158 |   | 
        
           |  |  | 159 |    delay_us(40);                       // cas na zpracovani
 | 
        
           |  |  | 160 |    lcd_send_nibble(2);                 // nastav rezim 4 bitu (plati od nasledujiciho prenosu)
 | 
        
           |  |  | 161 |    delay_us(40);                       // cas na zpracovani
 | 
        
           |  |  | 162 |   | 
        
           |  |  | 163 |    for (i=0;i<3;i++)                   // proved inicializaci (nastaveni modu, smazani apod)
 | 
        
           |  |  | 164 |    {
 | 
        
           |  |  | 165 |       lcd_send_byte(0,LCD_INIT_STRING[i]);
 | 
        
           |  |  | 166 |       delay_ms(2);
 | 
        
           |  |  | 167 |    }
 | 
        
           |  |  | 168 | }
 | 
        
           |  |  | 169 |   | 
        
           |  |  | 170 |   | 
        
           |  |  | 171 | // Proved presun kurzoru
 | 
        
           |  |  | 172 | //
 | 
        
           |  |  | 173 | // Pozice 1.1 je domu
 | 
        
           |  |  | 174 | //
 | 
        
           |  |  | 175 | void lcd_gotoxy( BYTE x, BYTE y)
 | 
        
           |  |  | 176 | {
 | 
        
           |  |  | 177 |   | 
        
           |  |  | 178 |    BYTE Adr;
 | 
        
           |  |  | 179 |   | 
        
           |  |  | 180 |    Adr=x-1;
 | 
        
           |  |  | 181 |    if(y==2)
 | 
        
           |  |  | 182 |      Adr+=LCD_LINE_2;
 | 
        
           |  |  | 183 |   | 
        
           |  |  | 184 |    lcd_send_byte(0,0x80|Adr);
 | 
        
           |  |  | 185 | }
 | 
        
           |  |  | 186 |   | 
        
           |  |  | 187 |   | 
        
           |  |  | 188 | // Zapis znaku na displej, zpracovani ridicich znaku
 | 
        
           |  |  | 189 | //
 | 
        
           |  |  | 190 | void lcd_putc( char c)
 | 
        
           |  |  | 191 | {
 | 
        
           |  |  | 192 |   | 
        
           |  |  | 193 |    switch (c)
 | 
        
           |  |  | 194 |    {
 | 
        
           |  |  | 195 |       case '\f'   : lcd_send_byte(0,1);            // smaz displej
 | 
        
           |  |  | 196 |                     delay_ms(2);
 | 
        
           |  |  | 197 |                                             break;
 | 
        
           |  |  | 198 |       case '\n'   : lcd_gotoxy(1,2);        break; // presun se na 1. znak 2. radky
 | 
        
           |  |  | 199 |       case '\r'   : lcd_gotoxy(1,1);        break; // presun home
 | 
        
           |  |  | 200 |       case '\b'   : lcd_send_byte(0,0x10);  break; // posun kurzor o 1 zpet
 | 
        
           |  |  | 201 |       default     : if (c<0x20) c&=0x7;            // preklopeni definovatelnych znaku na rozsah 0 az 0x1F
 | 
        
           |  |  | 202 |                     lcd_send_byte(1,c);     break; // zapis znak
 | 
        
           |  |  | 203 |    }
 | 
        
           |  |  | 204 | }
 | 
        
           |  |  | 205 |   | 
        
           |  |  | 206 |   | 
        
           |  |  | 207 | // Zapni kurzor
 | 
        
           |  |  | 208 | //
 | 
        
           |  |  | 209 | void lcd_cursor_on()
 | 
        
           |  |  | 210 | {
 | 
        
           |  |  | 211 |    lcd_send_byte(0,LCD_CURSOR_ON_);
 | 
        
           |  |  | 212 | }
 | 
        
           |  |  | 213 |   | 
        
           |  |  | 214 |   | 
        
           |  |  | 215 | // Vypni kurzor
 | 
        
           |  |  | 216 | //
 | 
        
           |  |  | 217 | void lcd_cursor_off()
 | 
        
           |  |  | 218 | {
 | 
        
           |  |  | 219 |    lcd_send_byte(0,LCD_CURSOR_OFF_);
 | 
        
           |  |  | 220 | }
 | 
        
           |  |  | 221 |   | 
        
           |  |  | 222 |   | 
        
           |  |  | 223 | // Smaz displej
 | 
        
           |  |  | 224 | //
 | 
        
           |  |  | 225 | void lcd_clr()
 | 
        
           |  |  | 226 | {
 | 
        
           |  |  | 227 |    lcd_putc('\f');
 | 
        
           |  |  | 228 | }
 | 
        
           |  |  | 229 |   | 
        
           |  |  | 230 |   | 
        
           |  |  | 231 | // Definice vlastnich fontu
 | 
        
           |  |  | 232 | //
 | 
        
           |  |  | 233 | // Vlastnich definic muze byt jen 8 do pozic 0 az 7 pameti CGRAM radice lcd displeje
 | 
        
           |  |  | 234 | // Pro snadne definovani jsou pripraveny nasledujici definice a na konci souboru je uveden
 | 
        
           |  |  | 235 | // priklad pouziti definovanych znaku.
 | 
        
           |  |  | 236 |   | 
        
           |  |  | 237 |   | 
        
           |  |  | 238 | // Pomocna procedura pro posilani ridicich dat do radice displeje
 | 
        
           |  |  | 239 | //
 | 
        
           |  |  | 240 | void lcd_putc2(int Data)
 | 
        
           |  |  | 241 | {
 | 
        
           |  |  | 242 |    lcd_send_byte(1,Data);
 | 
        
           |  |  | 243 | }
 | 
        
           |  |  | 244 |   | 
        
           |  |  | 245 |   | 
        
           |  |  | 246 | // Pomocne definice pro programovani obsahu CGRAM
 | 
        
           |  |  | 247 | //
 | 
        
           |  |  | 248 | #define lcd_define_start(Code)      lcd_send_byte(0,0x40+(Code<<3)); delay_ms(2)
 | 
        
           |  |  | 249 | #define lcd_define_def(String)      printf(lcd_putc2,String);
 | 
        
           |  |  | 250 | #define lcd_define_end()            lcd_send_byte(0,3); delay_ms(2)
 | 
        
           |  |  | 251 |   | 
        
           |  |  | 252 |   | 
        
           |  |  | 253 | // Vlastni vykonne makro pro definovani fontu do pozice Index CGRAM s definicnim retezcem Def
 | 
        
           |  |  | 254 | //
 | 
        
           |  |  | 255 | #define lcd_define_char(Index, Def) lcd_define_start(Index); lcd_define_def(Def); lcd_define_end();
 | 
        
           |  |  | 256 |   | 
        
           |  |  | 257 |   | 
        
           |  |  | 258 | // Pripravene definice fontu vybranych znaku
 | 
        
           |  |  | 259 | // V tabulce nesmi byt 00 (konec retezce v printf()), misto toho davame 80
 | 
        
           |  |  | 260 | //
 | 
        
           |  |  | 261 | #define LCD_CHAR_BAT100 "\x0E\x1F\x1F\x1F\x1F\x1F\x1F\x1F"      /* symbol plne baterie       */
 | 
        
           |  |  | 262 | #define LCD_CHAR_BAT50  "\x0E\x1F\x11\x11\x13\x17\x1F\x1F"      /* symbol polovicni baterie  */
 | 
        
           |  |  | 263 | #define LCD_CHAR_BAT0   "\x0E\x1F\x11\x11\x11\x11\x11\x1F"      /* symbol vybite baterie     */
 | 
        
           |  |  | 264 | #define LCD_CHAR_UP     "\x80\x04\x0E\x15\x04\x04\x04\x80"      /* symbol sipka nahoru       */
 | 
        
           |  |  | 265 | #define LCD_CHAR_DOWN   "\x80\x04\x04\x04\x15\x0E\x04\x80"      /* symbol Sipka dolu         */
 | 
        
           |  |  | 266 | #define LCD_CHAR_LUA    "\x04\x0E\x11\x11\x1F\x11\x11\x80"      /* A s carkou                */
 | 
        
           |  |  | 267 | #define LCD_CHAR_LLA    "\x01\x02\x0E\x01\x1F\x11\x0F\x80"      /* a s carkou                */
 | 
        
           |  |  | 268 | #define LCD_CHAR_HUC    "\x0A\x0E\x11\x10\x10\x11\x0E\x80"      /* C s hackem                */
 | 
        
           |  |  | 269 | #define LCD_CHAR_HLC    "\x0A\x04\x0E\x10\x10\x11\x0E\x80"      /* c s hackem                */
 | 
        
           |  |  | 270 | #define LCD_CHAR_HUD    "\x0A\x1C\x12\x11\x11\x12\x1C\x80"      /* D s hackem                */
 | 
        
           |  |  | 271 | #define LCD_CHAR_HLD    "\x05\x03\x0D\x13\x11\x11\x0F\x80"      /* d s hackem                */
 | 
        
           |  |  | 272 | #define LCD_CHAR_LUE    "\x04\x1F\x10\x10\x1E\x10\x1F\x80"      /* E s carkou                */
 | 
        
           |  |  | 273 | #define LCD_CHAR_LLE    "\x01\x02\x0E\x11\x1F\x10\x0E\x80"      /* e s carkou                */
 | 
        
           |  |  | 274 | #define LCD_CHAR_HUE    "\x0A\x1F\x10\x1E\x10\x10\x1F\x80"      /* E s hackem                */
 | 
        
           |  |  | 275 | #define LCD_CHAR_HLE    "\x0A\x04\x0E\x11\x1F\x10\x0E\x80"      /* e s hackem                */
 | 
        
           |  |  | 276 | #define LCD_CHAR_LUI    "\x04\x0E\x04\x04\x04\x04\x0E\x80"      /* I s carkou                */
 | 
        
           |  |  | 277 | #define LCD_CHAR_LLI    "\x02\x04\x80\x0C\x04\x04\x0E\x80"      /* i s carkou                */
 | 
        
           |  |  | 278 | #define LCD_CHAR_HUN    "\x0A\x15\x11\x19\x15\x13\x11\x80"      /* N s hackem                */
 | 
        
           |  |  | 279 | #define LCD_CHAR_HLN    "\x0A\x04\x16\x19\x11\x11\x11\x80"      /* n s hackem                */
 | 
        
           |  |  | 280 | #define LCD_CHAR_LUO    "\x04\x0E\x11\x11\x11\x11\x0E\x80"      /* O s carkou                */
 | 
        
           |  |  | 281 | #define LCD_CHAR_LLO    "\x02\x04\x0E\x11\x11\x11\x0E\x80"      /* o s carkou                */
 | 
        
           |  |  | 282 | #define LCD_CHAR_HUR    "\x0A\x1E\x11\x1E\x14\x12\x11\x80"      /* R s hackem                */
 | 
        
           |  |  | 283 | #define LCD_CHAR_HLR    "\x0A\x04\x16\x19\x10\x10\x10\x80"      /* r s hackem                */
 | 
        
           |  |  | 284 | #define LCD_CHAR_HUS    "\x0A\x0F\x10\x0E\x01\x01\x1E\x80"      /* S s hackem                */
 | 
        
           |  |  | 285 | #define LCD_CHAR_HLS    "\x0A\x04\x0E\x10\x0E\x01\x1E\x80"      /* s s hackem                */
 | 
        
           |  |  | 286 | #define LCD_CHAR_HUT    "\x0A\x1F\x04\x04\x04\x04\x04\x80"      /* T s hackem                */
 | 
        
           |  |  | 287 | #define LCD_CHAR_HLT    "\x0A\x0C\x1C\x08\x08\x09\x06\x80"      /* t s hackem                */
 | 
        
           |  |  | 288 | #define LCD_CHAR_LUU    "\x02\x15\x11\x11\x11\x11\x0E\x80"      /* U s carkou                */
 | 
        
           |  |  | 289 | #define LCD_CHAR_LLU    "\x02\x04\x11\x11\x11\x13\x0D\x80"      /* u s carkou                */
 | 
        
           |  |  | 290 | #define LCD_CHAR_CUU    "\x06\x17\x11\x11\x11\x11\x0E\x80"      /* U s krouzkem              */
 | 
        
           |  |  | 291 | #define LCD_CHAR_CLU    "\x06\x06\x11\x11\x11\x11\x0E\x80"      /* u s krouzkem              */
 | 
        
           |  |  | 292 | #define LCD_CHAR_LUY    "\x02\x15\x11\x0A\x04\x04\x04\x80"      /* Y s carkou                */
 | 
        
           |  |  | 293 | #define LCD_CHAR_LLY    "\x02\x04\x11\x11\x0F\x01\x0E\x80"      /* y s carkou                */
 | 
        
           |  |  | 294 | #define LCD_CHAR_HUZ    "\x0A\x1F\x01\x02\x04\x08\x1F\x80"      /* Z s hackem                */
 | 
        
           |  |  | 295 | #define LCD_CHAR_HLZ    "\x0A\x04\x1F\x02\x04\x08\x1F\x80"      /* z s hackem                */
 | 
        
           |  |  | 296 |   | 
        
           |  |  | 297 |   | 
        
           |  |  | 298 | // Priklad pouziti definovanych znaku
 | 
        
           |  |  | 299 | //
 | 
        
           |  |  | 300 | //
 | 
        
           |  |  | 301 | //void lcd_sample()
 | 
        
           |  |  | 302 | //{
 | 
        
           |  |  | 303 | //   lcd_define_char(0,LCD_CHAR_BAT50);                 // Priklad definice znaku baterie do pozice 0
 | 
        
           |  |  | 304 | //   lcd_define_char(2,LCD_CHAR_HLE LCD_CHAR_LUI);      // Priklad definice znaku e s hackem a I s carkou od pozice 2
 | 
        
           |  |  | 305 | //                                                      // vsimnete si, ze neni carka mezi retezci s definici (oba retezce definuji
 | 
        
           |  |  | 306 | //                                                      // jediny definicni retezec)
 | 
        
           |  |  | 307 | //   printf(lcd_putc,"\fZnaky:\20\22\23");              // priklad vypisu znaku z pozice 0, 2 a 3
 | 
        
           |  |  | 308 | //   delay_ms(1000);
 | 
        
           |  |  | 309 | //   lcd_define_char(0,LCD_CHAR_BAT0);                  // Predefinovani tvaru znaku v pozici 0
 | 
        
           |  |  | 310 | //   delay_ms(1000);
 | 
        
           |  |  | 311 | //}
 |