Forum: Mikrocontroller und Digitale Elektronik Mit Leerzeichen etwas überschreiben "GLCD KS108"


von Daniel (Gast)


Lesenswert?

Hat jemand eventuell einen Codeschnipsel der es ermöglicht mit 
Leerzeichen etwas anderes auf einem KS108 kompatiblen Display zu 
überschreiben? Habe schon mehrere Libs (ape, mylcd) ausprobiert, aber 
überschrieben wird nix. Den Code verstehe ich leider auch nicht 
komplett, sonst hätte ich das schon was abgeändert.
Mein Problem ist eine Uhrzeitanzeige, wobei das Display am flackern ist, 
da es mit lcdclear() immer komplett gelöscht und neu beschrieben werden 
muss.
Ich würde gerne nur bestimmte bereiche löschen.
Ein Rechteck darüber zeichnen dauer auch viel zu lange, da die 
set_pixel() Funktion verwendet wird.

Danke schon einmal!

von holger (Gast)


Lesenswert?

>Mein Problem ist eine Uhrzeitanzeige, wobei das Display am flackern ist,
>da es mit lcdclear() immer komplett gelöscht und neu beschrieben werden

Wozu löschen? Schreib doch einfach die neue Uhrzeit drüber
über die alte.

von Daniel (Gast)


Lesenswert?

Anscheinend werden aber nur die "gesetzten" Pixel geschrieben.
Wenn ich etwas darüber schreibe, liegen irgendwann 10000 Zahlen 
übereinander und ich sehe und ein schwarzes Kästchen.

von holger (Gast)


Lesenswert?

>Anscheinend werden aber nur die "gesetzten" Pixel geschrieben.
>Wenn ich etwas darüber schreibe, liegen irgendwann 10000 Zahlen
>übereinander und ich sehe und ein schwarzes Kästchen.

Das ist natürlich nicht schön;)
Wie zeigst du die Uhrzeit an?
Per Grafikfont, oder Siebensegment selbstgebastelt?
Zeig doch doch mal den Code.

von Daniel (Gast)


Lesenswert?

Ich habe ein GLCD von Pollin und benutze die Lib von diesen Beitrag 
Beitrag "GLCD Routinen ( KS0108, HD61202 )"  .

in der main mache ich das ganze so:


  while (1)
  {
    _delay_ms(500);

    lcd_set_cursor(0,LINE1+10);
    lcd_puts(BookAntiqua,"             ");
    lcd_set_cursor(0,LINE1+10);
    lcd_puts(BookAntiqua,DisNum(buffer,hh));  //stunden
    lcd_set_cursor(35,LINE1+7);
    lcd_puts(BookAntiqua,":");
    lcd_set_cursor(45,LINE1+10);
    lcd_puts(BookAntiqua,DisNum(buffer,mm));  //minuten
    lcd_set_cursor(80,LINE1+7);
    lcd_puts(BookAntiqua,":");
    lcd_set_cursor(90,LINE1+10);
    lcd_puts(BookAntiqua,DisNum(buffer,ss));  //sekunden

  }

Ich habe eine Funkuhr Routine eingebunden, aber um das ganze zu 
veranschauenlichen müsste ja dieser Schnipsel reichen

von holger (Gast)


Lesenswert?

Ändere lcd_putc() mal so:
1
for (bit=0;bit<8;bit++)
2
 {
3
  if ((data&(1<<bit))!=0) lcd_set_pixel(x,cursor_y+page*8+bit,BLACK);
4
  else lcd_set_pixel(x,cursor_y+page*8+bit,WHITE);
5
 }

von Daniel (Gast)


Lesenswert?

Yeah, sehr cool das funzt!
Vielen Dank für die kompetente Hilfe!

von Daniel (Gast)


Lesenswert?

Aber eine Frage habe ich noch, ist es nicht möglich etwas in den 
Speicher des Display Controllers zu schreiben (ist Speicher vorhanden?) 
und dann erst das ganze auf Display zu bringen?

von holger (Gast)


Lesenswert?

Nein, der vorhandene Speicher wird sofort angezeigt.
Bei T6963C hat man meist mehr Speicher um ein Bild
im nicht sichtbaren Bereich erst komplett zu malen,
und dann den Bildspeicher umzuschalten.

von Daniel (Gast)


Lesenswert?

Ok, Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.