Pinout LCD displeje. Připojení a práce s displejem WH1602. Knihovny pro práci s i2c LCD displejem

Během své vášně pro elektroniku jsem měl možnost používat LCD od několika výrobců - DataVision, WINSTAR, Uniworld Technology Corp. Lišily se typem ovladače, počtem pinů a délkou linek, ale všechny měly stejné schéma zapojení, příkazový systém a byly obsluhovány stejným programem z mikrokontroléru. Proto, i když teď budeme mluvit o displeji WH0802A od společnosti WINSTAR, vše níže uvedené platí pro znakové LCD displeje jiných společností.

Takže připojíme displej WH0802A-YGH-CT k mikrokontroléru

WH0802A – dvouřádkový znakový displej pro 8 znaků s vestavěným řídicím ovladačem KS0066.
Podívejme se na účel pinů displeje.

Některé displeje mají dva další kolíky – podsvícení +LED a –LED. Navíc, pokud existují závěry, neznamená to, že existuje podsvícení. Stejně tak i naopak. Můj displej má podsvícení, ale žádné ovládací kolíky.

Ve výchozím nastavení je podsvícení displeje WH0802A-YGH-CT zakázáno. Chcete-li jej zapnout, musíte provést několik jednoduchých manipulací, konkrétně nainstalovat dvě propojky a připájet do rezistoru omezujícího proud (viz foto RK, JF a RA).

Zobrazit schéma zapojení

Toto je typické schéma pro připojení znakových LCD. Obvod ovládání podsvícení displeje nepoužijeme, ale pro jistotu jsem ho nakreslil.

Startovací kód

Po připojení napájení do obvodu je třeba otočit regulátor kontrastu (rezistor R1). Pokud se na obrazovce objeví horní řádek, znamená to, že je naživu a je čas začít psát kód. V počáteční fázi použijeme 8bitovou sběrnici. Abychom získali první výsledky, budeme muset napsat dvě funkce – funkci záznamu dat a funkci záznamu příkazů. Liší se pouze jedním řádkem - při zápisu dat musí být signál RS 1, při zápisu příkazu musí být RS 0. Funkce čtení zatím nevyužijeme, takže signál R/W bude vždy 0 .

Zápisový cyklus pro 8bitovou sběrnici vypadá takto:
1. Nastavte RS (0 - příkaz, 1 - data)
2. Odešlete hodnotu datového bytu na sběrnici DB7…DB0
3. Nastavte E=1
4. Zpoždění softwaru 1
5. Nastavte E=0
6. Zpoždění softwaru 2

Řadič LCD znakového zobrazení není nekonečně rychlý, takže se mezi některými operacemi používají softwarové prodlevy. První je potřeba k udržení stroboskopického signálu po nějakou dobu, druhý proto, aby měl regulátor čas zapsat data nebo provést příkaz. Hodnoty zpoždění jsou vždy uvedeny v popisu ovladače displeje a vždy musíte dodržet alespoň jejich minimální hodnotu, jinak jsou nevyhnutelné poruchy v činnosti ovladače.

Obecně má ovladač displeje tzv. příznak obsazení - BF. Pokud je příznak 1, ovladač je zaneprázdněn, pokud je 0, je volný. Místo druhého softwarového zpoždění si můžete přečíst příznak obsazenosti a zkontrolovat, kdy je řadič displeje volný. Protože ale chceme rychle získat první výsledky, budeme se s příznakem obsazenosti zabývat později.

//připojení znakového LCD displeje k AVR
#zahrnout
#zahrnout

//port, ke kterému je připojena datová sběrnice LCD
#define PORT_DATA PORTD
#define PIN_DATA PIND
#define DDRX_DATA DDRD

//port, ke kterému jsou připojeny ovládací piny
#define PORT_SIG PORTB
#define PIN_SIG PINB
#define DDRX_SIG DDRB

//čísla pinů mikrokontroléru
//ke kterému jsou připojeny ovládací piny LCD
#define RS 5
#definujte RW 6
#define CS 7

//makra pro práci s bity
#define ClearBit(reg, bit) reg &= (~(1<<(bit)))
#define SetBit(reg, bit) reg |= (1<<(bit))

#define F_CPU 8000000
#define_delay_us(us) __delay_cycles((F_CPU / 1000000) * (us));
#define_delay_ms(ms) __delay_cycles((F_CPU / 1000) * (ms));

