Hallo,
was willst Du nachher damit machen, wenn Du sie über die UART senden willst, einfach die Variable mit Print ausgeben, da wird sie automatisch gewandelt.
Ansonsten schaust Dir mal str() an.
Hallo
Wie heisst der Befehl, der eine Zahl in einzelne Ziffern zerlegt? Und wie wird dieser angewendet? Die Zahl ist max. 4 Ziffern lang, sie kann aber auch kleiner sein.
mfg Luca
Edit: Dass man nicht den ganzen Thread durchwüllen muss, poste ich hier mal den Code, er ist in Bascom, und man kann damit eine Zahl mit 4 Ziffern in Ziffern zerlegen.
Code:Dim Einer As Word Dim Zehner As Word Dim Hunderter As Word Dim Tausender As Word Dim A As Word A = 8956 Einer = A Mod 10 A = A - Einer A = A / 10 Zehner = A Mod 10 A = A - Zehner A = A / 10 Hunderter = A Mod 10 A = A - Hunderter A = A / 10 Tausender = A Mod 10 Print tausender '8 Print hunderter '9 Print zehner '5 Print einer '6
Sollte ein Bild von mir nicht angezeigt werden, einfach eine PM schicken!
Hallo,
was willst Du nachher damit machen, wenn Du sie über die UART senden willst, einfach die Variable mit Print ausgeben, da wird sie automatisch gewandelt.
Ansonsten schaust Dir mal str() an.
Hallo
Ich muss die Zahl zerlegen, damit ich sie nachher auf 4 Siebensegment (Rndigi)anzeigen, anzeigen lassen kann. Die Zahlen werden per I2C gesendet.
Wie wird str() angewendet?(Beispiel?)
Ich hätte die Ziffern dann gerne in variabeln.
mdg Luca
Sollte ein Bild von mir nicht angezeigt werden, einfach eine PM schicken!
In der Bascom Hilfe steht der Befehl eigentlich gut beschrieben. Schau da mal nach. Das Forum liefert dir den Tip und dann muss Eigeninitiative gezeigt werden.
Ich würde ja gern die Welt verändern..., doch Gott gibt mir den Quellcode nicht!
ich hab das auch mal mit ner 7 segment gemacht
einfach die zahl (zb 8763) durch 1000 dann haste die 1.ziffer (
dann 1.ziffer mal 1000 (=8000) und von deiner zahl abziehen (8763-8000=763)
nun diese zahl durch 100 (=7) wieder mal 100 (=700) und die von der vorihgen abzihen (763-700=63) nun diese durch 10 und so weiter ...
Wobei zu beachten ist, das Divisionen und vor allem Kommaberechnungen bei AVR Mikrocontrollern recht lange dauern.Zitat von molleonair
Einfacher und schneller ist die sogenannte Subtraktionsmethode um aus dieser Zahl die einzelnen Ziffern zu bekommen (Binär -> BCD Wandlung).
Grüße,
da Hanni.
Hallo
An die Hilfe hatte ich nicht gedacht. Diese Funktion wandelt aber einfach z.B. ein Byte zu einem String um oder? Wie aber kann ich den String nun zerlegen?
Hier ein Beispiel, wie ich die Zahl nachher gerne hätte:
@molleonairCode:A = 1354 'grundwert ...... 'Befehl B = 4 'Zahl 1 C = 5 'Zahl2 D = 3 'Zahl3 E = 1 'Zahl4
Als Notlösung währe das möglich, aber dass geht sicher einfacher.
@Hanni
Leider verstehe ich bei der Hilfe für BCD nur Banhof.
mfg Luca
Sollte ein Bild von mir nicht angezeigt werden, einfach eine PM schicken!
Also ich haette es so spontan gemacht:
Zunächst die ganze Zahl als String umwandeln:
Zahl_String= Str(Zahl)
Laenge des Strings ermitteln:
LZ = Len(Zahl_String)
Einzelne Zeichen aus Gesamtstring ermitteln:
For A = 1 To LZ
EZ(a) = Mid( Zahl_String, A , 1)
Next A
Einzelne Zeichen in numerische Werte umwandeln:
For A = 1 To LZ
Ew(a) = val(EZ(a))
Next A
Und somit haste die einzelnen Ziffern zur weiteren Verwendung.
Oder gab's einen direkten Befehl? Keine Ahnung, einfach die Bascom-Hilfe studieren. Da steht alles.
hui,
besser gehts in etwa so:
macht nicht soviel arbeit.Code:DIM MyString AS STRING * 20 DIM MyArray(21) AS BYTE AT MyString OVERLAY
Man muss nur noch schauen wie lange der String wirklich geworden ist, damit man keinen Müll weiterverarbeitet.
Und daran denken, das die Zahlen als ASCII-Werte dastehen, d.H. 48 abziehen damit die 0 auch 'ne 0 ist !
Moin,
A = 1354
tausender = A / 1000
tausender = tausender mod 10
hunderter = A / 100
hunderter = hunderter mod 10
zehner = A / 10
zehner = zehner mod 10
einer = A mod 10
In den Variablen tausender, hunderter, zehner und einer stehen dann Deine einzelnen Ziffern.
Viele Grüße,
Bruno
Lesezeichen