Files
2023-03-13 08:36:51 +00:00

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