init_hardware: ;--setup port directions-- ;bias ldi r16,EXP2(bias_ctrl) sts bias_port,r16 ldi r16,0x18 sts bias_port-1,r16 ;lcd ldi r16,255 ;data as output out lcd_data-1,r16 ldi r16,0 out lcd_data,r16 sbi lcd_pins-1,A0 sbi lcd_pins-1,WR sbi lcd_pins-1,RD sbi lcd_pins-1,LCS sbi DDRD,7 ; sbi lcd_pins-1,LCD_RST sbi PORTD,7 cbi lcd_pins,LCD_RST sbi lcd_pins,A0 sbi lcd_pins,WR sbi lcd_pins,RD cbi lcd_pins,LCS ;external memory ldi r16,128+64 out MCUCR,r16 ldi r16,1 sts XMCRA,r16 ;wait states ;external memory hack ldi r16, 0xFF ;make top address output if XMMset out DDRC, r16 ldi r16, 0x00 ;Make sure its zero! out PORTC, r16 ;setup Rs232 ldi r16,0x00 out UCSR0B,r16 out UCSR0A,r16 ldi r16,0x98 ;enable tx,rx and rxint 0x98 (0x18 no int) out UCSR0B,r16 ldi r16,16 ;56000bps ; ldi r16,103 ;9600bps out UBRR0L,r16 ;---INITALISE VARIABLE-- clr buff_tail ;points to next char to read clr buff_head ;points to last place stored in buffer,so (head=tail)-> empty, (tail-head = 1)->full clr cus_x clr cus_y clr r16 sts vram_address,r16 sts vram_address+1,r16 ;------------------------ rcall delay_1ms rcall lcd_reset rcall delay_1ms rcall bias_reset rcall delay_1ms cbi lcd_pins,LCS rcall delay_1ms sbi lcd_pins,LCS ldi r16,31 bias_loop: rcall bias_inc dec r16 brne bias_loop rcall lcd_init rcall clear_text_ram ret clear_text_ram: push r16 push r17 push r18 push r19 push ZL push ZH ldi ZL,low(vram_text) ldi ZH,high(vram_text) ldi r17,1 ;command ldi r16,0x42 rcall lcd_send_data clr r17 ldi r19,lines_screen clear_text_ram_l1: ldi r18,chars_line clear_text_ram_l2: ldi r16,0x20 rcall lcd_send_data ;clear st Z+,r17 ;clear internal vram also dec r18 brne clear_text_ram_l2 dec r19 brne clear_text_ram_l1 ;cursor 0,0 ldi r17,1 ;command ldi r16,0x46 rcall lcd_send_data clr r17 ldi r16,0x00 rcall lcd_send_data ldi r16,0x00 rcall lcd_send_data pop ZH pop ZL pop r19 pop r18 pop r17 pop r16 ret lcd_init: ;SYSTEM SET ldi r17,1 ;command ldi r16,0x40 rcall lcd_send_data clr r17 ldi r16,0x31 ;use CGRAM rcall lcd_send_data ldi r16,0x87 rcall lcd_send_data ldi r16,0x07 rcall lcd_send_data ldi r16,0x27 rcall lcd_send_data ldi r16,0x2F rcall lcd_send_data ldi r16,0xC7 rcall lcd_send_data ldi r16,0x50 ;make a line 80 chars long (displays 40) rcall lcd_send_data ldi r16,0x00 rcall lcd_send_data ;CHARACTER RAM ADDR ldi r17,1 ;command ldi r16,0x5C rcall lcd_send_data clr r17 ldi r16,0x00 rcall lcd_send_data ldi r16,0xf0 rcall lcd_send_data ;SCROLL ldi r17,1 ;command ldi r16,0x44 rcall lcd_send_data clr r17 ldi r16,0x00 rcall lcd_send_data ldi r16,0x00 rcall lcd_send_data ldi r16,0xc7 rcall lcd_send_data ldi r16,0x00 rcall lcd_send_data ldi r16,0x05 rcall lcd_send_data ldi r16,0xc7 rcall lcd_send_data ldi r16,0x00 rcall lcd_send_data ldi r16,0x00 rcall lcd_send_data ldi r16,0x00 rcall lcd_send_data ldi r16,0x00 rcall lcd_send_data ;DISPLAY OFFSET ldi r17,1 ;command ldi r16,0x5a rcall lcd_send_data clr r17 ldi r16,0x00 rcall lcd_send_data ;CUSOR POSITION 0,0 ldi r17,1 ;command ldi r16,0x46 rcall lcd_send_data clr r17 ldi r16,0x00 rcall lcd_send_data ldi r16,0x00 rcall lcd_send_data ;OVERLAY, TEXT + GRAPHICS ldi r17,1 ;command ldi r16,0x5b rcall lcd_send_data clr r17 ldi r16,0x00 rcall lcd_send_data ;CURSOR TYPE (BLOCK 8X8) ldi r17,1 ;command ldi r16,0x5D rcall lcd_send_data clr r17 ldi r16,0x07 rcall lcd_send_data ldi r16,0x87 rcall lcd_send_data ;CURSOR DIR ldi r17,1 ;command ldi r16,0x4C rcall lcd_send_data ;DISPLAY ON ldi r17,1 ;command ldi r16,0x59 rcall lcd_send_data clr r17 ldi r16,0x06 rcall lcd_send_data ;----- RET