Forum: Compiler & IDEs Variable in String einfügen


von Denny (Gast)


Lesenswert?

Hallo allerseits,

ich hoffe mir kann jemand bei meinem kleinen Problem weiterhelfen...
Ich bin noch ziemlich in den Kinderstuben was WinAVR und AVR
Programmierung in C angeht.

Ich möchte gern die Uhrzeit auf meinem Nokia 6100 Display ausgeben.
Mit der usart_write Zeile funktioniert die Zeitausgabe auf der seriellen 
Schnittstelle ohne Probleme... im Sekundentakt...

Wenn ich aber mit lcd_print die Uhrzeit auf dem LCD ausgeben möchte,
dann bekomme ich nur Hyroglyphen anstatt den Zahlen zu sehen.
1
//Uhrzeit im Sekundentakt auf der Console und TFT ausgeben
2
3
    unsigned int hh = (time/3600)%24;
4
    unsigned int mm = (time/60)%60;
5
    unsigned int ss = time %60;
6
    
7
    usart_write ("\n\rTIME: %2i:%2i:%2i\r\n",hh,mm,ss);
8
9
      
10
    char Time[6];
11
 
12
      Time[0] = (hh);
13
      Time[1] = ':';
14
      Time[2] = (mm);
15
      Time[3] = ':';
16
      Time[4] = (ss);
17
      Time[5] = '\0';   // das abschliessende \0 nicht vergessen! Sonst ist das kein String!
18
    
19
    lcd_print(Time,20,30,0,Weiss,Dunkelblau);

Die Funktion LCD Print übernimmt nur ganze Strings.


Ich bin wirklich für jede Hilfe sehr dankbar, da ich mit meinen
Kenntnissen und Stundenlangen lesen und suchen im Internet bisher nicht
weitergekommen bin um dieses umzusetzen.

Freundliche Grüße
Denny

von Thomas F. (thomas-hn) Benutzerseite


Lesenswert?

Dazu sollten wir erstmal wissen was lcd_print als Übergabewert(e) 
erwartet. Du schreibst was, dass die Funktion nur "ganze" Strings 
übernimmt...

Die Zeile
lcd_print(Time,20,30,0,Weiss,Dunkelblau);
sieht aber garnicht nach String aus.

Gruß,

Thomas

von ich (Gast)


Lesenswert?

1
sprintf(Time,"%i:%i:%i",hh,mm,ss);

+ stdio.h einbinden

von ich (Gast)


Lesenswert?

char Time[6]; Ist zu klein, da passt der volle String nicht rein. Nimm 
Time[10];

von Denny (Gast)


Lesenswert?

ich erläutere mal den lcd_print befehl:

lcd_print("Test",18,4,1,Schwarz,Gelb);

lcd_print("Text",X-koordinate,Y-koordiante,fontgröße,vordergrundfarbe,hi 
ntergrundfarbe)


   ' x1,y1 ******************
   '                       
   '                       
   '                       
   '                       
   '                       
   '                       
   '                       
   '       ****************** x2,y2
   '   - , - , links oben -> rechtes oben , links oben -> links unten

von Timmo H. (masterfx)


Lesenswert?

Genau, hh,mm und ss können auch zweistellig sein. Und dann geht deine 
Zuweisung auch nicht weil hh,mm und ss noch ints sind. Du willst aber 
scheinbar einen String haben. Also jedes Zeichen + 0x30. Also
Am besten die Lösung mit sprintf nehmen und Time entsprechen groß 
machen.

von Denny (Gast)


Lesenswert?

Vielen Dank für eure Unterstützung !!!

Es funktioniert :-)
1
sprintf(Time,"%i:%i:%i",hh,mm,ss);
führt exakt das aus was ich suchte und meinte

von Denny (Gast)


Lesenswert?

Ein kleines anliegen hätte ich noch bezüglich des Strings.

1
char Time[10];
2
3
sprintf(Time,"%2i:%2i:%2i",hh,mm,ss);
4
5
lcd_print(Time,6,114,1,Schwarz,Gelb);

Meine Zeit wird bei einer einstelligen Zeitangabe wie folgt ausgegeben: 
0:12: 4

Wie fügt man dort einen Platzhalter mit ein, sodaß die Uhrzeit dann 
folgendermaßen dargestellt wird:   00:12:04

Gruß
Denny

von Nullahn (Gast)


Lesenswert?

In Schleife auf Leerzeichen testen und durch '0' ersetzen.

von Chapmy (Gast)


Lesenswert?

Versuch mal %02i, dann müssten die Nullen eigentlich mitgeschrieben 
werden. http://home.fhtw-berlin.de/~junghans/cref/FUNCTIONS/format.html

von Denny (Gast)


Lesenswert?

Nullen werden mitgeschrieben. Vielen Dank!

von Kernighan (Gast)


Lesenswert?

oder noch besseer schau dir mal die Help fon sprintf an, dann lernst du 
am meisten. Du weist jetzt ja dank dem Forum wie nützlich die Funktion 
ist.

Cheers
Ritchie

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
Noch kein Account? Hier anmelden.