349 lines
6.4 KiB
NASM
349 lines
6.4 KiB
NASM
lcd_debug:
|
|
|
|
lcd_debug_rx_wait:
|
|
sbis UCSR0A,RXC0 ;wait for first byte
|
|
rjmp lcd_debug_rx_wait
|
|
|
|
|
|
in r17,UDR0
|
|
|
|
lcd_debug_rx_wait1:
|
|
sbis UCSR0A,RXC0 ;wiat for second byte
|
|
rjmp lcd_debug_rx_wait1
|
|
|
|
in r16,UDR0 ;put data on port
|
|
|
|
rcall lcd_send_data
|
|
|
|
|
|
|
|
lcd_debug_TX:
|
|
sbis UCSR0A,UDRE0
|
|
rjmp lcd_debug_TX
|
|
out UDR0,r16
|
|
|
|
|
|
|
|
rjmp lcd_debug
|
|
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
;cursor_address
|
|
|
|
;purpose: calculates memory address of cursor
|
|
;Takes: cus_x,cus_y
|
|
;Give: address in r0:r1
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
cursor_address:
|
|
push r16
|
|
push r17
|
|
|
|
mov r16,cus_y
|
|
ldi r17,chars_line
|
|
mul r17,r16
|
|
clr r17
|
|
add r0,cus_x
|
|
adc r1,r17
|
|
|
|
pop r17
|
|
pop r16
|
|
ret
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
;lcd_set_cursor
|
|
|
|
;purpose: sets cursor memory address
|
|
;Takes: r0,r1 as address
|
|
;Give: na
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
|
|
lcd_set_cursor:
|
|
push r17
|
|
push r16
|
|
|
|
sts vram_address,r0 ;update vram address also
|
|
sts vram_address+1,r1
|
|
|
|
ldi r17,1 ;command
|
|
ldi r16,0x46
|
|
rcall lcd_send_data
|
|
|
|
clr r17
|
|
|
|
mov r16,r0
|
|
rcall lcd_send_data
|
|
|
|
mov r16,r1
|
|
rcall lcd_send_data
|
|
|
|
pop r16
|
|
pop r17
|
|
ret
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
;lcd_print_chr
|
|
|
|
;purpose: print char to screen at current location
|
|
;Takes: r16 as char
|
|
;Give: na
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
lcd_print_chr:
|
|
push r16
|
|
push r17
|
|
push r18
|
|
push ZL
|
|
push ZH
|
|
|
|
|
|
mov r18,r16
|
|
|
|
ldi r17,1 ;send to lcd
|
|
ldi r16,0x42
|
|
rcall lcd_send_data
|
|
|
|
clr r17
|
|
|
|
mov r16,r18
|
|
rcall lcd_send_data
|
|
|
|
lds r16,vram_address
|
|
lds r17,vram_address+1
|
|
|
|
ldi ZL,low(vram_text)
|
|
ldi ZH,high(vram_text)
|
|
|
|
add ZL,r16 ;add on address offset
|
|
adc ZH,r17
|
|
|
|
st Z+,r18 ;auto increment
|
|
|
|
clr r18 ;ind vram address
|
|
inc r16
|
|
adc r17,r18
|
|
|
|
sts vram_address,r16 ;update address
|
|
sts vram_address+1,r17
|
|
|
|
|
|
|
|
pop ZH
|
|
pop ZL
|
|
pop r18
|
|
pop r17
|
|
pop r16
|
|
|
|
ret
|
|
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
;lcd_print_chr_cursor
|
|
|
|
;purpose: print char to screen at current CURSOR location, so changes lcd cursor address unlike one above
|
|
;Takes: r16 as char,cus_x,cusy
|
|
;Give: na
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
lcd_print_chr_cursor:
|
|
push r0
|
|
push r1
|
|
push r16
|
|
push r17
|
|
push r18
|
|
push ZL
|
|
push ZH
|
|
|
|
rcall cursor_address ;calucates address
|
|
rcall lcd_set_cursor
|
|
|
|
mov r18,r16
|
|
|
|
ldi r17,1 ;send to lcd
|
|
ldi r16,0x42
|
|
rcall lcd_send_data
|
|
|
|
clr r17
|
|
|
|
mov r16,r18
|
|
rcall lcd_send_data
|
|
|
|
mov r16,r0
|
|
mov r17,r1
|
|
|
|
ldi ZL,low(vram_text)
|
|
ldi ZH,high(vram_text)
|
|
|
|
add ZL,r16 ;add on address offset
|
|
adc ZH,r17
|
|
|
|
st Z+,r18 ;auto increment
|
|
|
|
clr r18 ;inc vram address
|
|
inc r16
|
|
adc r17,r18
|
|
|
|
sts vram_address,r16 ;update address
|
|
sts vram_address+1,r17
|
|
|
|
|
|
|
|
pop ZH
|
|
pop ZL
|
|
pop r18
|
|
pop r17
|
|
pop r16
|
|
pop r1
|
|
pop r0
|
|
|
|
ret
|
|
|
|
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
;lcd_send_data
|
|
|
|
;purpose: send data for command to lcd
|
|
;Takes: r16 and r17
|
|
;Give: na
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
lcd_send_data:
|
|
push r17
|
|
push r16
|
|
|
|
cbi lcd_pins,LCS
|
|
|
|
;rcall delay_1ms
|
|
|
|
|
|
|
|
sbrs r17,0 ;set up a0
|
|
cbi lcd_pins,A0
|
|
sbrc r17,0
|
|
sbi lcd_pins,A0
|
|
|
|
out lcd_data,r16 ;put data on port
|
|
|
|
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
|
|
|
|
|
|
cbi lcd_pins,WR
|
|
|
|
nop
|
|
nop
|
|
nop
|
|
|
|
sbi lcd_pins,WR
|
|
|
|
nop
|
|
nop
|
|
|
|
;rcall delay_1ms
|
|
sbi lcd_pins,LCS
|
|
|
|
pop r16
|
|
pop r17
|
|
|
|
ret
|
|
|
|
|
|
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
;bias_inc
|
|
|
|
;purpose: increment bias one setp
|
|
;Takes: na
|
|
;Give: na
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
|
|
bias_inc:
|
|
push r16
|
|
|
|
clr r16
|
|
sbr r16,EXP2(bias_adj) | EXP2(bias_ctrl)
|
|
sts bias_port,r16
|
|
|
|
rcall delay_1ms
|
|
|
|
clr r16
|
|
sbr r16, EXP2(bias_ctrl)
|
|
sts bias_port,r16
|
|
|
|
rcall delay_1ms
|
|
|
|
pop r16
|
|
ret
|
|
|
|
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
;bias_reset
|
|
|
|
;purpose: reset LCD bias to midway
|
|
;Takes: na
|
|
;Give: na
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
bias_reset:
|
|
push r16
|
|
|
|
clr r16
|
|
sbr r16,EXP2(bias_adj) | EXP2(bias_ctrl)
|
|
sts bias_port,r16
|
|
|
|
rcall delay_1ms
|
|
|
|
clr r16
|
|
sbr r16, EXP2(bias_adj)
|
|
sts bias_port,r16
|
|
|
|
rcall delay_1ms
|
|
|
|
clr r16
|
|
sbr r16,EXP2(bias_adj) | EXP2(bias_ctrl)
|
|
sts bias_port,r16
|
|
|
|
|
|
rcall delay_1ms
|
|
|
|
clr r16
|
|
sbr r16, EXP2(bias_ctrl)
|
|
sts bias_port,r16
|
|
|
|
rcall delay_1ms
|
|
|
|
pop r16
|
|
ret
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
;lcd_reset
|
|
|
|
;purpose: reset LCD
|
|
;Takes: na
|
|
;Give: na
|
|
;----------------------------------------------------------------------
|
|
;----------------------------------------------------------------------
|
|
lcd_reset:
|
|
rcall delay_1ms
|
|
cbi PORTD,7
|
|
rcall delay_1ms
|
|
sbi PORTD,7
|
|
rcall delay_1ms
|
|
rcall delay_1ms
|
|
rcall delay_1ms
|
|
rcall delay_1ms
|
|
rcall delay_1ms
|
|
ret
|
|
|
|
|
|
|