added ili9341_WriteCharacterAt.
This commit is contained in:
@@ -24,6 +24,9 @@
|
||||
|
||||
.dseg
|
||||
|
||||
ILI9341_foregroundColor: .byte 2
|
||||
ILI9341_backgroundColor: .byte 2
|
||||
ILI9341_buffer: .byte 128
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
@@ -71,6 +74,39 @@ ILI9341_Init:
|
||||
ldi r16, 0b11100000 ; green
|
||||
rcall ili9341Test4
|
||||
|
||||
; set foreground color
|
||||
ldi r16, 0b11100000 ; green
|
||||
mov r2, r16
|
||||
ldi r16, 0b00000111 ; green
|
||||
mov r3, r16
|
||||
|
||||
; set background color
|
||||
ldi r16, 0b11111111 ; white
|
||||
mov r0, r16
|
||||
mov r1, r16
|
||||
|
||||
; set Xpos
|
||||
ldi r18, LOW(100)
|
||||
ldi r19, LOW(100)
|
||||
|
||||
; setYpos
|
||||
ldi r20, LOW(150)
|
||||
ldi r21, HIGH(150)
|
||||
|
||||
; set font pos
|
||||
ldi zl, LOW(font8x8*2)
|
||||
ldi zh, HIGH(font8x8*2)
|
||||
|
||||
; set buffer pos
|
||||
; ldi xl, LOW(ILI9341_buffer)
|
||||
; ldi xh, HIGH(ILI9341_buffer)
|
||||
ldi xl, LOW(0x260)
|
||||
ldi xh, HIGH(0x260)
|
||||
|
||||
; set character
|
||||
ldi r16, 65
|
||||
|
||||
rcall ili9341_WriteCharacterAt
|
||||
|
||||
sec
|
||||
ret
|
||||
@@ -325,6 +361,109 @@ ili9341SetAddressWindow:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341_WriteCharacterAt
|
||||
|
||||
; @param R16 character to write
|
||||
; @param r19:r18 X pos
|
||||
; @param r21:r20 Y pos
|
||||
; @param R01:R00 background color
|
||||
; @param R03:R02 foreground color
|
||||
; @param X pointer to font
|
||||
; @param Y pointer to RAM to store data to
|
||||
; @clobbers
|
||||
|
||||
ili9341_WriteCharacterAt:
|
||||
push xl
|
||||
push xh
|
||||
rcall ili9341WriteCharacterFromFont8x8 ; (r17, r24, r25, x, z)
|
||||
pop xh
|
||||
pop xl
|
||||
ldi r17, 7
|
||||
; calc X1
|
||||
mov r22, r18
|
||||
mov r23, r19
|
||||
add r22, r17
|
||||
adc r23, r17
|
||||
sub r23, r17
|
||||
; calc Y1
|
||||
mov r24, r20
|
||||
mov r25, r21
|
||||
add r24, r17
|
||||
adc r25, r17
|
||||
sub r25, r17
|
||||
|
||||
rcall ili9341BeginSpi ; (r16, r17)
|
||||
rcall ili9341SetAddressWindow ; (R16)
|
||||
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
||||
rcall ili9341SendCommand
|
||||
ldi r17, 64 ; 8x8
|
||||
ili9341_WriteCharacterAt_loop:
|
||||
ld r18, X+
|
||||
ld r19, X+
|
||||
rcall ili9341Send16BitData
|
||||
dec r17
|
||||
brne ili9341_WriteCharacterAt_loop
|
||||
rcall ili9341EndSpi
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341WriteCharacterFromFont8x8
|
||||
|
||||
; @param R16 character to write
|
||||
; @param R01:R00 background color
|
||||
; @param R03:R02 foreground color
|
||||
; @param Z pointer to font
|
||||
; @param X pointer to RAM to store data to
|
||||
; @clobbers r17, r24, r25, x, z
|
||||
|
||||
ili9341WriteCharacterFromFont8x8:
|
||||
mov r24, r16
|
||||
lpm r17, Z+ ; first char num
|
||||
sub r24, r17
|
||||
brcc ili9341WriteCharacterFromFont8x8_firstValueOkay
|
||||
clr r24 ; use first char
|
||||
adiw zh:zl, 1
|
||||
rjmp ili9341WriteCharacterFromFont8x8_transform ; skip next test
|
||||
ili9341WriteCharacterFromFont8x8_firstValueOkay:
|
||||
lpm r17, Z+
|
||||
cp r24, r17
|
||||
brcc ili9341WriteCharacterFromFont8x8_transform ; use first char
|
||||
ili9341WriteCharacterFromFont8x8_gotPos:
|
||||
clr r25
|
||||
lsl r24 ; R16x8
|
||||
rol r25
|
||||
lsl r24
|
||||
rol r25
|
||||
lsl r24
|
||||
rol r25
|
||||
add zl, r24
|
||||
adc zh, r25
|
||||
ili9341WriteCharacterFromFont8x8_transform:
|
||||
ldi r25, 8 ; 8 bytes
|
||||
ili9341WriteCharacterFromFont8x8_loop1:
|
||||
ldi r24, 8 ; 8 bits
|
||||
lpm r17, Z+
|
||||
ili9341WriteCharacterFromFont8x8_loop2:
|
||||
lsr r17
|
||||
brcs ili9341WriteCharacterFromFont8x8_writeForeground
|
||||
st X+, r0
|
||||
st X+, r1
|
||||
rjmp ili9341WriteCharacterFromFont8x8_loop2end
|
||||
ili9341WriteCharacterFromFont8x8_writeForeground:
|
||||
st X+, r2
|
||||
st X+, r3
|
||||
ili9341WriteCharacterFromFont8x8_loop2end:
|
||||
dec r24
|
||||
brne ili9341WriteCharacterFromFont8x8_loop2
|
||||
dec r25
|
||||
brne ili9341WriteCharacterFromFont8x8_loop1
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
ili9341SendCommand:
|
||||
@@ -353,9 +492,9 @@ ili9341Send16BitData:
|
||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high
|
||||
mov r16, r19
|
||||
rcall SPIHW_MasterTransfer
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
mov r16, r18
|
||||
rcall SPIHW_MasterTransfer
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
ret
|
||||
; @end
|
||||
@@ -495,6 +634,15 @@ l_loopW_%:
|
||||
|
||||
ili9341Test2:
|
||||
M_ILI9341_FILL_RECT 10, 20, 70, 100
|
||||
ldi r18, LOW(10) ; X
|
||||
ldi r19, HIGH(10)
|
||||
ldi r20, LOW(20) ; Y
|
||||
ldi r21, HIGH(20)
|
||||
ldi r22, LOW(70) ; W
|
||||
ldi r23, HIGH(70)
|
||||
ldi r24, LOW(100) ; H
|
||||
ldi r25, HIGH(100)
|
||||
rjmp ILI9341_FillRect
|
||||
ret
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user