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
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.
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.
>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' ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.