8051: LCD-Displayansteuerung

Dörti.Hermi

Erfahrenes Mitglied
Hallo Leute,

folgendes Problem: Ich will mit Hilfe eines 8051 ein LCD-Display ansteuern (20x2).
Ich will die Buchstaben einen nach den anderen auf das Display schreiben, also wie eine Schreibmaschine praktisch. Alles kein Problem, aber:
Code:
text[12] = '-','[','W','E','L','C','O','M','E','!',']','-';
In diesem Array sind alle Buchstaben und Zeichen einzeln gespeichert.
Mit einer definierten Funktion char_lcd([Zeile],[Spalte],[Zeichen]) kann ich einzelne Buchstaben dem Display hinzufügen.
Code:
char_lcd(1,1,"x");
funktioniert problemlos, aber ich muss ja immer periodisch das nächste Zeichen aus dem Array lesen und dem bisher vorhandenem Text hinzufügen.
Schreibe ich
Code:
zeichen = "v";
char_lcd(zeile,spalte,zeichen);
funktionier alles, schreibe ich aber
Code:
zeichen = text[i];
char_lcd(zeile,spalte,zeichen);
funktioniert es nicht. Hier wird immer ein gleiches Zeichen (Pfeil) ausgegeben. Es muss also irgendwas beim Auslesen vom Feld falsch laufen. Das Feld ist als char definiert.

Wo kann das Problem liegen?

Lg
 
Hallo Leute,

folgendes Problem: Ich will mit Hilfe eines 8051 ein LCD-Display ansteuern (20x2).
Ich will die Buchstaben einen nach den anderen auf das Display schreiben, also wie eine Schreibmaschine praktisch. Alles kein Problem, aber:
Code:
text[12] = '-','[','W','E','L','C','O','M','E','!',']','-';
In diesem Array sind alle Buchstaben und Zeichen einzeln gespeichert.
Mit einer definierten Funktion char_lcd([Zeile],[Spalte],[Zeichen]) kann ich einzelne Buchstaben dem Display hinzufügen.
Code:
char_lcd(1,1,"x");
funktioniert problemlos, aber ich muss ja immer periodisch das nächste Zeichen aus dem Array lesen und dem bisher vorhandenem Text hinzufügen.
Das ist etwas merkwürdig. Denn du fügst ja einen String - kein Zeichen - mit dem Funktionsaufruf hinzu. Wie ist denn nun die char_lcd Funktion genau deklariert? (Und warum verwendest du Pseudocode?)

Ansonsten sollte es so funktionieren:
C:
const char* string = "-[WELCOME]-";
char x[2];
x[1] = '\0';
for (int i = 0; i < strlen(string); ++i) {
  x[0] = string[i];
  char_lcd(1, 1, x);
}
Gruß
 
das versteh ich nicht. Wieso string, wenn ich immer nur ein Zeichen habe?

So wie du's gemacht hast, scheint's mir auch möglich zu sein. Werd das mal bei der nächsten Gelegenheit testen.

Aber was micht stutzig macht, ist die Tatsache, dass wenn ich der Variablen ein Zeichen direkt zuweise, es funktioniert, und wenn ich ihr das Zeichen aus dem Array nehme, es nicht funktioniert :confused:

Was zum Kuckuck ist den Pseudocode? :D
 
das versteh ich nicht. Wieso string, wenn ich immer nur ein Zeichen habe?
Ein String kann auch die Länge 1 haben und besteht dann nur aus 2 Zeichen. Das macht den String noch lange nicht zum Zeichen:
C:
"c"; // ein String, Länge 1, bestehend aus den Zeichen 'c' und '\0'
'c' // ein Zeichen.
Aber was micht stutzig macht, ist die Tatsache, dass wenn ich der Variablen ein Zeichen direkt zuweise, es funktioniert,
Aber das tust du ja nicht. Du übergibst kein Zeichen sondern einen String der Länge 1.
wenn ich ihr das Zeichen aus dem Array nehme, es nicht funktioniert :confused:
Was heißt denn "es funktioniert nicht"? Wird es nicht kompiliert? Wie ist die Fehlermeldung?

Wenn du ein Zeichen aus dem Zeichen-Array nimmst, ist das ein Zeichen - und kein String.

Was zum Kuckuck ist den Pseudocode? :D
Dein Code kann nicht von einem C Compiler kompiliert werden, es kann also nicht "echter" Code sein. http://de.wikipedia.org/wiki/Pseudocode

Gruß
 
achso ist das ;)
gibt es denn eine möglichkeit aus einem Array nur ein "Zeichen" zu entnehmen oder ist das Minimum wirklich nur ein String mit Länge 1?

Wenn du mit Pseudocode meinst, dass das Prog. nicht vollständig ist, is mir schon klar :D
Ich compiliere mein Programm mit Keilwin µVision3 und teste es gleich online auf einem Humerboard. Funktioniert prima! :D

danke, lg
 
achso ist das ;)
gibt es denn eine möglichkeit aus einem Array nur ein "Zeichen" zu entnehmen oder ist das Minimum wirklich nur ein String mit Länge 1?
Wieso Minimum? Ein String kann natürlich auch die Länge 0 haben.
Wenn du mit Pseudocode meinst, dass das Prog. nicht vollständig ist, is mir schon klar :D
Ja, und warum? Kannst du nicht einfach den Code posten? Ist es nicht einfacher zu kopieren und einzufügen?

Du hast immer noch nicht gesagt, wie die lcd_char Funktion deklariert ist. Und wie kommst du darauf das diese Funktion nur ein Zeichen schreibt?

Gruß
 
ich habe ein eigenes c-file dazu, wo diese funktionen, und eben unter anderem char_lcd definiert sind. dort ist auch festgelegt, welche port und welche pins genützt werden. und diese funktion schreibt eben nur ein zeichen auf das display. dabei fällt mir ein, wenn das im array ein string ist, kann ich die funktion print_lcd verwenden, die schreibt nämlich einen string.

also wenn's mit der nicht geht, probier ichs mit deinem.

ich habe absichtlich nicht den ganzen code gepostet, weil der sehr lang ist, und das ist glaube ich nicht zielführend. es geht doch nur um diesen kleinen teil davon...

Danke, Lg
 

Neue Beiträge

Zurück