mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit C-Funktion!!!


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich will mir dieser Funktion Text auf das Display bringen.
Einzelne Zeichen kann ich ohne Problem am Display anzeigen lassen.
Nur wenn ich zum Beispiel zweit Wörte "Hallo Frank" auf das Display
ausgeben will, dann klappt es nicht. Ich muss immer erst das Feld
auserhalb der MAIN festlegen. Was muss ich tun damit ich es so machen
kann wie unten (Siehe unten "void main(void)"?

void lcd_write_string_xy(unsigned int x, unsigned int y, char *text)
// write String an pos x, y
{
  unsigned int address;

  address = ((unsigned int)y * 22) + x + 0x1000;

  out(0x24,address & 0xff,address >> 8);
  while (*text)
   {
    out(0xC0,0,(*text++)-0x20);
   }
}

void main(void)
{
 lcd_write_string_xy(3,3,"Hallo Frank");
}

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube, für so etwas musst du deine Funktion so schreiben, dass sie
variable Parameter(übergaben) unterstützt. Bei printf geht das doch
genauso, wie du es willst, oder? Und printf ist meines Wissens eine
Funktion mit variabler Parameterübergabe.

Gruß Ralf

PS: Ist das ein Grafikdisplay, das du ansprechen willst?

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wär's mal mit einer brauchbaren Fehlerbeschreibung?
- welches Display
- welcher Compiler
- Programmcode der nicht funktioniert
- Programmcode der funktioniert (aber bitte in den Anhang!)

Autor: Jim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SChau mal hierhin:

"out(0xC0,0,(*text++)-0x20);"

Probier es mal mit "text++", Du willst ja den Zeiger erhöhen und
nicht den Inhalt des Speichers.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ralf!

Und wie soll das gehen mit printf?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

@Jim
Er erhöht doch den Zeiger. ++ und * haben zwar die gleiche Priorität
werden aber von rechts her zusammengefasst.

Matthias

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Frank:

Das mit printf war nur als Beispiel gedacht. Bei meinem KEIL C51 ist es
allerdings so (soweit ich weiss), dass die printf-Funktion die Funktion
Putchar verwendet, und diese kann man frei ändern...
D.h. wenn ich ein Display mit printf ansprechen wollte, müsste ich
theoretisch nur die Putchar-Funktion so umbauen, dass sie statt der
seriellen Schnittstelle das Display anspricht.
Vielleicht funktioniert das bei dir auch!!!

Gruß Ralf

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm...mir ist das noch immer nicht klar!
putchar?

Ich verwende den CodeVision AVR.

Autor: ToniT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenns Codevision ist kannst Du doch ganze Strings einfach ausgeben.

 lcd_putsf("BLABLABLA");

Oder hab ich was übersehen / überlesen ???

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja wie kann ich jetzt dies auf meinem Display realisieren?
Ich stehe auf dem Schlauch!

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie muss ich dies ändern, damit ich den Text so eingeben kann wie unten
beschrieben?

void lcd_write_string_xy(unsigned int x, unsigned int y, char *text)

// write String an pos x, y
{
  unsigned int address;

  address = ((unsigned int)y * 22) + x + 0x1000;

  out(0x24,address & 0xff,address >> 8);
  while (*text)
   {
    out(0xC0,0,(*text++)-0x20);
   }
}

void main(void)
{
 lcd_write_string_xy(3,3,"Hallo Frank");
}

Autor: Kai M. Tegtmeier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Well, machst Du so:

void lcd_write_string_xy(char x,char y,char flash *text)
{
  lcd_gotoxy(x,y);
  lcd_putsf(text);
}

void main(void)
{
  lcd_write_string_xy(3,3,"Hallo");
}

Nicht vergessen, im Programmkopf #include <lcd.h> anzugeben und das
Display vorher zu initialisieren. Steht ja alles in der
Codevision-Hilfe genau beschrieben.

Diese Funktion geht nur für Texte, die fest im Flash abgelegt sind.
lcd_write_string_xy(3,3,testtext) kannst Du damit nicht ausgeben.
Wenn Du das machen willst, müßtest Du AFAIK das "flash" in der
Funktionsdeklaration weglassen und die Zeile lcd_putsf(...) in lcd_puts
(...) umändern.

Vielleicht hilft Dir das weiter?!?

Gruß
Kai Markus

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich verwende nicht das Display 4x20, sondern ein Grafik LCD t6963.
Ich brauche nur ein kleines Beispiel wo ich es dann auch verstehen
kann.
Bis jetzt konnte mir keiner so richtig Helfen.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast ja auch erst heute zum ersten Mal die Bezeichnung deines
Displays veröffentlicht.

Autor: Kai M. Tegtmeier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... so ist es. Wenn Dein einziges Problem darin besteht, daß Du den Text
immer außerhalb der Main vordefinieren mußt, dann mußt Du einfach nur in
die Funktionsdeklaration das Wort flash einfügen (siehe meinen
Quelltext).

Das hat den Hintergrund, daß Codevision Zeichenketten, die in
Anführungsstrichen stehen, automatisch als konstant betrachtet (weiß
der Himmel, warum) und nicht im SRAM, sondern im Flash-ROM abspeichert.
Deshalb muß die Kopfzeile bei Dir so aussehen:

void lcd_write_string_xy(unsigned int x, unsigned int y, char flash
*text)

Was die Ansteuerung des Displays angeht, kann ich Dir leider nicht
weiterhelfen.

KMT

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.