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

📄 能闹铃秒表时钟1.asm

📁 程序能用于24小时计时,能作为秒表使用,能定时闹铃1分钟(也可关). 使用方法:开机后在00:00:00起开始计时,(1)长按P1.0进入调分状态:分单元闪烁 按P1.0加1,按P1.1减1.
💻 ASM
📖 第 1 页 / 共 3 页
字号:
            SET3:  LCALL    DISPLAY          ;等待调分按键时时钟显示用
                   JNB      P1.1, FUNSUB     ;减1分操作
                   AJMP     SET4             ;调分等待
            SET5:  LCALL    DISPLAY          ;键释放等待时调用显示程序(调小时)
                   AJMP     SETHH1           ;防止键按下时无时钟显示
            SET7:  LCALL    DISPLAY          ;等待调小时按键时时钟显示用
                   JNB      P1.1, FUNSUBB     ;小时减1操作
                   AJMP     SET6              ;调时等待
         SETOUT1:  LCALL    DISPLAY          ;退出时钟调整时键释放等待
                   AJMP    SETOUT            ;防止键按下时无时钟显示
;FUNSUB,分减1程序?          FUNSUB:  LCALL DS20MS              ;消抖
                   JB       P1.1,SET41       ;干扰,返回调分等待
          FUNSUB1: JNB      P1.1,FUNSUB1     ;等待键放开
                   MOV 	    R0,#77H          ;
                   LCALL    SUB1             ;分减1程序
                   LJMP     SET4             ;返回调分等待
;
            SET41: LJMP     SET4             ;
;FUNSUBB,时减1程序                                            ;
         FUNSUBB:  LCALL DS20MS              ;消抖
                   JB       P1.1,SET61       ; 干扰,返回调时等待
         FUNSUBB1: JNB      P1.1,FUNSUBB1    ; 等待键放开
                   MOV 	    R0,#79H          ;
                   LCALL    SUBB1            ; 时减1程序
                   LJMP     SET6             ; 返回调时等待
;
            SET61: LJMP  SET6
;***************************************
;;           显示程序                  ;;
;***************************************
; 显示数据在70H-75H单元内,用六位LED共阳数码管显示,P0口输出段码数据,P2口作
; 扫描控制,每个LED数码管亮1MS时间再逐位循环。
          DISPLAY: MOV 		R1,DISPFIRST       ;指向显示数据首址
                   MOV 		R5,#0FEH      ;扫描控制字初值
             PLAY: MOV 		A,R5          ;扫描字放入A
                   MOV 		P2,A          ;从P2口输出
                   MOV 		A,@R1         ;取显示数据到A
                   MOV 		DPTR,#TAB     ;取段码表地址
                   MOVC		A,@A+DPTR     ;查显示数据对应段码
                   MOV 		P0,A          ;段码放入P1口
                   MOV          A,R5          ;
                   JB           ACC.2,LOOP5   ;小数点处理
                   CLR          P0.7          ;
       LOOP5:      JB           ACC.4,LOOP6   ;小数点处理
                   CLR          P0.7          ;
       LOOP6:      LCALL 	DL1MS         ;显示1MS
                   INC 		R1            ;指向下一地址
                   MOV 		A,R5            ;扫描控制字放入A
                   JNB 		ACC.5,ENDOUT    ;ACC.5=0时一次显示结束
                   RL 		A               ;A中数据循环左移
                   MOV 		R5,A            ;放回R5内
                   MOV 		P0,#0FFH
                   AJMP 	PLAY            ;跳回PLAY循环
           ENDOUT: MOV          P2,#0FFH            ;一次显示结束,P2口复位
                   MOV 		P0,#0FFH       ;P0口复位
                   RET                      ;子程序返回
             TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH
;共阳段码表          "0""1""2" "3""4""5""6""7" "8""9""不亮"“A”“-”
;
;****************************
; SDISPLAY ,上电显示子程序
;****************************
;不带小数点显示,有“A”“-”显示功能
         SDISPLAY: MOV          R1,DISPFIRST
                   MOV 		R5,#0FEH      ;扫描控制字初值
            SPLAY: MOV 		A,R5          ;扫描字放入A
                   MOV 		P2,A          ;从P2口输出
                   MOV 		A,@R1         ;取显示数据到A
                   MOV 		DPTR,#TABS     ;取段码表地址
                   MOVC		A,@A+DPTR     ;查显示数据对应段码
                   MOV 		P0,A          ;段码放入P1口
                   MOV          A,R5          ;
                   LCALL 	DL1MS         ;显示1MS
                   INC 		R1            ;指向下一地址
                   MOV 		A,R5            ;扫描控制字放入A
                   JNB 		ACC.5,ENDOUTS    ;ACC.5=0时一次显示结束
                   RL 		A               ;A中数据循环左移
                   MOV 		R5,A            ;放回R5内
                   AJMP 	SPLAY            ;跳回PLAY循环
          ENDOUTS: MOV          P2,#0FFH            ;一次显示结束,P2口复位
                   MOV 		P0,#0FFH       ;P0口复位
                   RET                      ;子程序返回
             TABS: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0C6H,0BFH,88H
             ; 显示数  "0    1    2    3    4   5   6   7   8    9  不亮  C   -    A  "
             ; 内存数  "0    1    2    3    4   5   6   7   8    9  0AH   0BH 0CH  0DH "
;STAB表,启动时显示2006年12月23日、C04-2-28(学号)用
          STAB: DB 0AH,0AH,0AH,0AH,0AH,0AH,08H,02H,0CH,02H,0CH,04H,00H,0BH,0AH,0AH
                DB 03H,02H,0CH,02H,01H,0CH,06H,00H,00H,02H,0AH,0AH,0AH,0AH,0AH,0AH
