Hallo! Ich habe an meinen 8535 ein 2x16 Zeichen LCD angschlossen. Die Ausgabe von Zeichen klappt auch ganz gut. Im Moment steh ich aber vor 2 Problem. Ich habe eine Prozedur geschrieben, die im 4-Bit Modus ein Char an den HD44780 übermittelt. Um nun eine Zeichenkette auf das Display auszugeben durchlaufe ich ein Array von Chars per FOR-Schleife und übermittle jeweils das "aktive" Zeichen mit meiner Prozedur. char TextL1[] = "Teststring"; void main(void) { vInitLcd(); vClearLcd(); for(;;) { unsigned char i = 0; for (i=0; i < (sizeof(TextL1))-1; i++) { vDisplayBusy(); //Prüfen ob Display noch Busy vPutCharToLcd(TextL1[i], DATA_WRITE); //schreiben eines Chars [...] } } der 2. Übergabeparameter (DATA_WRITE) gibt nur an ob ins Daten- oder ins Controlregister geschrieben wird. Nun die Fragen: 1. Wenn ich dem Array bei der Initialisierung gleich meinen Text in Hochkommas zuweise funktioniert alles super. Aber wie kann ich Text im Programmverlauf zuweisen? 2. Der HD44780 nimmt wohl pro Zeile immer 40 Zeichen an. Gibt es eine Möglichkeit ihn so zu initialisieren, dass er nur 16 Zeichen pro Zeile nimmt und das 17. Zeichen (+folgende) in der zweiten Zeile ausgegeben wird? Oder muss man das "manuell" machen? Danke Axel
1. deklariere deinen char array auf die maximale länge, die der text haben wird (alternativ kannst du den speicher auch dynamisch zuweisen. kennt avr-gcc malloc?). terminiere deinen string mit dem null zeichen '\0' (also 0x00). in deiner schleife fragst du nun ab, ob das zu sendende zeichen ein null zeichen ist, wenn ja -> senden fertig (schleife abbrechen): while (text[i++] != 0x00){ //hier senden } 2. das musst du manuell machen
Mal vielen Dank für die Antworten. Aber den String auszugeben ist nicht das Problem. Ich weiss nicht, wie ich einen String dem Array zuordnen kann wenn es nicht gleich bei der Initialisierung geschieht. Also das funktioniert: char TextL1[] = "Testbild"; Aber wenn ich es jetzt wie bei anderen Variablen machen will und z.B. schreibe: char TextL1[]; TextL1 = "Testbild" funktioniert das nicht. Aber dafür sollte es ja auch eine Möglichkeit geben. Ich möchte später eben keine fest definierten Texte ausgeben, sondern z.B. eingelesene Werte (die müssten dann natürlich noch in Strings umgewandelt werden) etc. Axel
Danke! Genau das habe ich gesucht. Als Pascal und Java Programmierer konnte ich ja nicht ahnen, dass man in C dafür ne extra prozedur braucht. :o) Axel
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.