Guten mrogen Ich erarbeite mir gerade eine Fuktion die einen String aufteilt und die einzelnen Charakter an ein Display das an Output_d liegt weiter gibt. Ich abrbeite mit dem CCS compiler. Das Problem ist mit "PROBLEMZONE" angeschrieben. Anscheinend nimmt der Output_d die Information die ich ihm gebe, nicht so auf wie ich es mir vorstelle. Hat jemand einen ähnlichen Code oder eine Idee wie ich das Realisieren könnte. void lcd_puts (char string[10]) { int i=0; // reading of a sign of the character string for ( i=0 ; i <= 7; i++ ) // loop for a 20 character string { output_d(string[i]); PROBLEMZONE!!!!!!!!!!!!!!!!!! RS_1; RW_0; // delay_us(50); E_1; // delay_us(50); E_0; } }
@Linda >Ich abrbeite mit dem CCS compiler. Das Problem ist mit "PROBLEMZONE" >angeschrieben. Wo Frauen mittlerweile ihre Problemzonen haben . . . ;-) >Anscheinend nimmt der Output_d die Information die ich ihm gebe, nicht >so auf wie ich es mir vorstelle. Hat jemand einen ähnlichen Code oder >eine Idee wie ich das Realisieren könnte. Ok, mal wieder ein wenig sachlich. Läuft dein LCD überhaut schon irgendwie? Oder ist das erst der Versuch, es zu laufen zu kriegen? Prinzipiell sieht der Code erstmal gut aus, WENN die Funktion output_d() Daten auf den richtigen Port schreibt und dort auch das LCD dran hängt. Mal getestet? Ebenso mit den Macros RS_1, RW_0, E1_ und E_0; Machen die, was der Name verspricht? Ist das LCD bereits initialisiert? MfG Falk
Nun, ohne zu wissen, was "output_d" für Argumente erwartet, wird das ganze Glaskugelbowling. Was mag nimmt der Output_d die Information die ich ihm gebe, nicht so auf wie ich es mir vorstelle. bedeuten? Wie stellst Du es Dir denn vor? Und was geschieht stattdessen? Die Kommentare sind beide ziemlicher Quark, sie haben nichts mit dem Code zu tun, den sie zu kommentieren scheinen: int i=0; // reading of a sign of the character Hä? Auch scheint for ( i=0 ; i <= 7; i++ ) // loop for a 20 character string nicht so ganz zum davorstehenden Code zu passen. Hier werden offensichtlich 8 Zeichen ausgegeben, nicht 20. Auch ist der der Funktion als Kopie übergebene String 10 Zeichen lang ... Im übrigen: Wenn Du nullterminierte C-Strings verwendest, dann kann Deine Funktion lcd_puts selbst die Länge des Strings bestimmen, indem sie Zeichen für Zeichen ausgibt, bis sie auf das den String beendende \0-Zeichen stößt. Auch ist es sinnvoll, Strings nur als Pointer auf ihr erstes Zeichen und nicht als komplettes Array zu übergeben - das landet schließlich alles auf dem Stack, was sowohl Rechenzeit als auch Speicher verbrät. Vorschlag:
1 | void lcd_puts(char* string) |
2 | {
|
3 | char* p; |
4 | |
5 | p = string; |
6 | |
7 | while (*p) |
8 | {
|
9 | output_d(*p); |
10 | RS_1; |
11 | RW_0; |
12 | // delay_us(50);
|
13 | E_1; |
14 | // delay_us(50);
|
15 | E_0; |
16 | p++; |
17 | }
|
18 | }
|
Das setzt natürlich voraus, daß "output_d()" eine Funktion ist, die einen einzelnen char als Argument erwartet ...
Naja... ob das so gut aussieht, wenns doch viel einfacher geht. void lcd_puts (char * string) { RS_1; RW_0; while(*string) { output_d(*string++); // delay_us(50); E_1; // delay_us(50); E_0; } } So wirds gehen, wenn die Ausgabe einzelner Zeichen bereits funktioniert. Aufrufen so: lcd_puts("Hallo Welt"); oder char * meinText = "Hallo Welt"; lcd_puts(meinText);
> // reading of a sign of the character string
Vielleicht solltest Du besser in Deutsch kommentieren...
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.