;Initilization $ NOMOD51 $ INCLUDE (REG515.inc) PUBLIC DISPLAY_BACKWARD EXTRN DATA(KEYCOUNT, TURN_1, TURN_180, KEYPAD_FLAG, DISPFLAG, CONTSIG1, CONTSIG2, COUNT, ADDSAVE1, ADDSAVE2, GO_MOVE_HIGH, GO_MOVE_LOW) EXTRN CODE(DLAYA, TURN_LEFT, TURN_RIGHT, FORWARD, BACKWARD,DLAYZ,ADCIN, LCDOUT, HEXTOA, RPMINCREASE1, RPMINCREASE2, RPMDECREASE1, RPMDECREASE2) ;EXTRN BIT() DISPBACKWARD SEGMENT CODE RSEG DISPBACKWARD USING 0 DISPLAY_BACKWARD: MOV A,#0 MOV KEYCOUNT,A ;CLEAR KEY COUNT MOV A,#0FFH MOV KEYPAD_FLAG,A ;CLEAR KEYPAD FLAG MOV A,#1AH ;CLEAR HOME LCALL LCDOUT MOV DPTR, #LCDDATA MOV R0,#0 DISPLOOP: MOV A,R0 MOVC A,@A+DPTR CALL LCDOUT INC R0 CJNE R0,#19,DISPLOOP MOV A,#0DH ;NEXT LINE CODE LCALL LCDOUT LCALL DLAYZ MOV A,#0AH LCALL LCDOUT INPUTWAIT: MOV A,KEYPAD_FLAG CJNE A,#0FFH,KEY0 LJMP INPUTWAIT KEY0: CJNE A,#0,KEY1 MOV A,KEYCOUNT ;INCREMENT KEY COUNT ADD A,#1 MOV KEYCOUNT,A MOV A,#0FFH ;CLEAR KEYPAD FLAG MOV KEYPAD_FLAG,A MOV A,#0 MOV B,#0 PUSH ACC LCALL HEXTOA LCALL LCDOUT ;OUTPUT CURRENT CHARACTER LJMP INPUTWAIT KEY1: CJNE A,#1,KEY2 MOV A,KEYCOUNT ;INCREMENT KEY COUNT ADD A,#1 MOV KEYCOUNT,A MOV A,#0FFH ;CLEAR KEYPAD FLAG MOV KEYPAD_FLAG,A MOV A,#1 MOV B,#1 PUSH ACC LCALL HEXTOA LCALL LCDOUT ;OUTPUT CURRENT CHARACTER LJMP INPUTWAIT KEY2: CJNE A,#2,KEY3 MOV A,KEYCOUNT ADD A,#1 MOV KEYCOUNT,A MOV A,#0FFH MOV KEYPAD_FLAG,A MOV A,#2 MOV B,#2 PUSH ACC LCALL HEXTOA LCALL LCDOUT LJMP INPUTWAIT KEY3: CJNE A,#3,KEY4 MOV A,KEYCOUNT ADD A,#1 MOV KEYCOUNT,A MOV A,#0FFH MOV KEYPAD_FLAG,A MOV A,#3 MOV B,#3 PUSH ACC LCALL HEXTOA LCALL LCDOUT LJMP INPUTWAIT KEY4: CJNE A,#4,KEY5 MOV A,KEYCOUNT ADD A,#1 MOV KEYCOUNT,A MOV A,#0FFH MOV KEYPAD_FLAG,A MOV A,#4 MOV B,#4 PUSH ACC LCALL HEXTOA LCALL LCDOUT LJMP INPUTWAIT KEY5: CJNE A,#5,KEY6 MOV A,KEYCOUNT ADD A,#1 MOV KEYCOUNT,A MOV A,#0FFH MOV KEYPAD_FLAG,A MOV A,#5 MOV B,#5 PUSH ACC LCALL HEXTOA LCALL LCDOUT LJMP INPUTWAIT KEY6: CJNE A,#6,KEY7 MOV A,KEYCOUNT ADD A,#1 MOV KEYCOUNT,A MOV A,#0FFH MOV KEYPAD_FLAG,A MOV A,#6 MOV B,#6 PUSH ACC LCALL HEXTOA LCALL LCDOUT LJMP INPUTWAIT KEY7: CJNE A,#7,KEY8 MOV A,KEYCOUNT ADD A,#1 MOV KEYCOUNT,A MOV A,#0FFH MOV KEYPAD_FLAG,A MOV A,#7 MOV B,#7 PUSH ACC LCALL HEXTOA LCALL LCDOUT LJMP INPUTWAIT KEY8: CJNE A,#8,KEY9 MOV A,KEYCOUNT ADD A,#1 MOV KEYCOUNT,A MOV A,#0FFH MOV KEYPAD_FLAG,A MOV A,#8 MOV B,#8 PUSH ACC LCALL HEXTOA LCALL LCDOUT LJMP INPUTWAIT KEY9: CJNE A,#9,KEYA MOV A,KEYCOUNT ADD A,#1 MOV KEYCOUNT,A MOV A,#0FFH MOV KEYPAD_FLAG,A MOV A,#9 MOV B,#9 PUSH ACC LCALL HEXTOA LCALL LCDOUT LJMP INPUTWAIT KEYA: CJNE A,#0AH,KEYB MOV A,#0FFH MOV KEYPAD_FLAG,A LJMP INPUTWAIT KEYB: CJNE A,#0BH,KEYC MOV A,#0FFH MOV KEYPAD_FLAG,A LJMP INPUTWAIT KEYC: CJNE A,#0CH,KEYD MOV A,#0FFH MOV KEYPAD_FLAG,A LJMP INPUTWAIT KEYD: CJNE A,#0DH,KEYE MOV A,#0FFH MOV KEYPAD_FLAG,A LJMP INPUTWAIT KEYE: CJNE A,#0EH,KEYF MOV A,#0FFH MOV KEYPAD_FLAG,A CONVERT1: MOV A,#0 MOV GO_MOVE_LOW,A MOV GO_MOVE_HIGH,A MOV A,KEYCOUNT JZ CONTINUE POP ACC MOV GO_MOVE_LOW,A MOV A,KEYCOUNT CJNE A,#1,CONVERT10 LJMP CONTINUE CONVERT10: POP ACC MOV B,#10 MUL AB ADDC A,GO_MOVE_LOW MOV GO_MOVE_LOW,A MOV A,KEYCOUNT CJNE A,#2,CONVERT100 LJMP CONTINUE CONVERT100: POP ACC MOV GO_MOVE_HIGH,A MOV A,KEYCOUNT CJNE A,#3,CONVERT1000 LJMP CONTINUE CONVERT1000: POP ACC MOV B,#10 MUL AB ADDC A,GO_MOVE_HIGH MOV GO_MOVE_HIGH,A MOV A,KEYCOUNT CJNE A,#48,CONVERT10000 LJMP CONTINUE CONVERT10000: POP ACC MOV B,#100 MUL AB ADDC A,GO_MOVE_HIGH MOV GO_MOVE_HIGH,A CONTINUE: LCALL BACKWARD RET KEYF: CJNE A,#0FH,NOKEY MOV A,#0FFH MOV KEYPAD_FLAG,A MOV A,KEYCOUNT CJNE A,#0,EXIT1 RET EXIT1: CJNE A,#1,EXIT2 POP ACC RET EXIT2: CJNE A,#2,EXIT3 POP ACC POP ACC RET EXIT3: CJNE A,#3,EXIT4 POP ACC POP ACC POP ACC RET EXIT4: CJNE A,#48,EXIT5 POP ACC POP ACC POP ACC POP ACC RET EXIT5: POP ACC POP ACC POP ACC POP ACC POP ACC RET NOKEY: MOV A,#0FFH MOV KEYPAD_FLAG,A LJMP INPUTWAIT LCDDATA: DB "Move Backward (cm.)?" END