📄 4.asm
字号:
INT0 EQU P3.2
INT1 EQU P3.3
T0 EQU P3.4
T1 EQU P3.5
WR EQU P3.6
RD EQU P3.7
DIROUT EQU P2.1
D1 EQU P0.0 ;zuo
D2 EQU P0.2
D3 EQU P0.3
D4 EQU P0.7 ;正方向
D5 EQU P0.1
D6 EQU P0.5 ;设置
D7 EQU P0.4
LED_LEFT EQU 0FEH ;0.0
DARK_LEFT EQU 01H
LED_RIGHT EQU 0EFH ;0.4
DARK_RIGHT EQU 10H
LED_AUTO EQU 0F7H ;0.3
DARK_AUTO EQU 08H
LED_HAND EQU 0DFH ;0.5
DARK_HAND EQU 20H
LED_POSTIVE EQU 07FH ; 0.7
DARK_POSTIVE EQU 080H ; P0.7
LED_NEGTIVE EQU 0FDH ; 0.1
DARK_NEGTIVE EQU 02H
LED_POWER EQU 0FBH ; 0.2
;BIT
SIG_CURSOR1 EQU 7CH
SIG_CURSOR2 EQU 76H
SIG_LIMIT1 EQU 74H
SIG_LIMIT2 EQU 6DH
DIR_STATE EQU 66H
FUNCSEL EQU 30H
BITSEL EQU 31H ;32,33,34 DELAY TIME
SCANRIGHT EQU 34H
SCANTIME_H EQU 35H
SCANTIME_L EQU 36H
GLEAMTIME EQU 37H
KEYSETTIME2 EQU 50H
HANDBYTE EQU 51H
LEDVALUE EQU 58H
DROPPTIME EQU 59H
BAOJINGTIME EQU 5AH
KEYVALUE EQU 5BH
KEYSETTIME1 EQU 5CH
CHECKTIME EQU 61H
JIXING1 EQU 40H
JIXING2 EQU 41H
JIXING3 EQU 42H
JIXING4 EQU 43H
SENSOR1 EQU 44H
SENSOR2 EQU 45H
SENSOR3 EQU 46H
SENSOR4 EQU 47H
SPEED1 EQU 48H
SPEED2 EQU 49H
SPEED3 EQU 4AH
SPEED4 EQU 4BH
SENSORNUM1 EQU 4CH
SENSORNUM2 EQU 4DH
SENSORNUM3 EQU 4EH
SENSORNUM4 EQU 4FH
TIMER0H EQU 38H
TIMER0L EQU 39H
TIMER1H EQU 0ECH
TIMER1L EQU 0EFH
TIMECONT EQU 3CH
TIMENUM EQU 3DH
AUTO EQU 40H
TWOWAY EQU 41H
JIXING EQU 42H
FIRSTSTART EQU 43H
DIRSTATE EQU 44H
QUICK EQU 45H
KEY_DOWN EQU P1.3
KEY_UP EQU P1.4
SENSORNEG EQU 3AH
HANDTIME EQU 3BH
ORG 0000H
SJMP MAIN
ORG 0003H
LJMP INT0PROCESS
ORG 000BH
LJMP TIMER0
ORG 0013H
LJMP INT1PROCESS
ORG 001BH
LJMP TIMER1
ORG 0030H
MAIN:
;***************INITAIL VARIABLE BEGIN********************
MOV SP,#66H
SETB FIRSTSTART
SETB AUTO ;AUTO=1,自动方式
CLR P2.0
CLR 7FH ;7F=1,SET STATE,ELSE DEMONSTRATE
CLR 7EH ;GLEAM mark;7E=0,light,else dark.
CLR 7DH ;time>2s
CLR 7AH
CLR 79H
CLR 78H ;KEY ALWAYS DOWN.;78=0->keyup
CLR 73H
SETB 6FH ;first set,6F=1
CLR 6EH
CLR 69H
CLR 64H
MOV C,T1
MOV SIG_LIMIT1,C
MOV C,T0
MOV SIG_LIMIT2,C
MOV C, P1.0
MOV SIG_CURSOR1, C ;START
MOV C,P1.1
MOV SIG_CURSOR2,C
CLR RD
LCALL DELAY100MS
LCALL DELAY100MS
SETB RD
MOV A, #00H
MOV GLEAMTIME, A ; ,0<GLEAMTIME<30,GLEAM TIME
MOV FUNCSEL,A
MOV BITSEL, A ; LEDSHIFT 0=<BITSEL<4
MOV LEDVALUE, #LED_AUTO
MOV KEYSETTIME2,A ;KEY SET RESET DOWN TIME ,SUBTITUTE FOR 64H,CAUSE OF "DUIZHAN"
MOV KEYSETTIME1, A ;FIRST SET TIME
MOV KEYSETTIME2, A
MOV HANDBYTE,A ;SET OR RESET CONTRO TIME
MOV DROPPTIME,A ;SETTIME
MOV HANDTIME,A
;**********INITIAL VARIABLE END*******************
;********************INITIAL DATA BUFFER BEGIN************
RD24WC02P:
MOV R0, #JIXING1
MOV R2, #10H
MOV R3, #04H
LCALL RD24WC02
PBYTE0:
MOV JIXING1,#0FH
MOV JIXING2,#0CH
MOV JIXING3,#0CH
MOV A,JIXING4
CLR C
SUBB A,#0FH
JC CHECKPBYTELOW
MOV JIXING4,#0DH
CHECKPBYTELOW:
MOV A,JIXING4
SUBB A,#0DH
JNC CHECKSENSOR
CLR C
MOV JIXING4,#0EH
CHECKSENSOR:
CLR C
MOV R0, #SENSOR1
MOV R2, #14H
MOV R3, #04H
LCALL RD24WC02
MOV SENSOR1,#05H
MOV SENSOR2,#0CH
MOV SENSOR3,#0CH
MOV A, SENSOR4
CLR C
SUBB A, #0AH
JC CHECKSPEED
MOV SENSOR4, #00H
CHECKSPEED:
MOV R0, #SPEED1
MOV R2, #18H
MOV R3, #04H
LCALL RD24WC02
MOV SPEED1,#0AH
MOV SPEED2,#0CH
MOV SPEED3,#0CH
MOV A, SPEED4
CLR C
SUBB A, #0AH
JC CHECKSENSORNUM
MOV SPEED4, #00H
CHECKSENSORNUM:
MOV R0, #SENSORNUM1
MOV R2, #1CH
MOV R3, #04H
LCALL RD24WC02
MOV SENSORNUM1,#0BH
MOV SENSORNUM2,#0CH
MOV SENSORNUM3,#0CH
MOV A, SENSORNUM4
CLR C
SUBB A, #03H
JC DATAPRO
MOV SENSORNUM4, #01H
DATAPRO:
LCALL DATAPROCESS
BAGCONT:
;******************INITIAL DATA BUFFER END***********
;******************INITIAL CPU BEGIN**************
INITIALCPU:
MOV 89H, #11H
SETB EA
SETB 77H ;77H=1 STARTORCURSOR in effect(set finish)else in vain(in setting).
;AT THAT MOMENT START OR CUR MAKE NO EFFECT TO OUT DEVICE.
CLR IT1
CLR IT0
SETB EX0
SETB EX1
SETB ET0
SETB ET1
MOV TMOD,#11H
MOV DPTR, #0034H
INC 0A2H
MOV DPTR, #0078H
INC 0A2H
MOV A, 82H
CJNE A, #78H, SEARCHCYCLE
LJMP SEARCHCYCLE
;**************INITIAL CPU END******************
;**************CYCLE BEGIN (FOREVER)**********************
SEARCHCYCLE:
MOV A,FUNCSEL
CJNE A,#00H,DEMOF
MOV R0,#JIXING1
SJMP DEMOLED
DEMOF:
CJNE A,#01H,DEMOP
MOV R0, #JIXING1
SJMP DEMOLED
DEMOP:
CJNE A,#02H,DEMOMODE
MOV R0,#SENSOR1
SJMP DEMOLED
DEMOMODE:
CJNE A,#03H,DEMOPACK
MOV R0,#SPEED1
SJMP DEMOLED
DEMOPACK:
CJNE A,#04H,ISPOWERLOW
MOV R0,#SENSORNUM1
SJMP DEMOLED
DEMOLED:
LCALL DEMO ;DEMONSTRATE SUBROUTINE
ISPOWERLOW:
JB INT1,INTERTIME
SETB 64H
INTERTIME:
JNB 64H,CHECKBEEPTIME
INC DROPPTIME
MOV A,DROPPTIME
JNZ CHECKBEEPTIME
CLR 64H
CHECKBEEPTIME:
JB RD, CHECKHANDTIME
INC BAOJINGTIME
MOV A, BAOJINGTIME
CJNE A, #0AH, CHECKHANDTIME
MOV BAOJINGTIME, #00H
SETB RD
CHECKHANDTIME:
JNB 69H,SEARCHKEY;BEEP LEN
INC HANDBYTE
MOV A,HANDBYTE
CJNE A,#64H,SEARCHKEY
MOV HANDBYTE,#00H
CLR 69H
SEARCHKEY:
JB 78H, ALWAYSDOWN ;SOMEKEY IS ALWAYS DOWN->SEARCH AGAIN
JB 7DH, L026EH ;78H=0->KEYUP,7D=1->TIME(2S) IS ENOUGH
MOV A, 90H
ANL A, #0F8H
CJNE A, #0F8H,SOMEKEYDOWN
MOV KEYSETTIME2, #00H
SJMP SEARCHCYCLE
KEYRESET:
JB P1.7, OTHERKEY ;NOT RESET,GOTO OTHERKEY
INC KEYSETTIME2
MOV A, KEYSETTIME2
RESETTIME:
CJNE A, #0CH, TIMELESS ;TIMELESS->TIMELESS
MOV KEYSETTIME2, #00H
OTHERKEY:
MOV 5EH, 90H
LCALL KEYPROCESS
SETB 7DH
CLR RD
L026EH:
INC KEYSETTIME1
MOV A, KEYSETTIME1
CJNE A, #0AH, L0288H
MOV KEYSETTIME1, #00H
CLR 7DH
SETB 78H
TIMELESS:
LJMP SEARCHCYCLE
SOMEKEYDOWN:
JNB AUTO,SETRESET
JB KEY_DOWN,CHECKKEY_UP
MOV JIXING,C
CPL C
MOV DIRSTATE,C
MOV DIROUT,C
CPL P2.0
SJMP SETRESET
CHECKKEY_UP:
JB KEY_UP,SETRESET
MOV JIXING,C
MOV DIRSTATE,C
MOV DIROUT,C
CPL P2.0
SJMP SETRESET
ALWAYSDOWN:
MOV A, 90H
ANL A, #0F8H
CJNE A, #0F8H, L0288H
CLR 78H
L0288H:
LJMP SEARCHCYCLE ;RETURN TO SEARCH
TIMEENOUGH:
JNB 6FH, KEYRESET;6F=1,FIRST SET ,IF NOTFIRSTSET OR P1.6=1->
JB P1.6, KEYRESET
INC KEYSETTIME2
MOV A, KEYSETTIME2
CJNE A, #0AH, TIMELESS
MOV KEYSETTIME2, #00H
SJMP OTHERKEY
SETRESET:
INC KEYSETTIME1
MOV A, KEYSETTIME1
CJNE A, #0AH, TIMELESS;
MOV KEYSETTIME1, #00H
MOV A, 90H
ANL A, #0F8H
CJNE A, #0F8H,TIMEENOUGH
MOV KEYSETTIME2,#00H
LJMP SEARCHCYCLE ; TIMEENOUGH &THIS KEY IS DOWN
;**************DEFINE KEY DOWN BEGIN********************
KEYPROCESS:
MOV A, 5EH
JB 0E0H.7, IFKEYSET
LJMP KEYRESETPRO
IFKEYSET:
JB 0E0H.6, IFKEYSEL
LJMP KEYSETPRO
IFKEYSEL:
JB 0E0H.5, IFKEYUP
LJMP KEYSELPRO
IFKEYUP:
JB 0E0H.4, IFKEYDOWN
LJMP KEYUPPRO
IFKEYDOWN:
JB 0E0H.3, OUTKEYPRO
LJMP KEYDOWNPRO
OUTKEYPRO:
RET
;************DEFINE KEY DOWN OVER *********************
;************KEY SET DOWN PROCESS BEGIN****************
KEYSETPRO:
JNB 6FH, SETSTART ;FIRST SET 6F=1
CLR 6FH
SETB 7FH ;CONTRO DISPLAY OR SET
CLR 69H
MOV FUNCSEL,#00H;FIRSET 30=1,PLAY PULSE
MOV BITSEL,#04H
SETSTART:
INC FUNCSEL
MOV A, FUNCSEL
CJNE A,#01H,SETSENSOR
RET
SETSENSOR:
CJNE A,#02H,SETSPEED
MOV R0, #JIXING1
MOV R2, #10H
MOV R3, #04H
LCALL WR24WC02
RET
SETSPEED:
CJNE A,#03H,SETSENSORNUM
MOV R0, #SENSOR1
MOV R2, #14H
MOV R3, #04H
LCALL WR24WC02
RET
SETSENSORNUM:
CJNE A,#04H,OUTSET
MOV R0, #SPEED1
MOV R2, #18H
MOV R3, #04H
LCALL WR24WC02
RET
OUTSET:
MOV FUNCSEL,#00H
MOV BITSEL,#00H
SETB 6FH
SETB 77H
MOV R0,#SENSORNUM1
MOV R2,#1CH
MOV R3,#04H
LCALL WR24WC02
LCALL DATAPROCESS
CLR 7FH
RET
;***********KEY SET DOWN PROCESS END*************
;***********KEY SELECT DOWN PROCESS BEGIN***************
KEYSELPRO:
JNB 7FH, PLAYSHIFT
RET
PLAYSHIFT:
CLR 69H
INC FUNCSEL
MOV A,FUNCSEL
CJNE A,#05H, OUTSEL
MOV FUNCSEL,#01H
OUTSEL:
RET
;***********KEY SELECT DOWN PROCESS END***************
;***********KEY UP PROCESS BEGIN***************
HANDLEFT:
RET
KEYUPPRO:
JNB AUTO,HANDLEFT
JNB 7FH, HANDLEFT
MOV A,FUNCSEL
CJNE A,#01H, ADDSENSOR
INC JIXING4
MOV A, JIXING4
CJNE A, #0FH, OUTADDJIXING
MOV JIXING4, #0DH
OUTADDJIXING:
RET
ADDSENSOR:
CJNE A,#02H,ADDSPEED
INC SENSOR4
MOV A, SENSOR4
CJNE A, #0AH, OUTADDSENSOR
MOV SENSOR4, #00H
OUTADDSENSOR:
RET
ADDSPEED:
CJNE A,#03H,ADDSENSORNUM
INC SPEED4
MOV A, SPEED4
CJNE A, #0AH, OUTADDSPEED
MOV SPEED4, #00H
OUTADDSPEED:
RET
ADDSENSORNUM:
CJNE A,#04H,OUTADD
INC SENSORNUM4
MOV A,SENSORNUM4
CJNE A,#03H,OUTADD
MOV SENSORNUM4,#01H
OUTADD:
RET
;***********KEY DOWN PROCESS BEGIN***************
OUTDOWNPRO:
RET
KEYDOWNPRO:
JNB AUTO,OUTDOWNPRO
JNB 7FH, OUTDOWNPRO
MOV A,FUNCSEL
CJNE A ,#01H, DECSENSOR
DECJIXING:
DEC JIXING4
MOV A, JIXING4
CJNE A, #0CH, OUTDECJIXING
MOV JIXING4, #0EH
OUTDECJIXING:
RET
DECSENSOR:
CJNE A, #02H, DECSPEED
DEC SENSOR4
MOV A, SENSOR4
CJNE A, #0FFH,OUTDECSENSOR
MOV SENSOR4, #09H
OUTDECSENSOR:
RET
DECSPEED:
CJNE A,#03H,DECSENSORNUM
DEC SPEED4
MOV A, SPEED4
CJNE A, #0FFH, OUTDECSPEED
MOV SPEED4, #09H
OUTDECSPEED:
RET
DECSENSORNUM:
CJNE A, #04H,OUTDEC
DEC SENSORNUM4
MOV A, SENSORNUM4
CJNE A, #00H, OUTDEC
MOV SENSORNUM4, #02H
OUTDEC:
RET
;***********KEY DOWN PROCESS END**************
;***********KEY RESET DOWN PROCESS BEGIN***************
KEYRESETPRO:
CPL AUTO
JNB AUTO,LIGHT_LEDHAND
ORL LEDVALUE,#DARK_HAND
ANL LEDVALUE,#LED_AUTO
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -