Post
autor: kayron » 12 lis 2010, 23:33
Twoje problemy moim zdaniem mają kilka przyczyn:
A. Nie rozumiesz do końca organizacji pamięci wyświetlacza, i jej odwzorowania na LCD.
B. Prawdopodobnie próbujesz wysyłać od razu dane do LCd, zamiast stworzyć w sobie w RAM bufor, i w nim najpierw narysować całą stronę i dopiero potem wysłać do LCD. Oczywiście jeżeli CPU ma dosyć RAMu na to?
C. Nigdy nie uczyłeś się programowania w szkole, nawet na poziomie podstawowym, więc nie bardzo wiesz co to operacje AND, OR oraz przesunięć logicznych w lewo i prawo, wiec kombinujesz coś z If-ami co w ogóle nie jest potrzebne.
Ogólnie twój problem jest trywialny do rozwiązania, jak umiesz sobie zapisywać dane bezpośrednio do pamięci graficznej LCD, bo zakładam że chcesz pracować w trybie tekstowym czyli wyświetlać tylko znaki, a nie mieszać to z grafiką.
Otóż graficzny monochromatyczny LCD, w niczym nie przypomina monitora komputera od strony adresowania pixeli. ekran jest tak naprawdę podzielony na N wierszy po 8 linii, gdzie N można policzyć dzielą ilość pixeli na współrzędnej Y przez 8. Czyli jak wyświetlacz ma 128x64 to masz 64/8 czyli 8 wierszy. I teraz jak chcesz sobie na wyświetlaczu wyświetlić czcionkę 6x8 od punktu 0, 5 (tak 5 bo nie ma współrzędnych ujemnych), to oznacza że górne 3 pixele z wzoru znaku musisz wyświetlić w linii 0 wyświetlacza 3 pixele czyili D0 do D2, ale przesunięte o te 5 w prawo (w dół na wyświetlaczu), a zrobisz to tak:
W0 = wzorzec.x and &b00000111 ' wyłuskaj bity od D0 do D2
W0 right,5 ' przesuń o 5 w prawo
oczywiście to nie jest kod programu tylko zapis ilustrujący kolejność czynności.
Tak policzony wzorzec, wysyłasz go do odpowiedniej komórki bufora ekranu w RAM i liczysz następny dla znaku. łącznie 6 operacji dla jednego znaku bo masz czcionkę 6x8.
Teraz musisz policzyć dół znaku który obciąłeś i wstawić go do wiersza nr.1 na LCD (tego niżej), a zrobisz to identycznie tylko:
W0 = wzorzec.x and &b11111000
W0 left, 3
Graficznie wyglada to tak:
-
Załączniki
-

- LCD konwert.JPG (11.79 KiB) Przejrzano 8447 razy