Tryb graficzny
Przejdziemy teraz do procedur umożliwiających wyświetlanie grafiki.
Zapalanie piksela
Włączenie piksela polega na ustawieniu odpowiadającego mu bitu w
pamięci wyświetlacza. Ponieważ możemy odczytywać i zapisywać tylko
cały bajt procedura włączenia piksela przebiega następująco :
- ustawiamy współrzędne : poziomą oraz podzieloną przez 8 pionową
(ponieważ dostęp do pamięci odbywa się całymi bajtami)
- odczytujemy z wyświetlacza aktualny stan pikseli (operację odczytu
należy wykonać dwukrotnie)
- modyfikujemy odczytany bajt poprzez wykonanie na nim operacji sumy
logicznej z bitem o wartości 1 przesuniętym w lewo o resztę z
dzielenia współrzędnej pionowej przez 8 (położenie bitu w obrębie
wybranej strony)
- zapisujemy tak zmodyfikowany bajt danych pod odpowiedni adres
pamięci wyświetlacza
void
lcdSetPixel(unsigned char x, unsigned char y)
{
char temp; // zmienna pomocnicza
lcdGoTo(x, y/8); // ustawienie współrzędnych
temp = lcdReadData(); //
temp = lcdReadData(); // podwójny odczyt danych
lcdGoTo(x, y/8); // ponowne ustawienie współrzędnych
lcdWriteData(temp | (1 << (y % 8))); // zapis
odpowiednio zmodyfikowanej wartości
} |
Gaszenie piksela
Procedura gaszenia piksela przebiega podobnie jak jego
zapalanie. Jedyną różnicą jest sposób modyfikacji odczytanego
aktualnego stanu pikseli : zamiast sumy logicznej wykonywany
jest iloczyn logiczny z zanegowaną wartością przesunięcia w lewo
bitu o wartości 1 o resztę z dzielenia przez 8 współrzędnej
pionowej.
void
lcdClrPixel(unsigned char x, unsigned char y)
{
char temp;
lcdGoTo(x, y/8);
temp = lcdReadData();
temp = lcdReadData();
lcdGoTo(x, y/8);
lcdWriteData(temp & (0xFF - (1 << (y % 8))));
} |
|