📄 evtsub.asm
字号:
;#############################################################
; FILE NAME EVTSUB.ASM
; SUBROUTE: PUTEVENT - PUT ONE EVENT TO EVENT BUFFER
; CALL FUNCTION:
; PARMENTERS: A - THE EVENT CODE, B - THE SUB CODE
; COMMON DATA USED: EVENT BUFFER
; CHANGE REGISTER: A, R0
; RETURN: C - OK! or BUFFER OVER ERROR
;------------------------------------------------------------
PUTEVENT: MOV R0, pEVENTBUFe
CLR B_EN_INT ; PROVENT THE TIMER INT RE_ENTER
MOV pPORT2, #cSCDRAM ; INIT. EXT. RAM SEGMENT FOR EVENT BUFFER
MOVX @R0, A
MOV A, #10H
ADD A, R0
XCH A, R0
XCH A, B
MOVX @R0, A
XCH A, B
INC A
MOV pPORT2, dEXTPART ; RESTORE THE SEGMENT FOR EXT. RAM
SETB B_EN_INT ; PROVENT THE TIMER INT RE_ENTER
CJNE A, pEVENTBUFf, GetPutPnt
SETB C
RET
GetPutPnt: INC pEVENTBUFe
CJNE A, #cEVENTBUFe, OverPutEvent
MOV pEVENTBUFe, #cEVENTBUFf
OverPutEvent:CLR C
RET
;#############################################################
; FILE NAME EVTSUB.ASM
; SUBROUTE: GETEVENT - GET EVENT FROM EVENT BUFFER
; CALL FUNCTION:
; PARMENTERS: NONE
; COMMON DATA USED: EVENT BUFFER
; CHANGE REGISTER: A, R0
; RETURN: A - THE EVENT CODE, B - THE SUB CODE
;------------------------------------------------------------
GETEVENT: MOV R0, pEVENTBUFf
MOV A, R0
CJNE A, pEVENTBUFe, GetIncPnt
CLR A
RET
GetIncPnt: MOV dEXTPART, #cSCDRAM
MOV pPORT2, #cSCDRAM ; INIT. EXT. RAM SEGMENT FOR EVENT BUFFER
MOV B, A
ADD A, #10H
MOV R0, A
MOVX A, @R0
XCH A, B
MOV R0, A
MOVX A, @R0
INC pEVENTBUFf
INC R0
MOV dEXTPART, #0
MOV pPORT2, #0 ; RESTORE THE SEGMENT FOR EXT. RAM
CJNE R0, #cEVENTBUFe, OverGetEvent
MOV pEVENTBUFf, #cEVENTBUFf
OverGetEvent:RET
;#############################################################
; FILE NAME EVTSUB.ASM
; SUBROUTE: SYSEVENTP - SYSTEM NORMAL EVENT PROCESS TO LCD
; CALL FUNCTION: DELAY
; USING PARMENTERS: DPTR - THE POINT TO THE PAGE BUFFER
; COMMON DATA USED:
; CHANGE REGISTER: ALL REGISTER C AND TMPEBUF
; RETURN: NONE
;------------------------------------------------------------
PROC SYSEVENTP
SYSEVENTP: JB ACC.6, FunckeyP
JB ACC.7, FuncKeyP
PUSH ACC ; else LESS 40h code process
CALL GETRCDPNT
CALL GET_RECORD ; GET FIELD DEFINE DATA
DEC dPAG_RCD_PNT
POP B ; SAVE THE EVENT CODE TO B
MOV A, dFLD_R7
RLC A
JC InputEnd
RLC A
ORL C, bFLD_ACTIVE ; IS ACTIVE FOR INPUT FIELD?
JNC InputEnd
MOV A, dFLD_R7
ANL A, #3FH
MOV R2, A
CLR C
MOV dEXTPART, #cSCDRAM
MOV pPORT2, #cSCDRAM
MOV A, dFLD_INP_PNT
XCH A, R2 ; GET THE EFFICENT LENGTH
SUBB A, R2
MOV R2, A
JZ InputEnd
MOV A, dFLD_INP_PNT
ADD A, #xINPUTBUF
MOV R0, A
MoveNext: MOVX A, @R0 ; MOVE THE BACK CHARS TO NEXT
XCH A, B
MOVX @R0, A
INC R0
MOV A, B
JZ IsPWD
DJNZ R2, MoveNext
IsPWD: MOVX @R0, A
MOV R1, #xINPUTBUF
MOV A, dFLD_R6
RRC A
JNC ForFldD
MOV A, dFLD_INP_PNT
ADD A, dFLD_R1
MOV R1, A ; GET THE POINTER TO DISPLAY RAM
MOV dEXTPART, dFLD_R2 ; IT'S PASSWORD!
MOV pPORT2, dFLD_R2
MOV A, #2Ah ; INPUT '*'
MOVX @R1, A
INC R1
CLR A
MOVX @R1, A
MOV R1, dFLD_R1
ForFldD: MOV A, dFLD_R7
ANL A, #03FH
MOV R7, A
CALL LCD_WTR_STR ; DISPLAY THE LEST CHARS AFTER CURSOR
INC dFLD_INP_PNT ; INC TO NEXT CHAR
MOV A, dFLD_INP_PNT
MOV R5, A
CALL LCD_SET_CURSOR ; RESTORE THE CURSOR
InputEnd: MOV dEXTPART, #0
MOV pPORT2, #0 ; RESTORE EXT. RAM SEGMENT
RET
FuncKeyP: CJNE A, #eTWINKLCD0, NextEvt0
CLR A
CALL FLDUPDATE
CLR A
RET ; JMP ProEvtEnd
NextEvt0: CJNE A, #eTWINKLCD1, NextEvt1
CALL FLDTWINKLE
QuitEvtP: CLR A
RET ; JMP ProEvtEnd
NextEvt1: CJNE A, #eBACKSPACE, NextEvt2
MOV A, #eDELETE
CALL PUTEVENT
MOV A, #eARROW_LEFT
NextEvt2: CJNE A, #eDELETE, NextEvt3
;-----------delete character process ------------
CALL FLD_GETLNG ; GET CURRENT FIELD LENGTH TO R2
MOV R2, A
CLR C
MOV dEXTPART, #cSCDRAM
MOV pPORT2, #cSCDRAM
MOV A, dFLD_INP_PNT
XCH A, R2 ; GET THE EFFICENT LENGTH
SUBB A, R2
MOV R2, A
MOV A, dFLD_INP_PNT
ADD A, #xINPUTBUF
INC dFLD_INP_PNT
MOV R0, A
DelNext: MOVX A, @R0 ; MOVE THE BACK CHARS TO NEXT
DEC R0
MOVX @R0, A
INC R0
INC R0
DJNZ R2, DelNext
MOV dEXTPART, #0
MOV pPORT2, #0 ; RESTORE EXT. RAM SEGMENT
CALL DIS_FIELD ; DISPLAY THE LEST CHARS AFTER CURSOR
JMP RstCur
EvtErrET: JMP EvtErrEnd ; NO CHARACTER WILL BE DELETE
NextEvt3: CJNE A, #eARROW_RIGHT, NextEvt4
CALL FLD_GETLNG ; GET CURRENT FIELD LENGTH TO R2
MOV B, A
MOV dEXTPART, #cSCDRAM
MOV pPORT2, #cSCDRAM
MOV A, dFLD_INP_PNT
ADD A, #xINPUTBUF
MOV R1, A
MOVX A, @R1
JNZ IsToEnd
MOV dEXTPART, #0
MOV pPORT2, #0
RET
; MOV A, #eFLDRIGHT ; FOR NEXT FIELD
; JMP NextEvt4
IsToEnd: MOV A, dFLD_INP_PNT
INC A
CJNE A, B, SavePntR
MOV dEXTPART, #0
MOV pPORT2, #0
RET
SavePntR: INC dFLD_INP_PNT
MOV dEXTPART, #0
MOV pPORT2, #0
JMP RstCur
NextEvt4: CJNE A, #eARROW_LEFT, NextEvt5
MOV dEXTPART, #cSCDRAM
MOV pPORT2, #cSCDRAM
MOV A, dFLD_INP_PNT
JNZ SavePntL
MOV dEXTPART, #0
MOV pPORT2, #0
RET
; MOV A, #eFLD_LEFT ; FOR PROVIOUS FIELD
; JMP NextEvt5
SavePntL: DEC dFLD_INP_PNT
MOV dEXTPART, #0
MOV pPORT2, #0
JMP RstCur
NextEvt5: CJNE A, #eARROW_END, NextEvt6
CALL FLD_GETLNG ; GET CURRENT FIELD LENGTH TO R2
MOV B, A
MOV dEXTPART, #cSCDRAM
MOV pPORT2, #cSCDRAM
MOV R0, #xINPUTBUF
DEC R0
ForNtC: INC R0
MOVX A, @R0
JNZ ForNtC
MOV A, R0
CLR C
SUBB A, #xINPUTBUF
CJNE A, B, FindEnd
DEC A
FindEnd: MOV dFLD_INP_PNT, A
MOV dEXTPART, #0
MOV pPORT2, #0
JMP RstCur
NextEvt6: CJNE A, #eARROW_HOME, NextEvt7
MOV dEXTPART, #cSCDRAM
MOV pPORT2, #cSCDRAM
CLR A
MOV dFLD_INP_PNT, A
MOV dEXTPART, A
MOV pPORT2, A
RstCur: CALL FLDCURSOR
RET
NextEvt7: CJNE A, #eLOC_ON, NextEvt8 ; ----
MOV R0, dSYSPAGE
CJNE R0, #cPAGE0, NextEvt8 ; 不在初始页
CALL TURN_UP ; TURN LCD RIGHT UP
RET
NextEvt8: CJNE A, #eLOC_OFF, NextEvtA
MOV R0, dSYSPAGE
CJNE R0, #cPAGE0, NextEvtA ; 不在初始页
CALL TURN_DOWN ; TURN LCD RIGHT UP
RET
NextEvtA: CJNE A, #ePAGMENU1, NextEvtB
MOV dSYSPAGE, #cSYSMENU1
MOV A, #ePAG_DISP
NextEvtB: CJNE A, #ePAGMENU2, NextEvtC
MOV dSYSPAGE, #cSYSMENU2
MOV A, #ePAG_DISP
NextEvtC: CJNE A, #ePAGMENU3, NextEvtD
MOV dSYSPAGE, #cSYSMENU3
MOV A, #ePAG_DISP
NextEvtD: CJNE A, #ePAGMENU4, NextEvtE
MOV dSYSPAGE, #cSYSMENU4
MOV A, #ePAG_DISP
NextEvtE: CJNE A, #ePAGMENU5, NextEvtF
MOV dSYSPAGE, #cSYSMENU5
MOV A, #ePAG_DISP
NextEvtF: CJNE A, #ePAGMENU6, NextEvtG
MOV dSYSPAGE, #cSYSMENU6
MOV A, #ePAG_DISP
NextEvtG: CJNE A, #eSYS_ON, NextEvtH
MOV A, #6 ; TURN RUN LAMP ON
CALL I2CWRUN
JB bSYSON, ProEvtE2
SETB bSYSON
MOV A, #cSYSSTART ; START TO TURN ON THE SYSTEM
MOV B, #eSTACHG
CALL SAVEMSG
MOV dSYSMODE, #cSYSSTART ; = 1
CALL POWERON ; TURN THE 12V POWER ON
CLR A
MOV R0, #dIN_1STA
MOV R5, #8
CALL CLR_MEMORY
MOV R0, #dOUT1SET
MOV R5, #8
CALL CLR_MEMORY
MOV dERRCODE, A
MOV A, #dERRCODE
CALL FLDUPDATE
CLR A ; /...
UpKeyFld: MOV A, #dSYSBITS1
CALL FLDUPDATE
CLR A
ProEvtE2: RET ; JMP ProEvtEnd
NextEvtH: CJNE A, #eSYS_OFF, NextEvt10
MOV A, #7 ; TURN RUN LAMP OFF
CALL I2CWRUN
JNB bSYSON, ProEvtE2
CLR bSYSON
MOV A, #cSYSDOWN ; START TURN OFF THE SYSTEM
MOV B, #eSTACHG
CALL SAVEMSG
JMP ProEvtE2
NextEvt10: CJNE A, #ePAG_DOWN, NextEvt11
INC dSYSPAGE
MOV A, dSYSPAGE
SWAP A
ANL A, #0FH
MOV DPTR, #uPAGSNUM
;@@@@@@@@@@@ ADD SIMULATE RUN
MOVC A, @A+DPTR
CJNE A, dSYSPAGE, ForUpPage
ANL dSYSPAGE, #0F0H
ForUpPage: MOV A, #ePAG_DISP
NextEvt11: CJNE A, #ePAG_UP, NextEvt12
MOV A, dSYSPAGE
ANL A, #0FH
JNZ DecOneIs
MOV A, dSYSPAGE
SWAP A
ANL A, #0FH
MOV DPTR, #uPAGSNUM
;@@@@@@@@@@@@@@@@@@@@
MOVC A, @A+DPTR
MOV dSYSPAGE, A
DecOneIs: DEC dSYSPAGE
MOV A, #ePAG_DISP
NextEvt12: CJNE A, #ePAG_DISP, FldChgEvt
MOV A, dSYSMODE
JNZ DispPage
SETB B_CTLLCK
MOV A, B
JNZ DispPage
CLR B_CTLLCK
DispPage: CALL LCD_CLR ; CLEAR THE SCREEN
CALL LCD_DRAW_FRAME
CALL DISP_PAGE
; MOV FIELD PNT. TO FRIST
JC EvtErrEnd ; ERROR KEY PRESS
CALL FIX_FLD
CLR A
RET
FldChgEvt: PUSH ACC ; SAVE THE EVENT CODE
CJNE A, #eFLDRIGHT, NextEvt18
CALL FLD_RIGHT
JNC ProEvtEnd
EvtErrE: POP ACC
EvtErrEnd: MOV A, #cKEYSOUND
CALL ERRBELL
CLR ACC
RET
NextEvt18: CJNE A, #eFLD_LEFT, NextEvt19
CALL FLD_LEFT
JC EvtErrE
ProEvtEnd: POP ACC
RET ; JMP ProEvtEnd
NextEvt19: CJNE A, #eFLD_INC, NextEvt1A
CALL FLD_INC
JMP ProEvtEnd
NextEvt1A: CJNE A, #eFLD_DEC, NextEvt1B
CALL FLD_DEC
JMP ProEvtEnd
NextEvt1B: CJNE A, #eFLD_INCH, NextEvt1C
CALL FLD_INCH
JMP ProEvtEnd
NextEvt1C: CJNE A, #eFLD_DECH, ProEvtEnd
CALL FLD_DECH
JMP ProEvtEnd
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -