radzio.dxp.pl

Tryb tekstowy
W tej części artykułu zajmiemy się wyświetlaniem tekstu. Ponieważ wyświetlacze zbudowane w oparciu o kontroler KS0108 nie posiadają generatora znaków, wyświetlanie tekstu wymaga zdefiniowania własnej tablicy czcionek, która będzie przechowywana w pamięci programu mikrokontrolera.
Każdy znak jest określony pięcioma bajtami danych (typowa czcionka 5x8 pikseli). Kolejność bajtów w tablicy odpowiada kolejności poszczególnych pionowych fragmentów znaku. Wygląd litery A przedstawiony jest na rysunku


Do projektowania własnych czcionek można wykorzystać program ze strony http://radzio.dxp.pl/font/

Wyświetlenie znaku
Wyświetlenie znaku polega na zapisie do wyświetlacza 5 kolejnych bajtów tworzących dany znak. Ponieważ nie ma sensu marnować miejsca w pamięci programu na znaki ‘niewyświetlane’ (czyli pierwszych 31 znaków tablicy ASCII) pierwszy znak w tablicy (spacja) ma indeks 0, podczas gdy w tablicy ASCII ten znak posiada kod 32. Należy więc od kodu znaku przekazanego do funkcji jako parametr odjąć liczbę 32.

void lcdWriteChar(char x)
{
char i;
x -= 32; // konwersja kodu znaku
for(i = 0; i < 5; i++)
lcdWriteData(pgm_read_byte(font5x7 + (5 * x) + i)); // zapis do wyświetlacza
//5 kolejnych bajtów tworzących znak
lcdWriteData(0); // odstęp między znakami
}


Wyświetlanie ciągu znaków
Parametrem funkcji jest wskaźnik do typowego dla języka C ciągu znaków zakończonego zerem.

void lcdWriteString(char * s)
{
while(*s) // dopóki znak wskazywany przez s jest różny od zera
lcdWriteChar(*s++); // zapis znaku
}

Wyświetlanie ciągu znaków z pamięci programu
Ponieważ przechowywanie w pamięci RAM stałych napisów powoduje znaczne zużycie stosunkowo niewielkiej pamięci, wygodniej jest niezmienne ciągi znaków przechowywać w pamięci programu. Ze względu na specyficzny odczyt pamięci programu w kompilatorze avr-gcc do tego celu służy oddzielna funkcja.

void lcdWriteStringPgm(prog_char * s)
{
char c; // pomocnicza zmienna
while(c = pgm_read_byte(s++)) // dopóki znak wskazywany przez s jest różny od
// zera
lcdWriteChar(c); // zapis znaku
}

Ustawienie współrzędnych tekstowych
W trybie tekstowym wygodniej posługiwać się współrzędnymi odpowiadającymi położeniu znaków na wyświetlaczu. Ponieważ każdy znak składa się z sześciu pionowych "części" to zamiana współrzędnych tekstowych na graficzne sprowadza się do pomnożenia przez 6 poziomej współrzędnej tekstowej.

void lcdLocate(unsigned char x, unsigned char y)
{
lcdGoTo(x * 6, y); // zapis
}

Poprzednie : Komunikacja mikrokontrolera z wyświetlaczem Następne : Tryb graficzny

 
(c) Radosław Kwiecień