;******************************************************************************** ; Überträgt ein selbstdefiniertes Zeichen in ein LCD. Es können 8 eigene Zeichen ; definiert werden. Es können auch zur Laufzeit Zeichen erstellt werden, um mehr ; als 8 Zeichen zur Verfügung zu haben. ;******************************************************************************** NewChar: push temp1 push temp2 push temp3 push zl push zh ldi temp1, 0b01000000 ; Character-RAM-Adresse setzen ldi temp3, 0b00000011 ; Zeichen-Nummer (0...7) hier: 3. Zeichen lsl temp3 ; bits 3x nach links schieben (x8) lsl temp3 lsl temp3 or temp1, temp3 ; -> fertige Adresse aus Befehl und Zeichen rcall lcd_command ldi temp2, 7 ; Zähler (= Zeile eines Zeichens von oben) ldi zl, LOW(tabNewChar*2) ; Zeiger auf Sonderzeichen-Tabelle ldi zh, HIGH(tabNewChar*2) NC1: lpm temp1,z+ ; Bitmuster für jede Zeile holen rcall lcd_data dec temp2 tst temp2 ; 8 Zeilen ausgegeben? brne NC1 ; ...nein -> nächste Zeile holen ldi temp1, 0b10000000 ; ...ja -> Abschluss mit Befehl "Display rcall lcd_command ; RAM-Adress-Set" ldi temp2, 4 ; Noch etwas warten rcall delay5ms dec temp2 brne pc-2 pop zh pop zl pop temp3 pop temp2 pop temp1 ret ;--------------------------------------------------------------------------- ; Tabellen für eigene Sonderzeichen im LCD tabNewChar: ;Zeile 1 2 3 4 5 6 7 8 .db 4,14,31, 4,28, 0, 0, 0