Knihovna pro práci s LCD displeji. Práce se znakovým LCD na bázi řadiče HD44780

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í
  • — 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.
  • — 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/DSVybírá směr pohybu kurzoru nebo obrazovky
0 0 0 0 1 DCBVyberte režim zobrazení
0 0 0 1 S/CR/LPříkaz posunu kurzoru/obrazovky
0 0 1 D.L.NFDefinování parametrů skenování a šířky datové sběrnice
0 1 AC5AC4AC3AC2AC1AC0Přiřazení k pultu A.C. adresy v regionu CGRAM
1 AC6AC5AC4AC3AC2AC1AC0Přiřazení k pultu A.C. adresy v regionu DDRAM

Tabulka hodnot příznaků:

Vlajka Význam
I/DRežim offsetu čítače AC adresy, 0 - snížení, 1 - zvýšení
SPří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/CPří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/LPří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/LPříznak definující šířku datové sběrnice: 0 - 4 bity, 1 - 8 bitů
NRežim skenování obrazu na LCD: 0 - jeden řádek, 1 - dva řádky
FVelikost matice znaků: 0 - 5×8 bodů, 1 - 5×10 bodů
DPřítomnost obrazu: 0 - zakázáno, 1 - povoleno
CKurzor ve tvaru podtržítka: 0 - vypnuto, 1 - povoleno
BKurzor 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×2WH0802AMT-8S2ADV-0802BC0802ASC0802AMTC-0802XWM-C0802MAC082A
10×1MT-10S1
12×2WH1202ABC1202A
16×1WH1601ADV-16100BC1601A1SC1601AMTC-16100XWM-C1601MAC161A
WH1601BBC1601BSC1601B
WH1601LMT-16S1ADV-16100BC1601D1SC1601DMTC-16101XWM-C1601QAC161B
DV-16120AC161J
16×2WH1602LMT-16S2RDV-16210BC1602ESC1602EMTC-16201XWM-C1602QAC162E
SC1602N
WH1602DMT-16S2JDV-16230BC1602B1SC1602BMTC-16202XWM-C1602NAC162A
DV-16235MTC-16203X
WH1602CMT-16S2DDV-16236BC1602DSC1602D
WH1602AMT-16S2HDV-16244BC1602HSC1602CMTC-16204XWM-C1602K
WH1602BDV-16252BC1602ASC1602AMTC-16205BWM-C1602M
WH1602MDV-16257BC1602FSC81602F
DV-16275
DV-16276
16×4WH1604AMT-16S4ADV-16400BC1604A1SC1604AMTC-16400XWM-C1604MAC164A
WH1604B
20×1DV-20100
MT-20S1L
20×2WH2002AMT-20S2ADV-20200BC2002ASC2002AMTC-20200XWM-C2002MAC202A
WH2002M
WH2002LMT-20S2MDV-20210BC2002BSC2002CMTC-20201XWM-C2002PAC202B
DV-20211AC202D
DV-20220
DV-20206-1
20×4WH2004AMT-20S4ADV-20400BC2004ASC2004AMTC-20400XWM-C2004PAC204A
SC2004G
SC2004C
WH2004LDV-20410BC2004BMTC-20401XWM-C2004RAC204B
24×1MT-24S1L
24×2WH2402AMT-24S2ADV-24200BC2402ASC2402AMTC-24200XWM-C2402PAC242A
MT-24S2L
40×2WH4002ADV-40200BC4002ASC4002AMTC-40200XWM-C4002PAC402A
40×4WH4004ADV40400BC4004ASC4004AMTC-40400XWM-C4004MAC404A
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 // zahrnout knihovnu Wire #include // připojení knihovny LCD #define printByte(args) write(args); // uint8_t srdce = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // bitová maska ​​symbolu „srdce“ LiquidCrystal_I2C lcd(0x27, 16, 2); // Nastavení adresy 0x27 pro LCD displej 16x2 void setup() ( lcd.init(); // inicializace LCD displeje lcd.backlight(); // zapnutí podsvícení displeje lcd.createChar(3, srdce); // vytvoření symbolu „srdce“ v paměťové buňce 3 lcd.home(); // umístěte kurzor do levého horního rohu na pozici (0,0) lcd.!"); // vytiskne řádek textu lcd.setCursor(0, 1); // přesuňte kurzor na řádek 2, znak 1 lcd.print( " i ") // vytiskne zprávu na řádek 2 lcd.printByte(3) // vytiskne symbol „srdce“ umístěný ve 3. buňce lcd.print(" Arduino "); } void loop() (// blikání posledního znaku lcd.setCursor(13, 1); // přesunutí kurzoru na řádek 2, znak 1 lcd.print("\t"); zpoždění(500); lcd.setCursor(13, 1); // přesunutí kurzoru na řádek 2, znak 1 lcd.print(" "); zpoždění(500); }

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 #zahrnout #zahrnout #include "lcd_lib.h" const uint8_t simbol_1 PROGMEM= (
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í:

void setup())( OBJECT.begin(NUM_COLUMN, NUMBER_ROWS); )


LiquidCrystal OBJECT(RS, E, DO, D1, D2, D3, D4, D5, D6, D7);


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í:
LiquidCrystal_I2C OBJECT (I2C_ADDRESS, COLUMNS_COLUMN, ROW_COUNTY);
// I2C_ADDRESS může být 0x27 nebo 0x3F

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í:
LiquidCrystal OBJECT(RS, E, D4, D5, D6, D7);
void setup())( OBJECT.begin(NUM_COLUMN, NUM_ROWS); )

// Pokud je použito 8 vodičů datové sběrnice, uveďte je všechny
LiquidCrystal OBJECT (RS, E, DO, D1, D2, D3, D4, D5, D6, D7);

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í:
LiquidCrystal_I2C OBJECT (I2C_ADDRESS, COLUMNS_COLUMN, ROW_COUNTY);
// I2C_ADDRESS může být 0x27 nebo 0x3F

#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 // Připojení knihovny pro práci s LCD displejem přes I2C sběrnici LiquidCrystal_I2C lcd(0x27,16,2); // Deklarujte objekt knihovny s uvedením parametrů zobrazení (adresa I2C = 0x27, počet sloupců = 16, počet řádků = 2) // Pokud se nápis nezobrazí, nahraďte adresu 0x27 0x3F void setup())( / / lcd.init( // Zahájení práce s LCD displejem lcd.backlight(); // Zapnutí podsvícení LCD displeje lcd.setCursor(0, 0); , 0 řádek) lcd.print("LCD" // Vytiskne text "LCD", počínaje od nastavené pozice kurzoru lcd.setCursor(0, 1) // Nastavte kurzor na pozici (0 sloupec, 1 řádek); ) lcd.print("www.iarduino.ru" Zobrazíme text "www.iarduino.ru", počínaje od nastavené pozice kurzoru) // // void loop()() // Kód uvnitř smyčky); funkce se provádí nepřetržitě. Ale protože zobrazujeme statický text, potřebujeme jej zobrazit pouze jednou při spuštění, bez použití kódu smyčky

#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 // Připojení knihovny LiquidCrystal pro práci s LCD displejem LiquidCrystal lcd(2,3,4,5,6,7); // Deklarujte objekt knihovny s uvedením pinů displeje (RS, E, D4, D5, D6, D7) // Pokud je použito 8 vodičů datové sběrnice, zadejte (RS, E, D0, D1, D2, D3, D4 , D5, D6,D7) void setup())( // lcd.begin(16, 2); // Zahájení práce s LCD displejem s uvedením čísla (sloupce, řádky) lcd.setCursor(0, 0); // Nastavte kurzor na pozici (0 sloupec, 0 řádek) lcd.print("LCD2004" // Vytiskne text "LDC1602", počínaje od nastavené pozice kurzoru lcd.setCursor(0, 1); Nastavte kurzor na pozici (0 sloupec, 1 řádek) ) lcd.print("www.iarduino.ru" // Vytiskne text "www.iarduino.ru", počínaje od nastavené pozice kurzoru ) // //); void loop()() // Kód uvnitř funkce loop je vykonáván nepřetržitě. Ale protože zobrazujeme statický text, potřebujeme jej zobrazit pouze jednou při spuštění, bez použití kódu smyčky

#3 Příklad

Na displeji LCD1602 připojeném přes sběrnici I2C zobrazujeme nápis „Russian language“:

#zahrnout // Připojte knihovnu pro práci se sběrnicí I2C #include // Připojení knihovny pro práci s LCD displejem přes I2C sběrnici LiquidCrystal_I2C lcd(0x27,16,2); // Deklarujte objekt knihovny s uvedením parametrů zobrazení (adresa I2C = 0x27, počet sloupců = 16, počet řádků = 2) // uint8_t symbol = ( // Deklarujte pole 6 nativních symbolů (jazyků), každý symbol se skládá z 8 bajtů ( 0, 0,18,20,24,20,18, 0 ), // až ( 0, 0,17,19,21,25,17, 0 ), // a (10, 4, 17,19,21,25,17, 0 ), // th ( 0, 0,15,17,15, 5, 9, 0 ), // i ( 0, 0,14,17, 6,17 , 14,0), // z (0, 0,17,17,29,19,29, 0)); // s // void setup())( // lcd.init(); // Zahájení práce s LCD displejem lcd.backlight(); // Zapnutí podsvícení LCD displeje lcd.createChar(1, symbol ); // Načtení 1 symbolu "k" do paměti RAM lcd.createChar(2, symbol) // Načtení 2. symbolu "i" do paměti RAM lcd.createChar(3, symbol); symbol "th" do paměti RAM lcd.createChar (4, symbol // Načtení 4. symbolu "i" do paměti RAM lcd.createChar(5, symbol) // Načtení 5. symbolu "z" do display RAM lcd.createChar(6, symbol znak "s" na displeji RAM lcd.setCursor(0, 0) // Nastaví kurzor na pozici (0 sloupec, 0 řádek) lcd.print("Pycc\1\); 2\3 \4\5\6\1" ); // Vypíše text "Pyccy language", kde "Pycc" je napsáno latinkou a "kyy language" - ve znacích z paměti RAM ) // Pokud potřebujete vypsat znak z paměti RAM displeje, poté napsat \ a číslo znaku // void loop( )() // Kód uvnitř funkce loop je vykonáván nepřetržitě. Ale protože zobrazujeme statický text, potřebujeme jej zobrazit pouze jednou při spuštění, bez použití kódu smyčky

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:
#zahrnout
#zahrnout
LiquidCrystal_I2C lcd( adresa , kol , řádek );
void setup())(
lcd.init();
}

Parametr:
  • adresa: Adresa displeje na sběrnici I2C - 0x27 nebo 0x3F
  • col:
  • řádek:
// Pro 4vodičovou paralelní sběrnici:
#zahrnout
Tekutý krystal lcd( R.S. , E , D4 , D5 , D6 , D7 );
void setup())(
lcd.begin( kol , řádek );
}
Parametr:
  • RS:č. pinu Arduino, ke kterému je pin RS připojen
  • E:Číslo pinu Arduina, ke kterému je připojen pin E
  • D0...D3: Počet Arduino pinů, ke kterým jsou připojeny piny D0-D3
  • D4...D7: Počet pinů Arduino, ke kterým jsou připojeny piny D4-D7
  • col: počet sloupců implementovaných v zobrazení
  • řádek: počet řádků implementovaných na displeji
// 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:
  • col: počet sloupců implementovaných v zobrazení
  • řádek: počet řádků implementovaných na displeji
  • velikost: velikost znaku indikovaná konstantou:
    LCD_5x8DOTS (výchozí) nebo LCD_5x10DOTS
/* Pro sběrnici I2C: */ #include // Připojte knihovnu pro práci se sběrnicí I2C #include // Připojení knihovny pro práci s LCD displejem přes I2C sběrnici LiquidCrystal_I2C lcd(0x3F,20,4); // Deklarujte objekt knihovny s uvedením parametrů zobrazení (adresa I2C = 0x3F, počet sloupců = 20, počet řádků = 4) // void setup())( // lcd.init(); // Zahájení práce s the LCD display lcd.backlight ( // Zapnutí podsvícení LCD displeje... // Výstupní informace, které by se měly zobrazit při spuštění) // // void loop()() // ... //); Výstupní informace, které by se měly změnit podle algoritmu vašeho kódu) // /* Pro 4vodičovou paralelní sběrnici: */ #include // Připojení knihovny LiquidCrystal pro práci s LCD displejem LiquidCrystal lcd(2,3,4,5,6,7); // Deklarujte objekt knihovny s uvedením pinů displeje (RS, E, D4, D5, D6, D7) // Pokud je použito 8 vodičů datové sběrnice, zadejte (RS, E, D0, D1, D2, D3, D4 , D5, D6,D7) void setup())( // lcd.begin(16, 2); // Zahájení práce s LCD displejem s uvedením čísla (sloupce, řádky) ... // Výstup informací, které by měly zobrazí se při spuštění) / // void loop()() // ... // Výstupní informace, které by se měly změnit podle algoritmu vašeho kódu) //

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:
  • vlajka: true - zapne a false - vypne podsvícení.
Poznámka: Funkce je implementována pouze v knihovně LiquidCrystal_I2C.
/* Zobrazí zprávu pro sledování funkcí ovládání zobrazení: */ lcd.cursor(0,0); // Nastavte kurzor do horního rohu displeje (0 sloupec, 0 řádek) lcd.print("iarduino.ru"); // Zobrazte text "iarduino.ru" (první písmeno "i" bude na pozici "0.0" a poslední "u" na pozici "10.0", neviditelný kurzor na pozici "11.0")) // lcd.noDisplay (); // Vypnutí displeje (z displeje zmizí nápis) lcd.display(); // Zapnutí displeje (na stejném místě se na displeji objeví nápis) lcd.scrollDisplayLeft(); // Posun souřadnic sloupců doleva (na displeji se zobrazí "arduino.ru" bez prvního písmene "i", které překročí displej, ale zůstane v jeho RAM) lcd.scrollDisplayRight(); // Posune souřadnice sloupce doprava (na displeji se zobrazí "iarduino.ru" na stejném místě, kde bylo původně zobrazeno) lcd.clear(); // Vyčistěte displej (nápis z displeje nenávratně zmizí) lcd.noBacklight(); // Vypnutí podsvícení displeje lcd.backlight(); // Zapnutí podsvícení displeje lcd.setBacklight(0); // Vypnutí podsvícení displeje lcd.setBacklight(1); // Zapne podsvícení displeje

Funkce ovládání kurzoru:

setCursor( kol , řádek );
Umístí kurzor na zadanou pozici.
Parametr:
  • col:číslo sloupce (od 0).
  • řádek:číslo řádku (od 0)
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.
lcd.setCursor(0, 1); // Nastaví kurzor na první znak druhého řádku (číslování řádků a sloupců začíná od 0) lcd.home(); // Nastaví kurzor na první znak prvního řádku (jako při volání lcd.setCursor(0,0);) lcd.blink(); // Zviditelnění kurzoru (místo kurzoru bude blikat obdélník) lcd.noBlink(); // Zneviditelnění kurzoru (odstranění blikajícího obdélníku) lcd.cursor(); // Zviditelnění kurzoru (místo kurzoru se objeví podtržítko) lcd.noCursor(); // Zneviditelnění kurzoru (odstranění podtržítka) // Pokud kurzor narazí na místo, kde je znak, tento znak nezmizí

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)
lcd.leftToRight(); // Pokyn kurzoru, aby se posunul doprava (Jak je obvyklé v evropském psaní) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Na displeji uvidíme: "ABC" (Po "A" se kurzor přesunul doprava a zobrazilo se "B", poté se kurzor přesunul doprava a zobrazilo se "C") lcd.rightToLeft(); // Řekněte kurzoru, aby se přesunul doleva (Stejně jako při psaní zprava doleva) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Na displeji uvidíme: "CBA" (Po "A" se kurzor přesunul doleva a zobrazilo se "B", poté se kurzor přesunul doleva a zobrazilo se "C") lcd.noAutoscroll(); // Nastavení zarovnání doleva (Jako obvykle) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Na displeji uvidíme: "ABC" (Jako obvykle) lcd.autoscroll(); // Nastaví zarovnání doprava (zobrazené souřadnice se posunou doleva o počet zobrazených znaků) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Na displeji uvidíme: "ABC" (Souřadnice zobrazení se posunou o 3 znaky doleva, protože po každém znaku se vyvolá funkce scrollDisplayLeft)

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:
  • číslo:číslo, pod kterým bude symbol napsán.
  • pole: pole představující znak, který má být zapsán.
Poznámka: Pole se skládá z několika bajtů, jejichž počet se rovná počtu řádků v symbolu. Každý nastavený bajtový bit odpovídá nastavenému (zobrazenému) znakovému pixelu.
tisknout(text);
Zobrazení textu, symbolů nebo čísel na displeji.
Parametr:
  • text: znak, číslo nebo řetězec, který se má zobrazit.
Poznámka: Syntaxe je podobná funkci třídy Serial se stejným názvem.
#zahrnout // Připojte knihovnu pro práci se sběrnicí I2C #include // Připojení knihovny pro práci s LCD displejem přes I2C sběrnici LiquidCrystal_I2C lcd(0x27,16,2); // Deklarace objektu knihovny s uvedením parametrů zobrazení (adresa I2C = 0x27, počet sloupců = 16, počet řádků = 2) // uint8_t symbol_d = (0b00000, // 1 řádek symbolu "d" 0b00000, / / 2. řádek znaku "d" " 0b00110, // 3. řádek znaku "d" 0b01010, // 4. řádek znaku "d" 0b01010, // 5. řádek znaku "d" 0b01010, // 6. řádek znaku "d" 0b11111, // 7. řádek znaku "d" " 0b10001); // 8. řádek symbolu "d" Celé pole lze zapsat na jeden řádek: uint8_t symbol_d=(0,0,6,10,10,10,31,17); // uint8_t symbol_i = (0b00000, // 1. řádek symbolu "and" 0b00000, // 2. řádek symbolu "and" 0b10001, // 3. řádek symbolu "and" 0b10011, // 4. řádek symbol "a" 0b10101, // 5. řádek symbolu "and" 0b11001, // 6. řádek symbolu "and" 0b10001, // 7. řádek symbolu "and" 0b00000); // 8. řádek symbolu "and" Celé pole lze zapsat na jeden řádek: uint8_t symbol_i=(0,0,17,19,21,25,17,0); void setup())( // lcd.init(); // Zahájení práce s LCD displejem lcd.backlight(); // Zapnutí podsvícení LCD displeje lcd.createChar(1,symbol_d); // Načíst první symbol do paměti displeje lcd .createChar(2,symbol_i); // Načtení druhého symbolu do paměti displeje lcd.clear( // Vymazání obrazovky lcd.setCursor(0,0); kurzor do horního rohu lcd.print("Pa\ 1\2o" // Výstup textu "Rádio" při psaní znaků "P", "a", "o" v latince, ) // a výstupu; znaky "d", "i" z paměti displeje udávající jejich čísla // void loop())( // lcd.setCursor(0,1); lcd.print(" "); // vymazání celého spodního řádku lcd.setCursor(0,1); lcd.print("arduino" // zobrazení textu "i" "arduino" "); ru" ve spodním řádku delay(2000); // počkejte 2 sekundy lcd.setCursor( 0,1); lcd.print(" "); // vymaže celý spodní řádek lcd.setCursor(0,1); lcd .print(12.345) // zobrazení čísla 12.34 (zobrazí se 2 desetinná místa) delay(2000) // počkejte 2 sekundy lcd.setCursor(0,1); // vymazání celého spodního řádku lcd.setCursor(0,1); lcd.print(12, HEX); // zobrazí číslo 12 jako hexadecimální číslo delay(2000); // počkejte 2 sekundy lcd.setCursor(0,1); lcd.print(" "); // vymazání celého spodního řádku lcd.setCursor(0,1); lcd.print(1); // zobrazení čísla 1 delay(2000); // počkejte 2 sekundy)