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


von Markus M. (skamper)


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

von Karl H. (kbuchegg)


Lesenswert?

Wie sieht deine Funktion lcd_putchar aus?

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

von Markus M. (skamper)


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)

von Zwirbeljupp (Gast)


Lesenswert?

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

Versuchs mal so (nicht getestet, nur kurz hingetippt...):
1
void lcd_putchar(int cx, int cy, char *f)
2
{
3
  int fx;
4
5
  while(*f != '\0')
6
  {
7
8
  lcd_setpage(cx);
9
10
    for(fx = 0; fx < 6; fx++)
11
    {
12
      lcd_setaddr(cy+fx-1);
13
      lcd_write(font[(*f-0x20)][fx]);
14
      output_low(LCD_RW);
15
      output_high(LCD_DI);
16
      lcd_enable();
17
    }
18
    cy = cy+6;
19
20
  f++;
21
  cx++;
22
  }
23
}

von Karl H. (kbuchegg)


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...):
>
>
1
> void lcd_putchar(int cx, int cy, char *f)
2
>

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
1
void lcd_putstring( int cx, int cy, const char* text )
2
{
3
  while( *text )
4
  {
5
    lcd_putchar( cx, cy, *text );
6
    cx++;
7
    text++;
8
  }
9
}
10
11
...
12
13
14
  lcd_putstring( 0, 0, "Test" );

von Markus M. (skamper)


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....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.