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

📄 1.asm

📁 定时报警器汇编源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
ADDR_KEY         EQU 0080H       ;键盘片选地址
        KEY_TMP          EQU 70H         ;键值暂存单元     
        LEDDATA  EQU     P2.7      ;定义数码管显示 74LS164 的数据线
        LEDCLK   EQU     P2.6      ;定义数码管显示 74LS164 的时钟线
 SCK      EQU     P2.0      ;定义P1.6为I2C总线的时钟线
 SDA      EQU     P2.1      ;定义P1.7为I2C总线的数据线
        CNTRL0  EQU     30H       ;定义控制/状态0数据存储地址
 CNTRL1   EQU     31H       ;定义控制/状态1数据存储地址
 SEC      EQU     32H       ;定义秒初值存储地址
 MIN      EQU  33H       ;定义分初值存储地址
 HOUR     EQU     34H       ;定义时初值存储地址
 DAT  EQU     35H       ;定义天初值存储地址
 WEEK     EQU     36H       ;定义周初值存储地址
 MONTH    EQU     37H       ;定义月初值存储地址
 YEAR     EQU     38H       ;定义年初值存储地址
        MINBJ    EQU     39H       ;定义分定时初值存储地址
        HOURBJ   EQU     3AH       ;定义时定时初值存储地址
        DATBJ    EQU     3BH       ;定义日定时初值存储地址
        CLOCK    EQU     3CH       ;定义CLOCK 输出频率初值地址
        LEDBUF1  EQU     3DH       ;定义显示的缓冲区,对应数码管显示的L6
        LEDBUF2  EQU     3EH       ;定义显示的缓冲区,对应数码管显示的L5
        LEDBUF3  EQU     3FH       ;定义显示的缓冲区,对应数码管显示的L4
        LEDBUF4  EQU     40H       ;定义显示的缓冲区,对应数码管显示的L3
        LEDBUF5  EQU     41H       ;定义显示的缓冲区,对应数码管显示的L2  
        LEDBUF6  EQU     42H       ;定义显示的缓冲区,对应数码管显示的L1
        TIMEBUF  EQU     43H       ;定义读出时间、日期数据存储首地址  
        FLAG     BIT     00H
        FLAG1    BIT     01H
  ORG   0000H
                LJMP MAIN
                ORG     0013H
                LJMP    INT
                ORG 0100H
MAIN:
 MOV  SP,#50H
        CLR      EA
        SETB     EX1
        SETB     PX1
        CLR      IT1
        SETB     FLAG
        SETB     FLAG1 
 LCALL    LOAD8563         ;载入初值
 MOV  R0,#30H          ;指向初值寄存器首地址
 MOV  R1,#00H          ;初始化8563寄存器单元地址
 MOV  R3,#0CH          ;需初始化字节数
WRDATA:
        LCALL           WR_PCF8563       ;向PCF8563写入初值
        INC      R0
        INC      R1
        DJNZ            R3,WRDATA    
        LCALL     DELAY
        LCALL    CLEARDISP       ;清除显示器上的显示内容   
REREAD: SETB   EA 
        LCALL  KEY
REREAD1: 
        MOV   CLOCK, #83H 
        MOV  R0 ,#CLOCK
        MOV  R1 ,#0DH
        LCALL   WR_PCF8563  
        LCALL   KEY
        MOV R2 ,#10H 
        JNB  ACC.3 ,DISP    ;进入显示月份子程序?
        JNB  ACC.1,NAOZHONG ;进入闹钟设置
        JNB  ACC.0,FLAG_1 
        LCALL  TIME
        SJMP   REREAD1
;***************************************
;关闹钟标志
;****************************************
FLAG_1:
      SETB   FLAG
      MOV    R4,#0A0H
PPP:      
      
      LCALL  KEY
      JB     ACC.0,ZHENCHANG
      MOV  CNTRL1, #00H 
      MOV  R0 ,#CNTRL1
      MOV  R1 ,#01H
      LCALL   WR_PCF8563
      MOV    MINBJ,#80H
      MOV    HOURBJ,#80H
      MOV    DATBJ,#80H
      MOV  R0,#39H          ;指向初值寄存器首地址
      MOV  R1,#09H          ;初始化8563寄存器单元地址
      MOV  R3,#03H          ;需初始化字节数
WRDATA_:
      LCALL           WR_PCF8563       ;向PCF8563写入初值
      INC      R0
      INC      R1
      DJNZ            R3,WRDATA_
      LCALL     QUANLING
      LCALL     DELAY
      LJMP      SSPP
ZHENCHANG:
      LCALL  DELAY
      DJNZ   R4,PPP
SSPP:
      LJMP  REREAD1
;***************************************
;使用资源 A ,R
;R4控制在子程序停留的时间 ,时间到则返主,
;时间未到按确认键则转入修改子程序
;***************************************
DISP:  
       MOV   CLOCK, #03H 
       MOV  R0 ,#CLOCK
       MOV  R1 ,#0DH
       LCALL    WR_PCF8563 
       LCALL    DISP_NUM
       LCALL    KEY
       JNB  ACC.3 , LP
       DJNZ  R2 ,DISP
       AJMP     REREAD
;***************************************
;进入闹钟设置程序
;*****************************************
NAOZHONG:
       LCALL  KEY
       LJMP   NAOZHONG_1
;**************修改时间子程序***********
;完成了对分钟的修改 
;使用 的资源 A  ,R3  ,R4 R6,R7
;***************************************
LP:    CLR    EA
       MOV    R4,#10H
       LCALL  KEY
LP_:   MOV  LEDBUF1 ,#14H                ;对分钟的修改
       MOV  LEDBUF2, #14H  
       LCALL    DISPNUMBER      
       LCALL    DELAY                    
       MOV  R7  ,TIMEBUF+1
       LCALL  KEY1
       JNB ACC.0, LOP
       JNB  ACC.3,L_P
       JB  ACC.1 ,NEXT0   
       LCALL  INC_NUM
       MOV  TIMEBUF+1,A
NEXT0:
       MOV  R0 ,#TIMEBUF+1
       MOV  R1 ,#03H
       LCALL   WR_PCF8563 
       LCALL  TIME
       DJNZ  R4  ,LP_
       AJMP   REREAD
INC_NUM:
       MOV  R4,#10H
       MOV   A ,R7
       ADD A ,#01H
       DA    A
       MOV   R7,A
       SUBB  A,#60H
       JC  NEXT
       MOV  R7,#00H
NEXT:  MOV  A,  R7
       RET
L_P:   LCALL KEY
       LJMP  LP0
;*****************************************
;完成了对星期的修改
;********************************************
LOOP:   LCALL  KEY
        MOV    R4,#10H
LOOP_:  MOV  LEDBUF5 ,#14H              ;对星期的修改
        MOV  LEDBUF6, #14H
        LCALL    DISPNUMBER      
        LCALL    DELAY              
        MOV  R7  ,TIMEBUF+4
        LCALL  KEY1
        JNB ACC.3, LO_OP        
        JNB ACC.0, LP
        JB  ACC.1, NEXT4
        LCALL  INC_NUM2
NEXT4:
        MOV  R0 ,#TIMEBUF+4
        MOV  R1 ,#06H
        LCALL           WR_PCF8563 
        LCALL  TIME
        DJNZ  R4  ,LOOP_
        AJMP   REREAD
INC_NUM2:
        MOV  R4,#10H
        
        MOV   A ,R7
        ADD A ,#01H
        DA  A
        MOV   R7,A
        SUBB  A,#08H
        JC  NEXT5
        MOV  R7,#01H
NEXT5:  MOV  A,  R7
        MOV  TIMEBUF+4,A
        RET
LO_OP:  LCALL  KEY
        LJMP   LP0 
;***************************************  
;完成对小时的修改
;***************************************
LOP:   LCALL  KEY
       MOV    R4,#10H
LOP_:  MOV  LEDBUF4 ,#14H              ;对小时的修改
       MOV  LEDBUF3, #14H
       LCALL    DISPNUMBER            
       LCALL    DELAY           
       MOV  R7  ,TIMEBUF+2
       LCALL  KEY1
       JNB ACC.3, LO_P
       JNB ACC.0, LOOP
       JB  ACC.1, NEXT1
       LCALL  INC_NUM1
NEXT1:
       MOV  R0 ,#TIMEBUF+2
       MOV  R1 ,#04H
       LCALL           WR_PCF8563 
       LCALL  TIME
       DJNZ  R4  ,LOP_
       AJMP   REREAD
INC_NUM1:
        MOV  R4,#10H
        
        MOV   A ,R7
        ADD   A,  #01H
        DA   A
        MOV   R7,A
        SUBB  A,#24H
        JC  NEXT2
        MOV  R7,#00H
NEXT2:  MOV  A,  R7
        MOV  TIMEBUF+2,A
        RET 
LO_P:  LCALL  KEY
       LJMP   LP0 
;**************************************
;按键连续加一
;***************************************
KEY1:  LCALL  DL10MS 
       MOV  P0, #0FH     
       MOV  A,  P0
       LCALL  DL10MS
       RET      
;************键盘扫描子程序*************
;键盘扫描子程?
;***************************************
KEY:
      LCALL  KS1        ;检查是否有键闭合
      JNZ LK1 
      LJMP LK8
  LK1:LCALL  DL10MS
      LCALL KS1
      JNZ LK2
      LJMP LK8
  LK2:MOV P0, #0FH
      MOV  A,P0
      PUSH  0E0H
  LK3:LCALL  KS1
      JNZ LK3
      POP  0E0H
        RET
  LK8:MOV A, #0FFH      ;无键闭合时给A送入0ffh
            RET
  KS1:MOV  P0 , #0FH    ;检查是否有键闭子程序合
      MOV  A , P0
      ANL  A  ,#0FH 
      ORL  A ,#0F0H
      CPL   A
      RET
