PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dezimalzahl umwandeln in einzellne ASCII-Zeichen



Alicik
13.08.2006, 19:01
Hallo noch ein Mal!

In einem Word steht eine belibige Dezimalzahl, die ich über I2C zu einer LCD senden möchte. LCD verlangt ASCII-Zeichen. Über I2C kann ich aber nur einzellne Zeichen (Byteweise) senden.
(Der Bascom-Befehl I2CSEND sendet leider keine Strings-Variable.)

Ich kann natürlich so vorgehen:
Die Zahl im Word kann ja max. 5 Stellen besitzen.

Wenn die "ZAHL1" ist.

Ziffer1 = ZAHL1 / 10 000 (Integer-Division)

ZAHL2 = ZAHL1 - Ziffer1 * 10 000
Ziffer2 = ZAHL2 / 1000

ZAHL3 = ZAHL2 - Ziffer2 * 1000
Ziffer3 = ZAHL3 / 100

ZAHL4 = ZAHL3 - Ziffer3 * 100
Ziffer4 = ZAHL4 / 100

ZAHL5 = ZAHL4 - Ziffer4 * 10
Ziffer5 = ZAHL5 / 1

Und danach Ziffer1 bis Ziffer5 mit dem Bascom-Befehl CHR in ASCII umwandeln und einzelln über I2C an LCD senden.
Natürlich müsste ich kontrollieren und verhindern, dass die führenden Nullen nicht gesendet werden.

Kennt jemand bessere Verfahren, die mit wenigem Programmcode auskommen?

Gruss

Ali

Alicik
13.08.2006, 19:16
Sorry! Sorry! Sorry!
Erst suchen und lesen, bevor eine neue Anfrage gestartet wird.
Eine ähnliche Anfrage war schon da; mit eleganterer Lösungen: https://www.roboternetz.de/phpBB2/viewtopic.php?t=21925

Nichts für Ungut.

Gruss

Ali

Thorvard
20.08.2006, 12:02
Ich weis nicht ob Dein Problem noch aktuell ist, aber es geht auch folgendermaßen:


Dim Text As String * 5
Dim Ausgabe(5) As Byte At Text Overlay

hauptprogramm:
Text = Str(Zahl1)
Gosub CursorPositionieren
Gosub LCDAusgabe
End

LCDAusgabe:
For i = 1 To Len(Text)
J=Ausgabe(i)
Gosub "Das Byte J auf LCD Ausgeben"
Next i
Return


Durch Overlay deklariere ich Variable Ausgabe die auf den selben Speicher wie die Variable Text zugreift. Dadurch brauche ich nicht zwischen Ascii und einem Byte konvertieren. Mit Len(text) prüfe ich aus wievielen Zeichen die Zahl besteht, du wolltest ja keine führenden Nullen ausgeben.
Zu beachten ist allerdings das zwischen 1 und 5 Zeichen ausgegeben werden, wenn Du nicht regelmäßig das Display clearst stehen eventuell noch Zeichen auf dem LCD wenn die Zahl kleiner geworden ist.

Alicik
20.08.2006, 12:29
Das Problem ist zwar nicht mehr aktuell.
Aber trotzdem vielen Dank, Thorvard .
Es ist auch eine sehr schöne Lösung. =P~
Merke ich mir auf jeden Fall.


Ich habe die Lösung von Linux_80 verwendet. Der Link steht oben.
Originalcode von Linux_80 ist:

DIM MyString AS STRING * 20
DIM MyArray(21) AS BYTE AT MyString OVERLAY

Mehr nicht.

Wirklich sehr originell.
Genial Einfach, einfach genial. =D>

Gruss

Ali

Thorvard
20.08.2006, 20:31
Is das selbe in Grün :) Nur etwas mit Beispielcode ausgeschmückt.