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

📄 timer.txt

📁 Keil上开发的
💻 TXT
字号:
   ORG 0000H
   AJMP MAIN
   ORG 0060H
MAIN:   MOV A,#10H
        MOV 2FH,A;设初始显示的状态;时间 年份
FF1:	ACALL READ
	ACALL ZHUANHUAN
        MOV A,#0
        MOV R0,#50H
	MOV  R1,#70H
	MOV R2,#7
FF2:    MOV A,@R1
	MOV @R0,A
	INC R0
	INC R1
        DJNZ R2,FF2    

;根据读键修改时钟值
READ_KEY: 
	MOV     DPTR,#9FFFH;读键
        MOV     A,   #00H 
	MOVX    @DPTR,A
	MOV     DPTR,#8FFFH
        MOV     A,   #00H 
	MOVX    @DPTR,A
	ACALL  KEYREAD;调用子程
	MOV    A,22H
	MOV     DPTR,#9FFFH
        MOV     A,   #00H 
	MOVX    @DPTR,A
	MOV     DPTR,#9FFFH
        MOV     A,   #00H 
	MOVX    @DPTR,A
	MOV     DPTR,#8FFFH
        MOV     A,   #00H 
	MOVX    @DPTR,A

	MOV    A,22H
	JZ	DIS
        JB     22H.0,  DISPLAY_ME;显示时钟/日期
        JB     22H.1,  HOUR_YEAR;调整月/年
        JB     22H.2,  MINU_MONTH;调整分/月
        JB     22H.3,  SECON_DAY;调整日期

HOUR_YEAR:
        JB    2FH.4,  HOUR
        JB    2FH.5,  YEAR
HOUR:  MOV A,52H
       ADD A,#1
       DA A
       ANL A,#3FH
       CJNE A,#24H,KK1
       MOV A,#0
KK1:   MOV 52H,A
       AJMP  MODIFY
YEAR: MOV A,56H
      ADD A,#1
      DA A
      MOV 56H,A
      AJMP  MODIFY

MINU_MONTH:
       JB    2FH.4,  MINU
       JB    2FH.5,  MONTH
MINU:  MOV A,51H
       ADD A,#1
       DA A
       CJNE A,#60H,KK3
       MOV A,#0
KK3:   MOV 51H,A
       AJMP  MODIFY	
MONTH: MOV A,55H
       ADD A,#1
       DA A
       ANL A,#1FH
       CJNE A,#13H,KK4
       MOV A,#1
KK4:   MOV 55H,A
       AJMP  MODIFY
       
SECON_DAY:
      JB    2FH.4,  SECOND
      JB    2FH.5,  DAY
SECOND:
       AJMP  FF1	
DAY:   MOV A,53H
       ADD A,#1
       DA A
       ANL A,#3FH
       CJNE A,#32H,KK5
       MOV A,#01H
KK5:   MOV 53H,A   
       AJMP  MODIFY


DISPLAY_ME:
	JB     2FH.4,  D_M_2
	JB     2FH.5,  D_M_1
D_M_1:
	MOV	2FH,#10H
	AJMP	DIS
D_M_2:
	MOV	2FH,#20H
	AJMP	DIS


DIS:
	JB     2FH.4,  DISPLAY_1
	JB     2FH.5,  DISPLAY_2
DISPLAY_1:
	ACALL	DISPLAY1
     	AJMP   MAIN_END
DISPLAY_2:
	ACALL	DISPLAY2
	AJMP   MAIN_END      
     

MODIFY:  ACALL WRITE
MAIN_END:AJMP FF1
	




  



       
          







;读键子程
	NEW_KEY	EQU	22H
	OLD_KEY	EQU	23H
KEYREAD:
	CLR	PSW.5
KEY_AGAIN:
	ACALL	KEY_INPUT
	JNB	PSW.5,	KEY_OVER
	ACALL	KEY_DELAY
	ACALL	KEY_INPUT
	JNB	PSW.5,	KEY_OVER
	MOV	A,	NEW_KEY
	CJNE	A,	OLD_KEY,	KEY_OVER
UPKEY:
	ACALL	KEY_INPUT
	JB	PSW.5,	UPKEY
	ACALL	KEY_INPUT
	JB	PSW.5,	UPKEY
;
	MOV	R0,NEW_KEY
	RET
KEY_INPUT:
      MOV  A,    #00H		;显示0
      MOV   DPTR, #9000H
      MOVX  @DPTR, A	;ZIXING
      ;上面为清除显示
	CLR	F0
	MOV	R1,	#00H
	MOV	R2,	#04H
	MOV	R3,	#01H
KEY_LOOP:
	MOV	A,	R3
	MOV	DPTR,	#8000H
	MOVX	@DPTR,	A
	MOVX	A,	@DPTR

	MOV	R4,	#04H
KEY_LOOP1:
	RRC	A
	JNC	NEXT_KEY
	MOV	OLD_KEY,NEW_KEY
	MOV	A,	R1
	MOV   DPTR, #KEY_TABLE_BCD
	MOVC  A,    @A+DPTR
	MOV	NEW_KEY,	A
	SETB	F0
	AJMP	KEY_OVER_OK
NEXT_KEY:
	INC	R1
	DJNZ	R4,KEY_LOOP1
	MOV	A,	R3
	RL	A
	MOV	R3,	A
	DJNZ	R2,	KEY_LOOP
	AJMP	KEY_OVER_OK
KEY_OVER:
	MOV	22H,#00H
KEY_OVER_OK:
	RET

KEY_DELAY:
	MOV	R0,	#0FFH
	DJNZ	R0,$			
	RET

KEY_TABLE_BCD:
      DB  	08H,08H,08H,08H
      DB	04H,04H,04H,04H
      DB	02H,02H,02H,02H
      DB	01H,01H,01H,01H  






READ:MOV R1,#7;I2C总线的读操作
     MOV R0,#70H
     ACALL START
     MOV A ,#0A2H
     ACALL WRITEBITE
     ACALL YINGDA
     MOV A,#02H
     ACALL WRITEBITE
     ACALL YINGDA
     MOV A,#0A3H
     ACALL START
     ACALL WRITEBITE
     ACALL YINGDA
PRO1:ACALL READBITE
     MOV @R0,A
     INC R0
     DJNZ R1,PRO2
     AJMP PROEND    
PRO2: ACALL SENDACK    
     AJMP PRO1
PROEND:ACALL SENDNACK
       ACALL STOP 
       RET
       
WRITE:;I2C总线的写操作
      MOV R1,#7
      MOV R0,#50H
      ACALL START
      MOV A,#0A2H
      ACALL WRITEBITE
      ACALL YINGDA
      MOV A,#02H
      ACALL WRITEBITE
      ACALL YINGDA
PROC3:MOV A,@R0
      ACALL WRITEBITE
      ACALL YINGDA
      INC R0
      DJNZ  R1,PROC3
      ACALL STOP
      RET





       
DISPLAY1:MOV     R5,  #08H;显示时间子程
        MOV    R2,  #01H
        MOV     R0,  #60H
  DISP1:MOV     DPTR,#8FFFH
        MOV     A,   R2 
	MOVX    @DPTR,A
	MOV     A,   @R0
  DISP2:MOV     DPTR,#SHOWTABLE
        MOVC    A,   @A+DPTR
	MOV     DPTR,#9FFFH
	MOVX    @DPTR,A
	ACALL   DEL0
	ACALL   DEL0
	MOV     A,   R2
	RL      A
	MOV     R2,  A
	INC     R0
	DJNZ    R5,  DISP1
      RET

DISPLAY2:MOV     R5,  #08H;显示日期子程
        MOV    R2,  #01H
        MOV     R0,  #68H
  DISP3:MOV     DPTR,#8FFFH
        MOV     A,   R2 
	MOVX    @DPTR,A
	MOV     A,   @R0
  DISP4:MOV     DPTR,#SHOWTABLE
        MOVC    A,   @A+DPTR
	MOV     DPTR,#9FFFH
	MOVX    @DPTR,A
	ACALL   DEL0
	MOV     A,   R2
	RL      A
	MOV     R2,  A
	INC     R0
	DJNZ    R5,  DISP3
      RET
SHOWTABLE:DB   3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
      
ZHUANHUAN:;将读入的时间数据转换为供显示的数据
       MOV A,70H;秒转换
       MOV 60H,A
       ANL 60H,#0FH
       SWAP A
       MOV 61H,A
       ANL 61H,#07H
       
       
       MOV A ,#0AH
       MOV 62H,A 
       
       MOV A,71H;分转换
       MOV 63H,A
       ANL 63H,#0FH
       SWAP A
       MOV 64H,A
       ANL 64H,#07H
       
       MOV A,#0AH
       MOV 65H,A

       MOV A,72H;小时转换
       MOV 66H,A
       ANL 66H,#0FH
       SWAP A
       MOV 67H,A
       ANL 67H,#03H

       MOV A,73H;日转换
       MOV 68H,A
       ANL 68H,#0FH
       SWAP A
       MOV 69H,A
       ANL 69H,#03H
       
       
       MOV A ,#0AH
       MOV 6AH,A 
       
       MOV A,75H;月转换
       MOV 6BH,A
       ANL 6BH,#0FH
       SWAP A
       ANL A,#01H
       MOV 6CH,A
       
       MOV A ,#0AH
       MOV 6DH,A 
       
       MOV A,76H;年转换
       MOV 6EH,A
       ANL 6EH,#0FH
       SWAP A
       MOV 6FH,A
       ANL 6FH,#0FH
       RET             
        

                                           
DEL0:MOV R7,#0;延时子程0,供显示用  
TM0:DJNZ R7,TM
    RET  

DEL:MOV R7,#4;延时子程1 供读写时序用
TM: DJNZ R7,TM
    RET   

START:    SETB  P1.1
          NOP
          SETB  P1.0  ;起始条件建立
          ACALL DEL
          CLR  P1.1      
          ACALL DEL
          CLR   P1.0 ;钳住总线,准备发数据
          NOP
          RET	  

STOP:     CLR    P1.1
          NOP
          SETB   P1.0   ;发送结束条件
          ACALL DEL
          SETB  P1.1   ;结束总线
          ACALL DEL
          RET


SENDACK:CLR P1.1;发送应答信号
        NOP
        NOP
	SETB P1.0
        ACALL DEL
	CLR P1.0
        ACALL DEL
        RET

SENDNACK:SETB P1.1;数据传送结束后的非应答信号
        ACALL DEL
	SETB P1.0
	ACALL DEL
	CLR P1.0
        ACALL DEL
        RET

YINGDA:SETB P1.1;单片机响应应答信号
       ACALL DEL
       SETB P1.0
       ACALL DEL
       ACALL DEL
       CLR PSW.5;将PSW.5作为标志位
       MOV C,P1.1
       JC SS1
       SETB PSW.5
SS1:   CLR P1.0
       NOP
       NOP 
       RET
          
READBITE:MOV R6,#8;向8563写入一字节的内容
         CLR A
SS2:     SETB P1.1
	 NOP
	 SETB P1.0
	 ACALL DEL
         MOV C ,P1.1
 	 RLC A
	 CLR P1.0 
         DJNZ R6 ,SS2
	 RET

WRITEBITE:MOV R6,#8;从8563读出一字节的内容
SS3:      RLC A                    
          JC  ST1  
          CLR P1.1   
          AJMP SS4
ST1:      SETB P1.1
SS4:      ACALL DEL
          SETB P1.0
          ACALL DEL
          CLR P1.0
          DJNZ R6,SS3
          RET
END             

⌨️ 快捷键说明

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