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
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
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 );
@ 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
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.
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
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';
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??
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.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.