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

📄 sg5.asm

📁 the practice of proteus and avr
💻 ASM
字号:
.device AT90S8535
.equ    sph     =$3E
.equ    spl     =$3D
.equ	PORTB	=$18 		
.equ	DDRB	=$17 		
.equ    PINB    =$16
.equ	PORTC	=$15 		
.equ	DDRC	=$14 		
.equ    PINC    =$13
.equ	PORTD	=$12 		
.equ	DDRD	=$11 		
.equ    PIND    =$10
.equ    TCCR0   =$33
.equ    TCNT0   =$32
.def 	ZH     	=r31
.def 	ZL     	=r30

	rjmp	main
main:	ldi	r16,$02			;栈指针置初值
	out	sph,r16
	ldi	r16,$5f
	out	spl,r16
	ldi	r16,$07			;上升沿计数
	out	TCCR0,r16
	ldi	r16,0			;T/C0置初值0
	out	TCNT0,r16
	ldi	r16,$00
	out	DDRB,r16
	ldi	r16,$ff			;PC口作输出
	out	DDRC,r16
	out	DDRD,r16
	out	PORTB,r16
loop:	in	r16,TCNT0
	rcall	btd			;调二转十子程序
	mov	r22,r18			;将BCD码送r18~r22
	mov	r21,r17
	mov	r20,r16
	rcall	smiao			;调动态扫描子程序
	rjmp	loop
	
btd:	ser	r18			;r18先送-1
btd_1:	inc	r18
	subi	r16,100			;(r16)-100
	brcc	btd_1			;够减则返回btd_1
	subi	r16,-100		;不够减+100,恢复余数
	ser	r17			;r17先送-1
btd_2:	inc	r17			;r17增1
	subi	r16,10			;(r16)-10
	brcc	btd_2			;够减则返回btd_2
	subi	r16,-10			;不够减+10,恢复余数
	ret

smiao:	ldi	r16,$fe			;送个位位线
	out	PORTD,r16
	mov	r23,r20			;将个位的BCD码送r23
	rcall	cqb			;查7段码,送B口输出
	rcall	t1ms			;延时1ms
	ldi	r16,$fd			;送十位位线
	out	PORTD,r16
	mov	r23,r21			;将十位的BCD码送r23
	rcall	cqb			;查7段码,送B口输出
	rcall	t1ms			;延时1ms
	ldi	r16,$fb			;送百位位线
	out	PORTD,r16
	mov	r23,r22			;将百位的BCD码送r23
	rcall	cqb			;查7段码,送B口输出
	rcall	t1ms			;延时1ms
	ret
	
cqb:	ldi	ZH,high(tab*2)		;7段码的首址给Z
	ldi	ZL,low(tab*2)
	add	ZL,r23			;首地址+偏移量
	lpm				;查表送C口输出
	out	PORTC,r0
	ret
	
t1ms:	ldi	r24,101			;延时1ms子程序
	push	r24
del2:	push	r24
del3:	dec	r24
	brne	del3
	pop	r24
	dec	r24
	brne	del2
	pop	r24
	ret

tab:	.db	$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -