Forum: Mikrocontroller und Digitale Elektronik LCD Textausgabe


von Dominik B. (dominik123)


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

von Karl H. (kbuchegg)


Lesenswert?

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

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


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

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.
1
void lcd_number( int i )
2
{
3
  char tmp[10];
4
5
  sprintf( tmp, "%d", i );
6
  lcd_string( tmp );
7
}

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_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F

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.

von gast (Gast)


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.

von holger (Gast)


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' ;)

von Pete K. (pete77)


Lesenswert?

'0' != 0
'\0' == 0

von Ulrich (Gast)


Lesenswert?

@gast:


so gehts auch

 while( *s )

von Karl H. (kbuchegg)


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.

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.