String-Formatierung für LCD Anzeige

Gast #77671
Hallo

Im Dateianhang ist ersichtlich, dass ich die int-Variable "..._count"
die die Sekunden, Minuten resp. Stunden zählt mit utoa() in einen
String umwandle, und dann im LCD anzeige.

Wie kann ich nun erreichen, dass führende O (Nullen) angezeigt werden
(z.B. bei Uhrzeit 09:08:01) und damit die Anzeige nicht so aussieht >>
9 :8 :1  ?

Wenns keine "Formatierung" der schlauen Art gibt, werde ich wohl
Sekunden-Einer, Sekunden_Zehner , usw. brauchen müssen.

Ich bin gespannt.

Gruss

Toni
Angehängte Dateien:
Gast
Wenn Du genügend ROM für den Koloß hast, kannst Du natürlich die
printf()-Familie benutzen.

Ansonsten ist es im Falle von jeweils nur zwei Stellen eigentlich noch
einfach: konvertiere ,,zu Fuß'', indem Du sowohl durch 10 dividierst
als auch den Rest der Division benutzt.  Effektiv geht das mit der
Standardfunktion div(), die sich die Tatsache ausnutzt, daß bei einer
ganzzahligen Division der Rest ohnehin immer ermittelt werden muß.
(Die Operatoren / bzw. % greifen intern auf dieselbe Routine zu,
werfen aber entweder den Rest oder den Quotienten weg.)
Gast
Jörg, vielen Dank

Habs hingekriegt, wie Du im Anhang siehst (im Moment nur für die
Sekunden codiert).

Ich weiss nicht, vielleicht gibt es auch eine Möglichkeit die nur eine
String-Variable braucht, habs aber nicht fertig gebracht !

Ich bin mir auch nicht sicher wie gross die Strings initialisiert
werden müssen, ist die Grösse "lcd_sec_z[3]", ... ok ?
Eigentlich sollten doch ..[2] genügen, Ausgabe ist dann aber plötzlich
um eine Stelle verschoben !

Gruss

Toni
Angehängte Dateien:
Gast
Es ist die Frage, ob sich der Aufwand auszahlt, weil printf ist
einfacher und braucht im Flash:
vfprintf            1268 bytes
sprintf               70 bytes

Dann einfach mit sprintf(buf,"%02d:02d:02d",h,m,s); und du hast die
Zeit in buf.
Schliesslich hast du ja den ganzen Flash bezahlt, und kannst den nicht
benötigten Teil ja nicht zurückgeben :-)
Gast
Vielen Dank Fritz

bin für jeden Tipp dankbar !

Werde es heute mal so versuchen, und schauen wie viel mehr oder weniger
Speicher es braucht.

Gruss

Toni
Gast
OK, hier der Unterschied des benötigten Speichers.


1.) mit Funktion sprinf()
=========================
Linking...
Generating Code...
Program memory usage: 2886 bytes, 35.23% full.
Global variables usage: 63 bytes

Uhr_V2 - 0 error(s), 0 warning(s)


2.) hier so wie oben beschrieben (zu Fuss), mit div() und strcat()
==================================================================
Linking...
Generating Code...
Program memory usage: 1380 bytes, 16.85% full.
Global variables usage: 53 bytes

Einfache_Uhr - 0 error(s), 0 warning(s)


Tatsächlich ein Koloss dieses sprintf() !

Gruss
Toni
Gast
Klar, aber Du mußt dennoch einen ganzen ROM einsetzen, egal ob Du ihn
nur zu 17 oder zu 35 % fülltst, das war doch Fritz' ganze
Argumentation.  Dafür ist der Quellcode einfach und überschaubar.

Wenn der von Dir für den Test benutzte AVR auch der für das
Produktivsystem ist, würde ich an Deiner Stelle keine Sekunde zögern,
printf() zu nutzen.  Wenn Du das dagegen auf einem möglichst kleinen
AVR in einer 1000er Serie produzieren willst, lohnt sich der Tag
zusätzlicher Aufwand für andere Lösungen natürlich locker.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.