www.mikrocontroller.net

Forum: Projekte & Code textausgabe


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
muss 9 textzeilen auf einem 2 zeiligen display ausgeben, wie mach ich 
das am besten?

bis jetzt sind die textzeilen als
#define  zeile1  "Willkommen"
#define zeile2  "beim Projekt der"
....
...

definiert, mit jedem tastendruck wird die erste zeile rausgeworfen die 
zweite zeile wird raufgeschoben und die dritte zeile wird in der zweite 
zeile angezeigt beim nächsten tastdruck wird gleich vorgegangen 1. zeile 
weg zweite zeile raufschieben nächste zeile als zweite zeile einblenden,
so schön so gut, bis jetzt mach ich das mit einer state-machine:
switch(pressedkey)
{
  case 0:
    show(0,0,zeile1);
    show(0,1,zeile2);
    break;
  case 1:
    show(0,0,zeile2);
    show(0,1,zeile1);
    break;
  und so weiter
}
die show funktion lautet wie folgt: show(uchar x, uchar y, uchar* 
string), aber das ist ja keine schöne lösung, gibt es keine möglichkeit 
je nachdem wie pressedkey aussieht die richtigen #defines zu nehmen und 
in zwei char reinzukopieren und dann mit auszugeben
    show(0,0,string1);
    show(0,1,string2);

???

Autor: Sascha Weitkunat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
const unsigned char strings[9][] = {"Willkommen", "beim Projekt der", 
... };

In deinem Fall sind die defines ziemlich ünglücklich. Denn unter 
Umständen includet der Compiler an jeder Stelle wo du dein define 
verwendest den String und er sitzt somit mehrmals im Flash. Mit einem 
Array (kannst du ja per _attribute_ auch in den Flash legen) hast du 
beide Probleme gelöst, das Durchscrollen sowie die Codeoptimierung.

for (i = 0; i < 9; i++)
{
  show(0, 0, strings[i]);
  show(0, 1, strings[i+1]);

  warte_bis_der_benutzer_deine_taste_gedrueckt_hat();
}

Um das Ende musst du dich nun selbst kümmern ;) Denn wenn beim 9. 
Schleifendurchlauf i gleich 8 ist, ergibt 8+1 eine 9 welche wiederum 
ausserhalb des Arrays liegt und Fehler verursachen könnte. Desweiteren 
kann ich nicht wissen ob der Text endlos oder nur einmal loopen soll.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
works perfect, thanks a lot

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.