久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

超強多功能電子鐘程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2010年10月08日   【字體:
;*****************************************************************************
;實現功能:定時功能,參數是0.00s~99H,最多可以同時定時11個數(最先輸入的
;定時應為最大的定時時間)整點報時,鬧鐘,計分器,省電模式,顯示星期
;紅外遙控
;秒表功能:參數是0.00s~24H,最多可以存儲11個瞬間時間。
;顯示當前時間
;鍵盤功能:(平面圖)
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;%%   0   %%    1   %%    2    %%    3   %%           
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
;%%   4   %%    5   %%    6    %%    7   %%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;%%   8   %%    9   %%   秒表  %%  定時  %%        
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%				      	
;%%  存儲 %%  查看  %%顯示轉換 %%  清零  %%      
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;*****************************************************************************
P_KEY     EQU  P1     ;宏定義鍵盤的接口是P1
P2_KEY    EQU  P2     ;宏定義led位選的接口為P1
P0_KEY    EQU  P0     ;宏定義要顯示的數據的接口為P0
BUZZ      EQU  P3.0   ;蜂鳴器
NO_OUT    EQU  24H    ;紅外遙控最終控制號碼存放單元
NUMBER_A  DATA 40H    ;記錄定時/秒表實際時間
NUMBER_B  DATA 41H
NUMBER_C  DATA 42H
NUMBER_D  DATA 43H
NUMBER_E  DATA 44H
NUMBER_F  DATA 45H
NUMBER_G  DATA 46H
NUMBER_H  DATA 47H
NUMBER_A6 DATA 30H    ;記錄時鐘當前時間
NUMBER_B6 DATA 31H
NUMBER_C6 DATA 32H
NUMBER_D6 DATA 33H
NUMBER_E6 DATA 34H
NUMBER_F6 DATA 35H
NUMBER_G6 DATA 36H
NUMBER_H6 DATA 37H
NUMBER_A2 DATA 28H    ;多個定時比較時間
NUMBER_B2 DATA 29H
NUMBER_C2 DATA 2AH
NUMBER_D2 DATA 2BH
NUMBER_E2 DATA 2CH
NUMBER_F2 DATA 2DH
NUMBER_G2 DATA 2EH
NUMBER_H2 DATA 2FH
ORG    0000H
LJMP   MAIN
ORG    0003H
LJMP   INTOUT0              ;外部中斷0秒表
ORG    000BH 
LJMP   COUNT0               ;設置計時0中斷入口秒表
ORG    0013H
LJMP   INTOUT1
ORG    001BH
LJMP   COUNT1
ORG    0030H                ;程序存儲從該位開始
;數據初始化 
MAIN: 
         MOV   SP, #50H
	 CLR   20H.0        ;判斷是否可以改變定時的時間,0可以,1不可以
	 CLR   20H.1        ;啟動鬧鐘標志位0關,1開
	 CLR   20H.2        ;關鬧鐘鈴聲標志
	 CLR   20H.3        ;計分器標志位
	 CLR   20H.4        ;是否有鍵按下標志位
         MOV   30H,#0AH     ;記錄時鐘實際時間
         MOV   31H,#0AH
         MOV   32H,#0AH
         MOV   33H,#0AH
         MOV   34H,#0AH
         MOV   35H,#0AH  
         MOV   36H,#0AH  
         MOV   37H,#0AH
	 MOV   R0,#0D0H	   ;存儲秒表瞬間時間的區域,D0~D8是存儲鬧鐘資源
BACK_0:	 MOV   @R0,#0BH    ;D0~D8是存儲鬧鐘空間,只能在初始化時清0
	 INC   R0
	 CJNE  R0,#0D8H,BACK_0
	 MOV   R0,#0D8H    ;D8H~DFH為計分器的存儲地址,其初始化為; 0 VS 0
	 MOV   @R0,#0DH   
	 MOV   R0,#0D9H
	 MOV   @R0,#0DH
	 MOV   R0,#0DAH
	 MOV   @R0,#00H
	 MOV   R0,#0DBH
	 MOV   @R0,#0CH
	 MOV   R0,#0DCH
	 MOV   @R0,#0CH
	 MOV   R0,#0DDH
	 MOV   @R0,#0DH
	 MOV   R0,#0DEH
	 MOV   @R0,#0DH
	 MOV   R0,#0DFH
	 MOV   @R0,#00H
         SETB  BUZZ        ;關閉蜂鳴器
	 MOV   39H,#5      ;顯示選擇功能,為0時顯示40~47H的內容,為5時顯示30~37的內容
MAIN0:	MOV   40H,#00H    ;記錄時鐘/秒表時間
         MOV   41H,#00H
         MOV   42H,#00H
         MOV   43H,#00H
         MOV   44H,#00H
         MOV   45H,#00H  
         MOV   46H,#00H  
         MOV   47H,#00H
	       MOV   28H,#00H    ;記錄多個定時時間
         MOV   29H,#00H
         MOV   2AH,#00H
         MOV   2BH,#00H
         MOV   2CH,#00H
         MOV   2DH,#00H  
         MOV   2EH,#00H  
         MOV   2FH,#00H
         MOV   48H,#55H    ;暫停/繼續功能
	 MOV   4AH,#55H    ;顯示切換功能,顯示當前時間/秒表定時時間
	 MOV   4BH,#55H	   ;鬧鐘開關轉換功能
	 MOV   4CH,#55H	   ;計分器選擇功能,調整甲乙中一方的分數
	 MOV   49H,#0      ;計數器中斷選擇功能,為#1時執行秒表程序,#2時執行定時程序
	 MOV   3AH,#0      ;存儲秒表時間的出入口資源
	 MOV   3BH,#0      ;同3AH
	 MOV   3CH,#0      ;存儲定時的出入口資源
	 MOV   3DH,#0      ;;選擇定時/秒表的出入口資源。為0時可以選其一,為1時不能選擇
	 MOV   3EH,#0      ;整點報時出入口資源,為1時關閉音樂
	 MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	 MOV   R0,#80H	   ;存儲秒表瞬間時間的區域,D0~D8是存儲鬧鐘資源
BACK_1:	 MOV   @R0,#0BH
	 INC   R0
	 CJNE  R0,#0D0H,BACK_1
	 CLR   P3.6        ;秒表狀態
	 CLR   P3.7        ;定時狀態
         SETB  20H.4
 	 MOV   R2,#9H      ;一次最多只能按8次
         MOV   R1,#30H
	 MOV   R5,#1
	 MOV   R4,#0
         MOV   TMOD , #99H               
         MOV   TL1  ,#00H          
         MOV   TH1  ,#0DCH       
         SETB  ET1          ;允許定時器1中斷
         SETB  EX1          ;開外部中斷
         SETB  IT1          ;選擇邊沿觸發方式
	 SETB  EA
	 SETB  PT0
	 SETB  PT1
	 SETB  PX0        
MAIN1:
	 ACALL  KEYBOARD       ;掃描鍵盤 
	 ACALL  DISPLAY        ;顯示程序
	 ACALL  RING	       ;整點報時	
	 ACALL  ALARMCLOCK     ;鬧鐘程序
	 ACALL  TELECONTROL    ;紅外遙控模塊
	 MOV    A,49H          ;只有選擇了定時程序時才掃描Buzzer程序
	 CJNE   A,#02H,MAIN1
	 ACALL  BUZZER      ;調用蜂鳴器程序
;MAIN2:	 
	 ;DJNZ   3DH,MAIN1
	 ;MOV    3DH,#1
	 ;SETB   EX1
   LJMP MAIN1
;********************
;秒表程序
;********************
TIME:    MOV   A,3DH
	 CJNE  A,#0,TIMEOVER
	 MOV   R2,  #1H      ;屏蔽0~9按鍵
	 MOV   39H,#0  
	 MOV   3DH,#1        ;選擇了秒表之后就不能再選擇定時
	 SETB  P3.6          ;P3.6為秒表的狀態燈
	 MOV   R0,#80H	     ;存儲秒表瞬間時間的區域全部顯示0
         MOV   TMOD , #99H             
         MOV   TL0  , #00H          
         MOV   TH0  , #0DCH       
         SETB  EX0           ;開外部中斷
         SETB  IT0           ;選擇邊沿觸發方式
	 SETB  ET0           ;開計數器中斷
	 MOV   49H, #1H
         SETB  EA            ;開總中斷
TIMEOVER:
	 RET
;********************
;定時程序
;********************
STOPWATCH: 
	 MOV   A,3DH
	 CJNE  A,#0,STOPOVER
         MOV   R1,#40H
 	 MOV   R2,#9H        ;一次最多只能按8次
	 MOV   39H,#0
	 MOV   3AH,#10
	 MOV   3DH,#1        ;選擇了定時之后就不能再選擇秒表
	 MOV   40H,#0AH      ;初始化顯示時間,全部顯示"_"
         MOV   41H,#0AH
         MOV   42H,#0AH
         MOV   43H,#0AH
         MOV   44H,#0AH
         MOV   45H,#0AH  
         MOV   46H,#0AH  
         MOV   47H,#0AH 
	   SETB  P3.7          ;P3.7為定時的狀態燈
         MOV   TMOD , #99H              
         MOV   TL0  ,#00H          
         MOV   TH0 ,#0DCH       
         SETB  EX0           ;開外部中斷
         SETB  IT0           ;選擇邊沿觸發方式
	 SETB  ET0            ;開外部中斷
	 MOV   49H, #2H
         SETB  EA            ;開總中斷
STOPOVER:
	       RET
;**********************        
;掃描鍵盤    
;**********************  
KEYBOARD:CJNE  R5,#1,NOKEY
         LJMP  READ_KEY
NOKEY:       
 	       DJNZ  R5, KEYOUT        	
KEYOUT:	 RET
READ_KEY:   		 ;按鍵掃描函數
         MOV   P_KEY,#0ffH
         MOV   P_KEY,#0f0H
         MOV   A,P_KEY;判斷是否有鍵按下
         cjne  A,#0f0H,RK1
         AJMP  NO_KEY
;有按鍵按下,延時去抖
RK1:     
         CALL  delAy_time      ;延時5ms   還沒有寫出來
         MOV   P_KEY,#0f0H
         MOV   A,P_KEY
;確認是否有鍵按下
         CJNE  A,#0f0H,RK2
         AJMP  NO_KEY
;確認是有按鍵按下, 判斷哪行按鍵按下
RK2:
         JNB   ACC.4,RK4
         JNB   ACC.5,RK5
         JNB   ACC.6,RK6
         JNB   ACC.7,RK7
;沒有檢測到按鍵
         AJMP  NO_KEY
RK4:
         MOV   B,#0
         MOV   P_KEY,#0efH
         AJMP  RK_NEXT
RK5:
         MOV   B,#4
         MOV   P_KEY,#0dfH
         AJMP  RK_NEXT
RK6:
         MOV   B,#8
         MOV   P_KEY,#0BfH
         AJMP  RK_NEXT0
RK7:
         MOV   B,#12
         MOV   P_KEY,#07fH
         AJMP  RK_NEXT1
RK_next:
         MOV   A,P_KEY
         JNB   ACC.0,RK_NEXT_0
         JNB   ACC.1,RK_NEXT_1
         JNB   ACC.2,RK_NEXT_2
         JNB   ACC.3,RK_NEXT_3
;沒有檢測到按鍵
         AJMP  NO_KEY
	 LJMP  NO_KEY
SAVE_T_S_0:
	 LJMP  SAVE_T_S
DISPLAY_T_S_0:
	 LJMP  DISPLAY_T_S
CHANGE_0:
	 LJMP  CHANGE_DIS
RK_NEXT_0:
         MOV   A,#0
         AJMP  GET_KEY
RK_NEXT_1:
         MOV   A,#1
         AJMP  GET_KEY
RK_NEXT_2:
         MOV   A,#2
         AJMP  GET_KEY
RK_NEXT_3:
         MOV   A,#3
;返回檢測到的按鍵編號
GET_KEY: CLR   20H.4
         ADD   A,B
         LJMP  IFKEY
;沒檢測到按鍵,返回0xff
NO_KEY:
         MOV   A,#0H
IFKEY:   JNB   20H.4,KEY_0           ;如果20H.4為0時證明有鍵按下
         LJMP  KEY_1		    ;否則跳出
KEY_0:   DJNZ  R2,  KEY_2          ; 當R2不為0時,運行8次,直到顯示的8位都給定初值  
	 MOV   R2,   #1H             ;運行8次后TIAO_2后的程序不再運行,內存不再賦值
	 CLR   A
         SETB  20H.4
         RET
KEY_2:   MOV   @R1,A
         INC   R1
	 MOV   R5,   #70
KEY_1:   CLR   A
         SETB  20H.4
	 RET
;//******************時間延遲函數
DELAY_TIME:                ;延時10ms
           PUSH  PSW
           PUSH  ACC 
LOOP:      MOV   R7,#100         
LOOP_1:    MOV   R6,#50     
LOOP_2:    DJNZ  R6,LOOP_2
       	  DJNZ  R7,LOOP_1
           POP   ACC
           POP   PSW
           RET
;****************************
;顯示所記錄的秒表瞬間/定時的時間
;****************************
DISPLAY_T_S:
	  MOV   R5,#60
	  MOV   A,  49H
	  JB    ACC.0,MIAOBIAO
	  JB    ACC.1,DINGSHI
	  LJMP  DISTIME_0
DINGSHI:
	  MOV   3AH,3CH
    MOV   R4,3AH
	  MOV   39H,#1
	  DEC   R4
    MOV   3AH,R4
	  MOV   3CH,R4
	  CJNE  R4,#0FFH,DISTIME_0
	  MOV   3CH,3BH
	  LJMP  DISTIME_0
MIAOBIAO:
    MOV   R4,3AH
	  MOV   39H,#1
	  DEC   R4
    MOV   3AH,R4
	  CJNE  R4,#0FFH,DISTIME_0
	  MOV   3AH,3BH
DISTIME_0:RET
;***********************
;定時/秒表清零
;*&*********************
CLEAR:
	  MOV   R5,#60
	  SETB  BUZZ	  
    CLR   TR0
	  MOV   R1,#40H
	  MOV   R2,#9H     ;按鍵后 
	  MOV   3AH,#0
	  MOV   3BH,#0
	  MOV   3DH,#0	  
	  MOV   39H,#5
          MOV   48H,#55H    ;暫停/繼續功能
	  MOV   49H,#0      ;計數器中斷選擇功能,為#1時執行秒表程序,#2時執行定時程序
 	  MOV   40H,#00H  ;記錄譯碼后的顯示時間
          MOV   41H,#00H
          MOV   42H,#00H
          MOV   43H,#00H
          MOV   44H,#00H
          MOV   45H,#00H  
          MOV   46H,#00H  
          MOV   47H,#00H
 	  MOV   28H,  #00H  ;清0
          MOV   29H,#00H
          MOV   2AH,#00H
          MOV   2BH,#00H
          MOV   2CH,#00H
          MOV   2DH,#00H  
          MOV   2EH,#00H  
          MOV   2FH,#00H
	        MOV   R0,#0D8H    ;D8H~DFH為計分器的存儲地址,其初始化為; 0 VS 0
	        MOV   @R0,#0DH   
	        MOV   R0,#0D9H
	        MOV   @R0,#0DH
	        MOV   R0,#0DAH
	        MOV   @R0,#00H
	        MOV   R0,#0DBH
	        MOV   @R0,#0CH
	  MOV   TMOD , #99H   ;t0模式1              
          MOV   TL0  ,#00H          
          MOV   TH0 ,#0DCH 
 	  CLR   ET0      
          CLR   EX0           ;開外部中斷
	  CLR   P3.1
	  CLR   P3.5
	  CLR   P3.6
	  CLR   P3.7
CLEAR_1:  RET 
;************************************
;查看當前時間/定時秒表當前時間/關音樂
;************************************
CHANGE_DIS:
	  MOV  R5,#60
	  SETB  ET1
    SETB  TR1 
	  SETB  BUZZ
 	  MOV   A,4AH                ;	
          RL    A                     
          MOV   4AH,A
          JNB   ACC.1,CHANGE_1       ;查詢,A最低位為0時暫停計時,為1時繼續計時   
	  MOV   39H,#5 
	  LJMP  CHANGE_2
CHANGE_1: MOV   39H,#0
CHANGE_2: RET    
;*****************************
;選擇程序:存儲秒表瞬間/多個定時
;*****************************
SAVE_T_S: MOV  R5,#60
	  MOV   A,49H  
	  JB    ACC.0,SAVETIME
	  JB    ACC.1,SAVESTOP
	  LJMP  STOPOUT
;****************************
;存儲十個定時時間
;****************************
SAVESTOP:  
	  MOV  39H,#1
	  MOV  3BH,#10
	  MOV  R4,3AH
	  CJNE R4,#0H,STOP10_0
	  MOV  R2,#1
	  MOV  39H,#0
	  LJMP STOPOUT
STOP10_0: MOV  R2,#09H
	  CJNE R4,#01H,STOP1
	  MOV  R1,#80H
	  LJMP STOP10
STOP1:	  CJNE R4,#02H,STOP2
	  MOV  R1,#88H
	  LJMP STOP10
STOP2:	  CJNE R4,#03H,STOP3
	  MOV  R1,#90H
	  LJMP STOP10
STOP3:	  CJNE R4,#04H,STOP4
	  MOV  R1,#98H
	  LJMP STOP10
STOP4:	  CJNE R4,#05H,STOP5
	  MOV  R1,#0A0H
	  LJMP STOP10
STOP5:	  CJNE R4,#06H,STOP6
	  MOV  R1,#0A8H
	  LJMP STOP10
STOP6:	  CJNE R4,#07H,STOP7
	  MOV  R1,#0B0H
	  LJMP STOP10
STOP7:	  CJNE R4,#08H,STOP8
	  MOV  R1,#0B8H
	  LJMP STOP10
STOP8:	  CJNE R4,#09H,STOP9
	  MOV  R1,#0C0H
	  LJMP STOP10
STOP9:	  CJNE R4,#0AH,STOP10
	  MOV  R1,#0C8H
STOP10:	  MOV  3CH,R4
	  DEC  R4
	  MOV  3AH,R4
STOPOUT:  RET	  
;************************
;秒表存儲功能
;************************
SAVETIME: MOV  R4,3AH
	  MOV  A, 3BH
	  CJNE A,#0AH,SAVEMID
	  RET
SAVEMID:  INC  R4
	  MOV  3AH,R4
	  MOV  3BH,R4
	  CJNE R4,#01H,SAVE1
	  MOV  R0,#80H
	  LJMP SAVE10
SAVE1:	  CJNE R4,#02H,SAVE2
	  MOV  R0,#88H
	  LJMP SAVE10
SAVE2:	  CJNE R4,#03H,SAVE3
	  MOV  R0,#90H
	  LJMP SAVE10
SAVE3:	  CJNE R4,#04H,SAVE4
	  MOV  R0,#98H
	  LJMP SAVE10
SAVE4:	  CJNE R4,#05H,SAVE5
	  MOV  R0,#0A0H
	  LJMP SAVE10
SAVE5:	  CJNE R4,#06H,SAVE6
	  MOV  R0,#0A8H
	  LJMP SAVE10
SAVE6:	  CJNE R4,#07H,SAVE7
	  MOV  R0,#0B0H
	  LJMP SAVE10
SAVE7:	  CJNE R4,#08H,SAVE8
	  MOV  R0,#0B8H
	  LJMP SAVE10
SAVE8:	  CJNE R4,#09H,SAVE9
	  MOV  R0,#0C0H
	  LJMP SAVE10
SAVE9:	  CJNE R4,#0AH,SAVE10
	  MOV  R0,#0C8H
SAVE10:	  MOV  @R0,40H
	  INC  R0
	  MOV  @R0,41H
	  INC  R0
	  MOV  @R0,42H
	  INC  R0
	  MOV  @R0,43H
	  INC  R0
	  MOV  @R0,44H
	  INC  R0
	  MOV  @R0,45H
	  INC  R0
	  MOV  @R0,46H
	  INC  R0
	  MOV  @R0,47H
	  RET
;****************************
;蜂鳴器程序,查詢是否全部為0
;***************************
BUZZER:   PUSH  ACC
	  PUSH  B
	  PUSH  PSW
	  MOV   R4,#00H
	  MOV   R6,#7FH
BUZZTURN: MOV   A,#8H
	  ADD   A,R6
	  MOV   R0,A
	  MOV   R6,A
	  MOV   A,@R0  
     	  CJNE  A,NUMBER_H2,BUZZER_1
	  DEC   R0
    	  MOV   A,@R0  
    	  CJNE  A,NUMBER_G2,BUZZER_1
	  DEC   R0
    	  MOV   A,@R0   
     	  CJNE  A,NUMBER_F2,BUZZER_1
	  DEC   R0
    	  MOV   A,@R0   
      	  CJNE  A,NUMBER_E2,BUZZER_1
	  DEC   R0
    	  MOV   A,@R0   
      	  CJNE  A,NUMBER_D2,BUZZER_1
	  DEC   R0
    	  MOV   A,@R0  
       	  CJNE  A,NUMBER_C2,BUZZER_1
	  DEC   R0
    	  MOV   A,@R0   
       	  CJNE  A,NUMBER_B2,BUZZER_1
	  DEC   R0
    	  MOV   A,@R0   
      	  CJNE  A,NUMBER_A2,BUZZER_1 
	  MOV   3AH,R4
	  CLR   BUZZ
	  MOV   39H,#1
BUZZER_1: INC   R4
	  CJNE  R4,#0AH,BUZZTURN
BUZZER_2:
	  MOV   A,NUMBER_A  ;時十位
     	  CJNE  A,#0H,RETURN3
    	  MOV   A,NUMBER_B   ;時個位
    	  CJNE  A,#0H,RETURN3
   	  MOV   A,NUMBER_C  ;分十位
     	  CJNE  A,#0H,RETURN3
    	  MOV   A,NUMBER_D  ;分個位
       CJNE  A,#0H,RETURN3
       MOV   A,NUMBER_E  ;秒十位
       CJNE  A,#0H,RETURN3
       MOV   A,NUMBER_F  ;秒個位
       CJNE  A,#0H,RETURN3
       MOV   A,NUMBER_G  ;秒十分位
       CJNE  A,#0H,RETURN3
     	  MOV   A,NUMBER_H  ;秒百分位
       CJNE  A,#0H,RETURN3
 	     CLR   BUZZ         ;開蜂鳴器
	     CLR   TR0	    ;關計數器0
	     CLR   EX0           ;關外部中斷0 
	     MOV   39H,#0  
	     CLR   P3.7
	     POP   PSW
	     POP   B
       POP   ACC
HERE:	 LJMP  MAIN0 
RETURN3:
 	     POP   PSW
	     POP   B
	     POP   ACC
	     RET	 
;**********************************
;整點報時
;**********************************
RING:  PUSH  ACC
	     PUSH  B
	     PUSH  PSW
   	  MOV   A,NUMBER_C6  ;分十位
     	  CJNE  A,#0H,RINGOUT
    	  MOV   A,NUMBER_D6  ;分個位
       CJNE  A,#0H,RINGOUT
       MOV   A,NUMBER_E6  ;秒十位
      	  CJNE  A,#0H,RINGOUT
       	  MOV   A,NUMBER_F6  ;秒個位
       	  CJNE  A,#0H,RINGOUT
       	  MOV   A,NUMBER_G6  ;秒十分位
       	  CJNE  A,#0H,RINGOUT
     	     MOV    A,NUMBER_H6  ;秒百分位
      	  CJNE  A,#0H,RINGOUT
	  CLR   BUZZ
	  MOV   3EH,   #1
RINGOUT:  MOV   A,3EH
	        CJNE  A,#1,RING_OUT
      	  MOV   A,NUMBER_E6  ;秒十位
      	  CJNE  A,#1H,RING_OUT
	         SETB   BUZZ
	         MOV   3EH,   #0
RING_OUT:POP   PSW
	       POP   B
	       POP   ACC
	       RET

;**********************************
;鬧鐘程序
;**********************************
ALARMCLOCK:
	  PUSH  ACC
	  PUSH  B
	  PUSH  PSW
	  ;SETB  20H.1
	  JNB   20H.1,ALARM_OUT1         ;啟動鬧鐘標志位0關,1開
	  MOV   R0,#0D0H
	  MOV   A,@R0  ;時十位
     	  CJNE  A,NUMBER_A6,ALARM_OUT
	  MOV   R0,#0D1H
	  MOV   A,@R0   ;時個位
    	  CJNE  A,NUMBER_B6,ALARM_OUT
	  MOV   R0,#0D2H
	  MOV   A,@R0  ;分十位
     	  CJNE  A,NUMBER_C6,ALARM_OUT
	  MOV   R0,#0D3H
	  MOV   A,@R0  ;分個位
      	  CJNE  A,NUMBER_D6,ALARM_OUT
	  MOV   R0,#0D4H
	  MOV   A,@R0  ;秒十位
      	  CJNE  A,NUMBER_E6,ALARM_OUT
	  MOV   R0,#0D5H
	  MOV   A,@R0  ;秒個位
       	  CJNE  A,NUMBER_F6,ALARM_OUT
	  MOV   R0,#0D6H
	  MOV   A,@R0  ;秒十分位
       	  CJNE  A,NUMBER_G6,ALARM_OUT
	  MOV   R0,#0D7H
	  MOV   A,@R0  ;秒百分位
      	  CJNE  A,NUMBER_H6,ALARM_OUT
	  CLR   BUZZ
	  SETB  20H.2
ALARM_OUT:
	  JNB   20H.2,ALARM_OUT1        ;關鬧鐘鈴聲標志
      	  MOV   R0,#0D3H  ;分個位
	  MOV   A,@R0
	  INC   A
      	  CJNE  A,NUMBER_D6,ALARM_OUT1
	  MOV   R0,#0D4H
	  MOV   A,@R0  ;秒十位
      	  CJNE  A,NUMBER_E6,ALARM_OUT1
	  MOV   R0,#0D5H
	  MOV   A,@R0  ;秒個位
       	  CJNE  A,NUMBER_F6,ALARM_OUT1
	  MOV   R0,#0D6H
	  MOV   A,@R0  ;秒十分位
       	  CJNE  A,NUMBER_G6,ALARM_OUT1
	  MOV   R0,#0D7H
	  MOV   A,@R0  ;秒百分位
      	  CJNE  A,NUMBER_H6,ALARM_OUT1
	  SETB  BUZZ
	  CLR   20H.2                  ;關鬧鐘鈴聲標志
ALARM_OUT1:POP  PSW
	  POP   B
	  POP   ACC
	  RET
;**********************************
;鬧鐘賦初值程序
;**********************************
ALARMC:   PUSH  ACC
	  PUSH  B
	  PUSH  PSW
	  JB    20H.0,ALARMCOUT  ;判斷是否可以改變定時的時間,0可以,1不可以
    MOV   R2,#09H
	  MOV   R1,#0D0H
	  SETB  20H.0           ;判斷是否可以改變定時的時間,0可以,1不可以
ALARMCOUT:
    POP   PSW
	  POP   B
	  POP   ACC
	  RET
;**********************************
;更改鬧鐘時間程序
;**********************************
ACKCHANGE:PUSH  ACC
	  PUSH  B
	  PUSH  PSW
          MOV   R2,#09H
	  MOV   R1,#0D0H
	  MOV   R0,#0D0H
BACK_2:	  MOV   @R0,#0AH    ;D0~D8是存儲鬧鐘空間,只能在初始化時清0
	  INC   R0
	  CJNE  R0,#0D8H,BACK_2
	  ;CLR   20H.0
          POP   PSW
	  POP   B
	  POP   ACC
	  RET
;**********************************
;啟動/關閉鬧鐘
;**********************************
ACKSTART: PUSH  ACC
	  PUSH  B
	  PUSH  PSW
          MOV   A,4BH                ;	
          RL    A                     
          MOV   4BH,A
          JNB   ACC.1,ACK_OUT       ;查詢,A最低位為0時暫停計時,為1繼續計時
	        SETB  20H.1               ;啟動鬧鐘標志位0關,1開
	        SETB  P3.4
	        LJMP  ACKOUT
ACK_OUT:  CLR   20H.1               ;啟動鬧鐘標志位0關,1開
	        CLR   P3.4
ACKOUT:   POP   PSW
	        POP   B
	        POP   ACC
	        RET
;**********************************
;顯示程序
;**********************************
DISPLAY:  PUSH  ACC
	        PUSH  B
	  PUSH  PSW
	  MOV   R3,#0FEH
	  MOV   A,39H
	  CJNE  A,#5,YU_0
	  MOV   R0,#37H
 	  LJMP  DISPLAY_A
YU_0:     CJNE  A,#1,YU_1
	  MOV   R4,3AH
	  INC   R4
	  CJNE  R4,#01H,SAVE_1
	  MOV   R0,#87H
 	  LJMP  DISPLAY_A
SAVE_1:	  CJNE  R4,#02H,SAVE_2
	  MOV   R0,#8FH
	  LJMP  DISPLAY_A
SAVE_2:	  CJNE  R4,#03H,SAVE_3
	  MOV   R0,#97H
	  LJMP  DISPLAY_A
SAVE_3:	  CJNE  R4,#04H,SAVE_4
	  MOV   R0,#9FH
	  LJMP  DISPLAY_A
SAVE_4:	  CJNE  R4,#05H,SAVE_5
	  MOV   R0,#0A7H
	  LJMP  DISPLAY_A
SAVE_5:	  CJNE  R4,#06H,SAVE_6
	  MOV   R0,#0AFH
	  LJMP  DISPLAY_A
SAVE_6:	  CJNE  R4,#07H,SAVE_7
	  MOV   R0,#0B7H
	  LJMP  DISPLAY_A
SAVE_7:	  CJNE  R4,#08H,SAVE_8
	  MOV   R0,#0BFH
	  LJMP  DISPLAY_A
SAVE_8:	  CJNE  R4,#09H,SAVE_9
	  MOV   R0,#0C7H
	  LJMP  DISPLAY_A
SAVE_9:	  CJNE  R4,#0AH,YU_1
	  MOV   R0,#0CFH        ;動態顯示初始化,使r0指向緩沖區首地址
 	  LJMP  DISPLAY_A
YU_1:	  CJNE  A,#2,YU_2
	  MOV   R0,#0D7H
	  LJMP  DISPLAY_A
YU_2:	  CJNE  A,#3,YU_3
	  MOV   R0,#0DFH
	  LJMP  DISPLAY_A
YU_3:	  CJNE  A,#4,YU_4
	  MOV   R0,#0EFH
	  LJMP  DISPLAY_A
YU_4:	  MOV   R0,#47H
DISPLAY_A:
          MOV   DPTR,#TABLE
	  MOV   A,@R0
 	  MOVC  A,@A+DPTR 
	  MOV   P2,R3   
	  MOV   P0,A     
	  ACALL DELAYDIS
      	  DEC   R0
          MOV   A,R3
 	  JNB   ACC.7,LD1
          RL    A
          MOV   R3,A
          LJMP  DISPLAY_A
LD1:      POP   PSW
	  POP   B
	  POP   ACC
	  RET
; *********************
;查表程序
;*********************
TABLE: DB    0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0F7H,0FEH,0BFH,0FFH
;             0    1     2    3   4   5   6   7   8    9   A    B    C    D
RET     
DELAYDIS:   MOV   R7,#250         ;04H
DELDIS:     DJNZ  R7,DELDIS
            RET
;************************************
;計分器選擇程序A/B
;************************************
SCOREAB:  PUSH  ACC
	  PUSH  B
	  PUSH  PSW
	  MOV   A,4CH                ;	
    RL    A                     
    MOV   4CH,A
    JNB   ACC.1,SCO_B       ;查詢,調整分數
	  SETB  20H.3
	  SETB  P3.1
	  CLR   P3.7             ;計分器標志位,甲A調整
	  LJMP  SCOOUT           
SCO_B:CLR   20H.3             ;計分器標志位,乙B調整
	  SETB  P3.7
	  CLR   P3.1
SCOOUT:   POP   PSW
	  POP   B
	  POP   ACC
	  RET
;************************************
;計分器分數調整:加1
;************************************
SCOREINC: PUSH  ACC
	  PUSH  B
	  PUSH  PSW
	  JNB    20H.3,INCB            ;計分器標志位,0時乙B調整
	  MOV   R0,#0DAH	       ;1時甲A乙B調整
	  LJMP  SCOMID_0
INCB:	  MOV   R0,#0DFH
SCOMID_0: MOV   A,@R0
	  INC   A
	  MOV   @R0,A
	  CJNE  A,#0AH,INCAB_0
	  MOV   A,#0
	  MOV   @R0,A
	  DEC   R0
	  MOV   A,@R0
	  CJNE  A,#0DH,SCOYU
	  MOV   A,#0
SCOYU:	  INC   A
	  MOV   @R0,A
	  CJNE  A,#0AH,INCAB_0
	  MOV   A,#0
	  MOV   @R0,A
	  DEC   R0
	  MOV   A,@R0
	  CJNE  A,#0DH,SCOWEI
	  MOV   A,#0
SCOWEI:	  INC   A
	  MOV   @R0,A
INCAB_0:   
	  POP   PSW
	  POP   B
	  POP   ACC
	  RET
;************************************
;計分器分數調整:減1
;************************************
SCOREDEC: PUSH  ACC
	  PUSH  B
	  PUSH  PSW
	  SETB  PSW.3
	  CLR   PSW.4
	  JNB    20H.3,DECB            ;計分器標志位,0時乙B調整
	  MOV   R0,#0DAH	       ;1時甲A乙B調整
	  LJMP  SCOMID_1
DECB:	  MOV   R0,#0DFH   ;個位
SCOMID_1: MOV   A,@R0
	  DEC   A
	  MOV   @R0,A
	  CJNE  A,#0FFH,DECAB_5
	  MOV   R1,#0DEH
	  MOV   A,@R1
	  CJNE  A,#00H,DECABPENG
	  MOV   R1,#0DDH
	  MOV   A,@R1
	  CJNE  A,#0DH,DECAB_1
	  MOV   A,#0
	  MOV   @R0,A
	  LJMP	 DECAB_5
DECABPENG:CJNE  A,#0DH,DECAB_1
	  MOV   A,#0
	  MOV   @R0,A
	  LJMP  DECAB_5
	  LJMP	 DECAB_2  	  
DECAB_1:  MOV   A,#9
DECAB_2:  MOV   @R0,A
	  DEC   R0       ;十位
	  MOV   A,@R0
	  DEC   A
	  MOV   @R0,A
	  CJNE  A,#0FFH,DECAB_6
	  MOV   R1,#0DDH
	  MOV   A,@R1
	  CJNE  A,#00H,DECAB_YU
	  MOV   A,#0DH
	  MOV   @R0,A
	  LJMP	 DECAB_5
DECAB_6:  CJNE  A,#00H,DECAB_5
	  MOV   R1,#0DDH
	  MOV   A,@R1
	  CJNE  A,#0DH,DECAB_YU
	  MOV   A,#0DH
	  MOV   @R0,A
	  LJMP	 DECAB_5
DECAB_YU: CJNE  A,#0DH,DECAB_3
	  MOV   A,#0DH
	  LJMP	 DECAB_4
DECAB_3:  MOV   A,#9
DECAB_4:  MOV   @R0,A
	  DEC   R0     ;百位
	  MOV   A,@R0
	  DEC   A
	  MOV   @R0,A
	  CJNE  A,#00H,DECAB_5
	  MOV   A,#0DH
	  MOV   @R0,A
DECAB_5:  CLR   PSW.3
	  CLR   PSW.4
	  POP   PSW
	  POP   B
	  POP   ACC
	  RET
;*************************************
;紅外遙控模塊
;*************************************
;//  8   192   128   96
;//144   184   248   176
;//152   216   136   168
;//232    72   104   50
;//  2    18   32    0
;// 64   160   42    178
;// 80   120   112   88 
;// 56    40   240   48
TELECONTROL:
	CJNE  R5,#1,NOCH
        LJMP  CHIN
NOCH:       
 	DJNZ   R5, CHOUT_0
CHIN:  	MOV    R4,NO_OUT 
	CJNE   R4,#0,CH0
CHOUT_0:LJMP   CHOUT
CH0:                           ;0 碼型   
	CJNE   R4,#216,CH1
	MOV    A,#0
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   KEY_0
CH1:	                       ;1 碼型   
	CJNE   R4,#8,CH2
	MOV    A,#1
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   KEY_0
CH2:                           ;2碼型   
	CJNE   R4,#192,CH3
	MOV    A,#2
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   KEY_0
CH3:                           ;3 碼型   
	CJNE   R4,#128,CH4
	MOV    A,#3
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   KEY_0
CH4:  			       ;4 碼型   
	CJNE   R4,#96,CH5
	MOV    A,#4
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   KEY_0
CH5:                           ;5 碼型   
	CJNE   R4,#144,CH6
	MOV    A,#5
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   KEY_0
CH6:                           ;6 碼型   
	CJNE   R4,#184,CH7
	MOV    A,#6
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   KEY_0
CH7:                           ;7 碼型   
	CJNE   R4,#248,CH8
	MOV    A,#7
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   KEY_0
CH8:                           ;8 碼型   
	CJNE   R4,#176,CH9
	MOV    A,#8
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   KEY_0
CH9:                           ;9 碼型   
	CJNE   R4,#152,CHKEYA
	MOV    A,#9
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   KEY_0
CHKEYA:                        ;A 碼型      
	CJNE   R4,#136,CHKEYB
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   TIME
CHKEYB:                        ;B 碼型   
	CJNE   R4,#168,CHSAVE
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   STOPWATCH
CHSAVE:                        ;C 碼型   
	CJNE   R4,#232,CHDIS
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   SAVE_T_S
CHDIS:                         ;D 碼型   
	CJNE   R4,#72,CHCHN
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   DISPLAY_T_S
CHCHN:                         ;E 碼型   
	CJNE   R4,#104,CHCLR
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   CHANGE_DIS
CHCLR:                         ;F 碼型   
	CJNE   R4,#50,CHINT
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   CLEAR
CHINT:                         ;G 碼型   
	CJNE   R4,#2, CHACK    ;ALARM CLOCK
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	CLR    P3.2
	SETB   P3.2
CHACK:
	CJNE   R4,#18, CHACKC  ;ALARM CLOCK CHANGE
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	MOV   39H,#2
	LJMP  ALARMC
CHACKC:
	CJNE   R4,#32, CHACKST ;ALARM CLOCK START
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	MOV   39H,#2
	LJMP  ACKCHANGE
CHACKST:
	CJNE   R4,#0, CHSCOREDIS
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP  ACKSTART
CHSCOREDIS:
	CJNE   R4,#64, CHSCOREAB
	MOV   NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	MOV   39H,#3
	LJMP  CHOUT
CHSCOREAB:
	CJNE   R4,#160, CHSCOREINC
	MOV    NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   SCOREAB
CHSCOREINC:
	CJNE   R4,#42, CHSCOREDEC
	MOV    NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   SCOREINC
CHSCOREDEC:
	CJNE   R4,#178, CHDIAN
	MOV    NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	LJMP   SCOREDEC
CHDIAN:
	CJNE   R4,#48, CHOUT
	MOV    NO_OUT,#0H  ;紅外遙控最終控制號碼存放單元清0
	MOV    R0,#0E7H	   
BACK_DIAN:
	 MOV   @R0,#0DH    
	 INC   R0
	 CJNE  R0,#0F0H,BACK_DIAN
	 MOV   39H,#4
CHOUT:	 RET
;*********************
;時鐘外部中斷程序
;*********************
INTOUT1:
	PUSH   ACC
	PUSH   PSW 
	MOV    PSW,#18H
	CLR    EX1  
	MOV    R4,#10
SB:     LCALL  DL865 
	JB     P3.3,EXIT 
	DJNZ   R4, SB 
	JNB    P3.3, $ 
	LCALL  DL4737 
	MOV    R5,#16 
JJJJA:  JNB    P3.3,$ 
	LCALL  DL865 
	MOV    C,P3.3 
	JNC    UUUA
	LCALL  DL1000 
UUUA:   DJNZ   R5,JJJJA
	MOV    R1,#22H 
	MOV    R2,#2 
PP:     MOV    R3,#8 
JJJJ:   JNB    P3.3,$ 
	LCALL  DL865 
	MOV    C,P3.3 
	JNC    UUU
	LCALL  DL1000 
UUU:    MOV    A,@R1
	RLC    A 
	MOV    @R1,A 
	DJNZ   R3,JJJJ 
	INC    R1
	DJNZ   R2,PP 
	MOV    A,22H
	CPL    A 
	CJNE   A,23H,EXIT 
	MOV    A,22H
	MOV    NO_OUT,A
EXIT:   SETB   EX1
	;MOV    3DH,#40
	CLR    PSW.3
	CLR    PSW.4
	POP    PSW
	POP    ACC 
	RETI 
;**********************<<延時程序>>******************************
;本程序完整版的下載地址:http://www.zg4o1577.cn/ziliao/file/dgndzz.rar
DL865: MOV R7,#12 ; 1.09*(2R6+4)*R7+2 延時子程序1,精確延時865 微秒
D1: MOV R6,#31
	DJNZ R6,$
	DJNZ R7,D1
	RET
DL4737: MOV R7,#12 ;延時子程序2,精確延時4737 微秒
D2: MOV R6,#179
	DJNZ R6,$
	DJNZ R7,D2
	RET
DL1000: MOV R7,#17;延時程序3,精確延時1000 微秒
D3: MOV R6,#25
	DJNZ R6,$
	DJNZ R7,D3
	RET
DL40: MOV R7,#1;延時程序4,精確延時40/17 微秒
D4: MOV R6,#1
	DJNZ R6,$
	DJNZ R7,D4
	RET  
;*************************
;秒表、定時器外部中斷程序
;**************************
INTOUT0:  PUSH  ACC
 	  PUSH  B
          PUSH  PSW 
          CLR   TR0               ;停止計數
	  MOV   39H,#0
          MOV   A,48H                ;	
          RL    A                     
          MOV   48H,A
          JNB   ACC.1,OUT0       ;查詢,A最低位為0時暫停計時,為1時繼續計時
          MOV   TH0,#0DCH	 ;#0FFH
          MOV   TL0,#00H		 ;#00H
          SETB  TR0                 ;開始計數  
OUT0:     POP   PSW
	  POP   B
	  POP   ACC
	  RETI   
;***************************
;	時鐘溢出中斷程序
;***************************
COUNT1:  PUSH  ACC
 	 PUSH  B
         PUSH  PSW 
         MOV   TL1  ,#00H          
         MOV   TH1  ,#0DCH      
         MOV   A,NUMBER_H6  ;秒百分位
         INC   A
         MOV   NUMBER_H6,A
         CJNE  A,#0AH,RETURN_1
         MOV   NUMBER_H6,#00H
         MOV   A,NUMBER_G6   ;秒十分位
         INC   A
	 MOV   NUMBER_G6,A
         CJNE  A,#0AH,RETURN_1
         MOV   NUMBER_G6,#00H
         MOV   A,NUMBER_F6    ;秒個位
         INC   A
         MOV   NUMBER_F6,A
         CJNE  A,#0AH,RETURN_1
         MOV   NUMBER_F6,#00H
         MOV   A,NUMBER_E6     ;秒十位
         INC   A
         MOV   NUMBER_E6,A
         CJNE  A,#06H,RETURN_1
         MOV   NUMBER_E6,#00H
         MOV   A,NUMBER_D6     ;分個位
         INC   A
         MOV   NUMBER_D6,A
         CJNE  A,#0AH,RETURN_1
         MOV   NUMBER_D6,#00H
         MOV   A,NUMBER_C6     ;分十位
         INC   A
         MOV   NUMBER_C6,A
         CJNE  A,#06H,RETURN_1
         MOV   NUMBER_C6,#00H
         MOV   A,NUMBER_A6
         CJNE  A,#02H,GO_ON_1
         MOV   A,NUMBER_B6 
         INC   A
         MOV   NUMBER_B6,A
         CJNE  A,#04H,RETURN_1
         MOV   NUMBER_B6,#00H
         MOV   NUMBER_A6,#00H
         LJMP  RETURN_1
GO_ON_1: 
        MOV   A,NUMBER_B6      ;時個位
        INC   A
        MOV   NUMBER_B6,A
        CJNE  A,#0AH,RETURN_1
        MOV   NUMBER_B6,#00H
        MOV   A,NUMBER_A6    ;時個位和時十位一同設置
        INC   A
        MOV   NUMBER_A6,A
RETURN_1:
	POP  PSW
	POP  B
	POP  ACC
	RETI                       ;散轉
;***************************
;	秒表溢出中斷程序
;***************************
COUNT0: PUSH  ACC
	PUSH  B
        PUSH  PSW 
        MOV   TL0  ,#00H          
        MOV   TH0 ,#0DCH      
	MOV   A,  49H
	JB    ACC.0,TIMER0
	JB    ACC.1,PENG
	LJMP  RETURN_0
PENG:   LJMP  STOP_00
TIMER0:
       MOV   A,NUMBER_H  ;秒百分位
       INC   A
       MOV   NUMBER_H,A
       CJNE  A,#0AH,RETURN_0
       MOV   NUMBER_H,#00H

       MOV   A,NUMBER_G   ;秒十分位
       INC   A
       MOV   NUMBER_G,A
       CJNE  A,#0AH,RETURN_0
       MOV   NUMBER_G,#00H
;
       MOV   A,NUMBER_F    ;秒個位
       INC   A
       MOV   NUMBER_F,A
       CJNE  A,#0AH,RETURN_0
       MOV   NUMBER_F,#00H
;
       MOV   A,NUMBER_E     ;秒十位
       INC   A
       MOV   NUMBER_E,A
       CJNE  A,#06H,RETURN_0
       MOV   NUMBER_E,#00H

       MOV   A,NUMBER_D     ;分個位
       INC   A
       MOV   NUMBER_D,A
       CJNE  A,#0AH,RETURN_0
       MOV   NUMBER_D,#00H

       MOV   A,NUMBER_C     ;分十位
       INC   A
       MOV   NUMBER_C,A
       CJNE  A,#06H,RETURN_0
       MOV   NUMBER_C,#00H

        MOV   A,NUMBER_A
       CJNE  A,#02H,GO_ON_0
       MOV   A,NUMBER_B 
       INC   A
       MOV   NUMBER_B,A
       CJNE  A,#04H,RETURN_0
       MOV   NUMBER_B,#00H
       MOV   NUMBER_A,#00H
       LJMP  RETURN_0
GO_ON_0: 
       MOV   A,NUMBER_B      ;時個位
       INC   A
       MOV   NUMBER_B,A
       CJNE  A,#0AH,RETURN_0
       MOV   NUMBER_B,#00H
;
       MOV   A,NUMBER_A    ;時個位和時十位一同設置
       INC   A
       MOV   NUMBER_A,A
RETURN_0:
	POP   PSW
	POP   B
	POP   ACC
	RETI                       ;散轉
;**************************
;定時器計時中斷入口
;****************************
STOP_00:
        MOV   A,NUMBER_H  ;0.01秒位
        DEC   A
        MOV   NUMBER_H,A
        CJNE  A,#0FFH,RETURN_00
        MOV   A,NUMBER_A
	CJNE  A,#0,REL_H
        MOV   A,NUMBER_B
	CJNE  A,#0,REL_H
        MOV   A,NUMBER_C
	CJNE  A,#0,REL_H
        MOV   A,NUMBER_D
	CJNE  A,#0,REL_H
        MOV   A,NUMBER_E
	CJNE  A,#0,REL_H
        MOV   A,NUMBER_F
	CJNE  A,#0,REL_H
        MOV   A,NUMBER_G
	CJNE  A,#0,REL_H
	MOV   NUMBER_H,#00H  
	LJMP  RETURN_00     
REL_H:  MOV   NUMBER_H,#09H
	LJMP  WEI_G
RETURN_00:
	LJMP  RETURN_02
WEI_G:  MOV   A,NUMBER_G   ;0.1秒位
        DEC   A
        MOV   NUMBER_G,A
        CJNE  A,#0FFH,RETURN_01
 	MOV   A,NUMBER_A
	CJNE  A,#0,REL_G
        MOV   A,NUMBER_B
	CJNE  A,#0,REL_G
        MOV   A,NUMBER_C
	CJNE  A,#0,REL_G
        MOV   A,NUMBER_D
	CJNE  A,#0,REL_G
        MOV   A,NUMBER_E
	CJNE  A,#0,REL_G
        MOV   A,NUMBER_F
	CJNE  A,#0,REL_G
	MOV   NUMBER_G,#00H   
	LJMP  RETURN_01     
REL_G:  MOV   NUMBER_G,#09H
;
WEI_F:  MOV   A,NUMBER_F  ;秒個位
        DEC   A
        MOV   NUMBER_F,A
        CJNE  A,#0FFH,RETURN_01
	MOV   A,NUMBER_A
	CJNE  A,#0,REL_F
        MOV   A,NUMBER_B
	CJNE  A,#0,REL_F
        MOV   A,NUMBER_C
	CJNE  A,#0,REL_F
        MOV   A,NUMBER_D
	CJNE  A,#0,REL_F
        MOV   A,NUMBER_E
	CJNE  A,#0,REL_F
	MOV   NUMBER_F,#00H 
	AJMP  RETURN_01       
REL_F:  MOV   NUMBER_F,#09H
	AJMP  WEI_E
RETURN_01:
	LJMP  RETURN_02
; 
WEI_E:  MOV   A,NUMBER_E   ;秒十位
        DEC   A
        MOV   NUMBER_E,A
        CJNE  A,#0FFH,RETURN_02
	MOV   A,NUMBER_A
	CJNE  A,#0,REL_E
        MOV   A,NUMBER_B
	CJNE  A,#0,REL_E
        MOV   A,NUMBER_C
	CJNE  A,#0,REL_E
        MOV   A,NUMBER_D
	CJNE  A,#0,REL_E
	MOV   NUMBER_E,#00H  
	LJMP  RETURN_02     
REL_E:  MOV   NUMBER_E,#05H
;
WEI_D:  MOV   A,NUMBER_D    ;分個位
        DEC   A
        MOV   NUMBER_D,A
        CJNE  A,#0FFH,RETURN_02
	MOV   A,NUMBER_A
	CJNE  A,#0,REL_D
        MOV   A,NUMBER_B
	CJNE  A,#0,REL_D
        MOV   A,NUMBER_C
	CJNE  A,#0,REL_D
	MOV   NUMBER_D,#00H 
	LJMP  RETURN_02        
REL_D:  MOV   NUMBER_D,#09H
;
WEI_C:  MOV   A,NUMBER_C     ;分十位
        DEC   A
        MOV   NUMBER_C,A
        CJNE  A,#0FFH,RETURN_02
	MOV   A,NUMBER_A
	CJNE  A,#0,REL_C
        MOV   A,NUMBER_B
	CJNE  A,#0,REL_C
	MOV   NUMBER_C,#00H 
	LJMP  RETURN_02        
REL_C:  MOV   NUMBER_C,#05H
;
WEI_B:  MOV   A,NUMBER_B      ;時個位
        DEC   A
        MOV   NUMBER_B,A
        CJNE  A,#0FFH,RETURN_02
        MOV   A,NUMBER_A
	CJNE  A,#0,REL_B
	MOV   NUMBER_B,#00H 
	LJMP  RETURN_02        
REL_B:  MOV   NUMBER_B,#09H
;
WEI_A:  MOV   A,NUMBER_A    ;時個位和時十位一同設置
        DEC   A
        MOV   NUMBER_A,A
        CJNE  A,#0FFH,RETURN_02
        MOV   NUMBER_A,#00H
RETURN_02:
	MOV   A,NUMBER_H2  ;秒百分位
       INC   A
       MOV   NUMBER_H2,A
       CJNE  A,#0AH,RETURN_22
       MOV   NUMBER_H2,#00H
;
       MOV   A,NUMBER_G2   ;秒十分位
       INC   A
       MOV   NUMBER_G2,A
       CJNE  A,#0AH,RETURN_22
       MOV   NUMBER_G2,#00H
;
       MOV   A,NUMBER_F2    ;秒個位
       INC   A
       MOV   NUMBER_F2,A
       CJNE  A,#0AH,RETURN_22
       MOV   NUMBER_F2,#00H
;
       MOV   A,NUMBER_E2     ;秒十位
       INC   A
       MOV   NUMBER_E2,A
       CJNE  A,#06H,RETURN_22
       MOV   NUMBER_E2,#00H

       MOV   A,NUMBER_D2     ;分個位
       INC   A
       MOV   NUMBER_D2,A
       CJNE  A,#0AH,RETURN_22
       MOV   NUMBER_D2,#00H

       MOV   A,NUMBER_C2     ;分十位
       INC   A
       MOV   NUMBER_C2,A
       CJNE  A,#06H,RETURN_22
       MOV   NUMBER_C2,#00H

        MOV   A,NUMBER_A2
       CJNE  A,#02H,GO_ON_22
       MOV   A,NUMBER_B2
       INC   A
       MOV   NUMBER_B2,A
       CJNE  A,#04H,RETURN_22
       MOV   NUMBER_B2,#00H
       MOV   NUMBER_A2,#00H
       LJMP  RETURN_0
GO_ON_22: 
       MOV   A,NUMBER_B2      ;時個位
       INC   A
       MOV   NUMBER_B2,A
       CJNE  A,#0AH,RETURN_22
       MOV   NUMBER_B2,#00H
;
       MOV   A,NUMBER_A2    ;時個位和時十位一同設置
       INC   A
       MOV   NUMBER_A2,A
RETURN_22:
	    POP PSW
	    POP B
	    POP ACC
RETI                      
END
關閉窗口

相關文章

主站蜘蛛池模板: 日本在线免费 | 99亚洲视频 | 精品久久久久久久久久久久 | 草b视频| 成人在线中文字幕 | 亚洲第一成人av | 精品久久久久久久久久久久久久 | 亚洲国产小视频 | 欧美日韩中文字幕在线 | 久久综合九色综合欧美狠狠 | 国产美女h视频 | 91视视频在线观看入口直接观看 | 国产在线第一页 | 成人国产精品入口免费视频 | 欧美一区不卡 | 91精品久久久久久久久中文字幕 | 亚洲一区精品在线 | av毛片 | 欧美日韩在线精品 | 国产一区二区三区四区五区加勒比 | 久久久久久免费毛片精品 | 性一交一乱一透一a级 | 在线日韩欧美 | 日韩综合在线 | 中文字幕一区二区三区乱码在线 | 欧美日韩国产在线观看 | av网站在线看| 亚洲五码在线 | 91精品久久久久久久久久 | 九九爱这里只有精品 | 久久精品久久久 | 国产视频一区二区三区四区五区 | 国产精品色| 国产精品欧美一区二区 | 中文字幕在线一区二区三区 | av二区三区| 岛国精品| 亚洲一二三区不卡 | 北条麻妃一区二区三区在线视频 | 亚洲精品一区二区 | 亚洲福利av |