Forum: Mikrocontroller und Digitale Elektronik Texte auf LCD


von Jürgen (Gast)


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

von Fritz Ganter (Gast)


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).

von thkais (Gast)


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.

von phagsae (Gast)


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

von Dennis Brücke (Gast)


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

von Jürgen (Gast)


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

von Dennis Brücke (Gast)


Lesenswert?

Hallo Jürgen,

hast du meine LCD routinen bekommen ?

Gruß Dennis

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
Noch kein Account? Hier anmelden.