定时控制程序设计.asm

来自「51单片机的“时钟LED闪烁及复位程序设计”」· 汇编 代码 · 共 133 行

ASM
133
字号
lcd equ p2
key1 bit p3.0
key2 bit p3.1
key3 bit p3.2
key4 bit p3.3
key5 bit p3.4
key6 bit p3.5
key7 bit p3.6
key8 bit p1.0
key9 bit p1.1
;=============================================================
org 0000h
ljmp main       ;跳到主程序
org 0030h
;==============================================================
;==============================================================
main:mov lcd,#0ffh
     mov lcd,#0c0h
     mov a,#0
     mov r0,#0
     mov r1,#0
     mov r7,#24
     mov 3ah,#0
     mov 3bh,#0
     mov 3ch,#0
     mov 3dh,#0      ;初始化
     acall d0        ;送显示程序显示
;==============================================================
loop:lcall d1
     ajmp loop

d1:
     cjne r1,#1,d10  ;在第十一秒的时候开发光二极管
     clr key7
d10: inc r0
     cjne r0,#10,d0  ;不超过九秒就继续走
     mov r0,#0
     ljmp d2         ;转到秒钟十位程序去执行
;====================以上是秒钟个位子程序=======================
d2: inc r1
    cjne r1,#6,d0   ;不超过六就继续走
    mov r1,#0
    ljmp d5         ;超过六十秒就返回主程序,重新开始计时
;====================以上是秒钟十位子程序======================
d5: inc 3ah
    mov r5,3ah
    cjne r5,#10,d0
    mov 3ah,#0
    ljmp d6
;===============以上是分钟个位子程序=============================
d6:inc 3bh
   mov r5,3bh
   cjne r5,#6,d0
   mov 3bh,#0
   ljmp d70
;===============以上是分钟十位子程序==============================
d70:djnz r7,d7
    ljmp main   ;判断是否到24小时,到则返回主程序重新计时
d7:
   inc 3ch
   mov r6,3ch
   cjne r6,#10,d0
   mov 3ch,#0
   ljmp d8
;===============以上是时钟个位子程序==============================
d8:inc 3dh
   ljmp d0
;===============以上是时钟十位子程序==============================
k3:mov dptr,#tab
   movc a,@a+dptr
   mov lcd,a
   ret   
;=======================以上是供调用的显示子程序=================
reset:
      ajmp main
;===================================================================

d0: mov r2,#20
l1: mov tmod,#10h
    mov th1,#3ch
    mov tl1,#0b0h      ;50ms初值
    mov ie,#00
loop0: setb tr1
       jbc tf1,loop1
;==================以上是定时服务程序===============================
d4:
   jnb  key8,reset
   mov a,r0
   acall k3
   setb key6        ;开秒钟个位显示
   lcall delay      ;延时
   clr key6         ;关闭秒钟个位
   mov a,r1
   acall k3
   setb key5        ;开秒钟十位显示
   lcall delay      ;延时
   clr key5         ;关闭秒钟十位
   mov a,3ah
   acall k3
   setb key4        ;开分钟个位显示
   lcall delay      ;延时
   clr key4         ;关闭分钟个位
   mov a,3bh
   acall k3
   setb key3        ;开分钟十位显示
   lcall delay      ;延时
   clr key3         ;关闭分钟十位
   mov a,3ch
   acall k3
   setb key2        ;开时钟个位显示
   lcall delay      ;延时
   clr key2         ;关闭时钟个位
   mov a,3dh
   acall k3
   setb key1        ;开时钟十位显示
   lcall delay      ;延时
   clr key1         ;关闭时钟十位

   ajmp loop0       ;定时器循环

loop1: setb key7   ;关闭发光二极管
       djnz r2,l1  ;50msx20=1s
       ret

;==============================================================
delay:mov r4,#82
      DJNZ r4,$
      nop
      RET            ;延时子程序
;==============================================================
tab:  db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h;数型码表
end

⌨️ 快捷键说明

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