標題: 電子時鐘程序 [打印本頁]

作者: 荷西的松樹    時間: 2018-1-1 15:36
標題: 電子時鐘程序
        ORG 0000H
        AJMP MAIN
        ORG 000BH
        AJMP TIME
        ORG 0300H      
MAIN:
         mov 20H,#00H
         MOV 21H,#00H
         MOV 22H,#00H
         MOV 23H,#00H
         MOV IP,#02H            ;IP,IE初始化
         MOV IE,#82H
         MOV TMOD,#01H            ;設定定時器工作方式1
         MOV TL0,#0B0H
         MOV TH0,#3CH
         SETB TR0          ;啟動定時T0
         MOV SP,#40H            ;重設堆棧指針
NEXT:        LCALL DISP                ;調(diào)用顯示子程序
         LCALL KEY                  ;調(diào)用按鍵檢測子程序
         JZ NEXT                     
         LCALL ANKEY            ;調(diào)用按鍵處理子程序
         SJMP NEXT                ;重新循環(huán)
         NOP
         NOP
         NOP
;定時中斷處理程序:************************************************
TIME:       PUSH ACC                  ;保護現(xiàn)場
         PUSH PSW
         MOV TL0,#0B0H               ;賦定時初值
         MOV TH0,#3CH
         INC 20H                      ;
         MOV A,20H
         CJNE A,#20,RETI1
         MOV 20H,#00H                 ;一秒鐘時間到
         MOV A,21H
         ADD A,#01H
         DA A
         MOV 21H,A
         CJNE A,#60H,RETI1
         MOV 21H,#00H                 ;一分鐘時間到
         MOV A,22H
         ADD A,#01H
         DA A
         MOV 22H,A
         CJNE A,#60H,RETI1
         MOV 22H,#00H                 ;一小時時間到
         MOV A,23H
         ADD A,#01H
         DA A
         MOV 23H,A
         CJNE A,#24H,RETI1
         MOV 23H,#00H                 ;到時間達到24小時,清零.
RETI1:      POP PSW                    ;恢復現(xiàn)場
         POP ACC
         RETI                   ;中斷返回
         NOP
         NOP
;****************************************************
;顯示子程序
;****************************************************
DISP:         ANL 2FH,#10H          ;處理小數(shù)點
         MOV A,21H               ;處理秒21H-->2DH,2EH
         ANL A,#0FH
         ORL A,2FH
         MOV 2FH,A
         MOV A,21H
         ANL A,#0F0H
         SWAP A
         MOV 2EH,A
         ANL 2DH,#10H
         MOV A,22H               ;處理分鐘22H-->2CH,2DH
         ANL A,#0FH
         ORL A,2DH
         MOV 2DH,A
         MOV A,22H
         ANL A,#0F0H
         SWAP A
         MOV 2CH,A
         ANL 2BH,#10H
         MOV A,23H               ;處理小時23H-->2AH,2BH
         ANL A,#0FH
         ORL A,2BH
         MOV 2BH,A
         MOV A,23H
         ANL A,#0F0H
         SWAP A
         MOV 2AH,A
         MOV R0,#2FH           ;顯示偏移量
         MOV R3,#06H
         MOV DPTR,#TABLE
         MOV A,#0BFH
LOOP1:     
   MOV B,A
         MOV P2,A
         MOV A,@R0
         MOVC A,@A+DPTR
         MOV P0,A         ;送顯示
         MOV R2,#80H          ;延時
         DJNZ R2,$
         DEC R0
         MOV A,B
         RR A
         DJNZ R3,LOOP1                 ;循環(huán)顯示
         RET
TABLE:      DB 28h,7eh,0a2h,62h,74h,61h,21h                  ;不帶小數(shù)點
         DB 7ah,20h,60h,00,00,00,00,00,00
         DB 8H,5eH,82H,42H,54H,41H,1H,5aH  ;帶小數(shù)點
         DB 00H,40H,00,00,00,00,00,00
         NOP
         NOP
;*****************************************************
;按鍵判斷程序
;*****************************************************
KEY: MOV P3,#0FFH
         MOV A,P3
         CPL A
         ANL A,#3CH
         JZ RETX                       ;無鍵按下則返回
         LCALL DISP
         LCALL DISP
         MOV A,P3
         CPL A
         ANL A,#3CH
         JZ RETX                       ;鍵盤去抖動。
         MOV R6,A                  ;將鍵值存入R6。
LOOP2:     LCALL DISP
         MOV A,P3
         CPL A
         ANL A,#3CH
         JNZ LOOP2                 ;等待鍵釋放
         MOV A,R6
RETX:        RET
         NOP
         NOP
;*****************************************************
;按鍵處理子程序
;*****************************************************
ANKEY:     CLR EA                        ;關中斷
LX:    MOV A,R6
         JB ACC.2,L1               ;是功能鍵轉(zhuǎn)L1
         JB ACC.3,L2               ;是確認鍵轉(zhuǎn)L2
         JB ACC.4,L3               ;是減1鍵轉(zhuǎn)L3
         JNB ACC.5,L12                   ;不是增1鍵,轉(zhuǎn)L12
         JB 2BH.4,L6               ;判斷使哪一位(時、分、秒)的值加1
         JB 2DH.4,L8
         JB 2FH.4,L9
L12: LCALL DISP
         LCALL DISP
         LCALL KEY                  ;判斷有無鍵按下。
         JZ L12
         LJMP LX
L2:    MOV 25H,#00H                 ;確認鍵處理程序
         CLR 2BH.4
         CLR 2DH.4
         CLR 2FH.4
         SETB EA
         RET
L3:    JB 2BH.4,L61            ;增一鍵處理程序
         JB 2DH.4,L81
         JB 2FH.4,L91
         AJMP L12
L1:    MOV A,25H                   ;功能鍵處理程序
         JZ LB1
         JB ACC.0,LB2
         JB ACC.1,LB3
         JNB ACC.2,L12
LB1: MOV 25H,#01H                 ;25H單元是標志位,(25H=01H調(diào)節(jié)時單元的值
         SETB 2BH.4
         CLR 2DH.4
         CLR 2FH.4
         AJMP L12
LB3: MOV 25H,#04H                 ;25H單元是標志位,(25H=01H調(diào)節(jié)秒單元的值
         SETB 2FH.4
         CLR 2DH.4
         CLR 2BH.4
         AJMP L12
LB2: MOV 25H,#02H             ;25H單元是標志位,(25H=01H調(diào)節(jié)分單元的值
         SETB 2DH.4
         CLR 2BH.4
         CLR 2FH.4
         AJMP L12
L61: AJMP L611
L81: AJMP L811
L91: AJMP L911
L6:    MOV A,23H               ;時加一
         ADD A,#01H
         DA A
         MOV 23H,A
         CJNE A,#24H,L15
L15: JC L112
         MOV 23H,#00H
L112:        AJMP L12
L8:    MOV A,22H               ;分加一
         ADD A,#01H
         DA A
         MOV 22H,A
         CJNE A,#60H,L16
L16: JC L112
         MOV 22H,#00H
         AJMP L12
L9:    MOV A,21H               ;秒加一
         ADD A,#01H
         DA A
         MOV 21H,A
         CJNE A,#60H,L17
L17: JC L112
         MOV 21H,#00H
         AJMP L12
L611:        MOV A,23H               ;時減一
         ADD A,#99H
         DA A
         MOV 23H,A
         CJNE A,#99H,L112
         MOV 23H,#23H
         AJMP L12
L811:        MOV A,22H               ;分減一
         ADD A,#99H
         DA A
         MOV 22H,A
         CJNE A,#99H,L112
         MOV 22H,#59H
         AJMP L12
L911:        MOV A,21H               ;秒減一
         ADD A,#99H
         DA A
         MOV 21H,A
         CJNE A,#99H,L112
         MOV 21H,#59H
         AJMP L12
         NOP
         NOP
         END






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1