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
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
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
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
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
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
Ich habe selbiges Problem mit einer Temperaturanzeige und komme mit den hier vorgestellten Lösungen nicht klar, gibt es noch andere Varianten?
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
Hat sich erledigt, danke.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.