Probleme mit Strings

Gast #5323
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
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
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 24 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.