Hallo, ich versuche gerade über Memory Mapped(8-Bit Interface), also vom 8051er ausgesehn, das Display wie einen externen RAM zu benutzen, Glue Logic halt. Die IDE ist Keil und Programmiersprache C. Hier mein bisheriger Code: http://pastebin.com/0Rx7XX5Y Also Text auf dem Display ausgeben funktioniert schonmal. Ein Tabulator ist 4 Charakters lang, d.h. 1-4, 4-8 etc. Wenn ich schreibe: printf("hallo\t"); dann werden ja die Zeichen einzeln in putChar(http://www.keil.com/support/man/docs/c51/c51_putchar.htm) eingelesen und aufs Display ausgegeben. Wenn aber nach dem 'o'(das wäre jetzt der 5te character) ein \t kommt, also ein tabulator muss ich den cursor auf stelle 8 setzen, weil nach dem o rausschreiben der Cursor auf Position 5 ist und 5 ist zwischen 4 und 8. Wie verschiebe ich nun den Cursor dahin? Wie muss ich das bei \n machen und bei \b(display löschen)? Sorry leute, aber ich stehe da vollkommen an irgendwie. Auch wenn ich mir eine deutsche Beschreibung von dem Display 8-Bit interface und die ganzen instructions des Displays durchlese komme ich nicht weiter. Also ich vermute mal ich muss die Funktion gotoXY verwenden, aber wie soll ich die schreiben, ich brauche da bitte ein bisschen Hilfe. Ich denke an der Programmiersprache C dürfte es nicht wirklich scheitern. Ich kenn mich wie gesagt mit der Hardware nicht aus und auch wenn ich mir die Beschreibung durchlese stehe ich an, darum bitte ich hier um Hilfe. ----- Folgende Infos zum Aufbau des Displays etc. habe ich mir notiert: LCD_GotoXY(Eingabeparameter X, Eingabeparameter Y) => Aufruf IR mit SetDDRAM ADDR setzt den Cursor in eine Zeile und eine Spalte! für x geht 0-19 oder 1...20 Pos auf der Zeile für Y geht 0-3 oder 1...4 Zeilen 1.Zeile: 0 - 19 dez 2.Zeile: 64 - 83 dez 3.Zeile: 20 - 39 dez 4.Zeile: 84 - 103 dez Im H-File für das Unterprogramm LCD_CursorPos(X,Y) => #define LCD_LINE_LENGTH 20 #define LCD_ADDR_LINE1 0 #define LCD_ADDR_LINE2 0x40 #define LCD_ADDR_LINE3 (LCD_ADDR_LINE1 + LCD_LINE_LENGTH) #define LCD_ADDR_LINE4 (LCD_ADDR_LINE2 + LCD_LINE_LENGTH) Für das Cursor setzen! char La[]={LA1,LA2,LA3,LA4} = ARRAY La...jeweils Startwerte der 4 Zeilen Vorteile des Arrays: braucht keine Abfragen damit man das in den Code-Speicher schreiben kann muss man const davor schreiben! z.B.: const char j[] = {La1,La2,La3,La4} geht aber mit einem if oder switch auch. ------ Ich verstehe nicht, was dieses const char j[] = {La1,La2,La3,La4} bringen soll. Und man kann es auch mit if und switch machen? Was ist damit gemeint in Bezug auf was? Bitte helft mir auf die Sprünge. Danke! mfg Gast
Sorry, hab das Datenblatt des Display vergessen: http://pdf1.alldatasheet.com/datasheet-pdf/view/63673/HITACHI/HD44780.html
Also naja falls jetzt so ein \t kommt, dann brauche ich ja die aktuelle Curser Position. Wie bekomme ich die? Durch lesen von CGRAM, DDRAM oder Adress Counter?
Mr Gast schrieb: > Also naja falls jetzt so ein \t kommt, dann brauche ich ja die aktuelle > Curser Position. > > Wie bekomme ich die? zähl doch einfach von anfang an, oder von jedem ClearScreen oder CursorHome konsequent mit.
Ok danke, ich habs fast. y ist im dem Fall die Zeile und x die Position. Tabstops sind ja 0,4,8,12 etc. Aber wenn ich jetzt schreib: "hallo\t". Wenn putChar versucht \t zu schreiben, gehts in die if rein und aktuell beträgt x dann 6 und wie soll ich das dann machen das erkennt wird das da 6 drinnen steht und das ich cursor dann um lines[y]+(x+z) verschieben muss. das z wäre jetzt z.B. die 2, aber wie finde ich den heraus wie viel ich noch zu einem Tabstop brauche? hier der aktuelle code: http://pastebin.com/CtsH6K20
Du willst also das hier?
1 | Vorher Nachher |
2 | 0 4 |
3 | 1 4 |
4 | 2 4 |
5 | 3 4 |
6 | 4 8 |
7 | 5 8 |
8 | ... ... |
Das geht mit:
1 | nachher = vorher + 4 - (vorher % 4); |
Ok, danke aber wenn jetzt vorher = 2 ist: nachher = vorher + 4 - (vorher % 4) nachher = 6 -(rest von 2/4) so kanns ja nciht funktionieren? Hab ich das falsch verstanden? Ander Frage: Gibts eine 2. Möglichkeit wie ich das Problem lösen könnte?
Mr Gast schrieb: > Tabstops sind ja 0,4,8,12 etc. Nö, die sind so, wie Du es im Editor eingestellt hast. Ansonsten ist der Standard 8. Tabs braucht man aber nur bei der Eingabe per Tastatur. Will man auf einem LCD nur was anzeigen, braucht man sie nicht. \b,\t,\n werden daher auf einem LCD nicht unterstützt. Ein LCD in einem, Geräte funktioniert so. Man setzt den Kursor auf die gewünschte Position und gibt den Text aus. Kann der Text kürzer als der vorherige sein, füllt man mit Leerzeichen auf, damit alles überschrieben wird. Eine ganz schlechte Idee ist es, das LCD zu löschen. Das ergibt ein deutliches Flackern, bis der neue Text wieder geschrieben wurde. Wäre ungefähr so, als wenn Dein PC-Bildschirm jedesmal komplett dunkel würde, sobald Du eine Taste drückst. Peter
Wenn ich Set DDRAM machen, setzt das den Cursor dann auch auf diese adresse? Folgendes haben wir ja aufgeschrieben, das ich machen soll: LCD_GotoXY(Eingabeparameter X, Eingabeparameter Y) => Aufruf IR mit SetDDRAM ADDR das SetDDRAM was hat das mit gotoXY zu tun?
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.