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

📄 ok.txt

📁 89S51平台
💻 TXT
📖 第 1 页 / 共 2 页
字号:
S_FLASH          EQU     00H          ;SECOND LCD FLASH
KEYFLAG          EQU     01H          ;IF NONE KEY PRESS,SET KEYFLAG
TIMEFLAG         EQU     02H          ;IF TIME KEY PRESS ,SET TIMEFLAG
DELLFLAG         EQU     03H          ;IF DELL KEY PRESS ,SET DELLFLAG

SHOW_PC          EQU     21H          ;SHOW
SECOND0          EQU     22H          ;DEFINE SECOND LOW BYTE ADDRESS
SECOND1          EQU     23H          ;DEFINE SECOND HIGH BYTE ADDRESS
MINUTER0         EQU     24H          ;DEFINE MINUTER LOW BYTE ADDRESS
MINUTER1         EQU     25H          ;DEFINE MINUTER HIGH BYTE ADDRESS
HOUR0            EQU     26H          ;DEFINE HOUR LOW BYTE ADDRESS
HOUR1            EQU     27H          ;DEFINE HOUR HIGH BYTE ADDRESS
TIMECOUNT        EQU     28H          ;TIME COUNT
DELAY_ADDR1      EQU     29H          ;DELAY ADDRESS 1
DELAY_ADDR2      EQU     30H          ;DELAY ADDRESS 2
DELAY_ADDR3      EQU     31H          ;DELAY ADDRESS 3
SHOW_MODEL       EQU     32H          ;SHOW MODEL
BEFOREKEY        EQU     33H          ;BEFORE KEY
NOWKEY           EQU     34H          ;KEY NOW
DELLCOUNTER      EQU     35H          ;DELL COUNTER
DELL0            EQU     36H
DELL1            EQU     37H
;********************************

    ORG  0000H
    MOV SP,#60H
    SJMP  START
    ORG  001BH          ;INT_T1 ENTER ADDRESS
    LJMP INT_T1
    ORG  0040H
START:                  ;PROGROM START
     MOV SECOND0,#0H     ;FRIST SETTING
     MOV SECOND1,#0H
     MOV MINUTER0,#0H
     MOV MINUTER1,#0H
     MOV HOUR0,#2H
     MOV HOUR1,#1H
     MOV DELLCOUNTER,#0H
     MOV DELL0,#0H
     MOV DELL1,#0H
     MOV TMOD,#10H       ;INTERRUPT T1
     MOV TL1,#0B0H       ;50MS
     MOV TH1,#3CH
     SETB TR1            ;ALLOW INTERRUPT
     SETB EA             ;CPU ALLOW INTERRUPT
     SETB ET1            ;T1 ALLOW INTERRUPT
     MOV  R3,#0H
     CLR  TIMEFLAG
     CLR  DELLFLAG
     
;**********MAJOR PROGRAM********
BEGIN:
     MOV        SHOW_MODEL,R3
     JB         DELLFLAG,ACROSS1
     MOV        SHOW_PC,#SECOND0
     LCALL      DISPLAY
     JNB        DELLFLAG,CROSS0   
ACROSS1:
     MOV        SHOW_PC,#DELLCOUNTER     
     LCALL      DELLSHOW
CROSS0:            
     LCALL      TIMERCMP
     LCALL      CHECK_KEYBROAD
     SJMP       BEGIN
;*************************************        
;***********CHECK_KEYBROAD PROGRAM***
CHECK_KEYBROAD:
        MOV    BEFOREKEY,NOWKEY
        LCALL  GETKEY                     ;BEFOREKEY IS EQUATE WITH NOWKEY AND KEYFLAG IS '1'
        MOV    NOWKEY,A                     ;THEN EFFECT
        CJNE   A,NOWKEY,BEGIN
        CJNE   A,#0,GO_TO_NEXT1
        SETB   KEYFLAG
        RET
GO_TO_NEXT1:    ;------------------------------------TIME_KEY1
        JNB   KEYFLAG,GO_TO_EXIT
        CLR   KEYFLAG
        JB    TIMEFLAG,CONTINUE_TIMESET      ;IF TIMEFLAG IS '1' ,CONTINUTE TIMESET
        CJNE  A,#1,GO_TO_NEXT2
        MOV   R3,#3H                        ;FRIST CHANG HOUR BYTE
        SETB  TIMEFLAG
CONTINUE_TIMESET:
        LCALL TIMESET
        SJMP  GO_TO_EXIT
GO_TO_NEXT2:    ;----------------------------------------DELL_KEY2        
        JB    DELLFLAG,CONTINUE_DELLSET      ;IF DELLFLAG IS '1' ,CONTINUTE DELLSET
        CJNE  A,#2,GO_TO_EXIT
        MOV   R3,#2H
        SETB  DELLFLAG
CONTINUE_DELLSET:        
        LCALL DELLSET        
GO_TO_EXIT:
        RET


;*******************************************
;**********TIMESET PROGRAM****************
TIMESET:
;-----------------------------------------------------------TIME_KEY3
        CJNE A,#3,GO_TO_NEXT4
        DJNZ R3,LONG_JUMP                ;IT CAN'T JUMP SO LONG,SO SET ANOTHER
        MOV  R3,#3
        LJMP TIMESET_EXIT
LONG_JUMP:
        LJMP TIMESET_EXIT
;-------------------------------------------------------TIME_KEY4
GO_TO_NEXT4:
        CJNE A,#4,GO_TO_NEXT5
        MOV  A,R3
        CJNE A,#3,CHANG1_MIN              ;ADD HOUR OR MINUTER OR SECOND
        MOV A,HOUR1
        CJNE A,#2,ADD_TEN                 ;FOUR ADD
        INC  HOUR0                        ;HOUR HIGH BIT IS '2' ?
        MOV A, HOUR0                      ;IT IS '2',FOUR ADD
        CJNE A,#4,SHORT_JUMP
        MOV HOUR0,#0
        MOV HOUR1,#0
        LJMP TIMESET_EXIT
ADD_TEN:
        INC HOUR0
        MOV A,HOUR0
        CJNE A,#0AH,SHORT_JUMP            ;IT IS NOT '2',TNE ADD
        MOV HOUR0,#0                      ;TEN ADD
        INC HOUR1
        LJMP TIMESET_EXIT
CHANG1_MIN:
        CJNE A,#2,CHANG1_SEC
        INC MINUTER0
        MOV A,MINUTER0
        CJNE A,#0AH,SHORT_JUMP            ;MINUTER ADD
        MOV  MINUTER0,#0
        INC  MINUTER1
        MOV A,MINUTER1
        CJNE A,#6,SHORT_JUMP
        MOV MINUTER0,#0
        MOV MINUTER1,#0
        LJMP TIMESET_EXIT
CHANG1_SEC:
        INC SECOND0
        MOV A,SECOND0
        CJNE A,#0AH,SHORT_JUMP
        MOV  SECOND0,#0                   ;SECOND ADD
        INC  SECOND1
        MOV A,SECOND1
        CJNE A,#6,SHORT_JUMP
        MOV SECOND0,#0
        MOV SECOND1,#0
        LJMP TIMESET_EXIT
SHORT_JUMP:
        LJMP TIMESET_EXIT
;-------------------------------------------------TIME_KEY5
GO_TO_NEXT5:
        CJNE A,#5,GO_TO_NEXT7
        MOV A,R3
        CJNE A,#3,CHANG2_MIN              ;SUB HOUR OR MINUTER OR SECOND
        MOV A, HOUR1
        CJNE A,#0,SUB_HOUR
        MOV  A,HOUR0
        CJNE A,#0,LENGTH_JUMP
        DEC HOUR0
        MOV HOUR0,#3
        MOV HOUR1,#2
        SJMP TIMESET_EXIT
LENGTH_JUMP:
        DEC HOUR0
        SJMP TIMESET_EXIT
SUB_HOUR:
        DEC HOUR0
        MOV A,HOUR0
        CJNE A,#0,SHORT_JUMP
        MOV HOUR0,#9
        DEC HOUR1
        SJMP TIMESET_EXIT                   ;HOUR SUB COMPLETE
CHANG2_MIN:
        CJNE A,#2,CHANG2_SEC

        MOV A,MINUTER1
        CJNE A,#0,SUB_MINUTER
        MOV  A,MINUTER0
        CJNE A,#0,LENGTH1_JUMP
        DEC MINUTER0
        MOV MINUTER0,#9
        MOV MINUTER1,#5
        SJMP TIMESET_EXIT
LENGTH1_JUMP:
        DEC MINUTER0
        SJMP TIMESET_EXIT
SUB_MINUTER:
        DEC MINUTER0
        MOV A,MINUTER0
        CJNE A,#0,SHORT_JUMP
        MOV MINUTER0,#9
        DEC MINUTER1
        SJMP TIMESET_EXIT                   ;MINUTER SUB COMPLETE
CHANG2_SEC:                      ;
        MOV A,SECOND1
        CJNE A,#0,SUB_SECOND
        MOV  A,SECOND0
        CJNE A,#0,LENGTH2_JUMP
        DEC SECOND0
        MOV SECOND0,#9
        MOV SECOND1,#5
        SJMP TIMESET_EXIT
LENGTH2_JUMP:
        DEC SECOND0
        SJMP TIMESET_EXIT
SUB_SECOND:
        DEC SECOND0
        MOV A,SECOND0
        CJNE A,#0,SHORT_JUMP
        MOV SECOND0,#9
        DEC SECOND1
        SJMP TIMESET_EXIT                  ;SECOND SUB COMPLETE
;----------------------------------------------------------TIME_KEY7
GO_TO_NEXT7:
        CJNE A,#6,GO_TO_NEXT8
        CLR TIMEFLAG
        MOV R3,#0
        SJMP TIMESET_EXIT
;--------------------------------------------------------TIME_KEY8
GO_TO_NEXT8:
        CJNE A,#7,TIMESET_EXIT
        CLR TIMEFLAG
        MOV R3,#0
TIMESET_EXIT:
        RET                   ;TIMESET KEYBROAD COMPLETE
;*****************************************
;***********************************
DELLSHOW:
        MOV R4,#6
DELL_SCAN:
        MOV A,R4
        LCALL GET_DELL_DATA
        MOV DPTR,#LED_DELL_DATA         ;DIPLAY DATA
        MOVC A,@A+DPTR
        MOV P2,0FFH
        MOV P0,A                  ;SCAN FROM 
        MOV A,R4
        DEC A
        MOV DPTR,#LED_DELL_BIT
        MOVC A,@A+DPTR
        MOV P2,A
        LCALL DELAY3
        DJNZ R4,DELL_SCAN
        MOV P2,#0FFH
        RET

;****************************
GET_DELL_DATA:
        MOV DPTR,#TABLE1
        DEC A                  ;A-1
        RL A                   ;A*2
        MOV B,#10
        JMP @A+DPTR
TABLE1:
        SJMP DELL_LED5         ;TO SHOW DELL HIGH BIT
        SJMP DELL_LED4
        SJMP DELL_LED3
        SJMP DELL_LED2
        SJMP DELL_LED1
        SJMP DELL_LED0         ;FROM SHOW DELL LOW BIT

DELL_LED0: ;-------------------------------------------------DELL_LED0
         MOV A,SHOW_MODEL
         CJNE A,#1,NOT_DELL_LED0
         JB S_Flash,NOT_DELL_LED0
         MOV A,#10
         RET
NOT_DELL_LED0:
         MOV R1,SHOW_PC
         MOV A,@R1
         DIV AB
         RET

DELL_LED1: ;-------------------------------------------------DELL_LED1
         MOV A,SHOW_MODEL
         CJNE A,#1,NOT_DELL_LED1
         JB S_Flash,NOT_DELL_LED1
         MOV A,#10
         RET
NOT_DELL_LED1:
         MOV R1,SHOW_PC         
         MOV A,@R1
         DIV AB
         MOV A,B
         RET
DELL_LED2: ;-------------------------------------------------DELL_LED2
         MOV A,SHOW_MODEL
         CJNE A,#2,NOT_DELL_LED2
         JB S_Flash,NOT_DELL_LED2
         MOV A,#10
         RET
NOT_DELL_LED2:
         MOV R1,SHOW_PC         
         INC R1
         MOV A,@R1
         DIV AB
         RET
DELL_LED3: ;-------------------------------------------------DELL_LED3
         MOV A,SHOW_MODEL
         CJNE A,#2,NOT_DELL_LED3
         JB S_Flash,NOT_DELL_LED3
         MOV A,#10
         RET
NOT_DELL_LED3:
         MOV R1,SHOW_PC
         INC R1                  
         MOV A,@R1
         DIV AB
         MOV A,B
         RET
DELL_LED4: ;-------------------------------------------------DELL_LED4
         MOV A,SHOW_MODEL

⌨️ 快捷键说明

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