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

📄 ds1302-dsy.asm

📁 基于时钟芯片DS1302电子时钟完整代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
  L15:    MOV  R5,#64H
  L16:    DJNZ  R5,L16
          DJNZ  R4,L15
          RET
;******************************************************
SET_KEY:
         SETB  K1             ;增加键
         SETB  K2             ;减少键
         SETB  K3             ;选择键
         NOP
	     JB  K3,KEY03
         LCALL  BEEP_BL
         JMP  SET_TIME        ;进入时间设定子程序
KEY03:   RET

;==============================================
;实时时间设定子程序
;K1为加键、K2为减键、K3为选择键
;==============================================
SET_TIME:
         MOV  R1,#8EH          ;写保护寄存器
         MOV  R0,#00H          ;允许写入
         LCALL WRITE

         MOV  R1,#80H          ;写秒寄存器
         MOV  R0,#80H          ;停止振荡器工作
         LCALL WRITE

         SETB  TR0

K001:    CALL TIME_DELAY       ;校时
         JNB K3,K001           ;K3为位移键
K010:
         CALL  CHULI
         JNB  LED,KH01
         MOV  54H,#0AH          ;送入熄灭符
         MOV  55H,#0AH
         JMP  KH02
 KH01:   MOV  54H,74H          ;送实时值
         MOV  55H,75H          ;送实时值
 KH02:   MOV  R0,#TIME_DATA
         CALL  DISP
         MOV  R0,#TIME_DATA
         CALL  TIME_DISPLAY
         JNB  K1,K011A
         JNB  K2,K011B
         JNB  K3,K002
         JMP  K010
K011A:
         MOV  A,42H
         ADD A,#01H
         DA A
         MOV 42H,A
         XRL  A,#24H
         JNZ K012A
         MOV  42H,#00H
K012A:   MOV  R1,#84H           ;写时寄存器
         MOV  R0,42H
         LCALL WRITE
         CALL  TIME_DELAY
         JMP  K010

K011B:
         MOV  A,42H
         XRL  A,#00H
         JZ  K012B
         SETB  C              ;求补运算
         CLR  A
         ADDC  A,#99H         ;加99
         SUBB  A,#01H         ;减去减数
         ADD   A,42H          ;加被减数
         DA A                 ;十进制调整
         MOV 42H,A            ;
         XRL  A,#00H
         JNZ K012C
K012B:   MOV  42H,#23H
K012C:   MOV  R1,#84H           ;写时寄存器
         MOV  R0,42H
         LCALL WRITE
         CALL  TIME_DELAY
         JMP  K010
;-------------------------------------------------
K002:    CALL TIME_DELAY       ;校分
         JNB K3,K002            ;K3为位移键

K020:    CALL  CHULI
         JNB  LED,KM01

         MOV  52H,#0AH          ;送入熄灭符
         MOV  53H,#0AH
         JMP  KM02

 KM01:   MOV  52H,72H          ;送实时值
         MOV  53H,73H          ;送实时值
 KM02:   MOV  R0,#TIME_DATA
         CALL  DISP
         MOV  R0,#TIME_DATA
         CALL  TIME_DISPLAY

         JNB  K1,K021A
         JNB  K2,K021B
         JNB  K3,K003
         JMP  K020

K021A:
         MOV  A,41H
         ADD  A,#01H
         DA A
         MOV  41H,A
         XRL  A,#60H
         JNZ  K022A
         MOV  41H,#00H
K022A:   MOV  R1,#82H           ;写分寄存器
         MOV  R0,41H
         LCALL WRITE
         CALL  TIME_DELAY
         JMP  K020
;---------------------------------------------------
K021B:
         MOV  A,41H
         XRL  A,#00H
         JZ  K022B
         SETB  C              ;求补运算
         CLR  A
         ADDC  A,#99H         ;加99
         SUBB  A,#01H         ;减去减数
         ADD   A,41H          ;加被减数
         DA A                 ;十进制调整
         MOV 41H,A            ;
         XRL  A,#00H
         JNZ K022C
K022B:   MOV  41H,#59H
K022C:   MOV  R1,#82H           ;写分寄存器
         MOV  R0,41H
         LCALL WRITE
         CALL  TIME_DELAY
         JMP  K020
;---------------------------------------------------
K003:    CALL DATE_DELAY       ;校日
         JNB K3,K003            ;K3为位移键

K030:    CALL  CHULI
         JNB  LED,KR01

         MOV  60H,#0AH          ;送入熄灭符
         MOV  61H,#0AH
         JMP  KR02

 KR01:   MOV  60H,76H          ;送实时值
         MOV  61H,77H          ;送实时值
 KR02:   MOV  R0,#DATE_DATA
         CALL  DISP
         MOV  R0,#DATE_DATA
         CALL  TIME_DISPLAY
         JNB  K1,K031A
         JNB  K2,K031B
         JNB  K3,K004
         JMP  K030
K031A:
         MOV  A,43H
         ADD  A,#01H
         DA A
         MOV  43H,A
         XRL  A,#32H
         JNZ  K032A
         MOV  43H,#00H
K032A:    MOV  R1,#86H           ;写日寄存器
         MOV  R0,43H
         LCALL WRITE
         CALL  DATE_DELAY
         JMP  K030

K031B:
         MOV  A,43H
         XRL  A,#00H
         JZ  K032B
         SETB  C                ;求补运算
         CLR  A
         ADDC  A,#99H           ;加99
         SUBB  A,#01H           ;减去减数
         ADD   A,43H            ;加被减数
         DA A                   ;十进制调整
         MOV 43H,A
         XRL  A,#00H
         JNZ K032C
