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

📄 971.asm

📁 单片机开发资料光盘-双龙-686M.zip
💻 ASM
字号:
.include "8535def.inc"
 .org $0000
 rjmp reset
 .org $004
 rjmp TIM2_OVF
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 r26,0          ;设时、分、秒初值为00:00:00
       ldi r27,0 
       ldi r28,0
       ldi r16,$08        ;使用异步时钟
       out assr,r16 
       ldi r16,$40        ;允许T2溢出中断
       out timsk,r16
       ldi r16,$05        ;128分频,1s中断一次
       out tccr2,r16
       ldi r16,$00        ;T/C2置初值0
       out tifr,r16
       sei      
aa:    mov r16,r26        ;秒寄存器中数二转十,送r19、r18
       rcall b8td
       mov r19,r17
       mov r18,r16
       mov r16,r27        ;分寄存器中数二转十,送r21、r20
       rcall b8td
       mov r21,r17
       mov r20,r16
       mov r16,r28        ;时寄存器中数二转十,送r25、r22
       rcall b8td
       mov r25,r17
       mov r22,r16
       rcall smiao        ;调动态扫描
       rjmp aa
 
TIM2_OVF:
       in r1,sreg         ;保护标志
       inc r26            ;秒增1
       cpi r26,60         ;到60秒?
       brne tt
       clr r26            ;到了,则秒清零
       inc r27            ;分增1
       cpi r27,60         ;到60分?
       brne tt
       clr r27            ;到了,则分清零
       inc r28            ;时增1
       cpi r28,24         ;到24时?
       brne tt
       clr r28            ;到了,则时清零
tt:    out sreg,r1
       reti
    
b8td:  clr r17            ;将r16中的二进制数转换为十进制数,十位送r17,个位送r16
b8td1: subi r16,10
       brcs b8td2
       inc r17
       rjmp b8td1
b8td2: subi r16,(-10)
       ret
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 

⌨️ 快捷键说明

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