www.mikrocontroller.net

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


Autor: Steffen H. (Gast)
Datum:

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

Autor: Roland Praml (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: Steffen H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten

@Rufus

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

Autor: Branko Golubovic (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man kann doch beim lcd die adresse setzen und auf decrement stellen

Autor: synonym (Gast)
Datum:

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

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.