⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sl08.asm

📁 单片机开发资料光盘-双龙-686M.zip
💻 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 + -