Pripojenie obrazovky LSD. Výcvikový kurz

Každý rádioamatér po určitom počte jednoduchých domácich projektov dospeje k cieľu postaviť niečo veľkolepé pomocou senzorov a tlačidiel. Predsa len, je oveľa zaujímavejšie zobrazovať údaje na displeji ako na monitore portu. Potom však vyvstáva otázka: aký displej si vybrať? A vo všeobecnosti, ako ho pripojiť, čo je potrebné na pripojenie? Odpovede na tieto otázky budú diskutované v tomto článku.

LCD 1602

Spomedzi mnohých možností zobrazenia by som chcel konkrétne spomenúť displej LCD1602 založený na radiči HD4478. Tento displej je dostupný v dvoch farbách: biele písmená na modrom pozadí, čierne písmená na žltom pozadí. Pripojenie LCD 1602 k Arduinu tiež nespôsobí žiadne problémy, keďže je tu vstavaná knižnica a nie je potrebné sťahovať nič navyše. Displeje sa líšia nielen cenou, ale aj veľkosťou. Rádioamatéri často používajú 16 x 2, to znamená 2 riadky po 16 znakoch. Ale existuje aj 20 x 4, kde sú 4 riadky po 20 znakov. Rozmery a farba nehrajú pri pripájaní lcd 1602 displeja k Arduno žiadnu rolu, pripájajú sa rovnakým spôsobom. Pozorovací uhol je 35 stupňov, doba odozvy displeja je 250 ms. Môže pracovať pri teplotách od -20 do 70 stupňov Celzia. Počas prevádzky spotrebuje 4 mA pre obrazovku a 120 mA pre podsvietenie.

Kde sa používa?

Tento displej je obľúbený nielen medzi rádioamatérmi, ale aj medzi veľkými výrobcami. Napríklad tlačiarne a kávovary tiež používajú LCD1602. Je to kvôli nízkej cene, tento displej stojí na čínskych stránkach 200-300 rubľov. Oplatí sa tam kúpiť, pretože v našich obchodoch sú prirážky za tento displej veľmi vysoké.

Pripojenie k Arduinu

Pripojenie LCD 1602 k Arduino Nano a Uno nie je iné. S displejom môžete pracovať v dvoch režimoch: 4 bitový a 8-bitový. Pri práci s 8-bitovými sa používajú bity nízkeho aj vysokého rádu a pri 4-bitových iba nižšie rádové. Nemá zmysel pracovať s 8-bit, pretože pridá ďalšie 4 kontakty na pripojenie, čo sa neodporúča, pretože rýchlosť nebude vyššia, limit pre aktualizácie displeja je 10-krát za sekundu. Vo všeobecnosti sa na pripojenie lcd 1602 k Arduinu používa veľa drôtov, čo spôsobuje určité nepríjemnosti, ale existujú špeciálne štíty, ale o tom neskôr. Na obrázku je pripojenie displeja k Arduino Uno:

Vzorový kód:

#include // Pridajte potrebnú knižnicu LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Nastavenie veľkosti obrazovky lcd.setCursor(0, 0); // Nastavenie kurzora na začiatok 1 riadok lcd.print("Ahoj, svet!"); // Vypíše text lcd.setCursor(0, 1); // Nastaví kurzor na začiatok riadku 2 lcd.print("site") ; // Výstup textu ) void loop ()( )

Čo robí kód? Prvým krokom je pripojenie knižnice pre prácu s displejom. Ako bolo uvedené vyššie, táto knižnica je už zahrnutá v Arduino IDE a nie je potrebné ju dodatočne sťahovať a inštalovať. Ďalej sa určia kontakty, ktoré sú pripojené na kolíky: RS, E, DB4, DB5, DB6, DB7, resp. Potom sa nastaví veľkosť obrazovky. Keďže pracujeme s verziou so 16 znakmi a 2 riadkami, píšeme nasledujúce hodnoty. Kurzor umiestnime na začiatok prvého riadku a zobrazíme náš prvý text Hello World. Potom umiestnite kurzor na druhý riadok a zobrazte názov lokality. To je všetko! Zvažovalo sa pripojenie lcd 1602 k Arduino Uno.

Čo je to I2C a prečo je to potrebné?

Ako už bolo spomenuté vyššie, pripojenie displeja zaberá veľa kontaktov. Napríklad pri práci s viacerými snímačmi a LCD displejom vám 1602 pinov jednoducho nemusí stačiť. Často rádioamatéri používajú verzie Uno alebo Nano, ktoré nemajú veľa kontaktov. Potom ľudia prišli so špeciálnymi štítmi. Napríklad I2C. Umožňuje pripojiť displej iba so 4 pinmi. To je dvakrát toľko. I2C modul sa predáva ako samostatne, kde si ho musíte sami prispájkovať, tak aj prispájkovaný na LCD 1602 displej.

Pripojenie pomocou I2C modulu

Pripojenie LCD 1602 k Arduino Nano s I2C zaberá málo miesta, iba 4 piny: zem, napájanie a 2 dátové výstupy. Napájanie a zem pripojíme na 5V a GND na Arduino, resp. Zvyšné dva kontakty: SCL a SDA pripojíme k ľubovoľným analógovým kolíkom. Na fotografii môžete vidieť príklad pripojenia lcd 1602 k arduinu s modulom I2C:

Programový kód

Ak na prácu s displejom bez modulu bolo potrebné použiť iba jednu knižnicu, potom na prácu s modulom potrebujete dve knižnice. Jeden z nich je už zahrnutý v Arduino IDE - Wire. Ďalšiu knižnicu, LiquidCrystal I2C, je potrebné stiahnuť samostatne a nainštalovať. Ak chcete nainštalovať knižnicu v Arduine, obsah stiahnutého archívu sa musí načítať do koreňového priečinka Libraries. Príklad programového kódu pomocou I2C:

#include #include LiquidCrystal_I2C lcd(0x27,16,2); // Nastavenie zobrazenia void setup() ( lcd.init(); lcd.backlight(); // Zapnutie podsvietenia displeja lcd..setCursor(8, 1); lcd.print("LCD 1602"); ) void loop( ) ( // Nastavte kurzor na druhý riadok a nulový znak. lcd.setCursor(0, 1); // Zobrazenie počtu sekúnd od spustenia Arduina lcd.print(millis()/1000); )

Ako vidíte, kód je takmer rovnaký.

Ako pridať svoj vlastný symbol?

Problém s týmito displejmi je, že neexistuje podpora pre azbuku a symboly. Napríklad musíte do displeja vložiť nejaký symbol, aby ho mohol odrážať. Displej vám k tomu umožňuje vytvoriť až 7 vlastných symbolov. Predstavte si tabuľku:

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

Ak 0 - nič tam nie je, ak 1 - toto je vymaľovaná oblasť. Vo vyššie uvedenom príklade môžete vidieť vytvorenie symbolu „usmievajúceho sa smajlíka“. Pomocou príkladu programu v Arduine by to vyzeralo takto:

#include #include // Pridajte potrebnú knižnicu // Bitová maska ​​bajtu symbolu úsmevu 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); // Nastavenie veľkosti obrazovky lcd.createChar(1, smile); // Vytvorenie čísla znaku 1 lcd.setCursor(0, 0); // Nastavte kurzor na začiatok riadku 1 lcd.print("\1"); // Zobrazenie smajlíka (číslo znaku 1) - "\1" ) void loop ()) ( )

Ako vidíte, bitová maska ​​bola vytvorená rovnako ako tabuľka. Po vytvorení sa môže zobraziť ako premenná na displeji. Pamätajte, že do pamäte môžete uložiť iba 7 znakov. V zásade to stačí. Napríklad, ak potrebujete ukázať symbol stupňa.

Problémy, pri ktorých nemusí fungovať displej

Sú chvíle, keď displej nefunguje. Napríklad sa zapne, ale nezobrazuje znaky. Alebo sa nezapne vôbec. Najprv skontrolujte, či ste správne pripojili kolíky. Ak ste použili pripojenie LCD 1202 k Arduinu bez I2C, je veľmi ľahké sa zamotať do káblov, čo môže spôsobiť, že displej nebude fungovať správne. Mali by ste sa tiež uistiť, že je zvýšený kontrast displeja, pretože pri minimálnom kontraste nie je ani vidieť, či je LCD 1602 zapnutý alebo nie. Ak to nepomôže, problém môže spočívať v spájkovaní kontaktov, je to pri použití modulu I2C. Ďalším častým dôvodom, prečo nemusí displej fungovať, je nesprávne nastavenie I2C adresy. Faktom je, že existuje veľa výrobcov a môžu uviesť inú adresu, musíte to opraviť tu:

LiquidCrystal_I2C lcd(0x27,16,2);

V zátvorkách môžete vidieť dve hodnoty, 0x27 a 16,2 (16,2 je veľkosť displeja a 0x27 je adresa I2C). Namiesto týchto hodnôt môžete skúsiť nastaviť 0x37 alebo 0x3F. Ďalším dôvodom je jednoducho chybný LCD 1602. Vzhľadom na to, že takmer všetko pre Arduino je vyrobené v Číne, nemôžete si byť 100% istý, že zakúpený produkt nie je chybný.

Výhody a nevýhody LCD 1602

Pozrime sa na výhody a nevýhody LCD 1602 displeja.

  • Cena. Tento modul je možné zakúpiť za veľmi prijateľnú cenu v čínskych obchodoch. Cena je 200-300 rubľov. Niekedy sa dokonca predáva spolu s I2C modulom.
  • Jednoduché pripojenie. V dnešnej dobe asi nikto nepripája LCD 1602 bez I2C. A s týmto modulom spojenie trvá iba 4 kontakty, nebudú existovať žiadne „pavučiny“ drôtov.
  • Programovanie. Vďaka hotovým knižniciam je práca s týmto modulom jednoduchá, všetky funkcie sú už napísané. A ak potrebujete pridať svoj vlastný symbol, trvá to len pár minút.
  • Počas jeho používania tisíckami rádioamatérov neboli zistené žiadne zásadné nevýhody, existujú iba prípady chybných nákupov, pretože sa používajú najmä čínske verzie displejov.

Tento článok sa zaoberal pripojením 1602 k Arduinu a uviedol aj príklady programov na prácu s týmto displejom. Je skutočne jedným z najlepších vo svojej kategórii, nie nadarmo si ho pre svoje projekty vyberajú tisíce rádioamatérov!

LCD displeje s rozmermi 1602, založené na radiči HD44780, sú jedným z najjednoduchších, najdostupnejších a najobľúbenejších displejov pre vývoj rôznych elektronických zariadení. Nachádza sa ako v zariadeniach zostavených na kolene, tak aj v priemyselných zariadeniach, ako sú napríklad kávovary. Na základe tohto displeja sa zhromažďujú najpopulárnejšie moduly a štíty s tematikou Arduina, ako sú a.

V tomto článku vám povieme, ako ho pripojiť k Arduinu a zobraziť informácie.

Použité komponenty (kúpiť v Číne):

. Riadiace panel

. Spojovacie vodiče

Tieto displeje majú dva dizajny: žlté podsvietenie s čiernymi písmenami alebo, čo je bežnejšie, modré podsvietenie s bielymi písmenami.

Veľkosť displejov na ovládači HD44780 môže byť rôzna, ale budú sa ovládať rovnako. Najbežnejšie rozmery sú 16x02 (t.j. 16 znakov v dvoch riadkoch) alebo 20x04. Rozlíšenie samotných symbolov je 5x8 pixelov.

Väčšina displejov azbuku nepodporuje, majú ju len displeje s označením CTK. Ale môžeme sa pokúsiť tento problém čiastočne vyriešiť (pokračovanie v článku).

Výstupy displeja:

Displej má na pripojenie 16pinový konektor. Kolíky sú označené na zadnej strane dosky.

1 (VSS) - Napájanie ovládača (-)
2 (VDD) - napájanie ovládača (+)
3 (VO) - Kontrolný kolík kontrastu
4 (RS) - Výber registrácie
5 (R/W) - Čítanie/Zápis (režim zápisu pri pripojení k zemi)
6 (E) - Povoliť (blikanie pri poklese)
7-10 (DB0-DB3) - Bity nízkeho rádu 8-bitového rozhrania
11-14 (DB4-DB7) - Bity vyššieho rádu rozhrania
15 (A) - Anódový (+) zdroj podsvietenia
16 (K) - Katódový (-) zdroj podsvietenia

Režim autotestu:

Pred pokusom o pripojenie a zobrazenie informácií by bolo dobré zistiť, či displej funguje alebo nie. Aby ste to dosiahli, musíte na samotný ovládač priviesť napätie ( VSS a VDD), zapnite podsvietenie ( A a K) a tiež upravte kontrast.

Na nastavenie kontrastu použite potenciometer 10 kOhm. Nezáleží na tom, aký bude mať tvar. Na vonkajšie nohy sa privádza +5V a GND, centrálna noha je pripojená k výstupu V.O.

Po privedení napájania do obvodu je potrebné dosiahnuť správny kontrast, ak nie je správne nastavený, na obrazovke sa nič nezobrazí. Ak chcete upraviť kontrast, pohrajte sa s potenciometrom.

Ak je obvod správne zostavený a kontrast je správne nastavený, horný riadok by mal byť vyplnený obdĺžnikmi na obrazovke.

Výstup informácií:

Na ovládanie displeja sa používa knižnica LiquidCrystal.h zabudovaná do Arduino IDE.

Funkcionalita knižnice

//Práca s kurzorom lcd.setCursor(0, 0); // Nastavte kurzor (číslo bunky, riadok) lcd.home(); // Nastavte kurzor na nulu (0, 0) lcd.cursor(); // Povoliť viditeľnosť kurzora (podčiarknuté) lcd.noCursor(); // Odstránenie viditeľnosti kurzora (podčiarknutie) lcd.blink(); // Povoliť blikanie kurzora (kurzor 5x8) lcd.noBlink(); // Vypnutie blikania kurzora (kurzor 5x8) //Výstup informácií lcd.print("stránka"); // Výstup informácií lcd.clear(); // Vymažte displej, (vymažte všetky údaje) nastavte kurzor na nulu lcd.rightToLeft(); // Nahrávanie sa vykonáva sprava doľava lcd.leftToRight(); // Zápis sa vykonáva zľava doprava lcd.scrollDisplayRight(); // Posunie všetko na displeji o jeden znak doprava lcd.scrollDisplayLeft(); // Posunie všetko na displeji o jeden znak doľava //Informácie užitočné pre špiónov :) lcd.noDisplay(); // Informácie na displeji sa stanú neviditeľnými, údaje sa nevymažú // ak sa v momente, keď je táto funkcia aktívna, nič nezobrazuje, tak displej LCD(); // Pri volaní funkcie display() všetky informácie, ktoré boli

Samotný displej môže pracovať v dvoch režimoch:

8-bitový režim – na tento účel sa používajú nízke aj vysoké bity (BB0-DB7)

4-bitový režim – na tento účel sa používajú iba najmenej významné bity (BB4-DB7)

Použitie 8-bitového režimu na tomto displeji sa neodporúča. Jeho prevádzka vyžaduje ďalšie 4 nohy a prakticky sa nezvýši rýchlosť, pretože Obnovovacia frekvencia tohto displeja je obmedzená< 10раз в секунду.

Pre výstup textu je potrebné pripojiť piny RS, E, DB4, DB5, DB6, DB7 ku kolíkom ovládača. Môžu byť pripojené k akýmkoľvek pinom Arduino, hlavné je nastaviť správnu sekvenciu v kóde.

Vzorový kód:

#include LiquidCrystal lcd(7, 6, 5, 4, 3, 2); neplatné nastaviť()(lcd.begin(16, 2); // Nastavenie veľkosti obrazovky lcd.setCursor(0, 0); lcd.print("Ahoj, svet!"); // Zobrazte text lcd.setCursor (0, 1); // Nastavte kurzor na začiatok riadku 2 lcd.print("stránka"); // Výstupný text ) void slučka (){ }

Vytvorte si vlastné symboly

Textový výstup sme pretriedili, písmená anglickej abecedy sú pevne zapojené do pamäte ovládača vo vnútri displeja a nie sú s nimi žiadne problémy. Čo však robiť, ak požadovaný symbol nie je v pamäti ovládača?

Žiadny problém, požadovaný symbol je možné vytvoriť ručne (spolu až 7 symbolov). Bunka v displejoch, o ktorých uvažujeme, má rozlíšenie 5x8 pixelov. Úloha vytvorenia symbolu spočíva iba v napísaní bitovej masky a umiestnení jednotiek na miesta, kde by bodky mali svietiť a nuly tam, kde by nemali.

V nižšie uvedenom príklade nakreslíme smajlíka.

Vzorový kód

//Testované na Arduino IDE 1.0.5#include #include // Pridajte požadovanú knižnicu // Bitová maska ​​symbolu úsmevu byte smile = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) neplatné nastaviť()(lcd.begin(16, 2); // Nastavenie veľkosti obrazovky lcd.createChar(1, úsmev); // Vytvorenie symbolu číslo 1 lcd.setCursor(0, 0); // Nastavte kurzor na začiatok 1 riadku lcd.print("\1"); // Zobrazenie smajlíka (číslo znaku 1) - "\1") neplatný slučka (){ }

Bonus

V komentároch poslal člen komunity odkaz na generátor symbolov

  • igorka

      generátor znakov ako vyššie,
      Urobil som to, pretože som nebol slabý)

Tentokrát vám chcem povedať, ako pripojiť displej z mobilného telefónu Nokia 1202 k mikrokontroléru Atmega8. Programujeme v prostredí CodeVision. Tu a tam sa môžem mýliť. Netrvalo dlho a prišiel som na to, čo je čo. Nemám skúsenosti s programovaním a knižnicu pre prácu s displejom som nepísal. Boli skopírované z jedného projektu na internete. Sú tam napísané všetky potrebné funkcie a je tam písmo 5 * 8 v latinke a azbuke. Je tu aj pár znakov 12*16 a 24*32, ktoré autor knižníc použil vo svojom zariadení. Ak ich odstránite, písmo 5*8 zaberie približne 700 bajtov flash mikrokontroléra. Preto je potrebné mikrokontrolér pre projekt brať „tučnejšie.“ V mojom prípade som použil Atmega8. Celkom dosť. Všetky súbory – zdroje, knižnica atď., .

Schéma zapojenia indikátora

Schéma zapojenia LCD displeja k MK

Nakreslil som schému zapojenia. Na napájanie displeja potrebujete napätie 3,3V. Ak napájate mikrokontrolér z 5V, potom nainštalujte odporové deličy a mikroobvod 78L33. Ak je celý obvod napájaný z 3,3V, odporové deličy nie sú potrebné. Zdá sa, že Atmega8A môže pracovať od 3,3 V za predpokladu, že frekvencia nie je vyššia ako 8 MHz. Osobne som to neskúšal. Všetko mám zmontované na ladiacej doske napájanej 5V. V žiadnom prípade nedávajte pred samotný displej veľkokapacitný elektrolyt. Na samom začiatku prevádzky vysiela regulátor na displej inicializačné príkazy. Nabitie kondenzátora si vyžaduje určitý čas. Kým sa nabíja a displej začne fungovať, uplynie nejaký čas a nedostane inicializačný príkaz. Samozrejme, ide o milisekundy, no v tomto prípade je efekt citeľný.


Zobraziť diagram pinoutov

Displej Nokie 1202 má 9-bitové rozhranie SPI. Mikrokontrolér, ktorý sme si vybrali, tento luxus nemá. Na komunikáciu s displejom teda nevyužívame hardvérové, ale softvérové ​​SPI, takpovediac „bez premýšľania.“ Nepoviem vám, ako v CodeVision vytvárať nové projekty – zamyslite sa sami. Poviem len, že všetky piny PORTB musia byť nakonfigurované ako výstup. V nastaveniach projektu musíte zaškrtnúť " Uložte globálne konštanty do pamäte FLASH" Táto akcia je potrebná, aby sa polia písiem a naše obrázky uložili vo formáte flash.


Tak sme vytvorili projekt. Vybrali sme si mikrokontrolér, nastavili taktovaciu frekvenciu a nakonfigurovali projekt. Čo bude ďalej? A potom je potrebné pridať knižnice pre prácu s displejom a knižnice oneskorenia. Rozbaľte archív. Sú tam dva súbory. Je potrebné ich skopírovať do konkrétnych priečinkov. Dúfam, že ste nainštalovali CodeVision priamo na disk C:\. Ak áno, skopírujte súbory do príslušných ciest:

C:\cvavreval\inc pre súbor 1100.inc a
C:\cvavreval\lib pre súbor 1100.h .


Chcem tiež povedať, že priradenie pinov mikrokontroléra sa dá zmeniť v súbore 1100.h. Potom sa zmení schéma pripojenia. Začnime kódovať. Ukážme len nejaký nápis na displeji v hlavnom fonte 5*8. Hneď na začiatku pridáme knižnice.

#include< 1100.h>// zobrazenie knižnice
#include // oneskorenie knižnice

Úplne dole, pred hlavnou slučkou while(1)(), inicializujeme displej a vymažeme ho.

lcd_init(); // inicializácia displeja
lcd_clear(); // vymazanie displeja

Náš nápis umiestnime aj pred hlavný cyklus. Nechajte ovládač najprv zobraziť správu na displeji a potom sa roztočte v hlavnej slučke. Píšeme toto:

print_string("Vypis napis",5,0);
print_string("Čo chceme",0,1);
print_string("BUCKER",10,2);

Myslím, že tu je všetko jasné. Prvá číslica je x-ová súradnica na displeji. Môže nadobúdať hodnotu od 0 do 96. Druhým je reťazec. Je to od 0 do 7. V zásade sa tam zmestí 8 a pol riadku, ale pol riadku neprečítame. Kompilujeme a flashujeme. Pozrime sa na výsledok. Môžete si tiež nainštalovať Proteus a otestovať ho. Regulátor je možné nakonfigurovať tak, aby fungoval z interného generátora pri frekvencii špecifikovanej v projekte s oneskorením štartu 64 ms. Pridávam archív so zostaveným projektom. Frekvencia 8 MHz.


Ale ako som už písal na začiatku, v knižnici sú aj iné symboly. Je pravda, že neexistujú žiadne písmená, iba čísla. Teraz si úlohu trochu skomplikujeme. Nech nápis nie je inertný, ale mení sa. Povedzme, že počíta od 0 do 9 s intervalom 1 sekundy. Keď dosiahne 9, vynuluje sa a začne znova. Vezmime si veľké čísla s rozmermi 24*32. Nuž, začnime. Môžete vziať predchádzajúci projekt a odstrániť tri riadky „print_string“. Ihneď po pridaní knižníc deklarujme určitú globálnu premennú m.

znak m = 0;

Môžete jednoducho napísať:

V tomto prípade mu bude automaticky priradená hodnota 0. V hlavnej slučke napíšeme toto:

char_24_32(m,35,2); //funkcia symbolového výstupu 24*32
delay_ms(1000); // počkajte 1 sekundu
m++; // pridaj 1 do premennej m
if(m>9)m=0; // Podmienka. Ak je premenná m väčšia ako 9, potom sa m rovná 0.

Natočil som krátke video o fungovaní programu

Pokúsim sa vám povedať, ako kresliť obrázky a zobrazovať ich na obrazovke. Ako vytvoriť polia a funkcie na ich výstup a ako invertovať obrázok. Knižnice boli požičané zo stránky cxem.net. Materiál pripravený Boozer.

Diskutujte o článku PRIPOJENIE DISPLEJA K MIKROOVLÁDAČU

Čo je neoddeliteľnou súčasťou veľkého množstva elektronických zariadení? Samozrejmosťou sú prostriedky indikácie a grafického výstupu údajov. Pre používateľa je vždy pohodlnejšie a príjemnejšie, keď je výsledok „inteligentnej krabičky“ viditeľný vizuálne. Preto dnes k STM32 pripojíme displej na zobrazovanie textu a čísel. Hrdinom našich experimentov bude pomerne populárny displej od spoločnosti Winstar. Mimochodom, v komentároch sa objavilo dôležité spresnenie, že metodika je v podstate rovnaká pre všetky displeje, na ktorých sú založené HD44780.Ďakujem JekaKey za dôležitý doplnok)