;************开始对日期修改*************
;开始对日期的修改
;***************************************
LP0:   MOV    R4,#10H
       LCALL  KEY
LP0_:  MOV  LEDBUF1 ,#14H              ;开始对天修改
       MOV  LEDBUF2, #14H
       LCALL    DISPNUMBER       
       LCALL    DELAY         
       MOV  R7  ,TIMEBUF+3
       LCALL  KEY1
       JNB  ACC.3,LP_0
       JNB  ACC.0,LOP0
       JB   ACC.1,NEXT00
       LCALL  INC_NUM0
       MOV  TIMEBUF+3,A
NEXT00:
       MOV  R0 ,#TIMEBUF+3
       MOV  R1 ,#05H
       LCALL           WR_PCF8563 
       LCALL  DISP_NUM
       DJNZ  R4  ,LP0_
       AJMP   REREAD
INC_NUM0:
       MOV  R4,#10H
       MOV   A ,R7
       ADD A ,#01H
       DA  A
       MOV   R7,A
       SUBB  A,#32H
       JC  NEXT6
       MOV  R7,#01H
NEXT6: MOV  A,  R7
       RET
LP_0:  LCALL  KEY
       LJMP   SEC1
;**********开始对年份修改***************
;开始对年份修改
;***************************************
LOOP0: MOV   R4,#10H
       LCALL KEY   
LOOP0_:MOV  LEDBUF5 ,#14H
       MOV  LEDBUF6, #14H
       LCALL    DISPNUMBER      
       LCALL    DELAY           
       MOV  R7  ,TIMEBUF+6
       LCALL  KEY1
       JNB ACC.3, SEC1
       JNB ACC.0, LP0
       JB  ACC.1, NEXT7
        LCALL  INC_NUM22
NEXT7:
       MOV  R0 ,#TIMEBUF+6
       MOV  R1 ,#08H
       LCALL           WR_PCF8563 
       LCALL  DISP_NUM
       DJNZ  R4  ,LOOP0_
       AJMP   REREAD
INC_NUM22:
        MOV  R4,#10H
       
        MOV   A ,R7
        ADD  A ,#01H
        DA  A
        MOV  TIMEBUF+6,A
        RET   
;************开始对月份的修改***********
;开始对月份的修改
;***************************************
LOP0: MOV  R4 ,#10H
       LCALL  KEY
LOP0_: MOV  LEDBUF4 ,#14H        ; 
       MOV  LEDBUF3, #14H
       LCALL    DISPNUMBER     
       LCALL    DELAY           
       MOV  R7  ,TIMEBUF+5
       LCALL  KEY1
       JNB ACC.3, SEC1
       JNB ACC.0, LOOP0
       JB  ACC.1, NEXT11
       LCALL  INC_NUM11
NEXT11:
       MOV  R0 ,#TIMEBUF+5
       MOV  R1 ,#07H
       LCALL           WR_PCF8563 
       LCALL  DISP_NUM
       DJNZ  R4  ,LOP0_
       AJMP   REREAD
INC_NUM11:
       MOV  R4,#10H
      
       MOV   A ,R7
       ADD  A ,#01H
       DA  A
       MOV   R7,A
       SUBB  A,#13H
       JC  NEXT22
       MOV  R7,#01H
NEXT22:MOV  A,  R7
       MOV  TIMEBUF+5,A
       RET
;***********对秒的修改*******************
;对秒的修改
;****************************************
SEC1:  
       MOV    R4,#10H
       LCALL  KEY
SEC2: 
       MOV  LEDBUF3,  #14H
       MOV  LEDBUF4,  #14H          
       MOV  LEDBUF5,  #14H
       MOV  LEDBUF6,  #14H
       LCALL      DISPNUMBER      ;调显示程序
       LCALL      DELAY           ;延时 
       LCALL            KEY1
       JNB  ACC.3 ,SEC4
       JB  ACC.1 ,SEC3
       LCALL   INC_SEC
SEC3:  MOV      R0,#TIMEBUF             
       LCALL        RD_PCF8563         
       MOV      A,  TIMEBUF             
       ANL      A,  #7FH                ;屏蔽数据无关位
       MOV    A,  TIMEBUF             ;对秒的处理
       ANL  A,  #0FH
       MOV      LEDBUF1, A              ;低四送显示缓冲器                       
       MOV      A,TIMEBUF
       SWAP     A
       ANL      A,#0FH   
       MOV      LEDBUF2,A               ;高四位送显示缓冲器
       LCALL    DISPNUMBER              ;调显示程序
       LCALL    DELAY                   ;延时 
       DJNZ     R4  ,SEC2
       AJMP     REREAD
SEC4:  LCALL    KEY
       LJMP     REREAD
INC_SEC:
       MOV      R4,#10H
       MOV      TIMEBUF , #00H 

⌨️ 快捷键说明

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