Forum: Compiler & IDEs Probleme mit Strings


von Axel Schindler (Gast)


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

von Jonas Diemer (Gast)


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

von Axel Schindler (Gast)


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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

strcpy("Das ist ein Text", TextL1);

von Axel Schindler (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.