; #define f_cpu 1000000 ; #define lcd_clk_bit 0 ; #define lcd_dat_bit 1 ; #define lcd_ena_bit 2 ; #define lcd_clk_port "B" ; #define lcd_dat_port "B" ; #define lcd_ena_port "B" lcd_zeit: ; 2 Millisekunden push r16 push r17 ldi r16,f_cpu/375000 lcd_zeit1: ldi r17,0 lcd_zeit2: dec r17 brne lcd_zeit2 dec r16 brne lcd_zeit1 pop r16 pop r17 ret lcd_home: ldi r16,0x80 ;set ddram address to 0 lcd_wrcom: clc rjmp lcd_wr lcd_wrdat: sec lcd_wr: cbi port{lcd_ena_port},lcd_ena_bit cbi port{lcd_clk_port},lcd_clk_bit push r17 push r16 ldi r17,8 lcd_wr1: rol r16 brcs lcd_wr_true1 cbi port{lcd_dat_port},lcd_dat_bit rjmp lcd_wr_false1 lcd_wr_true1: sbi port{lcd_dat_port},lcd_dat_bit lcd_wr_false1: sbi port{lcd_clk_port},lcd_clk_bit ;Impuls auf Clk cbi port{lcd_clk_port},lcd_clk_bit dec r17 brne lcd_wr1 rol r16 brcs lcd_wr_true2 cbi port{lcd_dat_port},lcd_dat_bit rjmp lcd_wr_false2 lcd_wr_true2: sbi port{lcd_dat_port},lcd_dat_bit lcd_wr_false2: sbi port{lcd_ena_port},lcd_ena_bit ;Impuls auf Enable cbi port{lcd_ena_port},lcd_ena_bit ;kleine Zeitschleife 50 µS ldi r17,f_cpu/66000 lcd_loop: dec r17 brne lcd_loop cbi port{lcd_dat_port},lcd_dat_bit pop r16 pop r17 ret lcd_init: sbi ddr{lcd_ena_port},lcd_ena_bit sbi ddr{lcd_clk_port},lcd_clk_bit sbi ddr{lcd_dat_port},lcd_dat_bit ldi r16,0b00111000 ;8Bit,2Zeilen,5x7 pixel rcall lcd_wrcom rcall lcd_zeit ldi r16,0b00111000 ;8Bit,2Zeilen,5x7 pixel rcall lcd_wrcom rcall lcd_zeit ldi r16,0b00111000 ;8Bit,2Zeilen,5x7 pixel rcall lcd_wrcom rcall lcd_zeit ldi r16,0b00111011 ;8Bit,2Zeilen,5x7 pixel rcall lcd_wrcom rcall lcd_zeit ldi r16,0b00000100 ;Dislplay aus rcall lcd_wrcom ldi r16,0b00000001 ;Display clear rcall lcd_wrcom rcall lcd_zeit ldi r16,0b00000110 ;Cursor rechts bei Eintrag rcall lcd_wrcom ldi r16,0b00001110 ;Display und Cursor ein rcall lcd_wrcom rcall lcd_zeit ret lcd_cursoff: macro ldi r16,0b00001100 rcall lcd_wrcom rcall lcd_zeit endm obyte: swap r16 rcall onible swap r16 onible: push r16 andi r16,0x0f cpi r16,10 brcs onible1 subi r16,'9'-'A'+1 onible1: subi r16,-'0' rcall lcd_wrdat pop r16 ret lcd_gotoxy: macro col,row push r16 ldi r16,0x80+(64*row)+col rcall lcd_wrcom pop r16 endm