www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Auftrilung eines Strings und Ausgabe


Autor: Linda (Gast)
Datum:

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

Autor: Falk (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
void lcd_puts(char* string)
{
  char* p;

  p = string;

  while (*p)
  {
    output_d(*p);
    RS_1;
    RW_0;
    // delay_us(50);
    E_1;
    // delay_us(50);
    E_0;
    p++;
  }
}


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





Autor: ARM-Fan (Gast)
Datum:

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




Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, Rufus war schneller... ;-)

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  // reading of a sign of the character string

Vielleicht solltest Du besser in Deutsch kommentieren...

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.