Připojení obrazovky LSD. Výcvikový kurz

Každý radioamatér po určitém počtu jednoduchých domácích projektů dospěje k cíli postavit pomocí senzorů a tlačítek něco grandiózního. Přeci jen je mnohem zajímavější zobrazovat data na displeji než na monitoru portu. Pak ale vyvstává otázka: jaký displej zvolit? A obecně, jak to připojit, co je potřeba k připojení? Odpovědi na tyto otázky budou diskutovány v tomto článku.

LCD 1602

Z mnoha možností zobrazení bych rád konkrétně zmínil displej LCD1602 založený na řadiči HD4478. Tento displej je k dispozici ve dvou barvách: bílá písmena na modrém pozadí, černá písmena na žlutém pozadí. Připojení LCD 1602 k Arduinu také nezpůsobí žádné problémy, protože je zde vestavěná knihovna a není třeba stahovat nic dalšího. Displeje se liší nejen cenou, ale také velikostí. Často radioamatéři používají 16 x 2, tedy 2 řádky po 16 znacích. Existuje ale i 20 x 4, kde jsou 4 řádky po 20 znacích. Rozměry a barva nehrají při připojení lcd 1602 displeje k Ardunu žádnou roli, připojují se stejně. Pozorovací úhel je 35 stupňů, doba odezvy displeje je 250 ms. Může pracovat při teplotách od -20 do 70 stupňů Celsia. Při provozu spotřebovává 4 mA pro obrazovku a 120 mA pro podsvícení.

Kde se používá?

Tento displej je oblíbený nejen mezi radioamatéry, ale i mezi velkými výrobci. Například tiskárny a kávovary také používají LCD1602. To je způsobeno jeho nízkou cenou, tento displej stojí na čínských stránkách 200-300 rublů. Stojí za to tam koupit, protože v našich obchodech jsou přirážky za tento displej velmi vysoké.

Připojení k Arduinu

Připojení LCD 1602 k Arduino Nano a Uno není jiné. S displejem můžete pracovat ve dvou režimech: 4bitový a 8bitový. Při práci s 8bity se používají bity nižšího i vyššího řádu a u 4bitového pouze nižší. S 8bitem nemá smysl pracovat, protože přidá 4 další kontakty pro připojení, což není vhodné, protože rychlost nebude vyšší, limit pro aktualizace zobrazení je 10krát za sekundu. Obecně platí, že pro připojení lcd 1602 k Arduinu se používá spousta vodičů, což způsobuje určité nepříjemnosti, ale existují speciální štíty, ale o tom později. Fotografie ukazuje připojení displeje k Arduino Uno:

Ukázkový kód:

#zahrnout // Přidejte potřebnou knihovnu LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Nastavení velikosti obrazovky lcd.setCursor(0, 0); // Nastavení kurzoru na začátek 1 řádků lcd.print("Ahoj, světe!" // Vytiskne text lcd.setCursor(0, 1 // Nastaví kurzor na začátek řádku 2 lcd.print("site")); ; // Tisk textu ) void loop ()( )

Co kód dělá? Prvním krokem je připojení knihovny pro práci s displejem. Jak bylo uvedeno výše, tato knihovna je již součástí Arduino IDE a není třeba ji stahovat a instalovat dodatečně. Dále se určí kontakty, které jsou připojeny ke kolíkům: RS, E, DB4, DB5, DB6, DB7, resp. Poté je nastavena velikost obrazovky. Protože pracujeme s verzí se 16 znaky a 2 řádky, zapisujeme následující hodnoty. Umístíme kurzor na začátek prvního řádku a zobrazíme náš první text Hello World. Dále umístěte kurzor na druhý řádek a zobrazte název webu. To je vše! Uvažovalo se o připojení lcd 1602 k Arduino Uno.

Co je to I2C a proč je potřeba?

Jak již bylo zmíněno výše, připojení displeje zabírá spoustu kontaktů. Například při práci s více senzory a LCD displejem nemusí 1602 pinů jednoduše stačit. Často radioamatéři používají verze Uno nebo Nano, které nemají mnoho kontaktů. Pak lidé přišli se speciálními štíty. Například I2C. Umožňuje připojit displej pouze se 4 piny. To je dvakrát tolik. I2C modul se prodává jak samostatně, kde si jej musíte sami připájet, tak již připájený k LCD 1602 displeji.

Připojení pomocí I2C modulu

Připojení LCD 1602 k Arduino Nano s I2C zabírá málo místa, pouze 4 piny: zem, napájení a 2 datové výstupy. Napájení a zem připojíme na 5V a GND na Arduinu, resp. Zbývající dva kontakty: SCL a SDA připojíme k libovolným analogovým pinům. Na fotografii můžete vidět příklad připojení lcd 1602 k arduinu s modulem I2C:

Programový kód

Pokud pro práci s displejem bez modulu bylo nutné použít pouze jednu knihovnu, pak pro práci s modulem potřebujete dvě knihovny. Jeden z nich je již součástí Arduino IDE - Wire. Další knihovnu, LiquidCrystal I2C, je nutné stáhnout samostatně a nainstalovat. Chcete-li nainstalovat knihovnu na Arduino, obsah staženého archivu musí být načten do kořenové složky Libraries. Příklad programového kódu pomocí I2C:

#zahrnout #zahrnout LiquidCrystal_I2C lcd(0x27,16,2); // Nastavení displeje void setup() ( lcd.init(); lcd.backlight(); // Zapnutí podsvícení displeje lcd..setCursor(8, 1); lcd.print("LCD 1602"); ) void loop( ) ( // Nastaví kurzor na druhý řádek a nulový znak. lcd.setCursor(0, 1); // Zobrazí počet sekund od spuštění Arduina lcd.print(millis()/1000); )

Jak vidíte, kód je téměř stejný.

Jak přidat svůj vlastní symbol?

Problémem těchto displejů je, že chybí podpora pro azbuku a symboly. Například je třeba načíst nějaký symbol do displeje, aby jej mohl odrážet. K tomu vám displej umožňuje vytvořit až 7 vlastních symbolů. Představte si stůl:

0 0 0 1 0
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0

Pokud 0 - není tam nic, pokud 1 - jedná se o vybarvenou oblast. Ve výše uvedeném příkladu můžete vidět vytvoření symbolu „usmívajícího se smajlíka“. Pomocí příkladu programu v Arduinu by to vypadalo takto:

#zahrnout #zahrnout // Přidejte potřebnou knihovnu // Bitová maska ​​bajtu symbolu úsměvu smile = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Nastavení velikosti obrazovky lcd.createChar(1, smile); // Vytvořte číslo znaku 1 lcd.setCursor(0, 0 // Nastaví kurzor na začátek řádku 1 lcd.print("\1" // Vytiskne smajlíka (znak číslo 1) - "\1" ) void loop(); ) ( )

Jak vidíte, bitová maska ​​byla vytvořena stejně jako tabulka. Jakmile je vytvořen, může být zobrazen jako proměnná na displeji. Pamatujte, že do paměti můžete uložit pouze 7 znaků. V zásadě to stačí. Pokud například potřebujete zobrazit symbol stupně.

Problémy, při kterých nemusí fungovat displej

Jsou chvíle, kdy displej nefunguje. Například se zapne, ale nezobrazuje znaky. Nebo se nezapne vůbec. Nejprve zkontrolujte, zda jste správně zapojili kolíky. Pokud jste použili připojení LCD 1202 k Arduinu bez I2C, je velmi snadné se zamotat do vodičů, což může způsobit, že displej nebude fungovat správně. Měli byste se také ujistit, že je zvýšen kontrast displeje, protože při minimálním kontrastu není ani vidět, zda je LCD 1602 zapnutý nebo ne. Pokud to nepomůže, problém může spočívat v pájení kontaktů, to je při použití modulu I2C. Dalším častým důvodem, proč nemusí displej fungovat, je nesprávné nastavení I2C adresy. Faktem je, že existuje mnoho výrobců a mohou zadat jinou adresu, musíte ji opravit zde:

LiquidCrystal_I2C lcd(0x27,16,2);

V závorkách vidíte dvě hodnoty, 0x27 a 16.2 (16.2 je velikost displeje a 0x27 je adresa I2C). Místo těchto hodnot můžete zkusit nastavit 0x37 nebo 0x3F. No a dalším důvodem je prostě vadný LCD 1602. Vzhledem k tomu, že téměř vše pro Arduino je vyrobeno v Číně, nemůžete si být 100% jisti, že zakoupený produkt není vadný.

Výhody a nevýhody LCD 1602

Podívejme se na výhody a nevýhody LCD 1602 displeje.

  • Cena. Tento modul lze zakoupit za velmi přijatelnou cenu v čínských obchodech. Cena je 200-300 rublů. Někdy se dokonce prodává společně s I2C modulem.
  • Snadné připojení. LCD 1602 bez I2C v dnešní době asi nikdo nepřipojuje. A s tímto modulem připojení trvá pouze 4 kontakty, nebudou existovat žádné „pavučiny“ drátů.
  • Programování. Díky hotovým knihovnám je práce s tímto modulem snadná, všechny funkce jsou již napsané. A pokud potřebujete přidat svůj vlastní symbol, zabere to jen pár minut.
  • Během jeho používání tisíci radioamatérů nebyly zjištěny žádné zásadní nevýhody, pouze existují případy vadných nákupů, protože se používají především čínské verze displejů.

Tento článek se zabýval připojením 1602 k Arduinu a také uvedl příklady programů pro práci s tímto displejem. Je skutečně jedním z nejlepších ve své kategorii; ne nadarmo si jej pro své projekty vybírají tisíce radioamatérů!

LCD displeje o rozměrech 1602, založené na řadiči HD44780, jsou jedním z nejjednodušších, cenově nejdostupnějších a nejoblíbenějších displejů pro vývoj různých elektronických zařízení. Nachází se jak v zařízeních sestavených na koleni, tak v průmyslových zařízeních, jako jsou například kávovary. Nejoblíbenější moduly a štíty s tematikou Arduina, jako jsou a jsou shromažďovány na základě tohoto displeje.

V tomto článku vám řekneme, jak jej připojit k Arduinu a zobrazovat informace.

Použité komponenty (koupit v Číně):

. Kontrolní panel

. Spojovací vodiče

Tyto displeje mají dvě provedení: žluté podsvícení s černými písmeny nebo, což je častější, modré podsvícení s bílými písmeny.

Velikost displejů na ovladači HD44780 může být různá, ale budou se ovládat stejně. Nejběžnější rozměry jsou 16x02 (tj. 16 znaků ve dvou řádcích) nebo 20x04. Rozlišení samotných symbolů je 5x8 pixelů.

Většina displejů azbuku nepodporuje, mají ji pouze displeje označené CTK. Tento problém se ale můžeme pokusit částečně vyřešit (pokračování v článku).

Zobrazení výstupů:

Displej má pro připojení 16pinový konektor. Kolíky jsou označeny na zadní straně desky.

1 (VSS) - Napájení ovladače (-)
2 (VDD) - Napájení ovladače (+)
3 (VO) - Kontrolní kolík kontrastu
4 (RS) - Výběr registru
5 (R/W) - čtení/zápis (režim zápisu při připojení k zemi)
6 (E) - Povolit (stroboskop při poklesu)
7-10 (DB0-DB3) - Bity nižšího řádu 8bitového rozhraní
11-14 (DB4-DB7) - Bity vyššího řádu rozhraní
15 (A) - Anodový (+) zdroj podsvícení
16 (K) - Katodový (-) zdroj podsvícení

Režim autotestu:

Před pokusem o připojení a zobrazení informací by bylo dobré zjistit, zda displej funguje nebo ne. Chcete-li to provést, musíte přivést napětí na samotný ovladač ( VSS a VDD), zapněte podsvícení ( A a K) a také upravte kontrast.

Pro nastavení kontrastu použijte potenciometr 10 kOhm. Je jedno, jaký bude mít tvar. Na vnější nohy je přivedeno +5V a GND, centrální noha je připojena k výstupu V.O.

Po připojení napájení do obvodu je nutné dosáhnout správného kontrastu, pokud není správně nastaven, pak se na obrazovce nic nezobrazí. Pro nastavení kontrastu byste si měli pohrát s potenciometrem.

Pokud je obvod správně sestaven a kontrast je správně nastaven, horní řádek by měl být vyplněn obdélníky na obrazovce.

Informační výstup:

K ovládání displeje se používá knihovna LiquidCrystal.h zabudovaná do Arduino IDE.

Funkce knihovny

//Práce s kurzorem lcd.setCursor(0, 0); // Nastavení kurzoru (číslo buňky, řádek) lcd.home(); // Nastavte kurzor na nulu (0, 0) lcd.cursor(); // Povolit viditelnost kurzoru (podtržení) lcd.noCursor(); // Odebrat viditelnost kurzoru (podtržení) lcd.blink(); // Povolit blikání kurzoru (kurzor 5x8) lcd.noBlink(); // Vypnout blikání kurzoru (kurzor 5x8) //Výstup informací lcd.print("site"); // Informační výstup lcd.clear(); // Vymazat displej, (smazat všechna data) nastavit kurzor na nulu lcd.rightToLeft(); // Nahrávání se provádí zprava doleva lcd.leftToRight(); // Zápis se provádí zleva doprava lcd.scrollDisplayRight(); // Posune vše na displeji o jeden znak doprava lcd.scrollDisplayLeft(); // Posune vše na displeji o jeden znak doleva //Informace užitečné pro špiony :) lcd.noDisplay(); // Informace na displeji se stanou neviditelnými, data se nevymažou // pokud se v okamžiku, kdy je tato funkce aktivní, nic nezobrazuje, tak lcd.display(); // Při volání funkce display() všechny informace, které byly

Samotný displej může pracovat ve dvou režimech:

8bitový režim – k tomu se používají nízké i vysoké bity (BB0-DB7)

4bitový režim – k tomu se používají pouze nejméně významné bity (BB4-DB7)

Použití 8bitového režimu na tomto displeji se nedoporučuje. Jeho provoz vyžaduje další 4 nohy a prakticky nedochází k žádnému nárůstu rychlosti, protože Obnovovací frekvence tohoto displeje je omezená< 10раз в секунду.

Pro výstup textu je třeba připojit piny RS, E, DB4, DB5, DB6, DB7 k pinům řadiče. Mohou být připojeny k libovolným pinům Arduina, hlavní je nastavit správnou sekvenci v kódu.

Ukázkový kód:

#zahrnout LiquidCrystal lcd(7, 6, 5, 4, 3, 2); prázdnota založit()(lcd.begin(16, 2); // Nastavení velikosti obrazovky lcd.setCursor(0, 0); lcd.print("Ahoj světe!"); // Zobrazení textu lcd.setCursor (0, 1); // Nastavte kurzor na začátek řádku 2 lcd.print("site"); // Výstupní text ) void smyčka (){ }

Vytvořte si vlastní symboly

Textový výstup jsme vytřídili, písmena anglické abecedy jsou napevno zabudována do paměti ovladače uvnitř displeje a nejsou s nimi žádné problémy. Co ale dělat, když požadovaný symbol není v paměti ovladače?

Žádný problém, požadovaný symbol lze vytvořit ručně (celkem až 7 symbolů). Buňka v displejích, o kterých uvažujeme, má rozlišení 5x8 pixelů. Úkolem vytvoření symbolu je pouze napsat bitovou masku a umístit do ní jedničky na místa, kde mají tečky svítit a nuly tam, kde nemají.

V níže uvedeném příkladu nakreslíme smajlíka.

Ukázkový kód

//Testováno na Arduino IDE 1.0.5#zahrnout #zahrnout // Přidejte požadovanou knihovnu // Bitová maska ​​symbolu úsměvu byte smile = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) prázdnota založit()(lcd.begin(16, 2); // Nastavení velikosti obrazovky lcd.createChar(1, úsměv); // Vytvořte číslo symbolu 1 lcd.setCursor(0, 0); // Nastaví kurzor na začátek 1 řádku lcd.print("\1"); // Zobrazení smajlíka (číslo znaku 1) - "\1") neplatný smyčka (){ }

Bonus

V komentářích poslal člen komunity odkaz na generátor symbolů

  • igorka

      generátor znaků jako výše,
      Udělal jsem to, protože jsem nebyl slabý)

Tentokrát vám chci říct, jak připojit displej z mobilního telefonu Nokia 1202 k mikrokontroléru Atmega8. Programujeme v prostředí CodeVision. Tu a tam se mohu mýlit. Netrvalo dlouho a přišel jsem na to, co je co. Nemám zkušenosti s programováním a knihovnu pro práci s displejem jsem nepsal. Byly zkopírovány z jednoho projektu na internetu. Jsou tam napsány všechny potřebné funkce a je tam písmo 5 * 8 v latince a azbuce. Nechybí ani dvojice znaků 12*16 a 24*32, které autor knihoven ve svém zařízení použil. Pokud je odstraníte, pak písmo 5*8 zabere asi 700 bajtů flash mikrokontroléru. Proto musí být mikrokontrolér pro projekt považován za „tučnější“ v mém případě Atmega8. Docela dost. Všechny soubory - zdroje, knihovna atd., .

Schéma zapojení indikátoru

Schematické schéma připojení LCD displeje k MK

Nakreslil jsem schéma zapojení. Pro napájení displeje je potřeba napětí 3,3V. Pokud napájíte mikrokontrolér z 5V, pak nainstalujte odporové děliče a mikroobvod 78L33. Pokud je celý obvod napájen z 3,3V, odporové děliče nejsou potřeba. Zdá se, že Atmega8A může pracovat od 3,3V za předpokladu, že frekvence není vyšší než 8 MHz. Osobně jsem to nezkoušel. Vše mám sestavené na ladicí desce napájené 5V. V žádném případě nedávejte před samotný displej velkokapacitní elektrolyt. Na samém začátku provozu regulátor vysílá inicializační příkazy na displej. Nabití kondenzátoru nějakou dobu trvá. Zatímco se nabíjí a displej začne fungovat, uplyne nějaký čas a neobdrží inicializační příkaz. Samozřejmě se jedná o milisekundy, ale v tomto případě je efekt patrný.


Zobrazit diagram pinout

Displej Nokie 1202 má 9bitové rozhraní SPI. Mikrokontrolér, který jsme vybrali, tento luxus nemá. Ke komunikaci s displejem tedy nepoužíváme hardwarové, ale softwarové SPI, takříkajíc „bez hlavy“ Neřeknu vám, jak v CodeVision vytvářet nové projekty – řeknu to jen sami všechny piny PORTB musí být nakonfigurovány jako výstup V nastavení projektu musíte zaškrtnout ". Uložte globální konstanty do paměti FLASH" Tato akce je nezbytná, aby se pole písem a naše obrázky ukládaly ve flashi.


Tak jsme vytvořili projekt. Vybrali jsme mikrokontrolér, nastavili taktovací frekvenci a nakonfigurovali projekt. Co bude dál? A pak je potřeba přidat knihovny pro práci s displejem a knihovny zpoždění. Rozbalte archiv. Jsou tam dva soubory. Je třeba je zkopírovat do konkrétních složek. Doufám, že jste CodeVision nainstalovali přímo na disk C:\. Pokud ano, zkopírujte soubory do příslušných cest:

C:\cvavreval\inc pro soubor 1100.inc a
C:\cvavreval\lib pro soubor 1100.h .


Také chci říci, že přiřazení pinů mikrokontroléru lze v souboru změnit 1100.h. Poté se změní schéma zapojení. Začněme kódovat. Ukážeme si jen nějaký nápis na displeji hlavním fontem 5*8. Hned na začátku přidáme knihovny.

#zahrnout< 1100.h>// zobrazení knihovny
#zahrnout // knihovna zpoždění

Úplně dole, před hlavní smyčkou while(1)(), inicializujeme displej a vymažeme jej.

lcd_init(); // inicializace zobrazení
lcd_clear(); // vymazání displeje

Náš nápis také umístíme před hlavní cyklus. Nechte ovladač nejprve zobrazit zprávu na displeji a poté se roztočí v hlavní smyčce. Píšeme toto:

print_string("Vytiskni napis",5,0);
print_string("Cokoli chceme",0,1);
print_string("BUCKER",10,2);

Myslím, že zde je vše jasné. První číslice je x-ová souřadnice na displeji. Může nabývat hodnoty od 0 do 96. Druhý je řetězec. Je to od 0 do 7. V zásadě se tam vejde 8 a půl řádku, ale půl řádku nepřečteme. Kompilujeme a flashujeme. Podívejme se na výsledek. Můžete si také nainstalovat Proteus a testovat v něm. Regulátor lze nakonfigurovat tak, aby fungoval z interního generátoru na frekvenci specifikované v projektu se zpožděním startu 64 ms. Přidávám archiv se zkompilovaným projektem. Frekvence 8 MHz.


Ale jak jsem již psal na začátku, v knihovně jsou i další symboly. Pravda, neexistují žádná písmena, pouze čísla. Nyní si úkol trochu zkomplikujeme. Ať nápis není inertní, ale mění se. Řekněme, že počítá od 0 do 9 s intervalem 1 sekundy. Když dosáhne 9, vynuluje se a začne znovu. Vezměme velká čísla o rozměrech 24*32. No, pojďme začít. Můžete vzít předchozí projekt a odstranit tři řádky „print_string“ Ihned po přidání knihoven deklarujme určitou globální proměnnou m.

znak m = 0;

Můžete jednoduše napsat:

V tomto případě mu bude automaticky přiřazena hodnota 0. V hlavní smyčce zapíšeme toto:

char_24_32(m,35,2); //funkce symbolového výstupu 24*32
delay_ms(1000); // počkejte 1 sekundu
m++; // přičte 1 k proměnné m
if(m>9)m=0; // Podmínka. Pokud je proměnná m větší než 9, pak se m rovná 0.

Natočil jsem krátké video, jak program funguje

Pokusím se vám říci, jak kreslit obrázky a zobrazovat je na displeji. Jak vytvořit pole a funkce pro jejich výstup a jak invertovat obrázek. Knihovny byly vypůjčeny ze stránky cxem.net. Materiál připraven Ochmelka.

Diskutujte o článku PŘIPOJENÍ DISPLEJE K MIKROKONTROLÉRU

Co je nedílnou součástí velkého množství elektronických zařízení? Samozřejmostí jsou prostředky indikace a grafického výstupu dat. Pro uživatele je vždy pohodlnější a příjemnější, když je výsledek „chytré krabičky“ vidět vizuálně. Proto dnes k STM32 připojíme displej pro zobrazení textu a čísel. Hrdinou našich experimentů bude poměrně populární displej od Winstar. Mimochodem, v komentářích se objevilo důležité upřesnění, že metodika je v zásadě stejná pro všechny displeje, na kterých vychází HD44780. Díky JekaKey za důležitý doplněk)

Nejprve je nutné připojit displej k ovladači. Stáhněte si datový list a vyhledejte pinout WH1602. Podívej se sem:

Jak víš, displej WH1602 má 16 pinů. Podívejme se na každou zvlášť...

Piny Vss, Vdd a K je třeba připojit k zemi a k ​​napájení, tedy přesně jak je uvedeno v tabulce, nejsou žádná překvapení a ani není o čem diskutovat)

Pin číslo 3 slouží k úpravě kontrastu - když tam přivedeme +5V, neuvidíme absolutně nic a když pin zkratíme na zem, budeme obdivovat dvě řady černých čtverečků 😉 To nám samozřejmě nevyhovuje , takže tam musíme zavěsit potenciometr (rezistor) s proměnným odporem) pro nastavení kontrastu. Nejlepší viditelnost znaků zajišťuje napětí 0,5-0,7 V na tomto pinu displeje.

Pin RS je již pin, který budeme sami ovládat pomocí mikrokontroléru. Nízká úroveň napětí (0) na tomto kolíku znamená, že nyní bude následovat příkaz, vysoká úroveň (1) znamená, že nyní budou data k zápisu do paměti displeje.

Pin R/W - zde je to jasné, buď čteme data (např. zobrazíme příznak obsazenosti), v tomto případě je na tomto pinu 1, nebo příkaz/data zapíšeme na displej, pak zde máme 0.

DB7 – DB0 – datová sběrnice a tím je řečeno vše)

Pin E je tzv. Enable signál. K tomu je potřeba. Pro práci s displejem – záznam dat nebo vydání příkazu – potřebujeme na tento pin vydat kladný impuls. To znamená, že postup bude vypadat takto:

  1. Na pinech RS, R/W, DB7 - DB0 - potřebné signály odpovídající našemu příkazu.
  2. Dodáváme jeden ke kolíku E.
  3. Zhdems (podle datasheetu – minimálně 150 ns)
  4. Na kolík E aplikujeme nízkou úroveň (0).

Pro napájení podsvícení displeje je potřeba dát 4,2 V na nohu A/Vee.

Takto probíhá komunikace s displejem WH1602.

Přišli jsme na připojení WH1602, ale než přejdeme k příkladu, podívejme se na to, jakým příkazům náš displej obecně rozumí. Za tímto účelem přejdeme do datového listu a najdeme zajímavou tabulku:

Všechny příkazy a signály, které by měly být na odpovídajících pinech WH1602 pro každý konkrétní příkaz, jsou popsány zde. Například chceme vyčistit displej, podíváme se na tabulku a zde je příkaz, který potřebujeme! Jasný displej!

Nuly aplikujeme na piny RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 a jedničku na pin DB0. Hotovo, co dál? Správně, jedna na kolíku E, pak chvíli počkejte a znovu snižte E na nulu. To je vše, displej se vymaže 😉 Těsně před provedením dalšího příkazu musíte provést pauzu, uvedenou v datovém listu pro každý příkaz. Efektivnější by bylo dotazovat se na příznak obsazenosti, jakmile je resetován na 0, můžete pokračovat v práci. Existuje také speciální příkaz pro čtení tohoto příznaku, takže s tímto je vše jasné) Jdeme dál...

A vlastně je vše s teorií, můžete už zkusit něco napsat. Pro usnadnění práce s displejem jsem si vyrobil malou knihovnu, nyní se pojďme podívat, jak se dá využít. Nejprve si stáhněte

Máme k dispozici 2 soubory, MT_WH1602.c a MT_WH1602.h. Druhý odtrhneme, zde je potřeba vybrat piny a použitý ovladač.

Mimochodem, můj displej je připojen takto:

RS-PC2
R/W – PB10
E – PB14
DB7–PD2
DB6–PC12
DB5–PA8
DB4–PA10
DB3–PA15
DB2–PD11
DB1–PA3
DB0–PA5

Otevřete soubor MT_WH1602.h:

#define PLATFORMU (STM32F10x)

