Hallo zusammen.
Ich habe jetzt mal folgene glcd lib für ks0108 controller getestet.
Beitrag "GLCD Routinen ( KS0108, HD61202 )"
gleich ganz oben die Datei.
nun ich versuche ich gerade ein bild zusammen mit text darzustellen.
Mein problem ist, das bild zeigt es an, aber der text flakkert. was
macht man da.?
hier ein kleines beispiel, wie ich es anzeigen möchte:
1
while(1){
2
if (P_TASTER & (1<<PIN_TASTER1)){
3
lcd_draw_line(0,LINE1,127,LINE1,BLACK);
4
lcd_draw_fullscreen_bmp(links);
5
}
6
else if (P_TASTER & (1<<PIN_TASTER2)){
7
lcd_draw_fullscreen_bmp(rechts);
8
}
9
else{
10
lcd_draw_fullscreen_bmp(normal);
11
}
12
}
die bilder(links, rechts normal) sind meine eigenen. also die werdet ihr
in der lib nicht finden. und hier stelle ich kein text dar, sondern nur
eine linie. aber da tut ja nix zur sache.
kann mir jemand helfen.?
danke im voraus.
Ps: Die antwort, zeichne die linie doch in das bild brauch ich nicht. ;)
mons schrieb:> if (P_TASTER & (1<<PIN_TASTER1)){> lcd_draw_line(0,LINE1,127,LINE1,BLACK);> lcd_draw_fullscreen_bmp(links);> }
Mal überlegen.
Wenn du, solange der Taster gedrückt ist, dauernd
1
zuerst die Linie hinmalst
2
dann das Bild drüber malst
3
4
(nächster Durchgang durch die while Schleife)
5
6
zuerst die Linie hinmalst
7
dann das Bild drüber malst
8
9
(nächster Durchgang durch die while Schleife)
10
11
zuerst die Linie hinmalst
12
dann das Bild drüber malst
.... dann wundert mich das eigentlich nicht, dass deine Linie da
flackert wie Sau. Denn: Durch das erneute Hinmalen des Bildes
überschreibst du ja jedesmal die Linie. Das wird zwar beim nächsten
Durchgang durch die Schleife wieder behoben, weil ja dann die Linie
wieder neu hingezeichnet wird. Aber gleich drauf malst du dann eben
schon wieder das Bild drüber.
Es reicht, wenn du beim Drücken der Taste nur EINMALIG Linie und Bild
hinmalst. Allerdings in der richtigen Reihenfolge: zuerst das Bild und
dann erst die Linie. Dazu könntest du dir zb merken, dass das LCD
bereits Bild und Linie anzeigt und du daher in diesem if nicht nochmal
hinmalen musst.
(Tastenprellen ignorier ich mal)
Du solltest dein Display nicht mit Daten zubombadieren.
Einmal schreiben reicht.
Wenn du die beiden Zeilen (line, bmp) vertauschst, könnte es eventuell
auch gehen.
Edit: schon wieder war Karl Heinz zuerst ...
Folgendes:
Daniel V. schrieb:> Du solltest dein Display nicht mit Daten zubombadieren.> Einmal schreiben reicht.
wenn ich die while schleife entnehme, dann passiert nix. da kann ich den
taster drücken, aber es kommt nichts.
was ich eigentlich dachte ist, kann man nicht das gesamte bild teilen.?
damit meine ich, mein bild nicht 128x64 pixel darzustellen, sondern
64x64 oder so.
damit das bild immer da ist, ich aber trotzdem auf der 2. hälfte ohne
probleme schreiben kann
auf irgendeine art muss es ja funktionieren
EINMAL hinmalen reicht. Dann muss man sich eben in einer Variablen
merken, was das LCD gerade anzeigt und wenn das beim Knopfdruck das
falsche ist, dann macht man den Update und merkt sich, dass das LCD
jetzt das für diesen Knopf richtige anzeigt, so dass beim nächsten
Durchgang durch die while Schleife dann eben kein Update mehr
stattfindet, weil ja das LCD eh schon das richtige anzeigt.
mons schrieb:> was ich eigentlich dachte ist, kann man nicht das gesamte bild teilen.?> damit meine ich, mein bild nicht 128x64 pixel darzustellen, sondern> 64x64 oder so.
Kann man sicher.
Musst du halt deine eigene Bild-Darstellungsfunktion schreiben, wenn es
noch keine gibt.
while(1){
uint8_t lcdShowsNow = 0;
Schau mal genau.
Hab ich die Variablendefinition bei meinem Beispiel innerhalb der
while-Schleife gehabt?
Und du wunderst dich, dass das nicht greift, wenn jedesmal zu beginn der
while Schleife die Variable neu erzeugt und auf 0 gesetzt wird?
mons schrieb:> while(1){> uint8_t lcdShowsNow = 0;>> Schau mal genau.> Hab ich die Variablendefinition bei meinem Beispiel innerhalb der> while-Schleife gehabt?>> Und du wunderst dich, dass das nicht greift, wenn jedesmal zu beginn der> while Schleife die Variable neu erzeugt und auf 0 gesetzt wird?
Tut mir leid, ich hab aus Versehen den falschen Knopf erwischt und
deinen Code gelöscht bzw. ersetzt.
Aber das Übel ist noch sichtbar und die Erklärung dazu gültig.