Probleme mit Strings

Gast #5323
Lesenswert?

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
Gast #5324
Lesenswert?

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
Gast #5325
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren