Het LCD-scherm gebruiken: Lichtkrant
In deze tutorial leggen we uit hoe je tekst kan laten verschijnen op het LCD-scherm van het Dwengo-bord en hoe je de achtergrondverlichting van het scherm kan bedienen. Het eerste resultaat van deze tutorial is een programma dat "Dwengo Counter" op de eerste lijn van het scherm schrijft en op de tweede lijn een getal toont dat geleidelijk oploopt. In een uitbreiding tonen we hoe je een tekst die groter is dan 16 karakters kan tonen op een lijn van het scherm met behulp van een lichtkrant-effect.
Benodigdheden
- Een Dwengo-bord
- Een Dwengo-programmer
- De bijbehorende kabels
Gebruiken van LCD-bibliotheek
Dwengo voorziet een bibliotheek voor het gebruik van het LCD-scherm. We zullen deze bibliotheek gebruiken om een programmaatje te schrijven dat op de eerste lijn van het scherm Dwengo Counter laat verschijnen en op de tweede lijn een langzaam oplopend getal.
Begin met het aanmaken van een nieuw project zoals uitgelegd in stap 1 in tutorial over flikkerende LEDs. Kies een geschikte naam (bijv. LcdDisplay) en locatie voor het project.
Voeg nu het C-bestand (LcdDisplay.c) toe aan het project. Dit bestand zal de hoofdlus, de main-functie, van het programma bevatten.
Om ervoor te zorgen dat de nodige functionaliteit beschikbaar is voegen we de juiste header-bestanden toe. Doe dit door de volgende code toe te voegen bovenaan het bestand. Hierbij bevat dwengoLCD.h de nodige functies voor het aansturen van het LCD-scherm.
#include <dwengoConfig.h> #include <dwengoBoard.h> #include <dwengoDelay.h> #include <dwengoLCD.h>
De hoofdlus
De hoofdlus van het programma ziet er als volgt uit:
void main(void) { unsigned char counter; initBoard(); initLCD(); clearLCD(); backlightOn(); setCursorLCD(0, 0); appendStringToLCD(" Dwengo Counter"); counter=0; while (TRUE) { setCursorLCD(1, 0); appendIntToLCD(counter); appendStringToLCD(" "); counter+=1; delay_ms(200); } }
In de eerste lijn van het programma definiëren we de variabele counter. Deze variabele is van het type unsigned char en kan dus getallen tussen 0 en 255 bevatten. In dit programma gebruiken we counter om het getal dat we op het LCD-scherm willen tonen bij te houden.
Vervolgens wordt de functie initBoard() opgeroepen welke de basisfunctionaliteit van het bord initieert. De bibliotheek-functie initLCD() initialiseert het LCD-scherm, of m.a.w. initLCD() zorgt ervoor dat het LCD-scherm klaar staat om tekst te ontvangen van de microcontroler en deze af te beelden. We merken op dat het oproepen van initLCD() facultatief is en in feite reeds gebeurt door de functie initBoard(), in de volgende tutorials zullen we dit dan ook niet meer doen. De functie clearLCD() wist de inhoud van het LCD-scherm. We voeren deze functie uit in het begin van het programma om er zeker van te zijn dat we met een leeg scherm beginnen. LCDBacklightOn() schakelt de backlight van het scherm aan.
Lijnen 9 en 10 beelden de tekst "Dwengo Counter" af in het midden van de eerste lijn van het scherm. Op lijn 9 wordt het statement setCursorLCD(0, 0); gebruikt om de cursor aan het begin (positie 0) van de eerste lijn (lijn 0) te plaatsen. Met behulp van lijn 10 wordt de tekst "Dwengo Counter" op het scherm geschreven beginnende van de huidige cursor-positie. Door een spatie vooraan de tekst toe te voegen verschijnt de tekst in het midden van het scherm.
De volgende lijnen bevatten de hoofdlus van het programma. Op lijn 12 initialiseren we de variabele counter op 0. Vanaf lijn 13 start een oneindige lus, de lus eindigt op lijn 19. In de lus herhalen we de volgende stappen:
- lijn 14: Zet de cursor klaar in het begin van de tweede lijn (lijn 1).
- lijn 15: Schrijf de inhoud van variabele counter naar het scherm.
- lijn 16: Schrijf twee extra spaties naar het scherm.
- lijn 17: Verhoog de inhoud van de variabele counter met 1 zodat in de volgende iteratie van de lus het volgende getal getoond wordt.
- lijn 18: wacht 200 ms zodat er tijd is om de tekst te lezen van het LCD-scherm
Het resultaat van deze code is dat op de bovenste lijn van het scherm " Dwengo Counter " afgebeeld staat en dat op de onderste lijn van het scherm een getal afgebeeld staat dat elke 200 ms met 1 wordt verhoogd. Merk op dat het tellen opnieuw bij nul begint van zodra het getal 255 heeft bereikt. Door het toevoegen van twee spaties na het schrijven van counter zorgen we ervoor dat de laatste twee cijfers van 255 worden gewist op het ogenblik dat we herbeginnen vanaf 0.
Lichtkrant-effect
We willen het bovenstaande programma nu zo uitbreiden dat de tekst "Dwengo Counter" niet meer stil staat in het midden van het scherm maar langzaam van rechts naar links loopt zoals bij een lichtkrant gebeurt. Op deze manier kunnen we grote hoeveelheden tekst zichtbaar maken op een klein scherm.
De main-functie van het programma ziet er nu als volgt uit:
void main(void) { unsigned char position; unsigned char counter; initLCD(); clearLCD(); backlightOn(); counter=0; position=0; while (TRUE) { setCursorLCD(0, 0); position=newsticker("The Dwengo Counter counts from 0 to 255. ", position); setCursorLCD(1, 0); appendIntToLCD(counter); appendStringToLCD(" "); delay_ms(200); counter+=1; } }
We definiëren een extra variabele position. Deze variabele zal gebruikt worden om de begin-positie bij te houden van de af te beelden tekst.
In de hoofdlus van het programma (lijn 12 tot 20) schrijft nu beide lijnen van het scherm omdat nu ook de inhoud van de eerste lijn elke iteratie anders is. Het schrijven van de tweede lijn (lijnen 15-17) blijft ongewijzigd. Het schrijven van de eerste lijn gebeurt in lijn 13 en 14. Met behulp van lijn 13 wordt de cursor in het begin van lijn 1 geplaatst. Lijn 14 gebruikt de functie newsticker() om de juiste tekst naar het scherm te schrijven.
De functie newsticker() heeft twee argumenten: de volledige tekst die moet afgebeeld worden ("The Dwengo Counter counts from 0 to 255. ") en de huidige positie. De functie schrijft 16 karakters van de volledige tekst naar het scherm. De huidige positie geeft de positie van het eerste karakter van de afgebeelde tekst aan. Als de positie bijvoorbeeld 5 is dan schrijft de functie "wengo Counter co" naar het scherm. Als bij het schrijven naar het scherm het einde van de volledige tekst bereikt wordt, dan begint het schrijven terug bij het begin. Als de positie bijvoorbeeld 35 is dan wordt de tekst " 255. The Dwengo" op het scherm geschreven. Naast het schrijven van het scherm berekent de functie newsticker() ook de waarde van de volgende positie en geeft die terug.
De code van de functie newsticker() wordt hieronder afgebeeld.
unsigned char newsticker(rom char *text, unsigned char positie) { char i,j; j=positie; for (i=0; i<16; i++) { if (text[j]==0) { j=0; } appendCharToLCD(text[j]); j++; } if (text[positie+1]==0) return 0; else return positie+1; }
De functie maakt gebruik van de manier waarop een string (een sequentie van karakters) wordt opgeslagen in het geheugen. Op de geheugenpositie na de karakters van de string wordt steeds een nul (0x00) geplaatst. Op die manier kan de functie detecteren dat het einde van de string bereikt is.
De lijnen 2 tot 11 schrijven 16 karakters naar het scherm met behulp van de bibliotheek-functie appendCharToLCD(). Deze functie schrijft 1 karakter naar het scherm. In lijn 13 tot 16 wordt de nieuwe positie berekend en teruggegeven.
Extra informatie over het LCD-scherm
Het LCD-scherm met achtergrondverlichting dat standaard wordt meegeleverd met het Dwengo-bord is HD44780 compatibel. De 16 pinnen van het LCD-scherm zijn gestandariseerd:
| Pin | Symbool | Beschrijving |
|---|---|---|
| 1 | VCC | Vcc (+5V) |
| 2 | GND | Grond |
| 3 | V0 | Contrast regeling |
| 4 | RS | Register selectie |
| 5 | R/W | Lezen (hoog) of schrijven (laag) |
| 6 | E | Activeren scherm (active high) |
| 7 | DB0 | Data-bus bit 0 (niet in 4-bit mode) |
| 8 | DB1 | Data-bus bit 1 (niet in 4-bit mode) |
| 9 | DB2 | Data-bus bit 2 (niet in 4-bit mode) |
| 10 | DB3 | Data-bus bit 3 (niet in 4-bit mode) |
| 11 | DB4 | Data-bus bit 4 |
| 12 | DB5 | Data-bus bit 5 |
| 13 | DB6 | Data-bus bit 6 |
| 14 | DB7 | Data-bus bit 7 |
| 15 | LED+ | Achtergrondverlichting (positief) |
| 16 | LED- | Achtergrondverlichting (negatief) |
- Key words:
- Type:

Uw winkelwagen