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

📄 722.asm

📁 单片机开发资料光盘-双龙-686M.zip
💻 ASM
字号:
 .include "8535def.inc"
 .org $0000
 rjmp reset
tab:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f
reset: ldi r16,low(ramend) ;栈指针置初值
       out spl,r16
       ldi r16,high(ramend)
       out sph,r16
       ldi r16,$ff         ;定义PB、PD为输出口
       out ddrb,r16
       out ddrd,r16
       ldi r16,$ff         ;设待显示数为$ffff
       ldi r17,$ff
       rcall b16td5        ;调二转十子程
       mov r22,r20         ;将BCD码送r18~r22
       mov r21,r19
       mov r20,r18
       mov r19,r17
       mov r18,r16 
aa:    rcall smiao         ;调动态扫描子程
       rjmp aa

smiao: ldi r16,$fe         ;送个位位线
       out portd, r16      
       mov r23,r18         ;将个位的BCD码送R23
       rcall cqb           ;查七段码,送B口输出
       rcall t1ms          ;延时1ms
       ldi r16,$fd         ;送十位位线
       out portd, r16       
       mov r23,r19         ;将十位的BCD码送R23
       rcall cqb           ;查七段码,送B口输出
       rcall t1ms          ;延时1ms
       ldi r16,$fb         ;送百位位线
       out portd,r16
       mov r23,r20         ;将百位的BCD码送R23
       rcall cqb           ;查七段码,送B口输出
       rcall t1ms          ;延时1ms  
       ldi r16,$f7         ;送千位位线
       out portd,r16
       mov r23,r21         ;将千位的BCD码送R23
       rcall cqb           ;查七段码,送B口输出
       rcall t1ms          ;延时1ms
       ldi r16,$ef         ;送万位位线
       out portd,r16
       mov r23,r22         ;将万位的BCD码送R23
       rcall cqb           ;查七段码,送B口输出
       rcall t1ms          ;延时1ms
       ret 

cqb:   ldi zh,high(tab*2)  ;七段码的首地址给Z
       ldi zl,low(tab*2)
       add zl,r23          ;首地址+偏移量
       lpm                 ;查表送B口输出
       out portb,r0               
       ret

t1ms:  ldi r24,71         ;延时1毫秒子程
       push r24
del2:  push r24
del3:  dec r24
       brne del3
       pop r24
       dec r24
       brne del2
       pop r24
       ret 
b16td5:
	ser r20                    ;r20先送-1
b16td5_1:  
	inc r20                    ;r20增1
subi r16,low(10000)                ;(r17:r16)-10000
	sbci r17,high(10000)
	brcc 	b16td5_1           ;够减则返回b16td5_1
	subi r16,low(-10000)       ;不够减+10000,恢复余数
	sbci r17,high(-10000)
	ser r19                    ;r19先送-1
b16td5_2:
        inc r19                    ;r19增1   
        subi r16,low(1000)         ;(r17:r16)-10000
	sbci r17,high(1000)            
	brcc 	b16td5_2           ;够减则返回b16td5_2
	subi r16,low(-1000)        ;不够减+1000,恢复余数
	sbci r17,high(-1000)
	ser r18                    ;r18先送-1
b16td5_3:
	inc r18                    ;r18增1    
subi r16,low(100)                  ;(r17:r16)-100
	sbci r17,high(100)             
	brcc 	b16td5_3           ;够减则返回b16td5_3
	subi r16,low(-100)         ;不够减+100,恢复余数
	sbci r17,high(-100)
	ser r17                    ;r17先送-1
b16td5_4:
        inc r17                    ;r17增1
        subi r16,10                ;(r17:r16)-10          
	brcc 	b16td5_4           ;够减则返回b16td5_4               
	subi r16,-10               ;不够减+10,恢复余数
        ret

⌨️ 快捷键说明

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