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
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
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?