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"); }
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?
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!)
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.
Hi @Jim Er erhöht doch den Zeiger. ++ und * haben zwar die gleiche Priorität werden aber von rechts her zusammengefasst. Matthias
@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
Wenns Codevision ist kannst Du doch ganze Strings einfach ausgeben. lcd_putsf("BLABLABLA"); Oder hab ich was übersehen / überlesen ???
Ja wie kann ich jetzt dies auf meinem Display realisieren? Ich stehe auf dem Schlauch!
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"); }
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
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.
Du hast ja auch erst heute zum ersten Mal die Bezeichnung deines Displays veröffentlicht.
... 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.