mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik char in ein string


Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forumgemeinde!!

Ich weiß, es ist ein leidiges Thema, aber ich habe im Forum kein
passenden Beitrag gefunden.

Ich möchte eine Uhrzeit auf dem LCD anzeigen lassen. Jetzt will ich
dass die Uhrzeit in einem string steht. So nach der Art:  12:34:56 !!
Ich habe ein Byte mit den Stunden. Dieses Byte soll dann mit einem
":" in das string geschrieben werden. Dann wird in das alte Byte für
die Stunden die Minuten geschrieben. USW.


Erst habe ich alles in drei Strings geschrieben und dann mit >strcat<
an das erste angeängt. Das ist aber bestimmt der umständlichste Weg!

Mein Problem ist, ich weiß nicht so genau wie ich das "progen" soll.
Erst dachte ich mit >sprintf< aber ich glaube über Zeiger ist das
besser, da ich dann wirklich auf die einzelne Elemente [i] zugreifen
kann. So bekomme ich dann aber Probleme wie ich es an das LCD schicke.
Das funktioniert dann auch nichts (es wird nichts angezeigt)
Kann mir jemand einen "schubster" geben???

Grüße,

Marcel

Autor: Lokko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char text[16];
unsigned char stunden,minuten,sekunden;
unsigned char uhrzeit[3];

//jetzt irgendwie die uhrzeit in die variablen

//mit sprintf in einen String schreiben
sprintf(text,"%d:%d:%d",stunden,minuten,sekunden);
oder
sprintf(text,"%d:%d:%d",uhrzeit[0],uhrzeit[1],uhrzeit[2]);
//Im Dispaly anzeigen z.B. display_put_string(char *text)
display_put_string(text);

die display_put_string ist natürlich nur ein Beispiel und muss durch ne
Funtion ersetzt werden, die was auf dein Display schreibt

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ein kleiner Tip
In den Formatierungen bei sprintf kann man
eine ganze Menge machen. Zb. kann man dem Ding
sagen, dass man die Zahl immer auf 2 Stellen
haben moechte und dass, falls die Zahl nur eine
Stelle umfasst, mit führenden Nullen aufgefüllt werden
soll:

  sprintf( text, "%02d:%02d:%02d", stunden, minuten, sekunden );

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Lokko:
Jo, jetzt geht's!!! Vielen Dank für deine schnelle Hilfe!!
Ich könnte schwöre ich hatte es vorhin so ähnlich gehabt. Aber jetzt
geht es zum Glück. freu

@ Karl Heinz:
Ja, das ist eine nützliche Funktion. Dann steht bei einstelligen Zahlen
trotzdem eine 0 vorne dran, Danke!!!


Jetzt habe ich aber noch eine Frage. Mir geht es jetzt nicht darum
Variablen zu sparen, sonder einfach darum das ich es einfach nicht hin
bekomme. Das "fuchst" mich schon sehr.

Kann man es nicht auch so ähnlich realisieren:

zeitbyte = stunden -->(12)

string = zeitbyte -->(12)

zeitbyte = minuten -->(34)

string = zeitbyte -->(12:34)

zeitbyte = sekunden -->(56)

string = zeitbyte -->(12:34:56)

Ich bin mir fast sicher dass das mit Zeigern gehen müsste!!! Aber der
erste Vorschlag würde schon reichen.... aber das kann man doch bestimmt
auch mal wo anders gebrauchen. Mir gehts nur ums Prinzip.

Grüße Marcel

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin mir nicht sicher was Du mit 'mit Zeigern gehen'
meinst. Aus Deinem 'Beispiel' werde ich auch nicht schlau
was Du eventuell meinen könntest.

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, ich meine z.B. so etwas in der Art....

char *zeiger;

zeiger[0] = zeitbyte;   --> oder auch *(zeiger+0) = zeitbyte
zeiger[2] = ':';
....
zeiger[3] = zeitbyte;
zeiger[4] = ':';
....
zeiger[5] = zeitbyte;

So irgenwie müsst das doch gehen???

Oder liege ich da falsch????

Gruß Marcel

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eventuell bist Du auf der Suche nach sowas:

  char Text[9];

  Text[0] = Stunden / 10 + '0';
  Text[1] = Stunden % 10 + '0';
  Text[2] = ':';
  Text[3] = Minuten / 10 + '0';
  Text[4] = Minuten % 10 + '0';
  Text[5] = ':';
  Text[6] = Sekunden / 10 + '0';
  Text[7] = Sekunden % 10 + '0';
  Text[8] = '\0';

Das kann man dann auch in eine Zeiger Loesung umpfriemeln:

  char Text[9];
  char* pDest = Text;

  *pDest++ = Stunden / 10 + '0';
  *pDest++ = Stunden % 10 + '0';
  *pDest++ = ':';
  *pDest++ = Minuten / 10 + '0';
  *pDest++ = Minuten % 10 + '0';
  *pDest++ = ':';
  *pDest++ = Sekunden / 10 + '0';
  *pDest++ = Sekunden % 10 + '0';
  *pDest++ = '\0';

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm, das habe ich noch nie gesehen. Sieht aber interessant aus. Das
muss ich mal ausprobieren. Ich kenne die Befehle: /10 + '0' & %10 +
'0' NICHT. Aber ich könnte mir vorstellen das so erste die vordere
Zahl und dann die hintere Zahl eingesen wird, oder??

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm eine Zahl. Sagen wir 35.

Was ergibt   35 / 10    ->  3
Was ergibt   35 % 10    ->  5

(% ergibt den Rest einer Division. So wie Du es in
der Grundschule gelernt hast: Eine Mutter hat 7 Äpfel
und 3 Kinder. Wieviele Äpfel kriegt jedes Kind und wieviele
Äpfel bleiben übrig, wenn ein Apfel nicht geteilt werden kann)

Damit hast Du die Zahl 35 in die einzelnen Ziffern 3 und
5 zerlegt.
Nun kannst Du aber nicht Ziffern an das Display schicken.
Das Display will Zeichen in Form von Codes. Jedes Zeichen,
also zb. 'a', 'b', 'c', 'x' oder auch '/', ':' oder eben
auch '0', '1', '2', '9', hat einen bestimmten Code. Das
ist ganz einfach eine Zahl. zb hat das Zeichen '0' die
Zahl 48 im ASCII Code.
Um nun die Ziffer 0 in den Code 48 zu verwandeln, zähle
ich ganz einfach 48 dazu. Nun will ich mir die 48 aber nicht
merken muessen. Das kann der Compiler viel besser. Also
sag ich ihm, dass er den Code fuer '0' noch dazu zaehlen
soll:

    Irgendwas + '0'

Ergibt den Code fuer Irgendwas, solange Irgendwas (als Zahl)
nur zwischen 0 und 9 ist. Da die Codes fuer '0', '1', '2',
'3', ... '9' alle aufsteigend sind und aufeinander folgen,
funktioniert das auch.
Aus 0  wird '0'   (Code 48)
    1       '1'   (Code 49)
    2       '2'   (Code 50)
    3       '3'   (Code 51)
       ....

Tja. Das wars im Grunde. Setze die Einzelteile zusammen
und du kriegst:

   Text[0] = Stunden / 10 + '0';
   Text[1] = Stunden % 10 + '0';
   ....

Im Endeffekt entsteht in Text ein String, der dann ganz
normal als String ausgegeben werden kann. Genauso wie
auch sprintf den String befuellt.

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey KLASSE !! Vielen Dank!! Da habe ich echt wieder mal etwas
dazugelernt!! Das hört sich so ganz einfach an g

Das werde ich Morgen in aller ruhe mal ausprobieren.
Noch mal danke und gute Nacht :o)

Marcel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.