LCD_init: rcall wait5ms rcall wait5ms sbi DDRD,2 ;LCD RS = OUT sbi DDRD,3 ;LCD E = OUT sbi DDRD,4 ;LCD D4 = OUT sbi DDRD,5 ;LCD D5 = OUT sbi DDRD,6 ;LCD D6 = OUT sbi DDRD,7 ;LCD D7 = OUT cbi PORTD,2 ;LDC RS = Low ;warte bis PowerUp ldi r18,20 powerup: rcall wait5ms dec r18 brne powerup ; Power-Up Wartezyklus min 30 ms ; sende init 1 ldi r16, 0b00100000 ; 4 Bit Modus aktivieren out PORTD, r16 rcall LCD_enable ; Enable-Impuls rcall wait5ms ldi r16, 0b00101000 rcall LCD_cmd ; Function Set 4 Bit, 2 Zeilen, 5x7 rcall LCD_off rcall LCD_clear ldi r16, 0x06 rcall LCD_cmd ; Entry Mode Set, increase+shifted rcall LCD_on ret ;--------------------------------------------------------------------------- LCD_data: ldi r18,0b0000100 ;RS = hi rjmp LCD_out ;--------------------------------------------------------------------------- LCD_cmd: ldi r18,0b0000000 ;RS = lo LCD_out: mov r17, r16 swap r17 andi r16, 0b11110000 or r16,r18 andi r17, 0b11110000 or r17,r18 out PORTD, r16 rcall LCD_enable out PORTD, r17 rcall LCD_enable rcall wait5ms ret ;--------------------------------------------------------------------------- LCD_enable: sbi PORTD, 3 ; Enable high nop ; kurz warten nop nop cbi PORTD, 3 ; Enable wieder low ret ;--------------------------------------------------------------------------- LCD_clear: ldi r16, 0b00000001 ; Display löschen rcall LCD_cmd rcall wait5ms ret ;--------------------------------------------------------------------------- LCD_off: ldi r16, 0b00001000 rcall LCD_cmd rcall wait5ms ret ;--------------------------------------------------------------------------- LCD_on: ldi r16, 0x0E rcall LCD_cmd rcall wait5ms ret ;--------------------------------------------------------------------------- LCD_line1: ldi r16, 0b10000000 rcall LCD_cmd rcall wait5ms ret LCD_line2: ldi r16, 0b11000000 rcall LCD_cmd rcall wait5ms ret ;--------------------------------------------------------------------------- LCD_goto: ori r16, 0b10000000 rcall LCD_cmd rcall wait5ms ret