radzio.dxp.pl

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))));
}

 

 
(c) Radosław Kwiecień