;          注:0A不亮,0B显示“A”,0C显示“-”
;
;***********************************************************
;ST,上电时显示年月班级用,采用移动显示,先右移,接着左移.
;***********************************************************
           ST:      MOV        R0,#40H      ;将显示内容移入40H-5FH单元
                    MOV        R2,#20H      ;
                    MOV        R3,#00H      ;
                    CLR        A            ;
                    MOV        DPTR,#STAB   ;
           SLOOP:   MOVC       A,@A+DPTR    ;
                    MOV        @R0,A        ;
                    MOV        A,R3         ;
                    INC        A            ;
                    MOV        R3,A         ;
                    INC        R0           ;
                    DJNZ       R2,SLOOP     ;移入完毕
                    MOV        DISPFIRST,#40H  ;以下程序从左往右移
          SSLOOP:   MOV        R2,#50          ;控制移动速度
          SSLOOP1:  LCALL      SDISPLAY        ;
                    DJNZ       R2,SSLOOP1      ;
                    INC        DISPFIRST
                    MOV        A,DISPFIRST
                    CJNE       A,#5AH, SSLOOP  ;
                    MOV        DISPFIRST,#5AH  ;以下程序从右往左移
                    MOV        R3,#1BH         ;显示27个单元
          SSLOOP2:  MOV        R2,#32H        ;控制移动速度
          SSLOOP12: LCALL      SDISPLAY       ;
                    DJNZ       R2,SSLOOP12     ;
                    DEC        DISPFIRST
                    DJNZ       R3,SSLOOP2      ;
                    RET
;*******************************************
;;           延时程序                     ;;
;*******************************************
;
;1MS延时程序,LED显示程序用
             DL1MS: MOV 	R6,#14H
             DL1:   MOV 	R7,#19H
             DL2:   DJNZ 	R7,DL2
                    DJNZ 	R6,DL1
                    RET
;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象
           DS20MS: CLR          BELL
                   LCALL 	 DISPLAY
                   LCALL	 DISPLAY
                   LCALL	 DISPLAY
                   SETB          BELL
                   RET
;延时程序,用作按键时间的长短判断
           DL1S:   LCALL      DL05S
                   LCALL      DL05S
                   RET
          DL05S:   MOV        R3,#20H      ;8毫秒*32=0.196秒
          DL05S1:  LCALL      DISPLAY
                   DJNZ       R3,DL05S1
                   RET
;*************************************
;以下是闹铃时间设定程序中的时调整程序
;*************************************
DSSFUNN:          LCALL DISPLAY         ;等待键释放
                  JNB   P1.3, DSSFUNN
                 MOV    50H,#0AH        ;时调整时显示为00:00:- .
                 MOV    51H,#0CH
        WAITSS:    SETB  EA
                  LCALL DISPLAY
                  JNB   P1.2,FFFF      ;时加1键
                  JNB   P1.0,DDDD      ;时减1
                  JNB   P1.3,OOOO      ;闹铃设定退出键
                  JNB   P1.1,ENA       ;闹铃设定有效或无效按键
                  AJMP  WAITSS
       OOOO:      LCALL DS20MS         ;消抖
                  JB   P1.3, WAITSS
     DSSFUNNM:    LCALL DISPLAY         ;键释放等待
                  JNB   P1.3, DSSFUNNM
                  MOV  DISPFIRST,#70H
                  LJMP START1
       ENA:       LCALL DS20MS         ;消抖        ;
                  JB   P1.1, WAITSS
     DSSFUNMMO:   LCALL DISPLAY         ;键释放等待
                  JNB   P1.1, DSSFUNMMO
                  CPL  05H
                  JNB  05H,WAITSS11
                  MOV  50H,#00H        ;05H=1,闹铃开,显示为 00:00: 0。
                  AJMP  WAITSS
          WAITSS11: MOV  50H,#0aH        ;闹铃不开,显示为00:00:- .
                  AJMP  WAITSS
       FFFF:      LCALL DS20MS            ;消抖        ;
                  JB   P1.2, WAITSS
     DSSFUNMM:    LCALL DISPLAY         ;键释放等待
                  JNB   P1.2, DSSFUNMM
                  CLR   EA
                  MOV   R0,#55H
                  LCALL ADD1
                  MOV 	 A,R3            ;

                  CLR   C                 ;
                  CJNE  A,#24H,ADDHH33N   ;
        ADDHH33N: JC	 WAITSS    ;小于24点返回
                  ACALL CLR0              ;大于等于24点清零
                  AJMP  WAITSS
     DDDD  :      LCALL DS20MS            ;消抖        ;
                  JB   P1.0, WAITSS
     DSSFUNDD:    LCALL DISPLAY         ;键释放等待
                  JNB   P1.0, DSSFUNDD
                  CLR   EA
                  MOV   R0,#55H
                  LCALL SUBB1
                  LJMP  WAITSS
;*********************
;以下是闹铃判断子程序
;*********************
BAOJ:               JNB   05H,BBAO       ;05H=1,闹钟开,要比较数据
                    MOV    A,79H         ;从时十位、个位、分十位、分个位顺序比较
                    CJNE   A,55H,BBAO
                    MOV    A,78H
                    CLR    C
BB3:                CJNE   A,54H,BBAO
                    MOV    A,77H
                    CLR   C
                    CJNE   A,53H,BBAO
                    MOV    A,76H
                    CLR    C
BB2:                CJNE   A,52H,BBAO
                    JNB   07H,BBAO        ;07H在1秒到时会取反
                    CLR    BELL           ;时分相同时呜叫(1秒间隔叫)
                    RET
;
              BBAO: SETB  BELL            ;不相同或闹铃不开
                    RET
;********************************************************
                   END                     ;程序结束


⌨️ 快捷键说明

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