Auftrilung eines Strings und Ausgabe

Gast #497176
Lesenswert?
• ▲
▼
Guten mrogen

Ich erarbeite mir gerade eine Fuktion die einen String aufteilt und die 
einzelnen Charakter an ein Display das an Output_d liegt weiter gibt. 
Ich abrbeite mit dem CCS compiler. Das Problem ist mit "PROBLEMZONE" 
angeschrieben.
Anscheinend nimmt der Output_d die Information die ich ihm gebe, nicht 
so auf wie ich es mir vorstelle. Hat jemand einen ähnlichen Code oder 
eine Idee wie ich das Realisieren könnte.


void lcd_puts (char string[10])
{

    int i=0;                  // reading of a sign of the character 
string
    for ( i=0 ; i <= 7; i++ ) // loop for a 20 character string
    {
      output_d(string[i]); PROBLEMZONE!!!!!!!!!!!!!!!!!!
      RS_1;
      RW_0;
     // delay_us(50);
      E_1;
     // delay_us(50);
      E_0;
    }
}
Gast #497183
Lesenswert?
• ▲
▼
@Linda

>Ich abrbeite mit dem CCS compiler. Das Problem ist mit "PROBLEMZONE"
>angeschrieben.

Wo Frauen mittlerweile ihre Problemzonen haben . . . ;-)

>Anscheinend nimmt der Output_d die Information die ich ihm gebe, nicht
>so auf wie ich es mir vorstelle. Hat jemand einen ähnlichen Code oder
>eine Idee wie ich das Realisieren könnte.

Ok, mal wieder ein wenig sachlich. Läuft dein LCD überhaut schon 
irgendwie? Oder ist das erst der Versuch, es zu laufen zu kriegen?
Prinzipiell sieht der Code erstmal gut aus, WENN die Funktion output_d() 
Daten auf den richtigen Port schreibt und dort auch das LCD dran hängt. 
Mal getestet?
Ebenso mit den Macros RS_1, RW_0, E1_ und E_0;
Machen die, was der Name verspricht?
Ist das LCD bereits initialisiert?

MfG
Falk
Persönliche Seite #497188
Lesenswert?
• ▲
▼
Nun, ohne zu wissen, was "output_d" für Argumente erwartet, wird das 
ganze Glaskugelbowling.
Was mag

   nimmt der Output_d die Information die ich ihm gebe, nicht
   so auf wie ich es mir vorstelle.

bedeuten? Wie stellst Du es Dir denn vor? Und was geschieht stattdessen?


Die Kommentare sind beide ziemlicher Quark, sie haben nichts mit dem 
Code zu tun, den sie zu kommentieren scheinen:

    int i=0;                  // reading of a sign of the character

Hä?

Auch scheint

    for ( i=0 ; i <= 7; i++ ) // loop for a 20 character string

nicht so ganz zum davorstehenden Code zu passen. Hier werden 
offensichtlich 8 Zeichen ausgegeben, nicht 20.
Auch ist der der Funktion als Kopie übergebene String 10 Zeichen lang 
...

Im übrigen:

Wenn Du nullterminierte C-Strings verwendest, dann kann Deine Funktion 
lcd_puts selbst die Länge des Strings bestimmen, indem sie Zeichen für 
Zeichen ausgibt, bis sie auf das den String beendende \0-Zeichen stößt.

Auch ist es sinnvoll, Strings nur als Pointer auf ihr erstes Zeichen und 
nicht als komplettes Array zu übergeben - das landet schließlich alles 
auf dem Stack, was sowohl Rechenzeit als auch Speicher verbrät.

Vorschlag:
1
void lcd_puts(char* string)
2
{
3
  char* p;
4

5
  p = string;
6

7
  while (*p)
8
  {
9
    output_d(*p);
10
    RS_1;
11
    RW_0;
12
    // delay_us(50);
13
    E_1;
14
    // delay_us(50);
15
    E_0;
16
    p++;
17
  }
18
}


Das setzt natürlich voraus, daß "output_d()" eine Funktion ist, die 
einen einzelnen char als Argument erwartet ...




Gast #497191
Lesenswert?
• ▲
▼
Naja... ob das so gut aussieht, wenns doch viel einfacher geht.

void lcd_puts (char * string)
{
    RS_1;
    RW_0;

    while(*string)
    {
      output_d(*string++);
     // delay_us(50);
      E_1;
     // delay_us(50);
      E_0;
    }
}

So wirds gehen, wenn die Ausgabe einzelner Zeichen bereits funktioniert.

Aufrufen so:

lcd_puts("Hallo Welt");
oder

char * meinText = "Hallo Welt";
lcd_puts(meinText);



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