Najprv musí byť displej pripojený k ovládaču. Stiahnite si údajový list a vyhľadajte pinout WH1602. Pozri sa sem:

Ako vieš, displej WH1602 má 16 kolíkov. Pozrime sa na každú zvlášť...

Piny Vss, Vdd a K je potrebné pripojiť k zemi a napájaniu, to znamená presne tak, ako je uvedené v tabuľke, nie sú žiadne prekvapenia a nie je o čom diskutovať)

Špendlík číslo 3 slúži na nastavenie kontrastu - ak tam aplikujeme +5V, neuvidíme absolútne nič a ak špendlík spojíme so zemou, budeme obdivovať dva rady čiernych štvorcov 😉 To nám, samozrejme, nevyhovuje , tak tam potrebujeme zavesiť potenciometer (rezistor) s premenlivým odporom) na nastavenie kontrastu. Najlepšiu viditeľnosť znakov poskytuje napätie 0,5-0,7 V na tomto pine displeja.

Pin RS je už pin, ktorý budeme sami ovládať pomocou mikrokontroléra. Nízka úroveň napätia (0) na tomto kolíku znamená, že teraz bude nasledovať príkaz, vysoká úroveň (1) znamená, že teraz budú údaje na zápis do pamäte displeja.

Pin R/W - tu je to jasné, buď načítame dáta (napr. zobrazí príznak obsadenosti), v tomto prípade je na tomto pine 1, alebo príkaz/údaje zapíšeme na displej, potom tu máme 0.

DB7 – DB0 – dátová zbernica, a to hovorí za všetko)

Pin E je takzvaný Enable signál. Na to je potrebný. Aby sme mohli pracovať s displejom – zaznamenávať dáta alebo zadávať príkaz – musíme na tento pin vydať kladný impulz. To znamená, že postup bude vyzerať takto:

  1. Na pinoch RS, R/W, DB7 - DB0 - potrebné signály zodpovedajúce nášmu príkazu.
  2. Dodávame jeden na kolík E.
  3. Zhdems (podľa údajového listu – najmenej 150 ns)
  4. Na kolík E aplikujeme nízku úroveň (0).

Na napájanie podsvietenia displeja musíte dať 4,2 V na nohu A/Vee.

Takto prebieha komunikácia s displejom WH1602.

Prišli sme na pripojenie WH1602, ale predtým, ako prejdeme k príkladu, pozrime sa na to, akým príkazom náš displej vo všeobecnosti rozumie. Za týmto účelom prejdeme do údajového listu a nájdeme zaujímavú tabuľku:

Všetky príkazy a signály, ktoré by mali byť na príslušných kolíkoch WH1602 pre každý konkrétny príkaz, sú popísané tu. Napríklad, chceme vyčistiť displej, pozrieme sa na tabuľku a tu je príkaz, ktorý potrebujeme! Jasný displej!

Nuly aplikujeme na kolíky RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 a jednu na kolíky DB0. Hotovo! Čo ďalej? Správne, jeden na kolíku E, potom chvíľu počkajte a znova znížte E na nulu. To je všetko, displej je vymazaný 😉 Tesne pred vykonaním ďalšieho príkazu musíte urobiť pauzu, ktorá je uvedená v údajovom liste pre každý príkaz. Efektívnejšie by bolo vyzvať príznak obsadenosti; hneď ako sa nastaví na 0, môžete pokračovať v práci. Existuje aj špeciálny príkaz na čítanie tohto príznaku, takže s týmto je všetko jasné) Poďme ďalej...

A v skutočnosti je všetko s teóriou, už môžete skúsiť niečo napísať. Pre uľahčenie práce s displejom som si vyrobil malú knižnicu, teraz sa poďme pozrieť, ako sa dá využiť. Najprv stiahnite

Máme k dispozícii 2 súbory, MT_WH1602.c a MT_WH1602.h. Druhý odtrhneme, tu treba vybrať piny a použitý ovládač.

Mimochodom, môj displej je pripojený takto:

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

Otvorte súbor MT_WH1602.h:

#define PLATFORMU (STM32F10x)

Ďalej vyberte kolíky mikrokontroléra, ku ktorým je pripojený displej. Najprv si nastavíme, ktoré porty použijeme. Keď sa pripájam, používam GPIOA, GPIOB, GPIOC a GPIOD, píšeme:

Podobne pre ostatné nohy mikrokontroléra.

S nastavením sme skončili, pokračujeme) Na volanie príkazov uvedených na začiatku článku obsahuje súbor MT_WH1602.c nasledujúce funkcie (sú pomenované podľa názvov príkazov, takže si myslím, že je všetko 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 údaje) ;

Pre niektoré príkazy musíme funkcii odovzdať parametre, napríklad:

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

Pozrime sa na tabuľku príkazov:

Vidíme, že príkaz Display ON/OFF nielen zapína/vypína displej, ale aj aktivuje/deaktivuje kurzor a blikanie kurzora. V údajovom liste sú tieto príkazové bity označené ako D, C a B a odovzdávame ich funkcii ako parametre. Ak potrebujeme zapnúť displej a kurzor, ale zakázať blikanie kurzora, zavoláme príkaz takto:

MT_WH1602_DisplayOnOff(1, 1, 0);

Vo všeobecnosti je všetko jednoduché 😉

V skratke vytvoríme nový projekt, pridáme knižnicu pre prácu s displejom WH1602, vytvoríme prázdny súbor .c a začneme ho napĺňať kódom:

// Zahrňte súbor knižnice#include "MT_WH1602.h" /*******************************************************************/ int main(void) ( // Zavolajte inicializačnú funkciu, bez nej sa nezaobídeme =)() ; // Teraz musíme vykonať počiatočnú konfiguráciu zobrazenia // Dokumentácia a internet to odporúčajú ;) 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) ; // Napríklad som vzal prvé hodnoty oneskorenia, ktoré mi prišli na myseľ) // Vo všeobecnosti musíte skontrolovať príznak zaneprázdnenia zobrazenia // Teraz zobrazme niečo, napríklad názov našej stránky 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) ; zatiaľ čo (1) ( __NOP() ; ) ) /*******************************************************************/

Hotovo, skontrolujeme)


Ako vidíte, všetko funguje správne)

Mimochodom, akosi som stratil zo zreteľa otázku, čo napísať na displej, aby sa zobrazil ten či onen znak. Tu je štítok z údajového listu:

Takže, aby ste určili, akú hodnotu zapísať do pamäte displeja, musíte pre konkrétny symbol vziať čísla napísané hore a vľavo v tejto tabuľke. Napríklad symbol „A“. Pozrime sa - tento symbol zodpovedá stĺpcu 0100 (0x4) a riadku 0001 (0x1). Ukazuje sa, že na zobrazenie symbolu „A“ musíte na displej napísať hodnotu 0x41.

To je všetko =) Vyriešili sme zapojenie a prevádzku displeja WH1602, takže sa čoskoro uvidíme!

P.S. Pri práci s knižnicou som netestoval funkciu čítania príznaku obsadenosti, takže ak zrazu niečo nefunguje ako má, napíšte, prídeme na to)

  • Modul FC-113 je založený na čipe PCF8574T, čo je 8-bitový posuvný register - vstupno-výstupný „expandér“ pre sériovú zbernicu I2C. Na obrázku je mikroobvod označený DD1.
  • R1 je trimovací odpor na nastavenie kontrastu LCD displeja.
  • Jumper J1 slúži na zapnutie podsvietenia displeja.
  • Piny 1…16 sa používajú na pripojenie modulu k pinom LCD displeja.
  • Na zmenu I2C adresy zariadenia sú potrebné kontaktné plôšky A1...A3. Prispájkovaním príslušných prepojok môžete zmeniť adresu zariadenia. Tabuľka ukazuje zhodu adries a prepojok: „0“ zodpovedá prerušenému obvodu, „1“ nainštalovanej prepojke. Štandardne sú všetky 3 prepojky otvorené a adresa zariadenia 0x27.

2 Schéma pripojenia LCD displeja k Arduinu cez I2C protokol

Modul je pripojený k Arduinu štandardným spôsobom pre zbernicu I2C: pin SDA modulu je pripojený k analógovému portu A4, pin SCL je pripojený k analógovému portu A5 Arduina. Modul je napájaný +5 V z Arduina. Samotný modul je pripojený pomocou pinov 1…16 k príslušným pinom 1…16 na LCD displeji.


3 Knižnica pre prácu cez I2C protokol

Teraz potrebujeme knižnicu na prácu s LCD cez rozhranie I2C. Môžete použiť napríklad tento (odkaz v riadku „Stiahnuť vzorový kód a knižnicu“).

Stiahnutý archív LiquidCrystal_I2Cv1-1.rar rozbaliť do priečinka \knižnice\, ktorý sa nachádza v adresári Arduino IDE.

Knižnica podporuje súbor štandardných funkcií pre LCD obrazovky:

FunkciaÚčel
LiquidCrystal() vytvorí premennú typu LiquidCrystal a akceptuje parametre pripojenia displeja (čísla pinov);
začať() inicializácia LCD displeja, nastavenie parametrov (počet riadkov a znakov);
jasný() vymazanie obrazovky a návrat kurzora do východiskovej polohy;
Domov() vrátiť kurzor do východiskovej polohy;
setCursor() nastavenie kurzora na danú pozíciu;
písať () zobrazí symbol na LCD obrazovke;
tlačiť () zobrazuje text na LCD obrazovke;
kurzor() ukazuje kurzor, t.j. podčiarknutie pod miestom ďalšieho znaku;
noCursor() skryje kurzor;
blikať() kurzor bliká;
noBlink() Zrušiť blikanie;
noDisplay() vypnutie displeja pri ukladaní všetkých zobrazených informácií;
zobraziť () zapnutie displeja pri ukladaní všetkých zobrazených informácií;
scrollDisplayLeft() posuňte obsah displeja o 1 pozíciu doľava;
scrollDisplayRight() posuňte obsah displeja o 1 miesto doprava;
automatické posúvanie() povoliť automatické posúvanie;
noAutoscroll() zakázať automatické posúvanie;
zľava doprava() nastavuje smer textu zľava doprava;
zprava doľava() smer textu sprava doľava;
createChar() vytvorí vlastný znak pre obrazovku LCD.

4 Skica pre textový výstup na LCD obrazovku cez I2C zbernicu

Otvorme si ukážku: Súbor vzoriek LiquidCrystal_I2C CustomChars a trochu to pozmeníme. Zobrazíme správu, na konci ktorej bude blikajúci symbol. Komentáre ku kódu komentujú všetky nuansy náčrtu.

#include // zahrnie knižnicu Wire #include // pripojenie knižnice LCD #define printByte(args) write(args); // uint8_t srdce = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // bitová maska ​​symbolu “srdca” LiquidCrystal_I2C lcd(0x27, 16, 2); // Nastavte adresu 0x27 pre LCD displej 16x2 void setup() ( lcd.init(); // inicializácia LCD displeja lcd.backlight(); // zapnutie podsvietenia displeja lcd.createChar(3, srdce); // vytvorenie symbolu „srdca“ v pamäťovej bunke 3 lcd.home(); // umiestnite kurzor do ľavého horného rohu na pozíciu (0,0) lcd.!"); // vytlačí riadok textu lcd.setCursor(0, 1); // presunie kurzor na riadok 2, znak 1 lcd.print( " i "); // vytlačí správu na riadok 2 lcd.printByte(3); // vytlačí symbol "srdca" umiestnený v 3. bunke lcd.print(" Arduino "); } void loop() (// blikanie posledného znaku lcd.setCursor(13, 1); // presuňte kurzor na riadok 2, znak 1 lcd.print("\t"); oneskorenie(500); lcd.setCursor(13, 1); // presuňte kurzor na riadok 2, znak 1 lcd.print(" "); oneskorenie(500); }

Mimochodom, znaky napísané príkazom lcd.createChar();, zostávajú v pamäti displeja aj po vypnutí napájania, pretože zapísané na zobrazenie ROM 1602.

5 Vytvorte si vlastné symboly pre LCD displej

Poďme sa bližšie pozrieť na problematiku tvorby vlastných symbolov pre LCD obrazovky. Každý znak na obrazovke pozostáva z 35 bodov: 5 širokých a 7 vysokých (+1 rezervný riadok na podčiarknutie). V riadku 6 vyššie uvedeného náčrtu definujeme pole 7 čísel: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Previesť hexadecimálne čísla na binárne: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Tieto čísla nie sú nič iné ako bitové masky pre každý zo 7 riadkov symbolu, kde "0" označuje svetlý bod a "1" tmavý bod. Napríklad symbol srdca špecifikovaný ako bitová maska ​​sa objaví na obrazovke, ako je znázornené na obrázku.

6 Ovládanie LCD obrazovky cez zbernicu I2C

Nahrajme náčrt do Arduina. Na obrazovke sa objaví nápis, ktorý sme určili s blikajúcim kurzorom na konci.


7 Čo je za tým I2C zbernica

Ako bonus sa pozrime na časový diagram pre zobrazenie latinských znakov „A“, „B“ a „C“ na LCD displeji. Tieto znaky sú uložené v pamäti ROM displeja a zobrazujú sa na obrazovke jednoduchým prenosom ich adries na displej. Schéma je prevzatá z pinov RS, RW, E, D4, D5, D6 a D7 displeja, t.j. už po prevodníku FC-113 “I2C parallel bus”. Dá sa povedať, že sa ponoríme trochu hlbšie do hardvéru.


Časový diagram výstupu latinských znakov „A“, „B“ a „C“ na LCD displeji 1602

Diagram ukazuje, že znaky, ktoré sú na displeji ROM (pozri str. 11 údajového listu, odkaz nižšie) sa prenášajú v dvoch kúskoch, z ktorých prvý určuje číslo stĺpca tabuľky a druhý - číslo riadku. V tomto prípade sú dáta „zachytené“ na okraji signálu na linke E(Povoliť) a riadok R.S.(Výber registra) je v logickom stave, čo znamená, že sa prenášajú dáta. Nízky stav na linke RS znamená, že sa odosielajú inštrukcie, čo vidíme pred odoslaním každého znaku. V tomto prípade sa prenáša inštrukčný kód pre návrat vozíka do polohy (0, 0) LCD displeja, čo je možné zistiť aj preštudovaním technického popisu displeja.

A ešte jeden príklad. Tento časový diagram zobrazuje výstup symbolu srdca na LCD displeji.


Opäť prvé dva impulzy Povoliť dodržiavať pokyny Domov()(0000 0010 2) - vráťte vozík do polohy (0; 0) a druhé dva - výstup na LCD displej uložený v pamäťovej bunke 3 10 (0000 0011 2) symbol „Srdce“ (pokyn lcd.createChar(3, srdce); skica).