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

📄 time22.asm

📁 汇编语言写的时钟程序,已调试通过,使用的是51单片机.
💻 ASM
字号:
; 李坤三作品:时钟数码显示。AT89S52单片机控制,P1口的0-5口用于扫描,P0口用于段码显示;
; 定时器0工作于方式1;s1键控制调整分钟,S2键控制调整小时,S3键用于启动流水灯演示

;P3口的(0-3);S17用于控制P3.7口的输出,控制继电器Q2;S18用于控制P3.6口的输出
 ;控制继电器Q3;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                    开始:主程序                                                               ;
;                                                                                   ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      org 00h
      jmp start
      org 0bh
      jmp tim0
 ;;;;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;
start:
      mov sp,#50h
      mov r3,#6
clear:
      mov r0,20h ;显示器寄存器赋初值
      mov @r0,#00h
      inc r0
      djnz r3,clear
      setb p3.6
      setb p3.7
      mov 2ah,#12h ;时
      mov 2bh,#00 ;分
      mov 2ch,#00 ;秒
      mov tmod,#00000001b ;time0,model1
      mov tl0,#0b0h
      mov th0,#3ch
      mov r4,#14h;1s
      setb ea
      setb et0
      setb tr0
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;                       键盘扫描程序                               ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
main: lcall dis0
      lcall display
      mov r3,#04h
      mov R0,#0feh;1111 1110b   ;P2.0=0,扫描初值
 key1:mov A,R0
      mov p2,a
      call delay0
      mov a,p2
      jnb acc.4,sett     ;若P2.4=0,说明被按下,转
      mov a,r0
      rl a
      mov r0,a
      djnz r3,key1
      ajmp main


sett: lcall de5ms
      jnb acc.4,set0
      ajmp main
 set0:mov a,p2
      jnb acc.4,set0
      mov a,r3
      dec a
      rl a
      mov dptr,#mmtab
      jmp @a+dptr
mmtab:
      sjmp setmm0
      sjmp setnn0
      sjmp setjj1
      sjmp setjj2

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                        调时程序                                                           ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
setmm0:clr et0
       clr tr0

setmin:mov a,2bh
       add a,#1
       da a
       mov 2bh,a
       mov 2ch,#00h
       cjne a,#60h,setout
       mov 2bh,#00h
       ajmp setout

setnn0:clr et0
       clr tr0

sethou:mov a,2ah
       add a,#1
       da a
       mov 2ah,a
       cjne a,#24h,setout  ;不是24H,重新扫描
       mov 2ah,#00h
       sjmp setout

setout:call dis0
       call display
       setb et0
       setb tr0
       ljmp main
setjj1:cpl p3.7
       call dis0
       call display
       ljmp main
setjj2:cpl p3.6
       call dis0
       call display
       ljmp main


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                中断服务程序 1S                                                   ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
tim0: push acc
      push psw
      clr et0
      clr tr0
      mov tl0,#0b0h
      mov th0,#3ch
      djnz r4,out0
      mov r4,#14h;重赋值
      call clock;调计时程序
 out0:call dis0
      call display
      setb et0
      setb tr0
      pop psw
      pop acc
      reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;           加1子程序                                                                        ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
clock: 
       mov a,2ch  ;秒
       add a,#1
       da a
       mov 2ch,a
       cjne a,#60h,out1;不是60秒退出
       mov 2ch,#00
       mov a,2bh   ;分
       add a,#1
       da a
       mov 2bh,a
       cjne a,#60h,out1
       mov 2bh,#00
       mov a,2ah    ;时
       add a,#1
       da a
       mov 2ah,a
       cjne a,#24h,out1
       mov 2ah,#00

 out1:
      ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                        调整子程序                                                 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   dis0:push acc
        push psw
        setb rs0
        setb rs1
        mov r1,#20h
        mov a,2ch
        mov b,#10h
        div ab
        mov @r1,b   ;把B的内容存入20H,秒个位
        inc r1
        mov @r1,a   ;把A的内容放入21H,秒十位
        inc r1
        mov a,2bh
        mov b,#10h
        div ab
        mov @r1,b ;入22H,分个位
        inc r1
        mov @r1,a ;入23H,分十位
        inc r1
        mov a,2ah
        mov b,#10h
        div ab
        mov @r1,b ;入24H,时个位
        inc r1
        mov @r1,a  ;入25H,时十位
        pop psw
        pop acc
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                     显示子程序                                                              ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
display: push acc
         push psw
         setb rs1
         clr rs0
         mov r0,#25h
         mov r2,#11111110b;秒扫描字初值
display0:mov a,r2
         mov p1,a
         mov a,@r0
         mov dptr,#tab
         movc a,@a+dptr
         mov p0,a
         call delay0
         dec r0
         mov a,r2
         jnb acc.5,endout
         rl a
         mov r2,a
         ajmp display0
  endout:mov p1,#0ffh
         mov p0,#00h
         pop psw
         pop acc
         ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                   显示数字表                                                      ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     tab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,00h
     ;共阴表,0123456789不亮;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                   延时子程序                                                      ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   de5ms:mov r5,#60       ;5ms
       d1:mov r4,#248
          djnz r4,$
          djnz r5,d1
          ret
          
   delay0:mov r6,#10  ;1ms
      dl1:mov r7,#15
      dl2:djnz r7,dl2
          djnz r6,dl1
          ret
          
delay: 
       mov r2,#50
   xx1:mov r1,#20
   xx2:mov r3,#248
      djnz r3,$
      djnz r1,xx2
      djnz r2,xx1
      ret
      end






⌨️ 快捷键说明

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