我正在尝试在AVR显示屏上显示滚动文字。
我有方法show_char,它在R16中显示位于R17的显示位置的char(可用位置是2-7)。
这是我到目前为止所得到的:
; ... includes, etc.
text: .db "SOME INTERESTING TEXT IN UPPER CASE",0 ; string ends with 0
start:
; init stack
ldi r16, 0xFF
out SPL, r16
ldi r16, 0x04
out SPH, r16
; init display
call init_disp
loop: ldi YL, low(2*text)
ldi YH, high(2*text)
rcall scroll
rjmp loop
scroll: movw Z,Y
push YL
push YH
rcall show
rcall delay
pop YH
pop YL
adiw YH:YL,1
movw Z, Y
adiw Z, 5
lpm r16, Z
cpi R16, 0
brne scroll
RET
show: lpm R16,Z+
mov R7,R16
lpm R16,Z+
mov R6,R16
lpm R16,Z+
mov R5,R16
lpm R16,Z+
mov R4,R16
lpm R16,Z+
mov R3,R16
lpm R16,Z+
mov R2,R16
push R16
rcall disp
pop R16
RET
disp: ; display R2-7 on display
mov R16,R2
ldi r17, 2
call show_char
mov R16,R3
ldi r17, 3
call show_char
mov R16,R4
ldi r17, 4
call show_char
mov R16,R5
ldi r17, 5
call show_char
mov R16,R6
ldi r17, 6
call show_char
mov R16,R7
ldi r17, 7
call show_char
RET
delay:
ldi r20, 120
delay00:
dec r20
brne delay00
我是装配新手,但这就是我想出来的。但是,它不能像预期的那样起作用,我不知道为什么。任何帮助将不胜感激。