K032B:   MOV  43H,#31H
K032C:   MOV  R1,#86H           ;写日寄存器
         MOV  R0,43H
         LCALL WRITE
         CALL  DATE_DELAY
         JMP  K030
;------------------------------------------------
K004:    CALL DATE_DELAY        ;校月
         JNB K3,K004            ;K3为位移键

K040:    CALL  CHULI
         JNB   LED,KC01

         MOV  62H,#0AH         ;送入熄灭符
         MOV  63H,#0AH
         JMP  KC02

 KC01:   MOV  62H,78H           ;送实时值
         MOV  63H,79H           ;送实时值
 KC02:   MOV  R0,#DATE_DATA
         CALL  DISP
         MOV  R0,#DATE_DATA
         CALL  TIME_DISPLAY
         JNB  K1,K041A
         JNB  K2,K041B
         JNB  K3,K005
         JMP  K040
K041A:
         MOV  A,44H
         ADD  A,#01H
         DA A
         MOV  44H,A
         XRL  A,#13H
         JNZ  K042A
         MOV  44H,#00H
K042A:   MOV  R1,#88H           ;写月寄存器
         MOV  R0,44H
         LCALL WRITE
         CALL  DATE_DELAY
         JMP  K040

K041B:
         MOV  A,44H
         XRL  A,#00H
         JZ  K042B
         SETB  C              ;求补运算
         CLR  A
         ADDC  A,#99H         ;加99
         SUBB  A,#01H         ;减去减数
         ADD   A,44H          ;加被减数
         DA A                 ;十进制调整
         MOV 44H,A            ;
         XRL  A,#00H
         JNZ  K042C
K042B:   MOV  44H,#12H
K042C:   MOV  R1,#88H        ;写月寄存器
         MOV  R0,44H
         LCALL WRITE
         CALL  DATE_DELAY
         JMP  K040
;-----------------------------------------------
K005:     CALL DATE_DELAY       ;校年
         JNB K3,K005            ;K3为位移键

K050:    CALL  CHULI
         JNB  LED,KY01

         MOV  64H,#0AH        ;送入熄灭符
         MOV  65H,#0AH
         JMP  KY02

 KY01:   MOV  64H,7AH          ;送实时值
         MOV  65H,7BH          ;送实时值
 KY02:   MOV  R0,#DATE_DATA
         CALL  DISP
         MOV  R0,#DATE_DATA
         CALL  TIME_DISPLAY
         JNB  K1,K051A
         JNB  K2,K051B
         JNB  K3,K008
         JMP  K050
K051A:
         MOV  A,45H
         ADD  A,#01H
         DA A
         MOV  45H,A
         XRL  A,#9AH
         JNZ  K052A
         MOV  45H,#00H
K052A:   MOV  R1,#8CH         ;写年寄存器
         MOV  R0,45H
         LCALL WRITE
         CALL  DATE_DELAY
         JMP   K050

K051B:
         MOV  A,45H
         XRL  A,#00H
         JZ  K052B
         SETB  C              ;求补运算
         CLR  A
         ADDC  A,#99H         ;加99
         SUBB  A,#01H         ;减去减数
         ADD   A,45H          ;加被减数
         DA A                 ;十进制调整
         MOV  45H,A            ;
         XRL  A,#00H
         JNZ  K052C
K052B:   MOV  45H,#99H
K052C:   MOV  R1,#8CH         ;写年寄存器
         MOV  R0,45H
         LCALL WRITE
         CALL  DATE_DELAY
         JMP   K050
;-------------------------------------------------
K008:    JNB K3,K008
         MOV  R1,#80H          ;写秒寄存器
         MOV  R0,#00H          ;启动振荡器工作
         LCALL WRITE

         MOV  R1,#8EH          ;写保护寄存器
         MOV  R0,#80H          ;禁止写入
         LCALL WRITE

         CALL  DATE_DELAY
         CLR  LED
         SETB  TR0
         CALL  BEEP_BL
         RET

;====================================================
;键延时子程序
;多次调用显示程序做键延时
;====================================================

TIME_DELAY:                    ;设定时间,键延时用
          MOV  R6,#0AH
TIME_KK:
          LCALL  CHULI
          MOV  R0,#TIME_DATA
          LCALL  DISP
          MOV  R0,#TIME_DATA
          CALL  TIME_DISPLAY
          DJNZ  R6,TIME_KK
          RET

DATE_DELAY:                    ;设定日期,键延时用
          MOV  R6,#0AH
DATE_KK:
          LCALL  CHULI
          MOV  R0,#DATE_DATA
          LCALL  DISP
          MOV  R0,#DATE_DATA
          CALL  TIME_DISPLAY
          DJNZ  R6,DATE_KK
          RET

;====================================================
;蜂鸣器响一声子程序 (适用交流蜂鸣器)
;====================================================
BEEP_BL:
         MOV  R6,#100
 BL2:    CALL  DEX1
         CPL  BEEP
         DJNZ  R6,BL2
         MOV  R5,#10
         CALL  DELAY_BL
         RET
 DEX1:   MOV  R7,#180
 DE2:    NOP
         DJNZ  R7,DE2
         RET
DELAY_BL:                    ;(R5)*延时10MS
         MOV  R6,#50
 DL1:    MOV  R7,#100
         DJNZ  R7,$
         DJNZ  R6,DL1
         DJNZ  R5,DELAY_BL
         RET

;*************************************************************
TAB_NU: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H ;0-9-灭
        
;*************************************************************
        END

⌨️ 快捷键说明

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