PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD Anzeige aktualisieren



Reinhard
19.09.2005, 21:03
Hallo,
ich muss Zählerstände auf einer LCD Anzeige ausgeben. Das ist mit Bascom ja auch kein Problem.
Nur wie aktualisiert man die Anzeige,
wenn sich die Stellenzahl ändert? Z.Bsp. wird 100 angezeigt, danach 99.
Dann bleibt die 0 von der 100 in der Anzeige stehen. Ich lösche z.Zt. vor
der Ausgabe des neuen Wertes das LCD. Dies führt aber zu unschönen Flackern.
Das gleiche Problem mit dem neg. Vorzeichen.
Wie macht ihr das?

Gruß und Dank
Reinhard

Baui
19.09.2005, 21:24
Hallo Reinhard,
also das flackern lässt sich nun mal nicht ganz vermeiden aber einigermaßen in den Griff bekommst dus mit



lowerline/upperline
bzw. locate LINE,ROW

damit sollte es nicht so flackern und der Inhalt der entprechenden Zellen wird büerschrieben.

Falls dir das noch nicht gefällt melde dich nochmal

Gru0
Baui

chr-mt
19.09.2005, 21:37
Etwas sehr umständlich, aber so geht's auch ;)




$crystal = 8000000

Dim Wert As Integer
Dim Anzeigestring As String * 5

Cls

For Wert = -10 To 10

Anzeigestring = Str(wert)
Anzeigestring = Format(anzeigestring , "000")

If Wert > 0 Then
Anzeigestring = "+" + Anzeigestring
End If

If Wert = 0 Then
Anzeigestring = " " + Anzeigestring
End If

Locate 1 , 10
Lcd Anzeigestring

Waitms 100
Next Wert

End



Hat den Vorteil, daß es nicht flackert und die Ausgabe nicht durch Vorzeichen verschoben wird...

Warscheinlich geht das aber auch viel einfacher ;)

Gruß
Christopher

Reinhard
19.09.2005, 21:42
mhhh. ...damit kann ich an eine bestimmte Stelle springen.
Der Rest der alten Anzeige bleibt aber trotzdem stehen!
Ich gebe aus: LCD "Bilder:" variable.
Variable hat aber unterschiedliche Stellenzahl, incl. neg. Vorzeichen.
Das bleibt dann bei pos. Werten stehen!
Ich müßte alles hinter "Bilder:" löschen können und den neuen Wert variable schreiben.
Aber wie?
Reinhard

Marco78
19.09.2005, 21:42
Baui hat nicht ganz unrecht. Mit Locate kommt man an jede Stelle des LCDs.
Aber ein wichtiger Punkt fehlt hier!
LCD " "
An die Stelle einfach ein paar Leerzeichen Setzen.
Der Code wird auch schneller ausgeführt als ein CLS.

Ich persönlich finde es immer unschön wenn man Werte hat die sich in der Länge ändern. Also der Unterschied zwischen 100 und 99. Auch wenn die letzte 0 der 100 mit Leerzeichen überschrieben wird, rutschen die Zahlen immer hin und her.
Mit FUSING kann man den Zahlen ein bestimmten Wert geben. Also 099 für 99. Das sieht 1. schöner aus und 2. muss man die Stellen dann nicht mit Leerzeichen überschreiben. Da entsteht auch kein flackern, weil die Anzeige nicht dauerhaft gelöscht und beschrieben werden muss. Die Zahl hat immer die gleiche Anzahl von Stellen und es bleiben keine Rest auf dem LCD wenn ein Wert mal kleiner ist.

Reinhard
19.09.2005, 21:50
Danke für alle Tipps!
Diese kamen hier unbemerkt an, während ich an meiner ersten Antwort bastelte.
Geht ja hier Schlag auf Schlag.
Manchmal sieht man den Wald vor lauter Bäumen nicht. Einfach vor
Aktualisierung ein paar Leerzeichen senden sollte es doch sein!
Das Fusing hört sich auch interessant an. Muss ich mir mal ansehen.
Aber erst morgen!!

Nochmals Dank an euch für die schnellen Antworten
Reinhard

chr-mt
19.09.2005, 21:58
Hi,
das löschen durch Leerzeichen ist auch nicht die Lösung, wenn es um sich schnell ändernde Werte geht.
Dann löscht und schreibt man schnell ja hintereinander auf die selben Stellen, was zu verdunkeln bis zum verschwinden der Anzeige während der Änderung führen kann.
Für sich langsam ändernde Werte geht das aber, wenn die Anzeige des Wertes lange genug stehen bleibt, im Vergleich zur Löschzeit.

Gruß
Christopher

Reinhard
19.09.2005, 22:05
@chr-mt:
Scheint doch aufwändiger zu sein. Werde wohl deinen Code der Vorzeichenausgabe mit der Formatierung mittels Fusing kombinieren müssen.
Reinhard

chr-mt
19.09.2005, 22:11
Hi,
habe gerade noch was gefunden ;)
wenn man beim Format zB. ein "+000" schreibt, dann wird das Vorzeichen bei
positiven Zahlen davorgesetzt.
Allerdings ist "0" dann "+000" und nicht "000", was ich nicht sehr schön finde.

Gruß
Christopher

Reinhard
19.09.2005, 22:27
Das werde ich morgen ausprobieren. Das +000 stört mich dabei nicht so besonders. Soll ja nicht als Ausstellungsstück zur IAA O:)

Reinhard

Torsten_G
19.09.2005, 22:39
Hi,

der Tipp mit dem Leerzeichen zum Überschreiben kam ja schon, so mache ich das eigentlich auch.

Primitiv, aber wirksam... O:)

Um das Springen beim Zehnerdurchgang zu vermeiden, könnte man auch die Locate-Koordinate für die Ausgabe ensprechend verschieben, z. B.:




$crystal=8000000

$baud=9600

dim locx as byte
dim zahl as integer
dim zahlstring as string * 5

do

incr zahl

If Zahl>15000 then Zahl=0

zahlstring=Str(zahl) 'Variable "Zahl" in einen String verwandeln

locx=Len(Zahlstring) 'Laenge des Strings ermitteln

locx=locx-1 'Laenge um 1 reduzieren -> 4 Stellen Korrektur bei 5-stelliger Zahl

locx=10-locx ' Am 10. Zeichen steht der Einer...

Locate 1,6 'Alte Zahl überschreiben...

Lcd " " '...mit 5 Leerzeichen

Locate 1, locx

lcd Zahl

waitms 10

loop


Ich hab das jetzt nur so runtergetippt und nicht getestet, etwaige Syntaxfehler bitte ich zu entschuldigen.

Viele Grüße

Torsten

Xam
22.10.2005, 21:51
Ich habe selbiges Problem mit einer Temperaturanzeige und komme mit den hier vorgestellten Lösungen nicht klar, gibt es noch andere Varianten?

Xam
22.10.2005, 21:53
Ich habe selbiges Problem mit einer Temperaturanzeige und komme mit den hier vorgestellten Lösungen nicht klar, gibt es noch andere Varianten?

Torsten_G
22.10.2005, 22:27
Hallo Xam,

es wäre sicher hilfreich, wenn Du Dein Problem etwas präzisieren könntest...

Grüße

Torsten

Xam
25.10.2005, 11:17
Hat sich erledigt, danke.