?? sg5.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 + -