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

📄 time.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,#40h
      mov r3,#6
clear:
      mov r0,20h ;显示器寄存器赋初值
      mov @r0,#00h
      inc r0
      djnz r3,clear
      clr 30h;按键标志位
      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
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;                       键盘扫描程序                               ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  key:lcall dis0
      lcall display
      mov a,#11110111b   ;P2.3=0,扫描S1键;
      mov p2,a
      mov a,p2
      jnb acc.4,setm     ;若P2.4=0,说明S1被按下,转setm
      mov a,#11111011b    ;若未被按下,扫描下一行,S2键;
      mov p2,a
      mov a,p2
      jnb acc.4,setn
      sjmp key            ;跳至KEY扫描;
setm :lcall de5ms
      mov a,p2
      jnb acc.4,setmm  ;确有按键按下,转setmm
      ajmp key
setn :lcall de5ms
      mov a,p2
      jnb acc.4,setnn   ;确有按键按下,转setnn
setmm:
      ljmp setmm0
setnn:ljmp setnn0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                中断服务程序 1S                                                   ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
tim0: push acc
      push psw
      clr et0
      clr tr0
      mov tl0,#0b0h
      mov th0,#3ch
      djnz r4,out0
      mov r4,#14h;重赋值
      call clock;调计时程序
      call dis0
 out0: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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                        调时程序                                                           ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
setmm0:clr et0
       clr tr0
  waitm:mov a,p2
       jnb acc.4,waitm1
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
  waitn:mov a,p2
       jnb acc.4,waitn1
sethou:mov a,2ah
       add a,#1
       da a
       mov 2ah,a
       cjne a,#24h,setout  ;不是24H,重新扫描
       mov 2ah,#00h
       sjmp setout
waitm1: call dis0
       call display
       sjmp waitm
waitn1: call dis0
       call display
       sjmp waitn
setout:call dis0
       call display
       setb et0
       setb tr0
       ljmp key



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                        调整子程序                                                 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   dis0:push acc
        push psw
        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
         mov r1,#25h
         mov r2,#11111110b;秒扫描字初值
display0:mov a,r2
         mov p1,a
         mov a,@r1
         mov dptr,#tab
         movc a,@a+dptr
         mov p0,a
         call delay0
         dec r1
         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不亮;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                   延时子程序                                                      ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   
   delay0:mov r5,#10  ;1ms
      dl1:mov r4,#15
      dl2:djnz r4,dl2
          djnz r5,dl1
          ret
          end






⌨️ 快捷键说明

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