//funkce nahrávání příkazů
prázdnota LcdWriteCom( nepodepsaný char data)
{
ClearBit(PORT_SIG, RS); // nastavte RS na 0
PORT_DATA = data; // výstup dat na sběrnici
SetBit(PORT_SIG, EN); // nastavte E na 1
_delay_us(2);
ClearBit(PORT_SIG, EN); // nastavte E na 0
_delay_us(40);

//funkce záznamu dat

prázdnota LcdWriteData( nepodepsaný char data)
{
SetBit(PORT_SIG, RS); //nastavíme RS na 1
PORT_DATA = data; //výstup dat na sběrnici
SetBit(PORT_SIG, EN); //nastav E na 1
_delay_us(2);

ClearBit(PORT_SIG, EN); // nastavte E na 0

Delay_us(40);
}

int hlavní( prázdnota )
{
zatímco (1);
vrátit se 0;
}

Nejsou zde žádné složité části, vše by mělo být jasné. Pokračuj.

Jakýkoli LCD displej musí být před použitím inicializován. Proces inicializace je obvykle popsán v datovém listu řadiče displeje. Ale i když tam nejsou žádné informace, sekvence bude s největší pravděpodobností taková.

1. Podávejte jídlo

2. Počkejte >40 ms

3. Zadejte příkaz Function set

D.L.– bit nastavení šířky sběrnice
0 – 4 bitová sběrnice, 1 – 8 bitová sběrnice

N– bit pro nastavení počtu řádků displeje
0 – jednořádkový režim, 1 – dvouřádkový režim

F– bit nastavení písma
Formát 0 – 5*8, formát 1 – 5*11

* - nezáleží na tom, co bude v těchto kouscích

4. Zadejte příkaz ZAP/VYP displeje

D– bit zapnutí/vypnutí displeje
0 – displej vypnutý, 1 – displej zapnutý

C– bit zapnutí/vypnutí kurzoru
0 – kurzor zakázán, 1 – kurzor povolen

B– bit aktivace blikání
0 – blikající kurzor povolen, 1 – blikající kurzor zakázán

5. Zadejte příkaz Vymazat zobrazení


6. Počkejte > 1,5 ms

7. Zadejte příkaz Entry Mode Set

I/D– pořadí zvyšování/snižování adresy DDRAM (zobrazit data RAM)
0 – kurzor se posune doleva, adresa se sníží o 1, 1 – kurzor se posune doprava, adresa se zvýší o 1

SH– pořadí posunu celého displeje
0 – žádný posun, 1 – posun nastane podle I/D signálu – pokud je jeden 0 – zobrazení se posune doprava, 1 – zobrazení se posune doleva

V našem příkladu bude inicializační funkce vypadat takto

Naučili jsme se, jak: ovládat mikrokontrolér a ovládat něco pomocí mikrokontroléru. Nyní, aby bylo naše zařízení přátelštější, k němu připojíme displej.

Dovolte mi provést rezervaci hned: displej je symbolický. To znamená, že v sobě, v paměti, už má abecedu. Vše, co potřebujeme, je zadat příkaz k vytištění řádku.

Displeje jsou různé: různé barvy podsvícení obrazovky, jiný počet řádků, jiný počet znaků na řádek. Proto zde uvažujeme displej WH0802A-YGK-CT, 2 řádky po 8 znacích, žluté LED podsvícení.

Pojďme vytvořit projekt v CodeVision. Na záložce LCD označujeme port, ke kterému bude náš displej připojen (PORTD). V řádku Char/Line udáváme počet znaků našeho LCD displeje (8).

Projekt vygenerujeme a uložíme. Kód přinášíme do následující podoby:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #zahrnout #asm .equ __lcd_port= 0x12 ; PORTD #endasm #zahrnout void main(void ) ( PORTD= 0x00 ; DDRD= 0x00 ; lcd_init(8 ) ; while (1 ) ( ) ; )

#zahrnout #asm .equ __lcd_port=0x12 ;PORTD #endasm #include void main(void) ( PORTD=0x00; DDRD=0x00; lcd_init(8); while (1) (); )

Pojďme trochu změnit náš programový kód:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #zahrnout #asm .equ __lcd_port= 0x12 #endasm #include void main(void) ( PORTD= 0x00 ; DDRD= 0x00 ; lcd_init(8) ; lcd_gotoxy(0 , 0 ) ; lcd_putsf("lekce3" ) ; #pragma rl+ lcd_foxy)"d_3" ; , , #pragma rl- while (1) ( ) ;

#zahrnout #asm .equ __lcd_port=0x12 #endasm #include void main(void) ( PORTD=0x00; DDRD=0x00; lcd_init(8); lcd_gotoxy(0,0); lcd_putsf("lekce3"); #pragma rl+ lcd_gotoxy(0,1); lcd_putsf("lekce3"); #pragma rl- while (1) ( )

Spusťte výsledný kód pro simulaci v ISIS Proteus. Jak vidíte, první řádek je zobrazen správně, ale druhý řádek je mizerný. Faktem je, že Proteus nerozpozná ruskou abecedu a pokud ji váš displej nepodporuje, bude mít skutečný displej také nesrozumitelné znaky.

Nyní si to vše musíme vyzkoušet na skutečném displeji. Jsou zde některé nuance. Otevřeme datový list na našem displeji a uvidíme tuto tabulku s pinouty:

Asi je zde vše zřejmé, ale přesto:

1 - Zem 0V.

2 - Napájení +5V.

3 - Kontrola kontrastu. Připojeno přes proměnný odpor.

Led světla. Připojíme jako běžnou LED.

A - připojte k „+“ přes odpor omezující proud, K - připojte k „země“ (GND).

Dalším důležitým bodem je, že mikrokontrolér musí být taktován z quartz rezonátoru, jinak není zaručena správná funkce.

Vzhled zařízení s firmwarem

Firmware a soubor proteus k dispozici

Při práci s Arduinem se občas stane nutností zobrazit některá data na displeji, ale přenos dat do PC za tímto účelem má smysl pouze v případě, že bude zařízení používáno ve spojení s PC. Ale co autonomní zařízení? Zde přicházejí na pomoc LCD displeje. Podívejme se na LCD displeje založené na řadiči HD44780

Tento monochromatický displej má volitelné podsvícení a může zobrazit 2 řádky po 16 znacích. Rozlišení znaků je 5x8 pixelů. Existuje podpora pro azbuku.

Jaké jsou výhody těchto displejů? LCD obrazovka HD44780 je standardní a často používaná mezi malými monochromatickými LCD displeji, takže knihovnu pro práci s displeji na jejím základě napsali profesionálové. Vývojáři Arduina napsali pro svou platformu knihovnu a jmenuje se LiquidCrystal. Používáme jej pro práci s displejem, který jsem si vybral.

Pro připojení LCD obrazovky potřebujeme následující komponenty

  • Jakékoli Arduino (v našem případě Arduino UNO)
  • LCD displej založený na HD44780
  • Breadboard
  • Spojovací vodiče
  • Potenciometr (volitelné)

Připojení LCD obrazovky

Připojení LCD obrazovky k Arduinu není těžké ani pro dítě. Připojte obrazovku k prkénku a připojte napájení +5 V a uzemnění z Arduina k napájecím lištám propojovacího panelu, jak je znázorněno na fotografii. (Vzhledem k tomu, že budeme mockrát využívat napájení a zem, je výhodnější jej připojit na kolejnice a obecně je potřeba si zvyknout na toto připojení)


Pro plný provoz Arduina s displejem zapojíme 12 pinů:

  • 1 - Vss, zem ⇨ GND
  • 2 - Vdd, výkon ⇨ +5 V
  • 3 - Vo, ovládání kontrastního napětí ⇨ výstup potenciometru
  • 4 - RS, výběr registru ⇨ pin 12 Arduino
  • 5 - R/W, čtení/zápis ⇨ zem (režim zápisu)
  • 6 - E, aka Enable, pádový stroboskop ⇨ pin 11 Arduino
  • 7-10 - DB0-DB3, bity nižšího řádu 8bitového rozhraní; Nepřipojený
  • 11-14 - DB4-DB7, vysoké bity rozhraní ⇨ piny 5-2 Arduino
  • 15 - A, napájení pro podsvícení ⇨ +5 V
  • 16 - K, zem pro podsvícení ⇨ GND

Tento displej, stejně jako ostatní na řadiči HD44780, podporuje dvě možnosti paralelního rozhraní:

  • 8-bit, piny DB0-DB7, 1 bajt (8 bitů) je přenesen za hodinový cyklus
  • 4-bit, piny DB4-DB7, půl bajtu se přenese za takt (4 bity)

Nemá smysl používat 8bitovou variantu, protože vyžaduje více nohou a stále nedochází k žádnému nárůstu rychlosti: obnovovací frekvence displeje není vyšší než 10krát za sekundu, takže stále neuvidíme často aktualizované údaje. Proto necháme piny DB0-DB3 nezapojené.

Obrazovka je připojena a připravena přijímat data. Zbývá jen napsat program pro Arduino.

Programování

Pro výstup textu z Arduina použijeme knihovnu Liquid Crystal, o které jsme hovořili výše.

Pro provoz senzoru na Arduinu si musíte stáhnout a nainstalovat knihovnu DHT11.


Knihovnu si můžete stáhnout zde.


Poté, co jsme si stáhli požadovanou knihovnu, musíme ji správně nainstalovat Nainstalujte. Stažené soubory je třeba přesunout do následující cesty:

Disk C Progtam Files Knihovny Arduino



Poté, co vše uděláme, přejdeme k nejdůležitějšímu kroku, a to k programování.


/* Zahrnout knihovnu pro práci s LCD */
#zahrnout

/* Vytvořte objekt zobrazení LCD pomocí konstruktoru třídy LiquidCrystal
* se 6 argumenty. Knihovna sama určí podle počtu argumentů,
* že musíte použít 4bitové rozhraní.
* Uvádíme, ke kterým pinům Arduino jsou piny displeje připojeny:
*RS, E, DB4, DB5, DB6, DB7
*/
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);

Void setup()
{
/* Inicializace displeje: 2 řádky po 16 znacích */
lcd. begin(16, 2);
/* Zobrazit frázi */
lcd. print("ahoj z HelpDuina!");
}

prázdná smyčka ()
{
/* Nastavte kurzor na sloupec 1 2. řádku. Číslování začíná od nuly
* První argument je číslo sloupce.
*/

lcd. setCursor(0, 1);
/* Zobrazí počet sekund, které uplynuly od spuštění Arduina */
lcd. print(millis()/1000);
}


To je to, co byste měli dostat, toto je nejjednodušší skica, obsahuje pouze 4 hlavní linie, ale můžete na to přijít a použít tento princip k vytvoření toho, co potřebujete!

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é se nastaví 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 v Arduinu, 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ů!

Každý je již dlouho zvyklý na to, že každé elektronické zařízení má obrazovku, s jejíž pomocí člověku podává nejrůznější užitečné informace. MP3 přehrávač zobrazuje název přehrávané skladby, dálkový ovladač kvadrokoptéry zobrazuje letovou telemetrii, dokonce i pračka zobrazuje čas do konce praní a v chytrém telefonu je obecně umístěna celá plocha osobního počítače! S největší pravděpodobností by vaše další zařízení také mohlo používat nějaký malý displej :) Zkusme si vyrobit jednoduché elektronické hodiny! A jako výsledkovou tabuli používáme běžný a levný znakový displej z tekutých krystalů 1602. Tady to je, stejně jako na obrázku: Kromě 16x2, 20x4 znakový displej (čtyři řádky po 20 znacích) a grafický displej s rozlišením 128x64 pixelů, jsou považovány za velmi populární. Tady jsou na obrázcích:

1. Připojení znakového LCD displeje 1602

Displej 1602 má 16 pinů. Obvykle jsou číslovány zleva doprava, pokud se na to podíváte jako na obrázku. Někdy jsou piny podepsané, například: DB0, DB1, EN atd. A někdy jednoduše označují výstupní číslo. V každém případě je seznam pinů vždy stejný: 1 — „GND“, zem (mínus napájení 2 — „Vcc“, napájení +5V 3 — „VEE“, kontrast; výběr registru “R/W”, směr přenosu dat (zápis/čtení 6 - “EN”, synchronizace 7-14 - “DB0”, “DB1”, .., “DB7” - datová sběrnice; ); 16 — katoda podsvícení (zem). K digitálním výstupům regulátoru jsou připojeny linky VEE, RS a čtyři datové linky DB4, DB5, DB6, DB7. Linku „R/W“ připojíme k „země“ ovladače (jelikož nám stačí pouze funkce zápisu do paměti displeje). Podsvícení zatím nepřipojujeme, myslím, že to snadno zjistíte sami :) Schematické schéma připojení displeje k Arduino Uno
Vzhled rozložení
Pro jistotu také ve formě nápisu:
LCD displej 1602 1 2 4 6 11 12 13 14 15 16
Arduino Uno GND +5V 4 5 6 7 8 9 +5V GND

2. Programování "Ahoj, světe!"

Pro práci s LCD displeji různých velikostí a typů má editor Arduino IDE speciální knihovnu Tekutý krystal. Pro zahrnutí knihovny napíšeme na první řádek našeho programu následující výraz: #include Dále budeme muset uvést, které piny Arduina jsme použili k připojení displeje. Tuto informaci uvedeme při inicializaci modulu: LiquidCrystal lcd(4, 5, 6, 7, 8, 9 Zde jsou první dva argumenty piny RS a EN a zbývající čtyři jsou datová sběrnice DB4-DB7); linky. Dále určíme velikost zobrazení pomocí příkazu „begin“: lcd.begin(16, 2); Dovolte mi připomenout, že náš displej má dva řádky, každý po 16 znacích. Nakonec potřebujeme jednoduchou funkci „tisk“ pro výstup textu. Výstup této známé fráze pomocí této funkce bude vypadat takto: lcd.print("Ahoj světe!" Celý program bude vypadat takto: #include LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup())( lcd.begin(16, 2); lcd.print("Ahoj, světe!"); ) void loop())( ) Vložte jej do Arduino Uno a podívejte se, co se děje na displeji. Mohou nastat tři hlavní situace 🙂 1) Na displeji se zobrazí „Hello, world!“. To znamená, že jste vše správně zapojili a kontrast se nějakým zázrakem ukázal být zpočátku správně nastaven. Radujeme se a přecházíme k další kapitole. 2) Na displeji se zobrazí řada černých obdélníků – nutné nastavení kontrastu! Proto jsme do obvodu přidali potenciometr s knoflíkem. Kroutíme jím od jednoho okraje ke druhému, dokud se na displeji neobjeví jasný nápis. 3) Dvě řady černých obdélníků. S největší pravděpodobností jste udělali chybu při připojování. Třikrát zkontrolujte všechny vodiče. Pokud nenajdete chybu, požádejte svou kočku o kontrolu!

3. Programování hodin

Nyní, když displej funguje správně, zkusme naše jednoduché zařízení proměnit ve skutečné elektronické hodinky. Pozornost! Pro zobrazení času potřebujeme knihovnu Time. Pokud ještě není nainstalován, můžete si archiv stáhnout z odkazu. Pojďme to propojit: #include Poté nastavíme aktuální datum a čas pomocí funkce “setTime”: setTime(23, 59, 59, 12, 31, 2015 Zde je vše jasné: hodiny, minuty, sekundy, měsíc, den, rok); K zobrazení data používáme řadu funkcí:
  • year() - vrátí nám rok;
  • month() — měsíc;
  • den() - den;
  • hour() - hodina;
  • minute() - vrátí minutu;
  • second() - sekunda.
Nyní věnujme pozornost této skutečnosti. Pokud spočítáme počet znaků v typickém datovém záznamu: „31. 12. 2015 23:59:59“, dostaneme 19. A máme jen 16! Nevejde se však do jedné řady. Problém můžete vyřešit další užitečnou funkcí - „setCursor“. Tato funkce nastaví kurzor na požadovanou pozici. Například: lcd.setCursor(0,1); Umístí kurzor na začátek druhého řádku. Kurzor je umístění znaku, od kterého bude textový výstup začínat dalším příkazem „print“. Pomocí této funkce zobrazíme v prvním řádku datum a ve druhém čas. Nyní je vše jasné díky zobrazení data a času. Rutinní věci zůstávají. Například po každém vyplnění displeje jej vymažeme funkcí „clear()“: lcd.clear(); Pro nás také nedává smysl zobrazovat data více než jednou za sekundu, takže mezi dvěma iteracemi uděláme pauzu 1000 milisekund. Takže když vše dáme dohromady, dostaneme následující program: #include #zahrnout LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup())( lcd.begin(16, 2); setTime(7,0,0,1,10,2015); // 7:00, desátého ledna 2015) void loop())( lcd.clear( lcd.print(den()); lcd.print("."); (":"); lcd.print(":" (1000) Nahrajte náčrt do Arduino Uno a sledujte postup hodin! 🙂 Pro upevnění získaných znalostí doporučuji upgradovat naše hodiny na plnohodnotný budík. Vše, co musíte udělat, je přidat pár tlačítek a bzučák :)