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

📄 4.asm

📁 数字纠偏系统
💻 ASM
📖 第 1 页 / 共 4 页
字号:

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 + -