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

📄 timer1.asm

📁 利用AT89S51单片机制作简易电子表.本程序用汇编语言编写
💻 ASM
字号:
key_mm_sign   bit 00h
key_hh_sign   bit 01h
hour   data 30h
min    data 31h
sec    data 32h
;;;;;;;;;;;;;;;;中断入口程序;;;;;;;;;;;;;;;;;
            org 0000h
            ajmp start
            org 0003h
            reti
            org 000bh
            ljmp intt0      ;定时器0中断入口地址程序
            org 0013h
            reti
            org 001bh
            reti
            org 0023h
            reti
;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;
            org 0050h
start:
          mov 70h,#01
          mov 71h,#02
          mov 72h,#03
          mov 73h,#04
          mov 74h,#05          
          mov 75h,#06                                                
            mov hour,#12
            mov min,#00h
            mov sec,#00h    ;定时器t0初始化;
            mov tmod,#01h
            mov th0,#3ch
            mov tl0,#0b5h

            setb ea           ;开所有中断
            setb et0         ; 开定时器中断
            setb tr0         ;开启T0
            mov r4,#14h
start1:
            ;lcall switch_data
            lcall display      ;调用显示程序
            ;lcall dk5ms
            ;lcall key_mm
            ;lcall key_hh
            jmp start1

;;;;;;;;;;;;;;;;;;;;;;1s 计时程序;;;;;;;;;;;;;;;;;;;;;
intt0:      push acc        ;入栈保护寄存器,状态字
            push psw
            clr  et0        ;关中断,定时器T0
            clr  tr0
            mov tl0,#0bdh
            mov th0,#3ch
            setb tr0        ;开中断
            djnz r4,outt0   ;1S到否?没到,退出中断服务子程序
            cpl  p3.0
            mov  r4,#14h

            inc  sec
            mov  a,sec
            cjne a,#60,outt0
            mov  sec,#00h

            inc  min
            mov  a,min
            cjne a,#60,outt0
            mov  min,#00h

            inc  hour
            mov  a,hour
            cjne a,#24,outt0
            mov  hour,#00h
outt0:                                 ;中断返回
            setb et0
            pop  psw
            pop  acc
            reti


;;;;;;;;;;;;;;;;;;;;;;;时针调整程序;;;;;;;;;;;;;;;;;;;;;;;;
;当键被按下时进入此程序

;;;;;;;;;;;;;;;;;调分钟程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
key_mm:
         jnb p1.1,key_mmnext
         clr key_mm_sign
         jmp key_mmret
key_mmnext:
         jb key_mm_sign,key_mmret
         setb key_mm_sign
         call dk5ms
         jb   p1.1,key_mmret
         inc  min
         mov  a,min
         cjne a,#60,key_mmret
         mov  min,#60h
key_mmret:
         ret


key_hh:
         jnb p1.2,key_hhnext
         clr key_hh_sign
         jmp key_hhret
key_hhnext:
         jb key_hh_sign,key_hhret
         setb key_hh_sign
         call dk5ms
         jb   p1.2,key_hhret
         inc   hour
         mov   a, hour
         cjne  a,#24,key_hhret
         mov   hour,#00h
key_hhret: ret

;##########显示转换子程序##############
switch_data:
         push 00
         push 01
         push 03
         mov r1,#75h ;显示单元
         mov r0,#30h ;要交换的数
         mov r3,#03h
switch_data_loop:
         mov a,@r0
;         anl a,#0fh
         mov b,#10
         div ab
         mov @r1,a
         dec r1
         mov @r1,b
         dec r1
         inc r0
         djnz r3,switch_data_loop
         pop 03
         pop 01
         pop 00
         ret
;;;;;;;;;;;;;;;;;;;;;;;;显示程序;;;;;;;;;;;;;;;;;;;;;;
;显示数据在70H-75H单元内,用六位共阳数码管显示,P0口输出段码数据,P2口作出
;扫描控制,每个LED亮1MS时间逐位循环
display:   mov r1,#70h   ;指向显示缓冲区的首地址
           mov r5,#00h   ;数码管显示从最低位开始
play:      mov a,r5
           mov p2,a
           mov a,@r1
           mov dptr,#tab
           movc a,@a+dptr
           mov p0,a
           lcall dl5ms
           mov p0,#0ffh      ;消隐
           inc  r1
           inc  r5
           cjne r5,#06h,play
endout:
           mov p0,#0ffh          ;关动态显示屏
           mov a,#07h
           mov p2,a
           ret
  tab:     DB 0C0h,0F9h,0A4h,0B0h,099h,092h,082h,0F8h,080h,90h

         ;0   1   2   3   4   5   6  7    8   9   不亮
;;;;;;;;;;;;;延时程序;;;;;;;;;;;;;;;;;;;;;;;;
;1ms  延时程序,LED显示用

dl5ms:  push 06h
        push 07h
        mov  r6,#32h
       ; mov  r6,#0ffh
dl1:    mov r7,#10h
       ; mov r7,#0ffh
        

dl2:   djnz r7,dl2
       djnz r6,dl1
       nop
       nop
       nop
       pop  07h
       pop  06h
       ret

dk5ms:  push 06h
        push 07h
        ;mov  r6,#32h
        mov  r6,#0ffh
dk1:    ;mov r7,#20h
        mov  r7,#0ffh

dk2:   djnz r7,dk2
       djnz r6,dk1
       nop
       nop
       nop
       pop  07h
       pop  06h
       ret
       end

⌨️ 快捷键说明

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