mikrocontroller.net

Forum: Compiler & IDEs Probleme mit Strings


Autor: Axel Schindler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Axel Schindler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
strcpy("Das ist ein Text", TextL1);

Autor: Axel Schindler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.