- 16x2 Dot Matrix LCD Controller IC HD44780:
- Zobrazení vlastního znaku na 16x2 LCD:
- Vysvětlení programování a práce:
- Zapojení a testování obvodu:
V našem předchozím tutoriálu jsme se naučili Jak propojit 16 * 2 LCD s mikrokontrolérem PIC. Pokud jste začátečník v mikrokontroléru PIC, doporučujeme vám to projít, než se vydáte dál. Dříve jsme se také naučili základy PIC pomocí LED blikajícího programu a časovačů v PIC mikrokontroléru. Zde si můžete prohlédnout všechny výukové programy o učení mikrokontrolérů PIC pomocí kompilátoru MPLABX a XC8.
V tomto výukovém programu to uděláme zajímavějším vytvořením vlastních znaků a jejich zobrazením na naší LCD obrazovce pomocí mikrokontroléru PIC16F877A PIC. Také existují některé předdefinované většinou používané vlastní znaky dané samotným HD44780A IC, uvidíme také, jak je můžeme použít. Jak je vysvětleno v našem předchozím výukovém programu, náš LCD má na sobě zabudovaný řadič Hitachi HD44780, který nám pomáhá zobrazovat znaky. Každý znak, který zobrazujeme, je již předdefinován uvnitř ROM HD44780 IC. Dozvíme se o LCD řadiči IC HD44780, než zobrazíme znak na LCD.
16x2 Dot Matrix LCD Controller IC HD44780:
Abychom mohli zobrazit vlastní znak, musíme nějak IC říct, že jak bude vlastní znak vypadat. Abychom to mohli udělat, měli bychom vědět o třech typech pamětí přítomných uvnitř řadiče LCD HD44780 IC:
Generátor znaků ROM (CGROM): Je to paměť pouze pro čtení, která, jak již bylo řečeno, obsahuje všechny vzory znaků předdefinovaných uvnitř. Tato ROM se bude u každého typu rozhraní IC lišit a některé mohou mít předdefinovaný vlastní znak.
Display Data RAM (DDRAM): Toto je paměť s náhodným přístupem. Pokaždé, když zobrazíme znak, jeho vzor se načte z CGROM a přenese se na DDRAM a poté se umístí na obrazovku. Jednoduše řečeno, DDRAM bude mít vzory všech znaků, které se aktuálně zobrazují na LCD obrazovce. Tímto způsobem nemusí IC pro každý cyklus načítat data z CGROM a pomáhá získat krátkou frekvenci aktualizace
RAM generátoru znaků (CGRAM): Toto je také paměť s náhodným přístupem, takže z ní můžeme psát a číst data. Jak název napovídá, tato paměť bude ta, kterou lze použít ke generování vlastního znaku. Musíme vytvořit vzor pro postavu a zapsat ji do CGRAM, tento vzor lze v případě potřeby přečíst a zobrazit na obrazovce.
Nyní, protože jsme získali základní znalosti o typech pamětí přítomných v rozhraní HD44780 IC. Podívejme se do jeho datového listu, abychom pochopili trochu víc.
Jak naznačuje datový list, HD44780 IC poskytl jako 8 lokací pro ukládání vlastních vzorů v CGRAM, také vpravo vidíme, že existují některé předdefinované znaky, které lze také zobrazit na naší LCD obrazovce. Uvidíme, jak to dokážeme.
Zobrazení vlastního znaku na 16x2 LCD:
Chcete-li zobrazit vlastní znak, musíme pro něj nejprve vygenerovat vzor a poté jej uložit do CGRAMU. Jelikož již máme knihovnické funkce u sebe, mělo by to být snadné udělat pomocí několika jednoduchých příkazů. Zde je Knihovna pro funkce LCD, ale zde jsme zkopírovali všechny funkce Knihovny v samotném programu, takže není nutné zahrnout tento soubor záhlaví do našeho programu. V tomto článku také zkontrolujte základní fungování LCD a jeho vývody.
Prvním krokem je vygenerování vzoru nebo vlastního znaku. Jak víme, každý znak je kombinací 5 * 8 bodů. Musíme vybrat, který bod (pixel) by měl jít vysoko a který by měl zůstat nízko. Jednoduše nakreslete rámeček níže a stínujte regiony podle své postavy. Moje postava je tu stickman (doufám, že to tak vypadá). Po zastínění jednoduše zapište ekvivalentní binární hodnotu každého bajtu, jak je znázorněno níže.
Jednoduše vložte '1' do stínované oblasti a '0' do nestínované oblasti pro každý bajt, a to je náš vlastní vzor připraven. Podobně jsem vytvořil 8 vlastních kódů vzorů pro našich 8 paměťových prostorů, které ji prezentují CGROM. Jsou uvedeny v následující tabulce.
S.NO: |
Vlastní znak |
Kód vzoru |
1 |
0b01110, 0b01110, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010, 0b01010 |
|
2 |
0b00000, 0b00000, 0b01010, 0b00100, 0b00100, 0b10001, 0b01110, 0b00000 |
|
3 |
0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b01110, 0b01010, 0b01010 |
|
4 |
0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
5 |
0b01110, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
6 |
0b00000, 0b10001, 0b01010, 0b10001, 0b00100, 0b01110, 0b10001, 0b00000 |
|
7 |
0b00000, 0b00000, 0b01010, 0b10101, 0b10001, 0b01110, 0b00100, 0b00000 |
|
8 |
0b11111, 0b11111, 0b10101, 0b11011, 0b11011, 0b11111, 0b10001, 0b11111 |
Poznámka: Není povinné načíst všech 8 mezer poskytovaných v CGRAM.
Vysvětlení programování a práce:
Nyní jsou naše vzorové kódy připraveny, stačí je načíst do CGRAM LCD a zobrazit je pomocí mikrokontroléru PIC. Abychom je mohli načíst do CGRAM, můžeme vytvořit pole prvků 5 * 8 a načíst každý bajt pomocí smyčky ' for '. Pole kódu vzoru je uvedeno níže:
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // Kód pro paměťový prostor CGRAM 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0b00000, // Kód pro CGRAM paměťový prostor 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // Kód pro paměťový prostor CGRAM 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000, // Kód pro CGRAM mezera 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // Kód pro paměťový prostor CGRAM 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // Kód pro paměťový prostor CGRAM 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // Kód pro paměťový prostor CGRAM 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // Kód pro paměťový prostor CGRAM 8};
Každý paměťový prostor je načten s respektovaným vzorem znaků. K načtení tohoto vzoru do HD44780 IC je třeba odkázat na datový list HD44780, ale k nastavení adresy CGRAM lze použít pouze příkazové řádky
// *** Načíst vlastní znak do CGROM *** ////// Lcd_Cmd (0x04); // Nastavit CGRAM adresu Lcd_Cmd (0x00); //.. nastavit CGRAM adresu pro (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // Návrat domů Lcd_Cmd (2); //.. vrátit se domů // *** Načítání vlastního znaku dokončeno *** //////
Zde je uvnitř smyčky „ pro“ načtena každá binární hodnota do CGROM. Po načtení vzoru lze vlastní znaky provést tak, že se zobrazí jednoduše voláním umístění vzoru pomocí funkce void Lcd_Print_Char (char data), jak je znázorněno níže.
Lcd_Print_Char (0); // Zobrazit vlastní znak 0 Lcd_Print_Char (1); // Zobrazit vlastní znak 1 Lcd_Print_Char (2); // Zobrazit vlastní znak 2 Lcd_Print_Char (3); // Zobrazit vlastní znak 3 Lcd_Print_Char (4); // Zobrazit vlastní znak 4 Lcd_Print_Char (5); // Zobrazit vlastní znak 5 Lcd_Print_Char (6); // Zobrazit vlastní znak 6 Lcd_Print_Char (7); // Zobrazit vlastní znak 7
Tisk předdefinovaných speciálních znaků:
HD44780 IC má některé předdefinované speciální znaky uložené v DDROM. Tyto znaky lze přímo vytisknout na obrazovku odkazem na jejich binární hodnotu v datovém listu.
Například: Binární hodnota znaku „ALPHA“ je 0b11100000. Jak to získat, lze pochopit z níže uvedeného obrázku, podobně můžete získat hodnotu pro jakýkoli speciální znak, který je předdefinován v IC.
Jakmile je známa binární hodnota, lze odpovídající znak vytisknout na obrazovku jednoduše pomocí funkce void Lcd_Print_Char (char data), jak je znázorněno níže, Lcd_Print_Char (0b11100000); // binární hodnota alfa z datového listu
Kompletní kód tohoto projektu je uveden níže v části kódu, také zkontrolovat detail Video vysvětlení na konci tohoto návodu.
Zapojení a testování obvodu:
Tento projekt nemá žádné další hardwarové požadavky, jednoduše jsme použili stejná připojení z předchozího výukového programu pro rozhraní LCD a použili jsme stejnou desku, kterou jsme vytvořili v LED blikající výuce. Jako vždy pojďme simulovat program pomocí Proteus k ověření našeho výstupu.
Jakmile máme simulaci spuštěnou podle očekávání, umožníme přímo vypálit kód do našeho nastavení hardwaru. Výstup programu by mělo být něco jako toto:
Takto můžete zobrazit libovolný vlastní znak na 16x2 LCD pomocí mikrokontroléru PIC s kompilátorem MPLABX a XC8. Podívejte se také na naši kompletní učící se sérii PIC Microcontroller.