www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit übergabe werten (CCS Compiler)


Autor: Markus Marugg (skamper)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tach....

ich hab n' Problem mit eins, zwei Funktionen. Ich arbeite mit einem PIC 
18F452 und MPLab mit CCS Compiler. Ich bastele zur Zeit mit nem Grafik 
LCD rum und steh nun vor einem Problem. Folgendes:

den jeweiligen Schreibbefehlen möchte ich X und Y Startdresse übergeben 
plus die eigentliche information. zB sowas:

   lcd_putnumb(3,12, 0xFF);
das Schreibt mir nun 255 (dezimal) auf Page 3, Adresse 12... 
funktioniert prima...

nun aber:
   lcd_putchar(3,12,"Hello World");
das müsste nun "Hello World" als Text an die selbe stelle schreiben.....

CCS meldet BAD EXPRESSION SYNTAX

kennt jemand das Problem oder weiss was ich falsch gemacht habe??

THX .......Skamper

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht deine Funktion lcd_putchar aus?

Müsste sowas in der Richtung sein
void lcd_putchar( int x, int y, const char* text )
{
  ...
}

Autor: Markus Marugg (skamper)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also:

void lcd_putchar(int cx, int cy, char f)
{
  int fx;
  lcd_setpage(cx);
  switch(f)
  {
    default:
    for(fx = 0; fx < 6; fx++)
    {
      lcd_setaddr(cy+fx-1);
      lcd_write(font[(f-0x20)][fx]);
      output_low(LCD_RW);
      output_high(LCD_DI);
      lcd_enable();
    }
    cy = cy+6;
    break;
  }
}


Der Switch soll nicht verwirren... er geht den Default case für jeden 
buchstaben einzeln durch die funktion ruft dann nur noch die 6 jeweils 
benötigten Bytes auf (Font 6*8)

Autor: Zwirbeljupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"char f" ist ja auch nur ein einzelnes Zeichen und keine vollständige 
Zeichenkette

Versuchs mal so (nicht getestet, nur kurz hingetippt...):
void lcd_putchar(int cx, int cy, char *f)
{
  int fx;

  while(*f != '\0')
  {

  lcd_setpage(cx);

    for(fx = 0; fx < 6; fx++)
    {
      lcd_setaddr(cy+fx-1);
      lcd_write(font[(*f-0x20)][fx]);
      output_low(LCD_RW);
      output_high(LCD_DI);
      lcd_enable();
    }
    cy = cy+6;

  f++;
  cx++;
  }
}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwirbeljupp wrote:
> "char f" ist ja auch nur ein einzelnes Zeichen und keine vollständige
> Zeichenkette
>
> Versuchs mal so (nicht getestet, nur kurz hingetippt...):
>
>
> void lcd_putchar(int cx, int cy, char *f)
>

Würd ich nicht machen. Eine Funktion lcd_putchar könnte sich ja durchaus 
als nützlich erweisen.

Aber man kann sie ja als Baustein für ein lcd_putstring benutzen
void lcd_putstring( int cx, int cy, const char* text )
{
  while( *text )
  {
    lcd_putchar( cx, cy, *text );
    cx++;
    text++;
  }
}

...


  lcd_putstring( 0, 0, "Test" );

Autor: Markus Marugg (skamper)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab mal diverses ausprobiert.....

 und so wies aussieht lässt sich ein string nur dann übergeben wenn 
keine weiteren Variablen übergeben werden. Egal wie ich es drehe, 
combiniert funktioniert es nicht...... einzeln ist es kein problem....

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.