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

📄 ex3-9.asm

📁 《51单片机应用开发桉例精选》源代码及图片下载
💻 ASM
📖 第 1 页 / 共 2 页
字号:
RIGHTUP:  DEC HEADY
      LJMP SNAGEND;
RIGHTDOWN: INC HEADY
      LJMP SNAGEND;
RIGHTRIGHT: INC HEADX
      LJMP SNAGEND;

SNAGEND:

      MOV PX,HEADX;    IF THE SNAG ENCOUNTER THE WALL 
      MOV PY,HEADY;
      LCALL READXY;
      JB ERR,SNAGEND1;

                      ;NORMLY PROGRAMMING 
      MOV PX,HEADX;    TO ADD THE HEADER
      MOV PY,HEADY;
      LCALL DISPXY;
                     ; TO REFINE THE SNAG BODY;
      INC HEADXA;
      MOV R0,HEADXA;
      MOV @R0,PX;

      INC HEADYA;
      MOV R0,HEADYA;
      MOV @R0,PY;
                         ;   IF THE SNAG ENCOUNTER THE SPOT
      LCALL TOSPOT;
      JB ENSPOT,SNAGEND5;
                       ; TO REDUCE THE TAIL
      MOV PX,TAILX;
      MOV PY,TAILY;
      LCALL UNDISPXY;

      INC TAILXA;
      MOV R0,TAILXA;
      MOV TAILX,@R0;

      INC TAILYA;
      MOV R0,TAILYA;
      MOV TAILY,@R0;
                        ; TO MOVE ALL THE NUMBER FROM TAILXA---HEADXA
                        ;                         TO (TAILXA-1) AND (HEADXA-1)
      MOV R0,TAILXA;
      MOV R2,SNAGLNG;

SNAGEND3:
      MOV A,R0;
      MOV R1,A;

      DEC R1;

      MOV A,@R0;
      MOV @R1,A;

      INC R0;
      DJNZ R2,SNAGEND3;
      DEC TAILXA;
      DEC HEADXA;
                          ; TO MOVE THE DATA FROM HEADY TO TAILY;
      MOV R0,TAILYA;
      MOV R2,SNAGLNG
SNAGEND4:
      MOV A,R0;
      MOV R1,A;

      DEC R1;

      MOV A,@R0;
      MOV @R1,A;

      INC R0;
      DJNZ R2,SNAGEND4;
      DEC TAILYA;
      DEC HEADYA;
      LJMP SNAGEND2;
      
SNAGEND1: LCALL ERROR;   TO ENCOUNTER THE WALL
          LJMP SNAGEND2;
SNAGEND5:
       
      INC SNAGLNG;
      CLR ENSPOT; 
      JNB ALL,SNAGEND2;
      LCALL ALLSPOT;
                    
SNAGEND2:
       RET;
;---------------KEY SUB-------------------
;;;;;;;;;KEYBOARD;;;;;;;;;;;;;;;;;;;
; KEYBOARD PART
; 2005/8/14
; ROW 1 2 3 4
; COL 5 6 7 8
;     9 0 A B
;     C D E F
; R0 REPRESENT KEYVALUE=ROW*4+COL
;;;;;;;;;;;;;;;;;;;;;;;;;;;
 KEYBOARD:
       MOV R0,#00H;
 ROW:  MOV KEYIN,#0FH;
 ROW00:JNB KEYIN.0,ROW0;
 ROW01:JNB KEYIN.1,ROW1;
 ROW02:JNB KEYIN.2,ROW2;
 ROW03:JNB KEYIN.3,ROW3;
       ;JMP ROW00;
       JMP KEYBOARDEND;

 ROW0: CALL DELAY;
       JB KEYIN.0,ROW01;
       MOV R0,#00H;
       JMP COL;
 ROW1: CALL DELAY;
       JB KEYIN.1,ROW02;
       MOV R0,#01H;
       JMP COL;
 ROW2: CALL DELAY;
       JB KEYIN.2,ROW03;
       MOV R0,#03H;
       JMP COL;
 ROW3: CALL DELAY;
       JB KEYIN.3,ROW00;
       MOV R0,#02H;
       JMP COL;

 COL:  MOV KEYIN,#0F0H;
 COL00:JNB KEYIN.4,COL0;
 COL01:JNB KEYIN.5,COL1;
 COL02:JNB KEYIN.6,COL2;
 COL03:JNB KEYIN.7,COL3;
       ;JMP COL00;
       JMP KEYBOARDEND;

 COL0: CALL DELAY;
       JB KEYIN.4,COL01;
       MOV A,#00H;
       ORL A,R0;
       MOV R0,A;
       JMP KEY;
 COL1: CALL DELAY;
       JB KEYIN.5,COL02;
       MOV A,#10H;
       ORL A,R0;
       MOV R0,A;
       JMP KEY;
 COL2: CALL DELAY;
       JB KEYIN.6,COL03;
       MOV A,#20H;
       ORL A,R0;
       MOV R0,A;
       JMP KEY;
 COL3: CALL DELAY;
       JB KEYIN.7,COL00;
       MOV A,#30H;
       ORL A,R0;
       MOV R0,A;
       JMP KEY;

 KEY:  MOV A,R0;R0 H BIT COL WEIGH 4 ,R0 L BIT ROW WEIGHT 1;
       SWAP A;   00010001
       ANL A,#0FH;  0000 0001
       RL A;
       RL A;        0000 0100
       ADD A,R0;    0001 0101
       ANL A,#0FH;  0000 0101
       MOV R0,A;   ;KEYVALUE;
       MOV KEYIN,#0FFH;
 KEYBOARDEND:
       RET;
 ;;;;;;;;;;READKEY;;;;;;;;;;;;;;;
 READKEY: MOV DPTR,#KEYVA;
          MOV A,R0;
          MOVC A,@A+DPTR;
          MOV R0,A;
          RET;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  KEYEXE: CALL READKEY;
   KEY1: CJNE R0,#01H,KEY2;
         CALL KEYE1;
         JMP KEYEND;
   KEY2: CJNE R0,#02H,KEY3;
         CALL KEYE2;
         JMP KEYEND;
   KEY3: CJNE R0,#03H,KEY4;
         CALL KEYE3;
         JMP KEYEND;
   KEY4: CJNE R0,#04H,KEY5;
         CALL KEYE4;
         JMP KEYEND;
   KEY5: CJNE R0,#05H,KEY6;
         CALL KEYE5;
         JMP KEYEND;
   KEY6: CJNE R0,#06H,KEY7;
         CALL KEYE6;
         JMP KEYEND;
   KEY7: CJNE R0,#07H,KEY8;
         CALL KEYE7;
         JMP KEYEND;
   KEY8: CJNE R0,#08H,KEY9;
         CALL KEYE8;
         JMP KEYEND;
   KEY9: CJNE R0,#09H,KEY0;
         CALL KEYE9;
         JMP KEYEND;
   KEY0: CJNE R0,#00H,KEYA;
         CALL KEYE0;
         JMP KEYEND;
   KEYA: CJNE R0,#0AH,KEYB;
         CALL KEYEA;
         JMP KEYEND;
   KEYB: CJNE R0,#0BH,KEYC;
         CALL KEYEB;
         JMP KEYEND;
   KEYC: CJNE R0,#0CH,KEYD;
         CALL KEYEC;
         JMP KEYEND;
   KEYD: CJNE R0,#0DH,KEYE;
         CALL KEYED;
         JMP KEYEND;
   KEYE: CJNE R0,#0EH,KEYF;
         CALL KEYEE;
         JMP KEYEND;
   KEYF: CJNE R0,#0FH,KEYEND;
         CALL KEYEF;
         JMP KEYEND;
   KEYEND:
          RET;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 KEYE1:
       ;MOV R0,#01H;
        MOV A,DIR;
        SWAP A;
        ORL A,#00001111B;
        MOV R0,#11110010B;

        ANL A,R0;
        MOV DIR,A;
        RET;
 ;;;;;;;;;;;;KEYE2;;;;;;;;;;;;
 KEYE2: MOV A,DIR;
        SWAP A;
        ORL A,#00001111B;
        MOV R0,#11111000B;

        ANL A,R0;
        MOV DIR,A;
        ;MOV R0,#02H;
        ;LCALL KEYINPUT;
        RET;
 ;;;;;;;;;;;;KEYE3;;;;;;;;;;;;;
 KEYE3: MOV A,DIR;
        SWAP A;
        ORL A,#00001111B;
        MOV R0,#11110001B;

        ANL A,R0;
        MOV DIR,A;
        ;MOV R0,#03H;
        ;LCALL KEYINPUT;
        RET;
 ;;;;;;;;;;;;KEYE4;;;;;;;;;;;;;
 KEYE4:  MOV R0,#04H;
        RET;
 ;;;;;;;;;;;;KEYE5;;;;;;;;;;;;;
 KEYE5:  MOV R0,#05H;
          ;LCALL KEYINPUT;
        RET;
 ;;;;;;;;;;;;KEYE6;;;;;;;;;;;;;
 KEYE6: MOV A,DIR;
        SWAP A;
        ORL A,#00001111B;
        MOV R0,#11110100B;

        ANL A,R0;
        MOV DIR,A;
        ; MOV R0,#06H;
        RET;
 ;;;;;;;;;;;;KEYE7;;;;;;;;;;;;;
 KEYE7:   MOV R0,#07H;
        RET;
 ;;;;;;;;;;;;KEYE8;;;;;;;;;;;;;
 KEYE8:   MOV R0,#08H;
        RET;
 ;;;;;;;;;;;;KEYE9;;;;;;;;;;;;;
 KEYE9:   MOV R0,#09H;
        RET;
 ;;;;;;;;;;;;KEYE0;;;;;;;;;;;;;
 KEYE0:
          RET;
 ;;;;;;;;;;;;KEYEA  TO STORE CIRCLE;;;;;;
 KEYEA:
          RET;
 ;;;;;;;;;;;;KEYEB TO STORE ANGLE;;;;;;;;;;;;;
 KEYEB:
          RET;
 ;;;;;;;;;;;;;TO STORE POS OR NEG;;;;;;;;;;;;;;;;
 KEYEC:
          RET;
 ;;;;;;;;;;;;KEYED TO STORE SPEED;;;;;;;;;;;;;
 KEYED:
          RET;
 ;;;;;;;;;;;;KEYEE  TO START MOTOR;;;;;;;;;;;;;
 KEYEE:
          RET;
 ;;;;;;;;;;;;KEYEF  ;;;;;;;;;;;;;
 KEYEF:
                      ; TO CLEAR ALL THE DATA AND TO THE START STATE;
                      ; FROM TAILXA TO HEADXA
       MOV R0,TAILXA;
       MOV R1,TAILYA;
       MOV R2,SNAGLNG;
 KEYEF1:
       MOV PX,@R0;
       MOV PY,@R1;
       
       MOV A,R0;
       PUSH ACC;
       MOV A,R1;
       PUSH ACC;
       MOV A,R2;
       PUSH ACC;
       
       LCALL UNDISPXY;
       
       POP ACC
       MOV R2,A;
       POP ACC
       MOV R1,A;
       POP ACC
       MOV R0,A;
       
       INC R0;
       INC R1;
       
       DJNZ R2,KEYEF1;

       LCALL RIGHTSIDE;
       LCALL INITLCM;
       LCALL CLS;

       LCALL LEFTSIDE;
       LCALL INITSNAG;
       CLR ERR;
       CLR ALL;
       RET;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 KEYEEE:
        MOV LCMP,PAGEADD;
        LCALL WI;
        MOV LCMP,YNUM;
        LCALL WI;

        MOV DPTR,#KEYDB;
        MOV R1,#00H;
 KEYEEE0:
        MOV A,R0;
        MOV B,#05H;
        MUL AB;
        MOVC A,@A+DPTR;
        MOV LCMP,A;
        LCALL WD;
        INC DPTR;
        INC R1;
        CJNE R1,#05H,KEYEEE0;

        RET;
;---------------BMP SUB--------------------
INITBMP:MOV LNGTH,#08H;
        MOV WIDTH,#40H;
        MOV STPAGE,#00H;
        MOV STY,#00H;

        LCALL LEFTSIDE;
        LCALL INITLCM;
        MOV DPTR,#BMPDB
        RET
;------------------------------------------
 ;;TO DISPLAY BITMAP
 ;;STARTPAGE STPAGE;
 ;;STARTY    STY;
 ;;LNGTH  WIDTH;
 ;;
 BMP:
      MOV R2,#00H;  CURRENT PAGE;
      MOV R1,#00H;  CURRENT Y;
      MOV R3,WIDTH;
      MOV R4,LNGTH;
 BMP0:
      MOV A,R2;     SET PAGE;
      ADD A,STPAGE;
      ADD A,#0B8H;
      MOV PAGEADD,A;
      MOV LCMP,PAGEADD;
      LCALL WI;

      MOV A,R1;     SET Y;
      ADD A,STY;
      ADD A,#40H;
      MOV YNUM,A;
      CJNE A,#80H,BMP1;
      LCALL RIGHTSIDE;
      MOV YNUM,#40H;
      MOV R1,#00H;

 BMP1:
      MOV LCMP,YNUM;
      LCALL WI;
      MOV A,#00H;
      MOVC A,@A+DPTR;
      MOV LCMP,A;
      LCALL WD;

      INC DPTR;
      INC R2;
      DJNZ R4,BMP0;
      INC R1;
      MOV R2,#00H;
      MOV R4,LNGTH;
      DJNZ R3,BMP0;
BMPEND:
      RET;
;--------------INTERRUPT PRG----------------

;--------------DELAY PRG--------------
DELAYLCD:   MOV R7,#02H;
DELAYLCD1:  MOV R6,#255;
DELAYLCD2:  DJNZ R6,DELAYLCD2
            DJNZ R7,DELAYLCD1
            RET

DELAY:      MOV R6,#40H;
DELAY0:     MOV R7,#248H;
            DJNZ R7,$;
            DJNZ R6,DELAY0;
            RET;
DELAY500MS: MOV R5,#04H;
 DELAY00: MOV R6,#00F4H;
 DELAY01: MOV R7,#0FFH;
 DELAY02: DJNZ R7,DELAY02;
        DJNZ R6,DELAY01;
        DJNZ R5,DELAY00;
        RET;

DELAY250MS: MOV R5,#02H;
 DELAY10: MOV R6,#00F4H;
 DELAY11: MOV R7,#0FFH;
 DELAY12: DJNZ R7,DELAY12;
        DJNZ R6,DELAY11;
        DJNZ R5,DELAY10;
        RET;
DELAY100MS: MOV R5,#04H;
 DELAY20: MOV R6,#00F4H;
 DELAY21: MOV R7,#033H;
 DELAY22: DJNZ R7,DELAY22;
        DJNZ R6,DELAY21;
        DJNZ R5,DELAY20;
        RET;
;-----------DATA-----------

; E A 3 7
; F B 4 8
; D 0 2 6
; C 9 1 5
KEYVA:  DB 0EH,0AH,03H,07H  ;KEYBOARD VALUE;
        DB 0FH,0BH,04H,08H
        DB 0DH,00H,02H,06H
        DB 0CH,09H,01H,05H

DISPDB:  DB 01H,02H,04H,08H,10H,20H,40H,80H;
         ;DB 80H,40H,20H,10H,08H,04H,02H,01H;
UNDISPDB:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH;
         ;DB 07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH;
         
SPOTXDB: DB 30H,09H,08H,18H,38H,29H,3CH,25H,29H;
SPOTYDB: DB 02H,0CH,36H,28H,30H,31H,3CH,0CH,29H;
KEYDB:
; G(0) A(1) M(2) E(3)  (4) O(5) V(6) E(7) R(8)

DB 3EH,43H,51H,31H,10H;"G",0

DB 68H,58H,58H,78H,40H;"A",1

DB 78H,08H,78H,08H,78H;"M",2

DB 30H,58H,58H,50H,00H;"E",3

DB 00H,00H,00H,00H,00H;" ",4

DB 3EH,41H,41H,3EH,00H;"O",5

DB 08H,38H,40H,38H,08H;"V",6

DB 30H,58H,58H,50H,00H;"E",7

DB 48H,78H,48H,08H,00H;"R",8

;C(0) H(1) E(2) E(3) R(4)  (5) U(6) P(7) !(8)

DB 3EH,43H,41H,41H,00H;"C",0

DB 41H,7FH,48H,78H,40H;"H",1

DB 30H,58H,58H,50H,00H;"E",2

DB 30H,58H,58H,50H,00H;"E",3

DB 48H,78H,48H,08H,00H;"R",4

DB 00H,00H,00H,00H,00H;" ",5

DB 08H,78H,48H,78H,40H;"U",6

DB 88H,0F8H,0C8H,48H,38H;"P",7

DB 00H,00H,5FH,00H,00H;"!",8

BMPDB:
;D:\ASM\SNG.BMP(0)

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;
DB 01H,00H,0F8H,0FFH,1FH,00H,00H,80H;
DB 01H,00H,0F8H,0FFH,1FH,00H,00H,80H;
DB 01H,00H,0F8H,0FFH,1FH,00H,00H,80H;
DB 01H,00H,00H,0FEH,1FH,00H,00H,80H;
DB 0FH,00H,00H,0FEH,1FH,00H,00H,80H;
DB 0FH,00H,00H,00H,00H,00H,00H,80H;
DB 0FH,00H,00H,00H,00H,00H,00H,80H;
DB 0FH,00H,00H,00H,00H,00H,00H,80H;
DB 0FH,00H,00H,00H,00H,00H,00H,80H;
DB 0FH,00H,00H,00H,00H,00H,00H,80H;
DB 0FH,00H,00H,00H,00H,00H,00H,80H;
DB 0FH,00H,00H,0FCH,1FH,0FCH,3FH,80H;
DB 0FH,00H,00H,0FCH,1FH,0FCH,3FH,80H;
DB 0FH,00H,00H,0FCH,1FH,0FCH,3FH,80H;
DB 0FH,00H,00H,0FCH,1FH,0FCH,3FH,80H;
DB 0FH,00H,00H,00H,00H,00H,00H,80H;
DB 0FH,0E0H,01H,00H,00H,00H,00H,80H;
DB 0FH,0E0H,01H,00H,00H,00H,00H,80H;
DB 0FH,0E0H,01H,00H,00H,00H,00H,80H;
DB 0FH,0E0H,01H,00H,00H,00H,00H,80H;
DB 0FH,0E0H,01H,00H,00H,00H,00H,80H;
DB 0FH,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,3FH,00H,3FH,80H;
DB 01H,0E0H,01H,00H,3FH,00H,3FH,80H;
DB 01H,0E0H,01H,00H,3FH,00H,3FH,80H;
DB 01H,0E0H,01H,00H,0FFH,0FFH,3FH,80H;
DB 01H,0E0H,01H,00H,0FFH,0FFH,3FH,80H;
DB 01H,0E0H,01H,00H,0FFH,0FFH,3FH,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,0E0H,01H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,0FFH,0FFH,7FH,80H;
DB 01H,00H,00H,00H,0FFH,0FFH,7FH,80H;
DB 01H,00H,00H,00H,0FFH,0FFH,7FH,80H;
DB 01H,00H,00H,00H,3FH,00H,7FH,80H;
DB 01H,00H,00H,00H,3FH,00H,7FH,80H;
DB 01H,00H,00H,00H,3FH,00H,7FH,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 01H,00H,00H,00H,00H,00H,00H,80H;
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;"D:\ASM\SNG.BMP",0





;--------------END-------------------
END

;---------------NOTE------------------

⌨️ 快捷键说明

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