Uživatel často potřebuje přijímat nějaké vizuální informace z elektronického zařízení. Pokud lze informaci prezentovat v symbolické podobě, pak jednou z možností jejího zobrazení je použití symbolických indikátorů z tekutých krystalů (LCD, nebo v zahraničním označení LCD). Dnes budeme hovořit o symbolických indikátorech realizovaných na bázi kontrolérů Hitachi HD44780, Samsung KS 0066 a podobné.
Jako příklad uvedu LCD Winstar Wh1602D-TMI-CT#, které mám k dispozici pro provádění experimentů. O tomto LCD jsem se již zmiňoval v článku, jehož grafický vývoj dnes využiji.
Detailní datový list Na LCD WINSTAR WH1602D-TMI-CT:
Kategorie: | Dokumenty |
Datum: | 22.03.2015 |
Zjednodušený obvod LCD může být reprezentován následovně:
Základem indikátoru je matrice z tekutých krystalů, přivedením napětí na její prvek můžeme pozorovat bod na obrazovce. U znakových LCD se tato matice skládá z určitého počtu známých míst, která jsou seskupena do řádků a sloupců. Velikost známého místa v pixelech je často 5x8 pixelů. Označení mého indikátoru obsahuje čísla 1602 a to znamená, že můj indikátor může zobrazit 2 řádky po 16 znacích. Kódování také zahrnuje: kód výrobce a typ indikátoru, přítomnost podsvícení, barvu, tabulku kódů a tak dále.
Systém označení indikátorů WINSTAR
Zobrazit/skrýt legendu
1. Kód výrobce: WINSTAR DISPLAY CO,LTD
2. Typ indikátoru:
- H- symbolický (syntetizující znaky)
- C- grafická barva s pasivní maticí CSTN (ColorSTN)
- X- grafika s matricí TAB (Automatické lepení pásky– krystal je namontován na třívrstvé polyamidové podkladové pásce)
- Ó- grafika s matricí OZUBENÉ KOLO (čip Na Sklo- krystal na skle)
3. Horizontální rozlišení:
- počet znaků na řádek pro indikátory typu znaků
- počet vodorovných bodů pro indikátory grafického typu
4. Vertikální rozlišení:
- počet řádků pro indikátory typu postavy
- počet svislých bodů pro indikátory grafického typu
5. Kód modelu
- Kóduje geometrické rozměry používané ovladačem
6. Typ podsvícení:
- N- bez podsvícení
- B- elektroluminiscenční, barva záře - modrá
- D- elektroluminiscenční, barva záře - zelená
- W- elektroluminiscenční, barva záře - bílá
- Y— LED, barva svitu — žlutozelená
- A— LED, barva záře — jantarová
- R— LED, barva svitu — červená
- G— LED, barva svitu — zelená
- T— LED, barva žhavení — bílá
- P- LED, barva svitu - modrá
- F— lampa se studenou katodou (CCFL), barva světla — bílá
7. Technologie výroby LCD
- B- TN šedá, pozitivní
- N— TN, zápor
- G- STN šedá, pozitivní
- Y— STN žlutozelená, pozitivní
- M— STN modrá, negativní
- F— FSTN pozitivní
- T- FSTN negativní
- H- HTN šedá, pozitivní
- já— HTN černá, negativní
- TN (Twisted Nematic - Krystalová struktura má spirálový typ
- STN (Super Twisted Nematic) - matice skládající se z LCD prvků s proměnnou průhledností
- FSTN (Film kompenzovaný STN) — STN-matrice s filmovou kompenzací. Technologie umožňuje větší pozorovací úhel
- HTN (Homeotropní Twisted Nematic) - displeje jsou založeny na silnějším molekulárním zkroucení (typicky 110°) ve srovnání s konvenčními TN kroucenými nematicemi (90°). Poskytuje široký pozorovací úhel a vylepšený kontrast. Vlastnosti jsou lepší než technologie STN. Nízké provozní napětí (2,5 V a nejnižší cena mezi nematici činí jejich použití výhodné v přenosných samostatných zařízeních).
8. Polarizátor, pozorovací úhel, rozsah provozních teplot
- A— RF, 6:00, N.T.
- D- RF, 12:00, N.T.
- G- RF, 6:00, W.T.
- J— RF, 12:00, W.T.
- B— TF, 6:00, N.T.
- E— TF, 12:00, N.T.
- H— TF, 6:00, W.T.
- K— TF, 12:00, W.T.
- C— TM, 6:00, N.T.
- F— TM, 12:00, N.T.
- já— TM, 6:00, W.T.
- L- TM, 12:00, W.T.
- RF (Reflexní LCD) - LCD indikátor, který funguje pouze na odrazu světla. Obraz je viditelný pouze při dostatečném okolním osvětlení.
- TF - (Transflexní LCD) - displej z tekutých krystalů, který světlo odráží i vyzařuje (sám svítí).
- TM (Transmisivní LCD) - světlo vstupuje přes LCD ze strany podsvícení. Má vysokou kvalitu obrazu v interiéru a obvykle velmi špatnou (černá obrazovka) na slunci.
- N.T.— normální teplotní rozsah 0...+50ºC W.T.— rozšířený teplotní rozsah -20...+70ºC
9. Další možnosti
První dva znaky jsou generátor znaků:
- C.T./C.P.— latina/cyrilice
- EP/ET/E.E./EN/E.C./ES— latinský/evropský
- J.P./JT/JS/JN- latina/japonština
- HP/H.S.— hebrejsky
3–4 znaky:
- T- teplotní kompenzace
- E nebo EZ— edge BL (podsvícení LED jsou umístěny po obvodu). Může také chybět symbol.
- K nebo LB— eco BL (LED diody jsou umístěny rovnoměrně za obrazovkou)
- PROTI- vestavěný zdroj záporného napětí
- N- bez vestavěného zdroje záporného napětí
10. Další informace:
# - kompatibilita se standardem RoHS
Poznámka(výrobce čipu ovladače):
- xS - Samsung
- xP - Sunplus
- xT - Sitronix
- xE - Epson
- xU - UMC
Pomocí tohoto systému zápisu jsem zjistil, že mám v rukou indikátor syntetizující znak Winstar, zobrazení znaků v 16 sloupcích a 2 řádcích pomocí ovladače KS 0066 nebo jeho ekvivalent, s bílým LED osvětlením po obvodu, s modrým negativem transmisivní-matice, pozorovací úhel „v 6 hodinách“, rozsah provozních teplot -20...+70ºC s generátorem znaků, včetně azbuky a kompatibilní se standardem RoHS(neobsahuje žádné škodlivé složky, což zřejmě znamená, že při montáži byla použita bezolovnatá pájka).
Indikátory založené na ovladačích HD44780, KS066U
Indikátor je řízen vestavěným ovladačem. Ovladač je obvykle Hitachi HD44780, Samsung KS0066U nebo jejich četné analogy a klony. Indikátory vyráběné ruskou společností MELT používají ovladač PCF8576.
Řadič má jednobajtové paměťové buňky ( DDRAM), jejichž obsah se skutečně zobrazuje na obrazovce podle tabulky zaznamenané v CGRAM. Paměťových buněk je obvykle více než symbolů na LCD, takže je třeba věnovat pozornost adresování symbolů datový list. Potřebujeme napsat kód požadovaného symbolu na požadovanou pozici a ovladač se postará o zbytek sám.
Pro výběr pozice slouží virtuální kurzor ovládaný příkazy (číslo aktuální paměťové buňky, AC). Dá se to zviditelnit. Ve výchozím nastavení se při psaní znaku do buňky kurzor posune o jednu pozici dopředu.
Tabulka kódů indikátorů se obvykle skládá ze tří částí:
- 0×00-0×07 – generátor postav ke stažení, vámi vytvořené postavy
- 0×20-0xFF - ASCII kódy, standardní znaková sada a anglická abeceda
- 0xA0-0xFF - symboly národních abeced a další, s vynecháním znaků, které odpovídají anglickým.
Zobrazit/skrýt tabulku kódů s azbukou
Příklad: hexadecimální kód 0x4A odpovídá písmenu J, kód 0xB6 - písm a.
Nejvýznamnější čtyři bity určují sloupec vybraného znaku v tabulce, nejméně významné určují řádek. Můžete si vytvořit vlastní tabulku symbolů tak, že ji zapíšete CGRAM. Každý znak vyžaduje 5 bajtů (jeden bajt na sloupec). Jedničky v každém bajtu definují významné pixely. Například pro kódování čísel pixel po pixelu 8 budete potřebovat následující sekvenci: 0x6c,0×92,0×92,0×92,0x6c.
Konvertor azbuky
Chcete-li převést text obsahující znaky azbuky na kódy odpovídající výše uvedené tabulce, zadejte požadovaný text do textového pole. Níže získaný výsledek lze zkopírovat a použít ve vašich programech k zobrazení tohoto textu na LCD.
Původní text:
Kódovaný text:
Tabulka příkazových kódů:
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Účel |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Čištění obrazovky, A.C.=0, adresování A.C. na DDRAM |
0 | 0 | 0 | 0 | 0 | 0 | 1 | — | A.C.=0, adresování DDRAM, posuny jsou vymazány, začátek řádku je adresován na začátku DDRAM |
0 | 0 | 0 | 0 | 0 | 1 | I/D | S | Vybírá směr pohybu kurzoru nebo obrazovky |
0 | 0 | 0 | 0 | 1 | D | C | B | Vyberte režim zobrazení |
0 | 0 | 0 | 1 | S/C | R/L | — | — | Příkaz posunu kurzoru/obrazovky |
0 | 0 | 1 | D.L. | N | F | — | — | Definování parametrů skenování a šířky datové sběrnice |
0 | 1 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | Přiřazení k pultu A.C. adresy v regionu CGRAM |
1 | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | Přiřazení k pultu A.C. adresy v regionu DDRAM |
Tabulka hodnot příznaků:
Vlajka | Význam |
I/D | Režim offsetu čítače AC adresy, 0 - snížení, 1 - zvýšení |
S | Příznak režimu posunu obsahu obrazovky. 0 - obrazovka není posunuta, 1 - po zapsání dalšího kódu do DDRAM se obrazovka posune ve směru určeném příznakem I/D: 0 - doprava, 1 - doleva. Shift nemění obsah DDRAM. Změní se pouze vnitřní ukazatele na umístění viditelného začátku řádku v paměti DDRAM |
S/C | Příkaz Flag, který spolu s příznakem R/L provede operaci posunu obsahu obrazovky (stejně jako v předchozím případě, beze změn v DDRAM) nebo kurzoru. Definuje objekt posunutí: 0 — kurzor je posunut, 1 — obrazovka je posunuta |
R/L | Příkaz příznak, který společně s příznakem S/C provádí operaci posunu obrazovky nebo kurzoru. Určuje směr posunu: 0 — doleva, 1 — doprava |
D/L | Příznak definující šířku datové sběrnice: 0 - 4 bity, 1 - 8 bitů |
N | Režim skenování obrazu na LCD: 0 - jeden řádek, 1 - dva řádky |
F | Velikost matice znaků: 0 - 5×8 bodů, 1 - 5×10 bodů |
D | Přítomnost obrazu: 0 - zakázáno, 1 - povoleno |
C | Kurzor ve tvaru podtržítka: 0 - vypnuto, 1 - povoleno |
B | Kurzor v podobě blikajícího známého místa: 0 - vypnuto, 1 - zapnuto |
Přiřazení pinů ovladače:
- DB0-DB7— odpovědný za příchozí/odchozí data
- R.S.- vysoká úroveň znamená, že signál na výstupech DB0-DB7 je datový, nízká úroveň znamená příkaz
- W/R— určuje směr dat (čtení/zápis). Protože operace čtení dat z indikátoru je obvykle nenárokovaná, můžete tento vstup neustále nastavovat na nízkou úroveň
- E— puls s dobou trvání alespoň 500 ms na tomto pinu určuje signál pro čtení/zápis dat z pinů DB0-DB7, RS a W/R
- V 0— slouží k nastavení kontrastu obrazu
- A, K- napájení podsvícení (anoda a katoda), pokud je k dispozici
- V CC A GND- napájení pro LCD indikátor
K ovládání LCD indikátoru je zapotřebí 6 nebo 10 pinů, v závislosti na tom, zda je zvolen režim výměny dat 4 nebo 8 bitů. Chcete-li snížit požadovaný počet pinů mikrokontroléru, můžete pracovat ve 4bitovém režimu. V tomto případě na závěry DB4-DB7 Nejprve se přenesou čtyři nejvýznamnější bity dat/příkazu a poté čtyři nejméně významné bity. závěry DB0-DB3 zůstane nevyužitý.
Jeden ovladač ovládá omezený počet postav. Na indikační desce může být 1, 2, 4, 8 ovladačů a možná i více.
Dokumentace ovladače:
Ovladač Samsung KS0066U
Ovladač Hitachi HD44780
Kategorie: | Dokumenty |
Datum: | 21.03.2015 |
verze přeložená do ruštiny:
Kategorie: | Dokumenty |
Datum: | 21.03.2015 |
Indikátory od různých výrobců jsou často kompatibilní a zaměnitelné, mohou se však lišit rozměry, montáží, kontakty atd. Při výběru nového vývoje a hledání náhrady se proto prosím řiďte katalogy výrobce:
Tabulka kompatibility pro znakové LCD indikátory od různých výrobců:
Zobrazit/skrýt tabulku
Typ | Winstar | TÁT | Data Vision | Bolymin | Sluneční | Mikrošpičky | Wintek | Říše |
8×2 | WH0802A | MT-8S2A | DV-0802 | BC0802A | SC0802A | MTC-0802X | WM-C0802M | AC082A |
10×1 | — | MT-10S1 | — | — | — | — | — | — |
12×2 | WH1202A | — | — | BC1202A | — | — | — | — |
16×1 | WH1601A | — | DV-16100 | BC1601A1 | SC1601A | MTC-16100X | WM-C1601M | AC161A |
WH1601B | — | — | BC1601B | SC1601B | — | — | — | |
WH1601L | MT-16S1A | DV-16100 | BC1601D1 | SC1601D | MTC-16101X | WM-C1601Q | AC161B | |
— | — | DV-16120 | — | — | — | — | AC161J | |
16×2 | WH1602L | MT-16S2R | DV-16210 | BC1602E | SC1602E | MTC-16201X | WM-C1602Q | AC162E |
— | — | — | — | SC1602N | — | — | — | |
WH1602D | MT-16S2J | DV-16230 | BC1602B1 | SC1602B | MTC-16202X | WM-C1602N | AC162A | |
— | — | DV-16235 | — | — | MTC-16203X | — | — | |
WH1602C | MT-16S2D | DV-16236 | BC1602D | SC1602D | — | — | — | |
WH1602A | MT-16S2H | DV-16244 | BC1602H | SC1602C | MTC-16204X | WM-C1602K | — | |
WH1602B | — | DV-16252 | BC1602A | SC1602A | MTC-16205B | WM-C1602M | — | |
WH1602M | — | DV-16257 | BC1602F | SC81602F | — | — | — | |
— | — | DV-16275 | — | — | — | — | — | |
— | — | DV-16276 | — | — | — | — | — | |
16×4 | WH1604A | MT-16S4A | DV-16400 | BC1604A1 | SC1604A | MTC-16400X | WM-C1604M | AC164A |
WH1604B | — | — | — | — | — | — | — | |
20×1 | — | — | DV-20100 | — | — | — | — | — |
— | MT-20S1L | — | — | — | — | — | — | |
20×2 | WH2002A | MT-20S2A | DV-20200 | BC2002A | SC2002A | MTC-20200X | WM-C2002M | AC202A |
WH2002M | — | — | — | — | — | — | — | |
WH2002L | MT-20S2M | DV-20210 | BC2002B | SC2002C | MTC-20201X | WM-C2002P | AC202B | |
— | — | DV-20211 | — | — | — | — | AC202D | |
— | — | DV-20220 | — | — | — | — | — | |
— | — | DV-20206-1 | — | — | — | — | — | |
20×4 | WH2004A | MT-20S4A | DV-20400 | BC2004A | SC2004A | MTC-20400X | WM-C2004P | AC204A |
— | — | — | — | SC2004G | — | — | — | |
— | — | — | — | SC2004C | — | — | — | |
WH2004L | — | DV-20410 | BC2004B | — | MTC-20401X | WM-C2004R | AC204B | |
24×1 | — | MT-24S1L | — | — | — | — | — | — |
24×2 | WH2402A | MT-24S2A | DV-24200 | BC2402A | SC2402A | MTC-24200X | WM-C2402P | AC242A |
— | MT-24S2L | — | — | — | — | — | — | |
40×2 | WH4002A | — | DV-40200 | BC4002A | SC4002A | MTC-40200X | WM-C4002P | AC402A |
40×4 | WH4004A | — | DV40400 | BC4004A | SC4004A | MTC-40400X | WM-C4004M | AC404A |
— | — | — | — | SC4004C | — | — | — |
Napájení, nastavení kontrastu a podsvícení
Je třeba dávat pozor na polaritu připojení napájení k LCD indikátoru a také se ujistit, že napájecí napětí je v rozsahu +4,5...5,5 V. Nepozornost věnovaná těmto bodům může vést k selhání indikátoru!
LCD indikátory umožňují upravit kontrast pomocí děliče napětí. Před výstupem dat do indikátoru se musíte ujistit, že napětí řízení kontrastu je v provozním rozsahu. Hodnoty rezistorů se u různých výrobců LCD indikátorů liší. Některé modely indikátorů mají na desce místa pro instalaci takového děliče a stačí tam připájet požadované hodnoty odporu. Kontrast indikátoru závisí na úhlu pohledu. Pokud je indikátor „na dvanácté hodině“, musíte se na takový indikátor podívat tak, aby byl pod úrovní očí, pokud „nula hodin“, pak je určen pro pozorování v úrovni očí ( kolmo k rovině obrazovky). Pokud je indikátor „v šest hodin“, měl by být použit při pozorování nad úrovní očí. Tento bod je třeba vzít v úvahu při nákupu.
Výkon podsvícení
Pokud má indikátor podsvícení, kolíky pro něj jsou obvykle umístěny samostatně. Je nutné jej připojit ke zdroji, nastavením jmenovitého proudu pomocí externího rezistoru R (viz. datový list). Pro můj indikátor by jmenovité napětí na anodě mělo být 3,5 V a proud 40 mA. Na základě toho je hodnota odporu omezujícího proud:
Někteří výrobci mají na desce indikátoru místo pro instalaci takového odporu, musíte připájet příslušnou hodnotu, uzavřít propojku a podsvícení bude napájeno ze stejné linky jako indikátor.
Jak hodnotíte tuto publikaci?
A jeho analogy, například S6A0069, KS0066 atd. Tyto LCD indikátory jsou textové a mohou zobrazovat text a pseudografické symboly. Jejich známá velikost je 5x8 pixelů, LCD indikátory se dodávají v různých velikostech a s různým rozlišením, například: 8 znaků na 2 řádcích - 8x2, 16x2, 20x2, 40x2, 16x4, 20x4 atd.
V této lekci se podíváme na 4bitové připojení LCD indikátoru k mikrokontroléru AVR a psaní programu v .
Tyto LCD indikátory mají následující závěry:
VSS – Gnd (výkon minus)
VDD – Vcc (Napájení 5V)
VO – Nastavení kontrastu matice LCD
RS – řídicí linka RS
RW (Read/Write) – Řídící linka RW
E (Enable) – Řídicí linka E
D0 – D0 Data Line (nepoužívá se ve 4bitovém režimu)
D1 – D1 Data Line (nepoužívá se ve 4bitovém režimu)
D2 – D2 Data Line (nepoužívá se ve 4bitovém režimu)
D3 – D3 Data Line (nepoužívá se ve 4bitovém režimu)
D4 – Datový řádek D4
D5 – Datový řádek D5
D6 – Datový řádek D6
Datová linka D7 – D7
A – Anoda LED podsvícení displeje
K – Podsvícení displeje LED katoda
Pozornost! Různé LCD indikátory mají své vlastní umístění pinů, přesné umístění pinů můžete zjistit v technické dokumentaci (datasheet) pro váš LCD indikátor.
LCD indikační pin VO řídí kontrast LCD matice v závislosti na napájecím napětí přiváděném na tento pin. Pokud není potřeba číst informace z displeje, je pin RW připojen k napájení mínus.
Příklad 4bitového připojení LCD indikátoru k mikrokontroléru Attiny2313:
Podřetězcový rezistor RV1 upravuje jas LCD indikátoru.
V BASCOM-AVR musíte před ovládáním LCD indikátoru označit, které piny displeje jsou připojeny ke kterým portům mikrokontroléru, k tomu slouží příkaz Config Lcdpin, příklad použití tohoto příkazu: Config Lcdpin = Pin, Db4 = Portb .4, Db5 = Portb.5, Db6 = Portb.6, Db7 = Portb.7, E = Portb.3, Rs = Portb.2 a také zadejte rozlišení indikátoru LCD pomocí příkazu Config Lcd, příklad: Config Lcd = 16 * 2 a inicializujte LCD indikátor příkazem Initlcd, poté bude LCD indikátor připraven k použití.
Zde je seznam příkazů pro práci s LCD indikátorem v BASCOM-AVR:
KonfiguraceLcdpin– Nastavení konfigurace pinů LCD indikátoru a mikrokontroléru
Konfigurace LCD– Nastavení rozlišení indikátoru LCD
Initlcd– Inicializace LCD indikátoru
LCD– Zobrazení textu na LCD indikátoru, příklad: LCD „Ahoj“
Cls– Čištění LCD indikátoru
Lokalizovaty,X– Umístěte kurzor na pozici x, y
Spodní linie– Přesuňte kurzor na spodní řádek
Horní linie– Přesuňte kurzor na horní řádek
Shiftlcd vpravo– Posuňte obraz indikátoru LCD o jedno správné místo
Shiftlcd vlevo– Posuňte obraz indikátoru LCD o jedno místo doleva
Kurzor vypnutý– Zakázat kurzor
Kurzor zapnut– Povolit kurzor
Kurzor bliká– Povolit blikající kurzor
Kurzor na Noblink– Zakázat blikající kurzor
Pozornost! Při použití LCD indikátoru s rozlišením 8x2 v BASCOM-AVR jej nakonfigurujte jako 16x2, protože BASCOM-AVR nemá konfiguraci pro LCD indikátor s rozlišením 8x2.
Příklad programu v BASCOM-AVR pro výše uvedené schéma:
$regfile = "attiny2313.dat" $crystal = 8000000 Konfigurace Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7, E = Portb.3, Rs = Portb .2 Konfigurace Lcd = 16 * 2 Initlcd Cls Vyhledejte 1 , 1 Lcd "Ahoj," Lowerline Lcd "world!" Konec
Zde je návod, jak to všechno funguje s indikátorem LCD 8x2:
Pojistkové bity pro firmware:
Soubory k lekci (projekt v , zdroj, firmware) si můžete stáhnout níže
- Modul FC-113 je založen na čipu PCF8574T, což je 8bitový posuvný registr - vstupně-výstupní „expandér“ pro sériovou sběrnici I2C. Na obrázku je mikroobvod označen DD1.
- R1 je trimovací rezistor pro nastavení kontrastu LCD displeje.
- Jumper J1 slouží k zapnutí podsvícení displeje.
- Piny 1…16 se používají pro připojení modulu k pinům LCD displeje.
- Kontaktní plošky A1...A3 jsou potřebné pro změnu I2C adresy zařízení. Připájením příslušných propojek můžete změnit adresu zařízení. Tabulka ukazuje shodu adres a propojek: „0“ odpovídá rozpojenému obvodu, „1“ nainstalované propojce. Ve výchozím nastavení jsou všechny 3 propojky otevřené a adresa zařízení 0x27.
2 Schéma připojení LCD displeje k Arduinu přes I2C protokol
Modul je připojen k Arduinu standardním způsobem pro sběrnici I2C: pin SDA modulu je připojen k analogovému portu A4, pin SCL je připojen k analogovému portu A5 Arduina. Modul je napájen +5 V z Arduina. Samotný modul je připojen piny 1…16 k odpovídajícím pinům 1…16 na LCD displeji.
3 Knihovna pro práci přes I2C protokol
Nyní potřebujeme knihovnu pro práci s LCD přes rozhraní I2C. Můžete použít například tento (odkaz v řádku "Stáhnout ukázkový kód a knihovnu").
Stažený archiv LiquidCrystal_I2Cv1-1.rar rozbalit do složky \knihovny\, který se nachází v adresáři Arduino IDE.
Knihovna podporuje sadu standardních funkcí pro LCD obrazovky:
Funkce | Účel |
---|---|
Tekutý krystal() | vytvoří proměnnou typu LiquidCrystal a přijímá parametry připojení displeje (čísla pinů); |
začít() | inicializace LCD displeje, nastavení parametrů (počet řádků a znaků); |
Průhledná() | vymazání obrazovky a návrat kurzoru do výchozí pozice; |
Domov() | vrátit kurzor do výchozí polohy; |
setCursor() | nastavení kurzoru na danou pozici; |
napsat() | zobrazí symbol na LCD obrazovce; |
tisk() | zobrazuje text na LCD obrazovce; |
kurzor() | ukazuje kurzor, tzn. podtržení pod místem dalšího znaku; |
noCursor() | skryje kurzor; |
blikat() | kurzor bliká; |
noBlink() | Zrušit blikání; |
noDisplay() | vypnutí displeje při ukládání všech zobrazených informací; |
Zobrazit() | zapnutí displeje při ukládání všech zobrazených informací; |
scrollDisplayLeft() | posuňte obsah displeje o 1 pozici doleva; |
scrollDisplayRight() | posuňte obsah displeje o 1 pozici doprava; |
automatické rolování() | povolit automatické posouvání; |
noAutoscroll() | zakázat automatické posouvání; |
zleva do prava() | nastavuje směr textu zleva doprava; |
zprava doleva() | směr textu zprava doleva; |
createChar() | vytvoří vlastní znak pro obrazovku LCD. |
4 Skica pro výstup textu na LCD obrazovku přes I2C sběrnici
Otevřeme ukázku: Soubor Samples LiquidCrystal_I2C CustomChars a trochu to předěláme. Zobrazíme zprávu, na jejímž konci bude blikající symbol. Komentáře ke kódu komentují všechny nuance náčrtu.
#zahrnout
Mimochodem, znaky napsané příkazem lcd.createChar();, zůstávají v paměti displeje i po vypnutí napájení, protože zapsáno na zobrazení ROM 1602.
5 Vytvořte si vlastní symboly pro LCD displej
Pojďme se blíže podívat na problematiku tvorby vlastních symbolů pro LCD obrazovky. Každý znak na obrazovce se skládá z 35 bodů: 5 širokých a 7 vysokých (+1 rezervní řádek pro podtržení). Na řádku 6 výše uvedeného náčrtu definujeme pole 7 čísel: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Převedeme hexadecimální čísla na binární: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Tato čísla nejsou nic jiného než bitové masky pro každý ze 7 řádků symbolu, kde "0" označuje světlý bod a "1" tmavý bod. Například symbol srdce určený jako bitová maska se objeví na obrazovce, jak je znázorněno na obrázku.
6 Ovládání LCD obrazovky přes I2C sběrnici
Nahrajeme skicu do Arduina. Na obrazovce se objeví nápis, který jsme určili s blikajícím kurzorem na konci.
7 Co je pozadu I2C sběrnice
Jako bonus se podívejme na časový diagram pro zobrazení latinských znaků „A“, „B“ a „C“ na LCD displeji. Tyto znaky jsou uloženy v paměti ROM displeje a zobrazují se na obrazovce jednoduše přenosem jejich adres na displej. Schéma je převzato z pinů RS, RW, E, D4, D5, D6 a D7 displeje, tzn. již po převodníku FC-113 “I2C paralelní sběrnice”. Dá se říci, že se ponoříme trochu hlouběji do hardwaru.
Časový diagram výstupu latinských znaků „A“, „B“ a „C“ na LCD displeji 1602
Diagram ukazuje, že znaky, které jsou na displeji ROM (viz str. 11 datového listu, odkaz níže), jsou přenášeny ve dvou kouscích, z nichž první určuje číslo sloupce tabulky a druhý - číslo řádku. V tomto případě jsou data „zablokována“ na okraji signálu na lince E(Povolit) a řádek R.S.(Výběr registru) je ve stavu logické jedničky, což znamená, že se data přenášejí. Nízký stav na lince RS znamená, že jsou odesílány instrukce, což vidíme před odesláním každého znaku. V tomto případě je přenášen instrukční kód pro návrat vozíku do polohy (0, 0) LCD displeje, což lze také zjistit prostudováním technického popisu displeje.
A ještě jeden příklad. Tento časový diagram ukazuje výstup symbolu srdce na LCD displeji.
Opět první dva impulsy Umožnit dodržovat pokyny Domov()(0000 0010 2) - vraťte vozík do polohy (0; 0) a druhé dva - výstup na LCD displej uložený v paměťové buňce 3 10 (0000 0011 2) symbol "Srdce" (pokyn lcd.createChar(3, srdce); skica).
V tomto článku vám řeknu, jak používat ke správě docela běžnou knihovnu LCD displej založený na ovladači HD44780 a zobrazovat na něm informace. Knihovna se skládá ze dvou souborů lcd_lib.h a lcd_lib.c pro použití s displejem připojeným přes čtyřbitovou datovou sběrnici. Soubor záhlaví specifikuje nastavení pro připojení displeje k ovladači, které lze změnit podle vlastního uvážení, stejně jako proměnné a funkce.
Níže jsou uvedeny základní funkce ovládání a zobrazování informací na LCD.
lcd_com– odeslání příkazu na LCD
Příklad:
lcd_com(0x01); // vymazání displeje
lcd_com(0x38); // rozhraní 8 bitů 2 řádky
lcd_dat– výstup jednoho znaku na aktuální pozici
Příklad:
lcd_dat("U"); // vypíše znak "U"
lcd_dat(0xB0); // výstup symbolu "U" (v souladu s tabulkou symbolů zobrazení)
lcd_init– inicializace LCD
Zde je příklad široce používané inicializační sekvence LCD: 0x38, 0xOC, 0x06.
0x38 nastavuje režim pro zobrazení 2 řádků s maticí 5 x 8 pixelů a práci s 8bitovou datovou sběrnicí;
0xOC umožňuje zobrazení modulu LCD na obrazovce bez zobrazení kurzorů;
0x06 nastavuje režim pro automatický pohyb kurzoru zleva doprava po zobrazení každého znaku.
lcd_clr- čištění LCD
lcd_home– přesune kurzor na začátek
lcd_string– výstup řetězce zadané délky na aktuální pozici
Příklad: lcd_string("TEST",4); // vypíše řetězec TEST dlouhý 4 znaky
lcd_gotoxy– přesune kurzor na zadanou pozici
Příklad: lcd_gotoxy(12, 1); // kurzor na pozici třinácté číslice druhého řádku
copy_string_to_lcd– výstup řetězce z paměti flash na zadanou pozici zobrazení
Příklad: copy_string_to_lcd("TEST",4,0); // vypíše řetězec TEST na pátou číslici prvního řádku
lcd_definechar– zapíše vlastní obrázek znaku do paměti displeje
Chcete-li zobrazit svůj vlastní symbol na displeji, musíte znát kód symbolu, zapsat tento kód do programové paměti mikrokontroléru (PROGMEM), poté jej umístit do volné paměťové buňky LCD (CGRAM) a zobrazit jej na obrazovce pomocí funkce lcd_dat().
Pro programování je k dispozici 8 předefinovaných znaků v režimu s maticí bodů 5x7 a 4 s maticí 5x10 (v režimu 5x10 jsou předefinované znaky adresovány kódy DDRAM jeden po druhém: 0x00, 0x02, 0x04, 0x06). Pro kódování matice se používají horizontálně „skládané“ bajty, z nichž pět nejméně významných bitů nese informaci o vzoru (s 1 (jedna) znamená, že segment bude zapnutý), 4. bit z každého z 8 ( nebo 11 v režimu 5 x 10) bajtů matice určuje levý sloupec symbolu a 0 - pravý. Nejvýznamnější tři bity se nepoužívají, ani nejvýznamnějších pět bajtů tvoří celou oblast matice znaků (16 bajtů) v režimu 5x10 (všimněte si, že programovatelná matice znaků umožňuje použití celé výšky řádku (8 řádků pro režim 5x7). a 11 řádků pro režim 5x10 ), to znamená, že můžete umístit body do oblasti podtrženého kurzoru).
Je pohodlnější vytvořit symbol v binárním formátu, například vytvořte obdélníkový symbol, kód bude takto:
Const uint8_t pryamougolnik PROGMEM= ( 0b11111, 0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b11111, 0b0 );
lcd_shift_right– posune obrázek o zadaný počet znaků doprava
lcd_shift_Left– posune obrázek o zadaný počet znaků doleva
lcd_cursor_on– zapne podtržení kurzoru
lcd_cursor_blink– zapne blikající kurzor
lcd_cursor_off– vypne kurzor
lcd_blank– vypne obraz, ale nevymaže jej
lcd_visible– obsahuje obrázek
lcd_cursor_left– přesune kurzor o zadaný počet znaků doleva
lcd_cursor_right– přesune kurzor o zadaný počet znaků doprava
lcd_progress_bar- umožňuje zobrazit dynamické měřítko, o této funkci si povíme podrobněji na praktickém příkladu.
lcd_num_to_str- umožňuje zobrazit proměnnou o délce až 4 číslic
Příklad: void lcd_num_to_str(ADC, 4); // Výstup 4bitové proměnné ADC
Udělejme projekt "Analogový voltmetr", ve kterém budou informace o měřeném napětí zobrazeny na obrazovce ve formě horizontální dynamické stupnice. Měřené napětí je přivedeno na vstup ADC0, maximálně 5V. bez použití rozdělovače. Pro tento projekt používáme mikrokontrolér atmega8, který je taktován z interního oscilátoru s frekvencí 8 MHz. Displej připojíme přes čtyřbitovou sběrnici v souladu s nastavením ze souboru lcd_lib.h. Při vytváření projektu v AVRSTUDIO zkopírujeme 2 soubory knihovny do složky projektu a přidáme tyto soubory (lcd_lib.c a lcd_lib.h) do stromu projektu.
Funkce je zodpovědná za zobrazení dynamického měřítka lcd_progress_bar (uint8_t průběh, uint8_t maxprogress, uint8_t délka), v závislosti na stavu proměnných této funkce mění stupnice svou úroveň, progress - úroveň od 0 do 255, maxprogress - maximální úroveň je omezena na číslo od 0 do 255, délka - délka stupnice od 0 do 16 buněk (v závislosti na typu zobrazení). Protože při maximálním vstupním napětí je hodnota ADC 1024, vydělíme tuto hodnotu 4 a přiřadíme ji proměnné „u“ a proměnnou „u“ použijeme ve výstupní funkci dynamické stupnice. pokrok().
Níže zveřejňuji celé znění programu:
//******Použití knihoven pro práci s LCD HD44780***** #include
0b00000,0b10001,0b01010,0b00100,0b01010,0b10001,0b00000,0b00000
};
const uint8_t simbol_2 PROGMEM= (
0b00100,0b00100,0b00100,0b11111,0b00100,0b00100,0b00100,0b00000
); unsigned char u; //********************************************************** ******** void progress(void) // funkce výstupu měřítka ( lcd_gotoxy(0, 0); lcd_string("0......05......1",16); lcd_gotoxy (0, 1) lcd_progress_bar(u, 255, 16) //*********************************); ************************* int main(void) ( /***Nastavení ADC***/ ADCSRA |= (1<< ADEN) //Включение АЦП
|(1 << ADPS1)|(1 << ADPS0); // предделитель преобразователя на 8
ADMUX |= (0 << REFS1)|(0 << REFS0) // внешний ИОН
|(0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3); // вход PC0
_delay_ms(100);
lcd_init();// инициализация LCD
lcd_clr();// очистить LCD
_delay_ms(10);
lcd_definechar(simbol_1, 6); // определяем собств. символ 1
lcd_definechar(simbol_2, 7); // определяем собств. символ 2
for(char a=0; a<10; a++) // цикл приветствия
{
lcd_gotoxy(0, 0);
lcd_dat(6);
_delay_ms(100);
lcd_gotoxy(0, 0);
lcd_dat(7);
_delay_ms(100);
lcd_gotoxy(3, 0);
lcd_string("AЅa»oґoіГ№",10); // Аналоговый
lcd_gotoxy(3, 1);
lcd_string("іo»Дїјeїp",9); // вольтметр
}
_delay_ms(1000);
lcd_clr();// очистить LCD
while(1)
{
progress();
ADCSRA |= (1 << ADSC); //Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования
u = ADC/4;
}
}
Pro práci se znakovými grafickými displeji doporučujeme použít knihovnu LiquidCrystal, která je součástí standardní sady Arduino IDE a je navržena pro práci přes 8bitové (4bitové) paralelní rozhraní. Pokud je váš displej připojen k Arduinu přes sběrnici I2, musíte nainstalovat knihovnu LiquidCrystal_I2C (většina funkcí opakuje funkce první knihovny).
Podporované displeje:
Zobrazit | Připojení a inicializace |
---|---|
LCD1602 - znakový displej (16x02 znaků), |
#zahrnout [ , 8 , 9 , 10 , 11 ]); void setup())( lcd.begin(16, 2);} // Vysvětlení:
|
s rozhraním I2C (modrá) |
#zahrnout #zahrnout LiquidCrystal_I2C lcd (0x27 nebo 0x3F, 16 , 2); void setup())( lcd.init(); } // Vysvětlení: |
LCD1602 I2C - znakový displej (16x02 znaků), s rozhraním I2C (zelená) |
#zahrnout #zahrnout LiquidCrystal_I2C lcd (0x27 nebo 0x3F, 16 , 2); void setup())( lcd.init(); } // Vysvětlení: |
LCD2004 - znakový displej (20x04 znaků), s paralelním rozhraním (modrá) |
#zahrnout LiquidCrystal lcd(2 , 3 , 4 , 5 , 6 , 7[ , 8 , 9 , 10 , 11 ]); void setup())( lcd.begin(20, 4);} // Vysvětlení: // Pokud je použito 8 vodičů datové sběrnice, uveďte je všechny |
LCD2004 I2C - znakový displej (20x04 znaků), s rozhraním I2C (modrá) |
#zahrnout #zahrnout LiquidCrystal_I2C lcd (0x27 nebo 0x3F, 20 , 4); void setup())( lcd.init(); } // Vysvětlení: |
#1 Příklad
Nápis zobrazujeme na displeji LCD1602 připojeném přes I2C sběrnici. Chcete-li pracovat s displejem LCD2004, musíte změnit řádek 3 na LiquidCrystal_I2C lcd(0x27,20,4);
#zahrnout
#2 Příklad
Nápis zobrazujeme na displeji LCD1602 připojeném přes 4bitovou paralelní sběrnici. Chcete-li pracovat s displejem LCD2004, musíte změnit řádek 5 na lcd.begin(20, 4);
#zahrnout
#3 Příklad
Na displeji LCD1602 připojeném přes sběrnici I2C zobrazujeme nápis „Russian language“:
#zahrnout
Funkce společné pro knihovny LiquidCrystal a LiquidCrystal_I2C:
- začít( sloupce, řádky, ); – Inicializuje zobrazení s počtem sloupců, řádků a velikostí znaků.
- Průhledná();– Vymazání displeje s kurzorem na pozici 0,0 (zabere to hodně času!).
- Domov();– Nastavení kurzoru na pozici 0,0 (zabere to hodně času!).
- Zobrazit();– Rychlé zapnutí displeje (beze změny dat v RAM).
- noDisplay();– Rychlé vypnutí displeje (beze změny dat v RAM).
- blikat();– Zapněte blikající kurzor (s frekvencí asi 1 Hz).
- noBlink();– Vypněte blikající kurzor.
- kurzor();– Povolit podtržení kurzoru.
- noCursor();– Zakázat podtržení kurzoru.
- scrollDisplayLeft();– Posouvá displej doleva. Posune souřadnice zobrazení o jeden sloupec doleva (bez změny paměti RAM).
- scrollDisplayRight();– Posouvá displej doprava. Posune souřadnice zobrazení o jeden sloupec doprava (bez změny paměti RAM).
- zleva do prava();– Určuje další posunutí pozice kurzoru po zobrazení dalšího znaku o jeden sloupec doprava.
- zprava doleva();– Určuje další posunutí pozice kurzoru po zobrazení dalšího znaku o jeden sloupec doleva.
- noAutoscroll();– Určuje, že text bude v budoucnu zarovnán vlevo od pozice kurzoru (jako obvykle).
- automatické rolování();– Označuje, že text bude v budoucnu zarovnán vpravo od pozice kurzoru.
- createChar(číslo, pole ); – Zapíše vlastní znak do CGRAM displeje pod zadaným číslem.
- setCursor( sloupec, řádek ); – Umístěte kurzor na pozici označenou číslem sloupce a řádku.
- tisk( text ); – Zobrazení textu, symbolů nebo čísel na displeji. Syntaxe je podobná funkci třídy Serial se stejným názvem.
Funkce implementované pouze v knihovně LiquidCrystal_I2C:
- init();– Inicializace displeje. Musí to být první příkaz knihovny LiquidCrystal_I2C po vytvoření objektu. Ve skutečnosti je tato funkce také v knihovně LiquidCrystal, ale v této knihovně je volána automaticky (standardně) při vytvoření objektu.
- podsvícení();– Zapněte podsvícení displeje.
- noBacklight();– Vypne podsvícení displeje.
- setBacklight( vlajka ); – Ovládání podsvícení (true - zapnout / false - vypnout), používá se místo funkcí noBacklight a podsvícení.
Spojení:
// Pro sběrnici I2C: |
Parametr:
|
// Pro 4vodičovou paralelní sběrnici: #zahrnout Tekutý krystal lcd( R.S. , E , D4 , D5 , D6 , D7 ); void setup())( lcd.begin( kol , řádek ); } |
Parametr:
|
// Pro 8vodičovou paralelní sběrnici: #zahrnout Tekutý krystal lcd( R.S. , E , D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 ); void setup())( lcd.begin( kol , řádek ); } |
|
začít( kol ,
řádek ,
);
Inicializuje displej s rozměry obrazovky a znaky. |
Parametr:
|
Funkce ovládání displeje:
Zobrazit(); Zapne displej poté, co byl vypnut funkcí noDisplay. |
Poznámka: Funkce běží rychle a nemění paměť RAM displeje. |
noDisplay(); Vypne displej. Údaje na displeji se zobrazí až po vyvolání funkce zobrazení, ale nebudou vymazány z paměti RAM a po vyvolání funkce zobrazení se zobrazí znovu. |
Poznámka: Funkce běží rychle a nemění paměť RAM displeje. |
scrollDisplayLeft(); Posune souřadnice zobrazení o jeden sloupec doleva. |
|
scrollDisplayRight(); Posune souřadnice zobrazení o jeden sloupec doprava. Neustálé volání této funkce vytvoří efekt plíživé linie. Souřadnice jsou posunuty jak pro informace dostupné na displeji, tak pro ty, které se zobrazí později. |
Poznámka: Funkce funguje bez změny paměti RAM displeje. Pokud funkci zavoláte 40krát za sebou, souřadnice se vrátí do původního bodu |
Průhledná(); Vymaže displej nastavením kurzoru na pozici 0,0. Informace na displeji budou trvale vymazány. |
Poznámka: Trvá to dlouho. |
podsvícení(); Zapněte podsvícení displeje. |
|
noBacklight(); Vypněte podsvícení displeje. |
Poznámka: Funkce je implementována pouze v knihovně LiquidCrystal_I2C. |
setBacklight( vlajka );
Ovládání podsvícení (místo funkcí noBacklight a podsvícení). |
Parametr:
|
Funkce ovládání kurzoru:
setCursor( kol ,
řádek );
Umístí kurzor na zadanou pozici. |
Parametr:
|
Domov(); Nastavení kurzoru na pozici 0,0. Funguje jako funkce setCursor(0,0); |
Poznámka: Trvá to dlouho. |
blikat(); Povolit blikající kurzor. |
Poznámka: Kurzor zabírá celé pole znaků a bliká s frekvencí asi 1 Hz v pozici, kde byl dříve nastaven. |
noBlink(); Vypněte blikající kurzor. |
Poznámka: Kurzor se stane neviditelným, ale jeho pozice zůstane zachována. |
kurzor(); Povolit podtržení kurzorem. |
Poznámka: Kurzor má podobu podtržítka a je umístěn na pozici, kde byl dříve umístěn. |
noCursor(); Vypnout podtržení kurzorem. |
Poznámka: Kurzor se stane neviditelným, ale jeho pozice zůstane zachována. |
Funkce indikující směr a zarovnání:
zleva do prava(); Určuje, že po každém novém znaku by se pozice kurzoru měla posunout o jeden sloupec doprava. |
Poznámka: Pokud zobrazíte text "abc", na displeji se zobrazí "abc" a text bude vpravo od původní pozice kurzoru. (Jako obvykle) |
zprava doleva(); Určuje, že po každém novém znaku by se pozice kurzoru měla posunout o jeden sloupec doleva. |
Poznámka: Pokud zobrazíte text "abc", na displeji se zobrazí "cba" a text bude vlevo od původní pozice kurzoru. (Psaní zprava doleva) |
noAutoscroll(); Označuje, že v budoucnu by měl být text zarovnán vlevo od původní pozice kurzoru. |
Poznámka: Pokud umístíte kurzor na pozici 10.0 a zobrazíte text, pak první znak zobrazeného textu bude na této pozici. (Jako obvykle) |
automatické rolování(); Označuje, že v budoucnu by měl být text zarovnán vpravo od původní pozice kurzoru. |
Poznámka: Pokud umístíte kurzor na pozici 10.0 a zobrazíte text, kurzor bude na této pozici. (Souřadnice zobrazení se posunou doleva, jako kdybyste volali funkci scrollDisplayLeft tolikrát, kolikrát je písmen ve výstupním textu) |
Funkce zadávání textu a symbolů:
createChar(číslo,pole); Zapíše vlastní znak do CGRAM displeje pod zadaným číslem. Pokud chcete zobrazit text (pomocí funkce tisku), který by měl obsahovat vámi nastavený znak, zadejte lomítko a číslo, pod kterým byl tento znak napsán: print("C\1MBO\2"). |
Parametr:
|
tisknout(text); Zobrazení textu, symbolů nebo čísel na displeji. |
Parametr:
|