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