📄 sl08.asm
字号:
;*********************************************
;*LED数码管上显示8字循环。
;*请你修改程序,改变字形,改变移位方向,改变移位速度等。
;*AT90S8515 8MHz
;*双龙电子 www.sl.com.cn
;* liqing 2002.05.08
;*********************************************
.include "8515def.inc"
.org $000
rjmp sl08
.org $020
sl08:
ldi r17,$02 ;栈指针置初值SP=0x025F
ldi r16,$5f
out sph,r17
out spl,r16
ldi r17,$ff
ldi r16,$f0
out ddrb,r17 ;PB口作字线
out portb,r17
out ddrd,r16 ;PD7~PD4作位线
out portd,r17
ldi r16,$0f
out ddrc,r16 ;PC口用于键盘检测
out portc,r17
ldi r18,8 ;欲显示的字符8
ldi r21,$7f ;数码管位线初值
loop0:
rcall jiance ;调用键盘检测程序
ldi zh,high(tab*2)
ldi zl,low(tab*2)
add zl,r18
lpm ;查出七段码
mov r19,r0
out portb,r19 ;字线输出
out portd,r21 ;位线输出
sec ;进位位置 1
ror r21 ;循环位线
cpi r21,$f7 ;控制位线的范围
brne loop1
ldi r21,$7f ;重置位线初值
loop1: ldi r22,$02
rcall delay
rjmp loop0
delay:
t1: ldi r23,20
t2: ldi r24,200
t3: ldi r25,200
t4: dec r25
brne t4
dec r24
brne t3
dec r23
brne t2
dec r22
brne t1
ret
jiance:
ldi r17,$fe ;让PC0输出为0
out portc,r17
rjmp jiance0 ;检测是否有键按下
jiance11:
ldi r17,$fd ;让PC1输出为0
out portc,r17
rjmp jiance1
jiance22:
ldi r17,$fb ;让PC1输出为0
out portc,r17
rjmp jiance2
jiance33:
ldi r17,$f7 ;让PC1输出为0
out portc,r17
rjmp jiance3
ret ;无键按下
jiance0:
in r16,pinc
sbrs r16,7 ;检测键“F”是否按下
rcall jianf ;按下则执行“F”键的程序
sbrs r16,6 ;检测键“E”是否按下
rcall jiane ;按下则执行“E”键的程序
sbrs r16,5 ;检测键“D”是否按下
rcall jiand ;按下则执行“D”键的程序
sbrs r16,4 ;检测键“C”是否按下
rcall jianc ;按下则执行“C”键的程序
rjmp jiance11
jiance1:
in r16,pinc
sbrs r16,7 ;检测“B”键是否按下
rcall jianb ;按下则执行“B”键的程序
sbrs r16,6 ;检测“A”键是否按下
rcall jiana ;按下则执行“A”键的程序
sbrs r16,5 ;检测键“9”是否按下
rcall jian9
sbrs r16,4
rcall jian8 ;检测键“8”是否按下
rjmp jiance22
jiance2:
in r16,pinc
sbrs r16,7 ;检测键“7”是否按下
rcall jian7
sbrs r16,6 ;检测键“6”是否按下
rcall jian6
sbrs r16,5 ;检测键“5”是否按下
rcall jian5
sbrs r16,4 ;检测键“4”是否按下
rcall jian4
rjmp jiance33
jiance3:
in r16,pinc
sbrs r16,7 ;检测键“3”是否按下
rcall jian3
sbrs r16,6 ;检测键“2”是否按下
rcall jian2
sbrs r16,5 ;检测键“1”是否按下
rcall jian1
sbrs r16,4 ;检测键“0”是否按下
rcall jian0
ret ;循环检测键盘
jian0:
ldi r18,0 ;欲显示的数为0
ret
jian1:
ldi r18,1 ;欲显示的数为1
ret
jian2:
ldi r18,2 ;欲显示的数为2
ret
jian3:
ldi r18,3 ;欲显示的数为3
ret
jian4:
ldi r18,4 ;欲显示的数为4
ret
jian5:
ldi r18,5 ;欲显示的数为5
ret
jian6:
ldi r18,6 ;欲显示的数为6
ret
jian7:
ldi r18,7 ;欲显示的数为7
ret
jian8:
ldi r18,8 ;欲显示的数为8
ret
jian9:
ldi r18,9 ;欲显示的数为9
ret
jiana:
ldi r18,10 ;欲显示的数为10 "A"
ret
jianb:
ldi r18,11 ;欲显示的数为11 "B"
ret
jianc:
ldi r18,12 ;欲显示的数为12 "C"
ret
jiand:
ldi r18,13 ;欲显示的数为13 "D"
ret
jiane:
ldi r18,14 ;欲显示的数为14 "E"
ret
jianf:
ldi r18,15 ;欲显示的数为15 "F"
ret
tab:
.db $c0,$f9,$a4,$b0,$99,$92,$82,$f8,$80,$90
.db $88,$83,$c6,$a1,$86,$8e
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -