- 16x2 Dot Matrix LCD-controller IC HD44780:
- Een aangepast teken weergeven op een 16x2 LCD-scherm:
- Programmering en werkuitleg:
- Circuitverbindingen en testen:
In onze vorige tutorial hebben we geleerd hoe we een 16 * 2 LCD-scherm kunnen koppelen met PIC Microcontroller. We raden je aan om het door te nemen voordat je verder gaat, als je een beginner bent in PIC-microcontroller. Eerder hebben we ook de basisprincipes van PIC geleerd met behulp van LED-knipperend programma en timers in PIC Microcontroller. Je kunt hier alle tutorials bekijken over het leren van PIC-microcontrollers met behulp van MPLABX en XC8-compiler.
Laten we het in deze tutorial interessanter maken door onze eigen aangepaste tekens te maken en deze op ons LCD-scherm weer te geven met behulp van PIC16F877A PIC Microcontroller. Er zijn ook enkele voorgedefinieerde, meestal gebruikte aangepaste tekens die door de HD44780A IC zelf worden gegeven, we zullen ook zien hoe we ze kunnen gebruiken. Zoals uitgelegd in onze vorige tutorial heeft ons LCD-scherm een Hitachi HD44780-controller ingebouwd die ons helpt om karakters weer te geven. Elk teken dat we weergeven, is al voorgedefinieerd in de ROM van de HD44780 IC. We zullen leren over LCD-controller IC HD44780, voordat we karakter op LCD weergeven.
16x2 Dot Matrix LCD-controller IC HD44780:
Om een aangepast teken weer te geven, moeten we de IC op de een of andere manier vertellen hoe het aangepaste teken eruit zal zien. Om dat te doen, moeten we op de hoogte zijn van de drie soorten herinneringen die aanwezig zijn in de HD44780 LCD-controller IC:
Character Generator ROM (CGROM): het is het alleen-lezen geheugen dat, zoals eerder gezegd, alle patronen van de vooraf gedefinieerde karakters bevat. Dit ROM zal variëren van elk type interface-IC, en sommige kunnen een vooraf gedefinieerd aangepast teken bevatten.
Display Data RAM (DDRAM): Dit is een willekeurig toegankelijk geheugen. Elke keer dat we een personage weergeven, wordt het patroon opgehaald van de CGROM en overgebracht naar de DDRAM en vervolgens op het scherm geplaatst. Om het simpel te zeggen, DDRAM heeft de patronen van alle karakters die momenteel op het LCD-scherm worden weergegeven. Op deze manier hoeft de IC voor elke cyclus geen gegevens van CGROM op te halen, en helpt het bij het verkrijgen van een korte updatefrequentie
Karaktergenerator RAM (CGRAM): Dit is ook een willekeurig toegankelijk geheugen, dus we kunnen er gegevens uit schrijven en lezen. Zoals de naam al aangeeft, is dit geheugen het geheugen dat kan worden gebruikt om het aangepaste teken te genereren. We moeten een patroon voor het personage vormen en het in het CGRAM schrijven, dit patroon kan indien nodig worden gelezen en weergegeven op het scherm.
Nu, aangezien we een basiskennis hebben gekregen van de soorten geheugen die aanwezig zijn in de HD44780-interface-IC. Laten we de datasheet eens bekijken om wat meer te begrijpen.
Zoals de datasheet aangeeft, heeft de HD44780 IC 8 locaties geleverd om onze aangepaste patronen in CGRAM op te slaan, ook aan de rechterkant kunnen we zien dat er enkele vooraf gedefinieerde tekens zijn die ook op ons LCD-scherm kunnen worden weergegeven. Laten we eens kijken hoe we het kunnen doen.
Een aangepast teken weergeven op een 16x2 LCD-scherm:
Om een aangepast teken weer te geven, moeten we er eerst een patroon voor genereren en het vervolgens opslaan in het CGRAM. Omdat we de bibliotheekfuncties al bij ons hebben, zou het gemakkelijk moeten zijn om dit te doen met enkele eenvoudige opdrachten. Hier is de bibliotheek voor LCD-functies, maar hier hebben we alle bibliotheekfuncties in het programma zelf gekopieerd, dus het is niet nodig om dit headerbestand in ons programma op te nemen. Bekijk ook dit artikel voor basis LCD-werking en de pin-outs.
De eerste stap is het genereren van een patroon of het aangepaste teken. Zoals we weten is elk personage een combinatie van 5 * 8 punten. We moeten selecteren welke punt (pixel) hoog moet worden en welke laag moet blijven. Teken gewoon een kader zoals hieronder en schaduw de gebieden op basis van je karakter. Mijn karakter hier is een stokmens (ik hoop dat het er zo uitziet). Eenmaal gearceerd, schrijft u eenvoudig de equivalente binaire waarde van elke byte zoals hieronder weergegeven.
Plaats gewoon een '1' in het gearceerde gebied en een '0' in het niet-gearceerde gebied voor elke byte, en dat is het, ons aangepaste patroon is klaar. Op dezelfde manier heb ik 8 aangepaste patrooncodes gemaakt voor onze 8 geheugenplaatsen die het de CGROM presenteren. Ze staan vermeld in de onderstaande tabel.
S.NO: |
Aangepast karakter |
Patrooncode |
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 |
Let op: Het is niet verplicht om alle 8 plaatsen in het CGRAM te laden.
Programmering en werkuitleg:
Nu onze patrooncodes klaar zijn, hoeven we ze alleen maar in het CGRAM van het LCD-scherm te laden en ze weer te geven met behulp van de PIC-microcontroller. Om ze in het CGRAM te laden, kunnen we een 5 * 8 array van elementen vormen en elke byte laden met behulp van een ' for-lus '. De reeks patrooncodes wordt hieronder weergegeven:
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // Code voor CGRAM-geheugenruimte 1 0b00000,0b00000,0b01010,0b00100 //b00000,0b10001,0b01110 Code,0b00 CGRAM-geheugenruimte 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // Code voor CGRAM-geheugenruimte 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000, // Code voor CGRAM spatie 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // Code voor CGRAM-geheugenruimte 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // Code voor CGRAM-geheugenruimte 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // Code voor CGRAM-geheugenruimte 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // Code voor CGRAM-geheugenruimte 8};
Elke geheugenruimte wordt geladen met zijn gerespecteerde karakterpatroon. Om dit patroon in de HD44780 IC te laden, moet het gegevensblad van de HD44780 worden verwezen, maar het zijn slechts commandoregels die kunnen worden gebruikt om het adres van de CGRAM in te stellen
// *** Laad custom char in de CGROM *** ////// Lcd_Cmd (0x04); // Stel CGRAM-adres Lcd_Cmd (0x00) in; //.. stel CGRAM-adres in voor (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // Terug naar Home Lcd_Cmd (2); //.. terug naar Home // *** Laden custom char complete *** //////
Hier wordt binnen de ' for-lus' elke binaire waarde in de CGROM geladen. Zodra het patroon is geladen, kunnen de aangepaste tekens worden weergegeven door simpelweg de locatie van het patroon op te roepen met behulp van de lege functie Lcd_Print_Char (char data) , zoals hieronder weergegeven.
Lcd_Print_Char (0); // Aangepast teken weergeven 0 Lcd_Print_Char (1); // Aangepast teken 1 weergeven Lcd_Print_Char (2); // Aangepast teken 2 weergeven Lcd_Print_Char (3); // Aangepast teken 3 weergeven Lcd_Print_Char (4); // Aangepast teken 4 weergeven Lcd_Print_Char (5); // Aangepast teken 5 weergeven Lcd_Print_Char (6); // Aangepast teken 6 weergeven Lcd_Print_Char (7); // Aangepast teken weergeven 7
Voorgedefinieerd speciaal teken afdrukken:
De HD44780 IC heeft een aantal voorgedefinieerde speciale karakters opgeslagen in de DDROM. Deze tekens kunnen rechtstreeks op het scherm worden afgedrukt door te verwijzen naar de binaire waarde in het gegevensblad.
Bijvoorbeeld: de binaire waarde van het teken "ALPHA" is 0b11100000. Hoe u dit kunt verkrijgen, kunt u zien aan de hand van de onderstaande afbeelding, en u kunt ook waarde krijgen voor elk speciaal teken dat vooraf is gedefinieerd in het IC.
Zodra de binaire waarde bekend is, kan het corresponderende karakter op het scherm worden afgedrukt door simpelweg de lege Lcd_Print_Char (char data) functie te gebruiken, zoals hieronder getoond, Lcd_Print_Char (0b11100000); // binaire waarde van alpha uit data-sheet
De volledige code van dit project wordt hieronder gegeven in de sectie Code, bekijk ook de gedetailleerde video- uitleg aan het einde van deze tutorial.
Circuitverbindingen en testen:
Dit project heeft geen extra hardwarevereiste, we hebben gewoon dezelfde verbindingen gebruikt als in de vorige tutorial met LCD-interfacing en hetzelfde bord gebruikt dat we hebben gemaakt in de LED-knipperende tutorial. Laten we zoals altijd het programma simuleren met Proteus om onze uitvoer te verifiëren.
Zodra we de simulatie hebben uitgevoerd zoals verwacht, laten we de code direct in onze hardware-instellingen branden. De output van het programma zou er ongeveer zo uit moeten zien:
Dus dat is hoe u elk aangepast teken op een 16x2 LCD-scherm kunt weergeven met behulp van PIC Microcontroller met MPLABX en XC8-compiler. Bekijk hier ook onze complete PIC Microcontroller Learning Series.