Forum: Compiler & IDEs LCD, Text rechtsbündig ausgeben?!


von Steffen H. (Gast)


Lesenswert?

Hallo,

ist es möglich mit der LCD lib von Fleury Text rechtsbündig auszugeben?
(Suchfunktion zwecklos, wegen schlecht beschriebener Betreff's der
Beiträge)

Ich habe vor diverse Messwerte auf einem 2x16 LCD auszugeben. In jeder
Zeile sollten es zwei Messwerte sein, da sich die Werte ständig ändern
können, also sich die Länge (Zeichenanzahl) verändert, möchte ich das
die Maßeinheiten immer an der selben Stelle stehen und sie sich nicht
nach vorne (wenn der Wert kleiner wird) oder nach hinten (wenn der Wert
sich vergrößert) verschieben.

Ich hoffe ihr könnt mein Problem nachvollziehen.
Wenn nicht dann sollte euch das hier weiterhelfen:

10000RPMxxx199°C      //Eine Zeile mit 16 Zeichen, x sind Leerstellen

5000RPMxxxx99°Cx      //Der Wert verringert sich, so will ich es aber
                       nicht!
x5000RPMxxxx99°C      //So sollte es sein, keine Verschiebeung der
                       Maßeinheiten

Beim "normalen" ausgeben, muss man ja nur die Startposition angeben
und es wird linksbündig ausgegeben.

Ich steh irgendwie auf dem Schlau, vielleicht sehe ich den Wald vor
lauter Bäumen nicht mehr. Deshalb helft mir etwas auf die Sprünge.
Danke.
Frohe Weihnachten

von Roland Praml (Gast)


Lesenswert?

ich würde mir eine toString Funktion schreiben, in etwa so

char buf[16];
int zahl=12345;
int i
int divisor=10000; // 5 Stellen
for (i=0; i < 5; i++) {
  buf[i]=(zahl / divisor) % 10 +'0';
  divisor=divisor / 10;
}
buf[5]=0; // String terminieren

i=0; // Führende 0 durch space ersetzen
while (buf[i] == '0') {
  buf[i]=' ';
  i++;
}
/* ungetestet */

Gruß
Roland

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn Speicherplatz kein Problem ist, löst (sn)printf() das Problem:

  printf("Wert: %8d", wert)

Wert wird mit führenden Leerzeichen auf acht Stellen Breite ausgegeben.

von Steffen H. (Gast)


Lesenswert?

Danke für die Antworten

@Rufus

deine Idee scheint die Einfachste zu sein. Aber weiss meinst du mit
(sn)?

von Branko Golubovic (Gast)


Lesenswert?

@Rufus
Wenn aber Speicherplatz Problem ist:

char buffer(17);
int zahl;


lcd_gotoxy(0,0);
lcd_puts("1000RPM);
lcd_gotoxy(11,0)
lcd_puts("      ");// Alte Wert löschen

if(zahl>99) lcd_gotoxy(11,0);
if(zahl>9) lcd_gotoxy(12,0)
else
lcd_gotoxy(13,0);
itoa(zahl,buffer,10);
lcd_puts(buffer);
lcd_puts("\xf8\x43");//°C Ausgabe

Gruß
Branko

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

@Steffen H:

sprintf gibt den formatierten Text in eine Stringvariable aus,
snprintf achtet auch noch darauf, daß die Stringvariable ausreichend
groß ist und vermeidet so die berüchtigten Buffer overflows.

Je nach Ansteuerung des Displays/je nach Compiler landen die Ausgaben
von printf irgendwo anders (serielle Schnittstelle etc.), während die
mit s/snprintf beschriebene Stringvariable mit lcd_puts gezielt ans
Display geschickt werden kann.

Das kann in bestimmten Situationen sinnvoll sein.

von Simon K. (simon) Benutzerseite


Lesenswert?

man kann doch beim lcd die adresse setzen und auf decrement stellen

von synonym (Gast)


Lesenswert?

bin eigentlich voll der noob und kenn mich mit bildschirmen nicht ganz
so doll aus, möchte aber wissen, ob es möglich ist, dass ein
lcd-bildschirm schaden nimmt, wenn er, nachdem der pc runtergefahren
ist, einfach von stromnetzt abgeschaltet wird, nichts standby oder
ausschalten, einfach strom weg, während er noch läuft...
ich befürchte dass die lc´s eben in ihrer struktur oder position oder
sonst was verändert werden, und das, wenn vielleicht nicht gleich ganz
zum knock out, aber doch zu einigen bildstörungen führen könnte, also,
wäre super wenn mir irgendwer irdendwie weiterhelfen könnte...
danke im voraus

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.