- LiTime Speicher und Akkus         
Ergebnis 1 bis 5 von 5

Thema: Dezimalzahl umwandeln in einzellne ASCII-Zeichen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.08.2006
    Beiträge
    21

    Dezimalzahl umwandeln in einzellne ASCII-Zeichen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    04.08.2006
    Beiträge
    21
    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

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.08.2006
    Beiträge
    12
    Ich weis nicht ob Dein Problem noch aktuell ist, aber es geht auch folgendermaßen:
    Code:
    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.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    04.08.2006
    Beiträge
    21
    Das Problem ist zwar nicht mehr aktuell.
    Aber trotzdem vielen Dank, Thorvard .
    Es ist auch eine sehr schöne Lösung.
    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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    19.08.2006
    Beiträge
    12
    Is das selbe in Grün Nur etwas mit Beispielcode ausgeschmückt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus