Fórum témák
» Több friss téma |
Cikkek » Launchpad: ismerkedés az MSP430 mikrovezérlőkkel I. Launchpad: ismerkedés az MSP430 mikrovezérlőkkel I.
Szerző: icserny, idő: Szept 7, 2011, Olvasva: 51204, Oldal olvasási idő: kb. 4 perc
Harmadik kísérlet: saját karakterek definiálásaAz LCD modulok beépített karakterkészlete nem alkalmas a magyar nyelvű szövegek ékezetehelyes megjelenítésére. Bár a karakterkészlet elvétve tartalmaz más nyelvekben is használatos ékezetes betük, a 128 fölötti kódok zöméhez általában japán vagy cirill betűk tartoznak, ahogy az alábbi ábrán is láthatjuk. 6_5. ábra: egy tipikus LCD modul kódtáblája Szerencsére van rá lehetőség, hogy néhány saját karaktert definiáljuk (szám szerint legfeljebb 8 db-ot), így ezek, és a kódtáblában már eleve benne levők felhasználásával legalább az ékezetes kisbetűk kiíratását meg tudjuk oldani.A karekterek definiálása az ún. CGRAM terület feltöltésével történik, ahol (a CGRAM területen belül) a 0. címtól kezdődően karakterenként 8 bájtban adhatjuk meg egy-egy karakter 8x8-as pontmátrixban definiált képét. A CGRAM terület kijelölése a 6_2. táblázatban ismertetett "CGRAM cím beállítása" paranccsal történik. Ezt követően minden adatbeírás a CGRAM soron következő címére történik, amíg egy "DDRAM cím beállítása" paranccsal vissza nem állunk a megjelenítési adattár területére. Az alábbi programban az lcd_cgram_init() függvény végzi el a CGRAM terület feltöltését a konstans tömbként definiált adattáblából. A konstansként definiált adatokat a fordító a programtároló flash memóriában helyezi el. Az ékezetes karaktereket felhasználó demóprogramban egy kétsoros LCD képernyő egy-egy sorában a Hungarica együttes közismert dalának egy-egy versszakát jelenítjük meg, fényújság-szerűen, jobbról balra beúsztatva. Ebben bemutatjuk, hogy hogyan lehet a kurzort pozicionálni, s bemutatjuk azt is, hogy hogyan lehet a képernyőre kiírt teljes szöveget egy utasítással egy karakternyit balra léptetni. A karakterek kiíratására definiáltunk egy lcd_putc() függvényt, amely automatikusan elvégzi az ANSI kódoslású ékezetes karakterek átkódolását. A CGRAM-ban általunk definált karakterek a 0 - 7 közötti kóddal érhetők el, a 'ö' betű pedig a 0xEF kóddal érhető el. A program jelentős mértékben megegyezik a korábbiakkal, ezért csak az eltérő részek listáját mutatjuk be. Nyissunk tehát egy új projektet lcd_cgram névvel, másoljuk bele az első vagy a második kísérlet LCD kezelő programját, s szerkesszük át az alábbiak szerint. 1. A program elejére a hardver definíciók utáni részbe szúrjuk be az alábbi sorokat: ***************************************************************************************
********************************************************************************************** Az i és d változók a főprogramban számlálóként működnek majd. A *ptr1 és *ptr2 mutatókat a két versszak címzésére használjuk majd. A konstansként definiált betwk[] kataktertömb a CGRAM feltöltéséhez kell (az ékezetes karakterek bitképét tartalmazza). A vers1[] és vers2[] szövegkonstansok pedig a kiírandó szöveget tartalmazzák. A ChangeBits(), delay_ms(), lcd_toggle_E(), lcd_write() és lcd_init() függvények maradjanak ugyanúgy, ahogy az előző két kísérletben voltak! Az lcd_puts() függvény azonban dobjuk ki, most nem lesz rá szükségünk. Helyette két új függvényt definiálunk, lcd_putc() éslcd_cgram_init() névvel, az alábbi lista szerint:
Vegyük észre, hogy az lcd_putc() függvény elején az if utasítás feltételében nem egyenlőséget vizsgálunk, hanem egy értékadást helyeztünk el (átmásoljuk az adatot a c változóba), melynek végeredményét vizsgáljuk, hogy nullától különböző-e. A vizsgálatnak azonban nincs nagy jelentősége, csupán az esetleges nulla karaktereket szűrjük ki. A főprogramban jelentős eltérések vannak a korábbiaktól, ezért azt teljes terjedelmében bemutatjuk.
A programban kihasználtuk, hogy a kétsoros kijelző is 80 karakter tárolására alkalmas DDRAM területtel rendelkezik, ezért soronként 40 db karaktert írunk be, balra léptetésnél is ugyanennyi pozíció van, utána körbefordul a megjelenítés. A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |