Texte auf LCD

Gast #70286
Lesenswert?

Hallo,

ich möchte gern Texte auf dem LCD Display darstellen!
Habe folgenden Code abgeschrieben doch leider ist nur die obere Zeile
zu sehen wenn man Sie einstellt, oder gar nichts wenn man die anderen
Texte ansteuert. Vielleicht hat jemand einen Tip oder ein Programm mit
dem es funktioniert.

Vielen Dank im vorraus!!!

Gruß

Jürgen


MEN1:  .db "Hallo Welt !!!!!"    ;MR=0 !!
MEN2:  .db "Menue 21C  Taste"
MEN3:  .db "Licht1    Licht2"

ldi temp3,1               ;Wählt 2. Text aus
rcall lcd_init     ;Display initialisieren
rcall lcd_clear    ;Display löschen
rcall M_TEXT            ;Schreibt 1. Text auf LCD

ldi temp3,2              ;Wählt 3. Text aus
rcall lcd_init     ;Display initialisieren
rcall lcd_clear    ;Display löschen
rcall M_TEXT            ;Schreibt 1. Text auf LCD



M_TEXT:        ; call ldi MR,0 <- first M_Text
set          ; T = 0 > write data to LCD
ldi ZH,high(MEN1<<1)
ldi ZL,low(MEN1<<1)
ldi temp4,(ROW)  ; ROW # of signs in ROW
mov temp2,temp3
tst temp2
breq M2        ; first Menue ?

M1:
adiw ZL,1
dec temp2
brne M1
ldi temp4,(ROW)
dec temp2
brne M1
ldi temp4,(ROW)

M2:          ; now printout all signs
lpm
Gast #70287
Lesenswert?

Auweh, von Assembler bekomme ich Kopfweh!
lcd_init braucht man nur einmal machen. Ich verwende gestohlene LCD
Routinen, dabei ist mir aufgefallen, dass lcd_clear den Cursor nicht an
die erste Stelle setzt, also solltest du das berücksichtigen. Stelle
ev. das Display so um, dass es einen automatisch in die nächste Zeile
geht, du musst dem Display auch sagen, dass es 2 Zeilen hat (hab ich
bei mir in lcd.h eingestellt).
Gast #70288
Lesenswert?

Tja, das Problem mit dem Kopfweh habe ich bei C... g
Eine LCD.H gibts nicht bei Assembler. Man muß die Programmierung des
LCD komplett von Hand machen, hat aber den Vorteil, daß man hinterher
wirklich weiß, wie das Display exakt angesteuert wird.
@Jürgen: Ein paar Infos brauchts aber schon noch, manche Displays
lassen sich nur mit dem Setzen des Adresspointers auf die zweite Zeile
setzen. Hierzu im Datenblatt des LCD nachschauen.
Gast #70289
Lesenswert?

Abschreiben ??
Kopieren langt doch eigentlich.. Geht auch schneller

Fehler:
Vor dem schreiben einer Zeile muss der Cursor neu gesetzt werden.
Die Zeilen haben bei einem 16x2
N I C H T ! einen Abstand von 16 Zeichen
D.H. weitere Zeichen werden ins nicht sichtbare RAM geschrieben


clt;
ldi To_LCD_R,LCD_POS1
rcall LCD_WRITE         ;
#####################################################
Aufruf SUB LCD_WRITE -> Setzt Cursor auf Zeile 1 Feld
#####################################################
ldi MR,0                ;Wählt 1. Text aus
rcall M_TEXT            ;Schreibt 1. Text auf LCD

usw....


Phagsae
Gast #70290
Lesenswert?

Hi,

so wie dein lcd_init und lcd_clear aufruf aussieht, gehe ich einfach
mal davon aus. Das Du eine fertige Routine hier aus dem Forum benutzt.
Demnach müsstest du ja auch lcd_data zur ausgabe eines zeichens haben.
und lcd_command für die ausgabe eines befehls...

warum setzt du den cursor nicht direkt auf die 2. Zeile ?

ldi temp1, 0xC0
rcall lcd_command

mit andern worten setze Cursor auf Position Hex 40.

Gruß Dennis
Gast #70291
Lesenswert?

Hallo,

vielen Dank erst einmal für Eure Antworten. Ist immer toll wenn man
nicht mehr weiter weiß das Forum fragen kann!! Super Einrichtung!
Nunden eigentlich geht es mir gar nicht um die 2 Zeile das habe ich
schon in einem anderen Programm hin bekommen. Ich kann den 2 oder 3
Text nicht an Pos 1 bekommen jetzt erscheint dann gar nichts. Wie
schreibt Ihr so Rotinen?

Vielen Dank im vorraus

Gruß

Jürgen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren