Forum: Mikrocontroller und Digitale Elektronik Probleme mit mit Charfeld


von Michael (Gast)


Lesenswert?

Ich verwende einen ATMEGA8535.
Jetzt möchte ich auf mein Display den aktuellen Wochentag ausgeben.
Dazu habe ich dies deklariert:
unsigned char text[] = {"Mo.Di.Mi.Do.Fr.Sa.So."};
Die Ausgabefunktion von meinem T6963 Display lautet:
lcd_printfz(0,6,"%02s.",text);

Jetzt weiss ich nicht wie ich der Funktion sage das immer NUR ein
Wochentag ausgegeben wird.
So wie es da steht erscheint alles auf dem Display.

von Patrick D. (oldbug) Benutzerseite


Lesenswert?

1
unsigned char text[][] = { "Mo.", "Di.", "Mi.", "Do.",
2
                           "Fr.", "Sa.", "So.");
3
4
    int i = 2;
5
    lcd_printfz(0, 6, "%s", text[i]);

Sollte [Mi.] auf dem Display anzeigen.

von Michael (Gast)


Lesenswert?

Das funktioniert bei mir immer noch nicht. Compiler mekert nicht.
Hmm..Den Code versteh ich nicht.Warum 2 dimensionales Array?

von Patrick D. (oldbug) Benutzerseite


Lesenswert?

Spezifiziere mal ein wenig näher, was "das funktioniert nicht"
bedeutet, bitte...

von Michael (Gast)


Lesenswert?

Auf dem Dsiplay erscheint kein Text.

von Michael (Gast)


Lesenswert?

Warum kann ich es so nicht machen?

unsigned char text[] = {"Mo.Di.Mi.Do.Fr.Sa.So."};

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Weil das ein String ist, nicht sieben.

Literaturhinweis:

Kernighan & Ritchie, "Programmieren in C", 2. Ausgabe, Hanser Verlag

von Peter Dannegger (Gast)


Lesenswert?

Oder so:
1
unsigned char text[] = {"MoDiMiDoFrSaSo"};
2
3
    int i = 2;
4
    lcd_printfz(0, 6, "%c%c.", text[2*i], text[2*i+1]);


Peter

von Michael (Gast)


Lesenswert?

Ich kann dieser Funktion leider nur eine Variable ausgeben.
Aber es müsste doch auch so gehen, dass ich z.B. Mo ausgeben kann.
Oder ich müsste meine Funktion umbasteln.Aber wie....


Funktion:
void lcd_printfz(unsigned int x, unsigned int y, unsigned char flash
*format, unsigned char *zahl)
{
 sprintf(zahl_buffer,format,zahl);
 lcd_write_zahl(x, y, zahl_buffer);
}

von Rolf Magnus (Gast)


Lesenswert?

Ich würde den Stringtrenner \0 dazwischenmachen:

unsigned char text[] = "Mo\0Di\0Mi\0Do\0Fr\0Sa\0So"};

lcd_printfz(0, 6, "%s", text[i*3]);

von Mario Grafe (Gast)


Lesenswert?

Kein Problem, ich benutze häufiger solche Felder, schreib einfach:


char *text[] = {"Mo.", "Di",  "Mi.", "Do.", "Fr.", "Sa.",
"So."};

Aufruf dann mit

lcd_printfz(0, 6, "%s", text[i*3]);


Gruß
Mario

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.