www.mikrocontroller.net

Forum: Compiler & IDEs Variable in String einfügen


Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
//Uhrzeit im Sekundentakt auf der Console und TFT ausgeben

    unsigned int hh = (time/3600)%24;
    unsigned int mm = (time/60)%60;
    unsigned int ss = time %60;
    
    usart_write ("\n\rTIME: %2i:%2i:%2i\r\n",hh,mm,ss);

      
    char Time[6];
 
      Time[0] = (hh);
      Time[1] = ':';
      Time[2] = (mm);
      Time[3] = ':';
      Time[4] = (ss);
      Time[5] = '\0';   // das abschliessende \0 nicht vergessen! Sonst ist das kein String!
    
    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

Autor: Thomas Finke (thomas-hn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sprintf(Time,"%i:%i:%i",hh,mm,ss);

+ stdio.h einbinden

Autor: ich (Gast)
Datum:

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

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für eure Unterstützung !!!

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

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein kleines anliegen hätte ich noch bezüglich des Strings.

char Time[10];

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

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

Autor: Nullahn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Schleife auf Leerzeichen testen und durch '0' ersetzen.

Autor: Chapmy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch mal %02i, dann müssten die Nullen eigentlich mitgeschrieben 
werden. http://home.fhtw-berlin.de/~junghans/cref/FUNCTION...

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nullen werden mitgeschrieben. Vielen Dank!

Autor: Kernighan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.