www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Textausgabe


Autor: Dominik Boine (dominik123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich Steuer ein KS0076B LC-Display im 8Bit Modus an.
Nun habe ich das Problem das ich Text oder Zahlen nur durch setzen der 
einzelnen Bits ausgeben kann.
Bsp: PORTD = 0x50; //P Zeichen
Wie ist es möglich sich eine Variable von Datentyp "float" in Dezimal 
Zahlen auf dem Display anzeigen zu lassen???
Gibt es ev. schon ein vorgefertigtes .h-File was ich anbinden kann.
Habe mir die LCD.h von Peter Fleury angeguckt aber nicht wirklich was 
daraus gelernt. Wie wird das dort mit dem "lcd_put(XXX);" Befehl 
realisiert?

Gruß
Dominik

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das erste was du brauchst ist erst mal eine Funktion,
die ein einzelnes Zeichen ausgeben kann.

Also sowas in der Art
void lcd_char( char c )
{
  /// mach was immer notwendig ist, um das Zeichen c am
  /// LCD auszugeben
}


auf dieser Funktion baut dann alles weitere auf.
zb. eine Funktion, die einen String ausgeben kann
void lcd_string( const char* s )
{
  while( *s != '\0' )
    lcd_char( *s++ );
}

auf dieser Funktion wiederrum baut dann eine Ausgabe für Zahlen
auf, indem zunächst eine Textrepräsentierung der Zahl bestimmt
wird, und der so erhaltene String über die lcd_string Funktion
ausgegeben wird.
void lcd_number( int i )
{
  char tmp[10];

  sprintf( tmp, "%d", i );
  lcd_string( tmp );
}

Und so führt eines zum anderen. Aber am untersten Ende der Hierarchy
steht: Ein einzelnes Zeichen am LCD ausgeben.

http://www.mikrocontroller.net/articles/FAQ#Wie_ka...

PS: Das hier
    PORTD = 0x50; //P Zeichen

   lässt sich auch so schreiben

    PORTD = 'P';

In C ist ein char letztendlich auch nur eine Zahl.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klasse !!!!

/*
void lcd_string( const char* s )
{
  while( *s != '\0' )
    lcd_char( *s++ );
}
*/


Endlich mal jemand der den String auf '\0' als Endzeichen prüft. Ich bin 
schon in vielen Lehrbüchern darüber gestolpert dass nur auf 0 prüft 
wird. Ich habe mich dann immer gefragt, ob bei einem alphanumerischen 
String die while-Schleife bei jeder 0 verlassen wird (ich denke schon 
oder ?)
 Ich wollte es auch einmal mal posten bzw. ausprobieren, aber dies 
erübrigt sich wohl jetzt.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe mich dann immer gefragt, ob bei einem alphanumerischen
>String die while-Schleife bei jeder 0 verlassen wird (ich denke schon
>oder ?)

Sicher, bei jeder 0. Aber nicht bei '0' ;)

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
'0' != 0
'\0' == 0

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@gast:


so gehts auch

 while( *s )

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gast wrote:

> Endlich mal jemand der den String auf '\0' als Endzeichen prüft.

In dem Fall wollte ich dem Poster einfach nur etwas entgegenkommen.
Da er anscheinend noch nicht viel Erfahrung hat, wollte ich ihm das
eigentlich übliche

    while( *s )

nicht antun. Ich hatte schon ein etwas schlechtes Gewissen wegen der
dichten Pointersyntax in  *s++


> schon in vielen Lehrbüchern darüber gestolpert dass nur auf 0 prüft
> wird.

Yup. Ist auch richtig so. '\0' ist das Zeichen, dessen Code 0 ist.
Im Prinzip ist es egal, ob man 0 oder '\0' oder NUL (mit einem L!)
schreibt. Ist alles das gleiche.

Trotzdem habe ich mir angewöhnt, hier immer den vorgesehenen Typ
zu benutzen.
Anderes Beispiel: Abtesten ob ein Pointer 0 ist. Auch hier könnte
man im Grunde schreiben

   if( p )
   if( p == 0 )
   if( p == NULL )

Meist benutze ich die erste Form. Wenn die aber droht im restlichen
Code unterzugehen, oder wenn ich die Augen des Lesers explizit auf
den Vergleich ziehen möchte, benutze ich die 3. Form. Niemals aber
die 2. Form. Es wiederstrebt mir einfach, dass da ein Pointer mit
einer Zahl verglichen wird. Das passt von den Datentypen her
einfach nicht und erzeugt bei mir ein ungutes Gefühl im Magen.

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.