Dále vyberte piny mikrokontroléru, ke kterým je displej připojen. Nejprve si nastavíme, které porty použijeme. Když se připojuji, používám GPIOA, GPIOB, GPIOC a GPIOD, píšeme:

Podobně pro ostatní nohy mikrokontroléru.

S nastavením jsme hotovi, pokračujeme) Pro volání příkazů uvedených na začátku článku obsahuje soubor MT_WH1602.c následující funkce (jsou pojmenovány podle názvů příkazů, takže je myslím vše jasné) :

void MT_WH1602_ClearDisplay(void ) ; void MT_WH1602_ReturnHome(void ) ; void MT_WH1602_EntryModeSet (ID adresa bool, posun bool) ; void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ; void MT_WH1602_CursorOrDisplayShift (bool SCbit, bool RLbit) ; void MT_WH1602_FunctionSet (bool DLbit, bool Nbit, bool Fbit) ; void MT_WH1602_SetCGRAMAddress (adresa uint8_t) ; void MT_WH1602_SetDDRAMAddress (adresa uint8_t) ; bool MT_WH1602_ReadBusy(void ) ; void MT_WH1602_WriteData(uint8_t data) ;

U některých příkazů musíme funkci předat parametry, například:

void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ;

Podívejme se na tabulku příkazů:

Vidíme, že příkaz Display ON/OFF nejen zapíná/vypíná displej, ale také aktivuje/deaktivuje kurzor a blikání kurzoru. V datovém listu jsou tyto příkazové bity označeny jako D, C a B a předáváme je jako parametry funkci. Pokud potřebujeme zapnout displej a kurzor, ale zakázat blikání kurzoru, zavoláme příkaz následovně:

MT_WH1602_DisplayOnOff(1, 1, 0);

Obecně je vše jednoduché 😉

Stručně řečeno, vytvoříme nový projekt, přidáme knihovnu pro práci s displejem WH1602, vytvoříme prázdný soubor .c a začneme jej plnit kódem:

// Zahrnout soubor knihovny#include "MT_WH1602.h" /*******************************************************************/ int main(void) ( // Zavolejte inicializační funkci, bez ní se neobejdeme =)() ; // Nyní musíme provést počáteční konfiguraci zobrazení // Dokumentace a internet to doporučují ;) MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000); MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000); MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000); MT_WH1602_FunctionSet(1, 1, 1) ; MT_WH1602_Delay(1000); MT_WH1602_DisplayOnOff(1, 0, 0); MT_WH1602_Delay(1000); MT_WH1602_ClearDisplay() ; MT_WH1602_Delay(2000) ; // Například jsem vzal první hodnoty zpoždění, které mě napadly) // Obecně musíte zkontrolovat příznak zaneprázdnění zobrazení // Nyní něco zobrazme, například název našeho webu MT_WH1602_WriteData(0x6D) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x6F) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x74) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x65) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x68) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x6E) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x73) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x2E) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x75) ; MT_WH1602_Delay(100) ; zatímco (1) ( __NOP() ; ) ) /*******************************************************************/

Hotovo, zkontrolujeme)


Jak vidíte, vše funguje správně)

Mimochodem, nějak se mi ztratila otázka, co napsat na displej, aby se zobrazil ten či onen znak. Zde je deska z datového listu:

Chcete-li tedy určit, jakou hodnotu zapsat do paměti displeje, musíte pro konkrétní symbol vzít čísla zapsaná nahoře a vlevo v této tabulce. Například symbol „A“. Podívejme se - tento symbol odpovídá sloupci 0100 (0x4) a řádku 0001 (0x1). Ukazuje se, že pro zobrazení symbolu „A“ musíte na displej zapsat hodnotu 0x41.

To je vše =) Vyřešili jsme zapojení a provoz displeje WH1602, takže se brzy uvidíme!

P.S. Při práci s knihovnou jsem netestoval funkci čtení příznaku obsazenosti, takže když najednou něco nefunguje jak má, napište, přijdeme na to)

  • 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.!"); // vytiskněte řá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řevést 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).