Forum: Mikrocontroller und Digitale Elektronik löschen von nur einer Zeile in einem 2x16 LCD


von Display-boy (Gast)


Lesenswert?

Hi, leute

Ich habe ein 2x16 Display , die schon sehr gut funktioniert.
nun möchte ich nur anstatt der gesamte Display zu löschen , nur eine 
Zeile löschen.   wie geht das denn?   wie kann man die gewünschte Zeile 
Auswählen und löschen?

danke

von Antworter (Gast)


Lesenswert?

Hallo, das wirste wohl die entsprechende Zeile anwählen und dann 16 
Lerrzeichen schreiben müssen, um nur diese "leer" zu bekommen.
Gruß.

von Thorsten F. (thorsten)


Lesenswert?

Wie wäre es denn wenn du den Cursor an den Anfang der Zeile setzt und 
dann Leerzeichen bis an das Ende der Zeile hineinschreibst?

von Display-boy (Gast)


Lesenswert?

Antworter schrieb:
> Hallo, das wirste wohl die entsprechende Zeile anwählen und dann 16
>
> Lerrzeichen schreiben müssen, um nur diese "leer" zu bekommen.
>
> Gruß.

Thorsten Fritzke schrieb:
> Wie wäre es denn wenn du den Cursor an den Anfang der Zeile setzt und
>
> dann Leerzeichen bis an das Ende der Zeile hineinschreibst?


danke ich bin nur nicht schnelle darauf gekommen.

aber es ist etwa zeitkritisch , da bevor die richtige zeile geschrieben 
wird, läuft noch zwei Vorgänge durch (cursor_position(2,1), dann write(" 
") ).

mit einem  z.B Clear(2), würd es nur einen Vorgang brauchen,  und dann 
die gewünschte darstellung.

von Karl H. (kbuchegg)


Lesenswert?

Display-boy schrieb:

> danke ich bin nur nicht schnelle darauf gekommen.
>
> aber es ist etwa zeitkritisch , da bevor die richtige zeile geschrieben
> wird, läuft noch zwei Vorgänge durch (cursor_position(2,1), dann write("
> ") ).
>
> mit einem  z.B Clear(2), würd es nur einen Vorgang brauchen,  und dann
> die gewünschte darstellung.

Du kannst ja auch

  den cursor in die 2te Zeile stellen
  Ausgeben, was auch immer du ausgeben musst
  danach noch entsprechend viele Leerzeichen ausgeben um den
     Rest der Zeile auch noch zu löschen.

Und so die schnelle Operation ist ein LCD-Clear dann auch wieder nicht. 
Ganz abgesehen davon, dass das oft in ein wildes Anzeige-Geflacker 
ausartet. Von daher ist es meistens sowieso besser, mittels 
Überschreiben für die korrekte Anzeige zu sorgen.

von dev null (Gast)


Lesenswert?

wie ist clear() implementiert? Vielleicht macht es auch nix anderes als 
Cursor positionieren und Character rausschreiben, oder ist das gar in HW 
implementiert?

von Uwe .. (uwegw)


Lesenswert?

Ein Clear braucht 1,64ms (in Hardware implementiert).
Zum Schreiben eine Zeile musst du den Cursor setzten, und dann 16 
Zeichen schreiben. Macht 17x40µs, also 0,68ms.
Letztendlich wäre es bei einem 2x16 also sogar schneller, den Inhalt mit 
Leerzeichen zu überschrieben, als den clear-Befehl auszuführen.

von Volker S. (volkerschulz)


Lesenswert?

Uwe ... schrieb:
> Ein Clear braucht 1,64ms (in Hardware implementiert).
> Zum Schreiben eine Zeile musst du den Cursor setzten, und dann 16
> Zeichen schreiben. Macht 17x40µs, also 0,68ms.
> Letztendlich wäre es bei einem 2x16 also sogar schneller, den Inhalt mit
> Leerzeichen zu überschrieben, als den clear-Befehl auszuführen.

Also beim Samsung Cotroller benoetigt ein Clear 1.53ms. Bei Cursor 
setzen und ueberschreiben kommt es darauf an, wo der Cursor steht, da er 
immer nur um eine Stelle nach links oder rechts geschoben werden kann. 
Also bis zu 16x39µs zum Positionieren + 16x Zeichen ausgeben.. Und das 
auch nur, wenn der µC alle 39µs ein Kommando ausgeben kann...

Einzelne Zeile loeschen ist nicht in HW implementiert.


Volker

von Peter D. (peda)


Lesenswert?

Display-boy schrieb:
> mit einem  z.B Clear(2), würd es nur einen Vorgang brauchen,  und dann
> die gewünschte darstellung.

Das beißt sich aber, zeitkritisch und das schnarchlahme Clear.

Clear dauert elend lange und deshalb sieht man auch ein deutliches 
Flackern, wenn man Clear benutzt.

Wenns effizient sein soll und nicht flackern, dann überschreibe mit dem 
neuen Text und fülle hinten mit Leerzeichen auf.


Peter

von Klaus D. (kolisson)


Lesenswert?

hallo,

ich hab mir irgendwann angewöhnt immer eine komplette zeile zu 
schreiben.
in diesem falle also einen string*16. dieser enthält dann eben die 
ausgabe,
dazwischen die leerzeichen für abstände und am ende die leerzeichen zum 
auffüllen der zeile. dabei entfällt dann bei den meisten operationen die 
notwendigkeit des clear.

gruss klaus

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.