📄 ex3-9.asm
字号:
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 + -