Displej je nezbytnou součástí každého stroje, ať už se jedná o jakýkoli domácí spotřebič nebo průmyslové stroje. Displej zobrazuje nejen možnosti ovládání stroje, ale také zobrazuje stav a výstup úkolu prováděného tímto strojem. V elektronice se používá mnoho typů displejů, jako je 7segmentový displej, 16x2 LCD displej, TFT dotykový displej, OLED displej atd.
16x2 LCD displej je nejzákladnější zobrazovací modul a také se používá v některých malých elektronických zařízeních, jako je kalkulačka, digitální měřič atd. Udělali jsme spoustu projektů pomocí 16x2 LCD včetně základního propojení s jinými mikrokontroléry:
- Rozhraní LCD s mikrokontrolérem 8051
- Propojení LCD s mikrokontrolérem ATmega32
- Rozhraní LCD s mikrokontrolérem PIC
- Propojení 16x2 LCD s Arduino
- 16x2 LCD rozhraní s Raspberry Pi pomocí Pythonu
V tomto tutoriálu uvidíme, jak propojit 16x2 LCD s mikrokontrolérem Atmega16 AVR a zobrazit jednoduchou uvítací zprávu.
Požadované komponenty
- 16. Atmega
- 16x2 LCD modul
- Svetry
- Nepájivá deska
Kruhový diagram
Programování Atmega16 pro 16x2 LCD displej
Programování nevyžaduje žádné externí knihovny. Zde je Atmega16 programován pomocí USBASP a Atmel Studio7.0. Kompletní program a pracovní video jsou uvedeny na konci projektu, stačí nahrát program do Atmega16 a otočit 10k POT pro nastavení jasu LCD.Zpočátku definujte frekvenci CPU a zahrňte potřebné knihovny dodávané s balíčkem Atmel Studio, například pro přístup k IO pinům a
V programu definujte RS a EN pin LCD. Kolíky RS se používají k výběru datového a příkazového registru. Aktivační kolík zajistí data.
#define en PA3 #define rs PA2
Rovněž definujte, který PORT Atmega16 bude použit pro rozhraní LCD. Zde se používá PORTA.
#define lcdDirection DDRA #define lcdPort PORTA
Dalším krokem je konstrukce funkce, která přijme příkaz předáním parametru. Existuje mnoho LCD HEX příkazů. Hex příkazy se používají k definování funkce LCD. Jelikož používáme 4bitový režim LCD, bude byt (8bitový) odesílán ve dvou paketech. Jeden paket bude Upper Nibble (4-bit) a druhý paket bude Lower Nibble (4-bit).
void lcdCommand (nepodepsané příkazy char) { lcdPort = (lcdPort & 0x0F) - (příkazy & 0xF0); lcdPort & = ~ (1 <
Dalším krokem by bylo přijetí znaků a jejich přichycení k portu LCD. Přijaté znaky jsou poté odeslány na LCD okusování okusováním. Funkce vezme znak pomocí parametru pass by a poté vezme horní a dolní okus. Kolík „rs“ je nastaven na vysokou hodnotu pro datový registr a poté je odeslán vzestupný puls, který zajistí data. Podobně se posílá spodní okusování změnou hodnoty povolení a odesláním vzestupného impulzu pro povolení.
void lcdChar (nepodepsaný řetězec znaků) { lcdPort = (lcdPort & 0x0F) - (řetězec & 0xF0); lcdPort - = (1 <
Tato funkce pouze převede znak na řetězec a může být použita v programu později, kde je potřeba napsat řetězec.
void lcdString (char * str) { int j; for (j = 0; str! = 0; j ++) { lcdChar (str); } }
Nyní je funkce napsána pouze pro vymazání obrazovky. Musíte jen poslat příkaz 01 v HEX a pak jen nastavit kurzor do výchozí polohy.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
Nyní je v hlavní funkci inicializován LCD. Nejprve nastavte směr PORT LCD na rozhraní. Zde je PORT nastaven jako VÝSTUP, takže nastavte FF.
lcdDirection = 0xFF; _delay_ms (20)
Poté nastavte LCD do 4bitového režimu odesláním 02 v hexadecimálním formátu. Také pošlete 28 v hexadecimu, abyste jej nastavili na 2řádkový, 15x7 maticových pixelů ve 4bitovém režimu.
lcdCommand (0x02); lcdCommand (0x28);
Příkaz 0C a 06 se používá k řízení pozice kurzoru. A nakonec jen vyčistěte obrazovku odesláním 01 v hexadecimálním formátu. Tím se dokončí inicializace LCD.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Po dokončení inicializace stačí otestovat LCD zasláním řetězce. Zde posíláme řetězec „ Interfacing LCD “ v první řadě.
lcdString ("Rozhraní LCD");
Poté přesuňte kurzor na další řádek odesláním příkazu c0 v hexadecimálním formátu. A nakonec na tuto pozici napište řetězec „With Atmega1 6“.
lcdCommand (0xC0); lcdString ("With Atmega16");
Tím je dokončen kompletní kurz Interfacing 16x2 LCD s Atmega16. Pokud nezískáte žádný obraz nebo pixely, zkontrolujte buď zapojení podle kódu a schématu zapojení, nebo změňte hodnotu POT připojeného ke kolíku V0 LCD. Máte-li jakékoli pochybnosti nebo návrhy, můžete nás kontaktovat písemně na našem fóru nebo v komentáři níže.