Většina LCD displejů umožňuje uživateli zapsat do RAM nebo EEPROM řadiče displeje data a ty se pak zobrazují jako uživatelské (speciální, grafické) znaky. Bývá jich obvykle 8 nebo 16 a jejich adresy jsou namapovány do oblasti, kde má ASCII tabulka řídící symboly (obvykle adresy 0 -7 nebo 0 – 15). K čemu je to dobré a jak to využít ve spolupráci s PICAXE?
Jako příklad použijeme displej WD-C1602L-7GNNa s řadičem ST7066, ten má možnost uložit do paměti generátoru 8 uživatelských znaků s kódy 0 – 7. V našem případě jde o paměť RAM, takže po vypnutí napájení se vždy musí obsah do této paměti zavést znovu. U displejů s pamětí EEPROM stačí jednou znaky zavést a pak se mohou používat bez ohledu na vypínání napájení.
V jednom okamžiku nemůžeme na displeji zobrazit více než 8 (různých) uživatelských znaků, mikrokontroléru ale nic nebrání za chodu programu sadu uživatelských znaků změnit podle potřeby. To platí pro znaky v RAM, pokud jsou v EEPROM, jde to v principu udělat také, ale počet zápisů do EEPROM je mnohem menší než do RAM, takže když to bude mikrokontrolér dělat příliš často, může se vyčerpat životnost řadiče displeje a paměť EEPROM potom selže.
Pokud generátor znaků neobsahuje znaky s českou diakritikou, lze uživatelské znaky využít právě k jejich částečnému nahrazení (nevejdou se všechny potřebné). Použijeme jiný příklad, připravíme si speciální symboly vyjadřující stav nabití baterie:
Jednotlivé symboly jsou uloženy od adresy uvedené pod obrázkem na druhém řádku, ukládají se po bytech shora dolů, nejnižší bit je vpravo (tři nejvyšší bity z každého bytu se nezobrazují). Je uveden pouze hlavní program, pod čarou pak podprogramy pro obsluhu displeje se čtyřmi datovými vodiči jak ukazuje schéma.
Program vypíše zleva do prvního řádku všechny zadané uživatelské znaky a pak na posledním znaku prvního řádku cyklicky zobrazuje animaci složenou z těchto znaků.
REM LCD displej 2x16 přes posuvný registr - PICAXE 20X2 REM ukládání uživatelských znaků a jejich použití - symbol baterie data 0, (%01110,%11011,%10001,%10001,%10001,%10001,%10001,%11111);prázdná data 8, (%01110,%11011,%10001,%10001,%10001,%10001,%11111,%11111); data 16,(%01110,%11011,%10001,%10001,%10001,%11111,%11111,%11111); data 24,(%01110,%11011,%10001,%10001,%11111,%11111,%11111,%11111); data 32,(%01110,%11011,%10001,%11111,%11111,%11111,%11111,%11111); data 40,(%01110,%11011,%11111,%11111,%11111,%11111,%11111,%11111); data 48,(%01110,%11111,%11111,%11111,%11111,%11111,%11111,%11111);plná gosub inicializace ;inicializace LCD b0=%01000000 ;nastavit adresu 0 paměti uživatelských znaků gosub zapis_povelu for b1=0 to 55 ;zápis sedmi uživatelských znaků read b1,b0 gosub zapis_znaku next b1 b0=1 gosub zapis_povelu ;smazání displeje, nastavení na začátek 1. ř. pause 100 for b1=0 to 6 ;výpis sedmi uživatelských znaků b0=b1 gosub zapis_znaku next b1 cyklus: ;animace nabíjení baterie for b1=0 to 6 let b0=143 gosub zapis_povelu ;poloha znaku let b0=b1 gosub zapis_znaku ;výběr znaku pause 500 next b1 goto cyklus end ;konec ukázky
inicializace: low c.0 ;zápis povelu let pinsB=%0011 ;8 bit režim jako základní pulsout c.1,1 ;zápis 1 pause 5 ;nutná prodleva pulsout c.1,1 ;zápis 2 pulsout c.1,1 ;zápis 3 let pinsB=%0010 ;4 bit režim nastavit pulsout c.1,1 ;nastaveno, lze používat podprogramy b0=%00101000 ;2 řádky, font 5x8 gosub zapis_povelu b0=%00000001 ;smazání displeje gosub zapis_povelu b0=%00001100 ;zapnutí displeje, kurzor ne, neblikat gosub zapis_povelu return zapis_znaku: ;zápis znaku z b0 high c.0 ;bude přenos znaku let pinsB=b0/16 ;nastavení horní poloviny bytu pulsout c.1,1 ;zápis horní poloviny bytu let pinsB=b0 and 15 ;nastavení dolní poloviny bytu pulsout c.1,1 ;zápis return zapis_povelu: ;zápis povelu z b0 low c.0 ;bude přenos povelu let pinsB=b0/16 ;nastavení horní poloviny bytu pulsout c.1,1 ;zápis horní poloviny bytu let pinsB=b0 and 15 ;nastavení dolní poloviny bytu pulsout c.1,1 ;zápis return