;************************************************************************* ; ; KEYPAD subroutine: INTERRUPTS WHEN A key IS pressed and returns it ; in ACC. ; ;************************************************************************* $NOMOD51 ; omit assembler micro definitions $Include(reg515.inc) ; define 515 micro ;********************************************* ;EXTRN CODE () EXTRN DATA (KEYPAD_FLAG) ;********************************************* Name keypad PUBLIC keypad,KBDINIT pad_key SEGMENT CODE RSEG pad_key ; switch to this code segment USING 0 ; use register_bank 0 ; Dempsey Note: ; This code was provided by EMAC ; It is not an efficient way to use keypad ; Normally must do other main code processing ; ; local definitions KEYSEL EQU 38H ; KEYPAD PORT KBDINIT: SETB IT1 SETB EX1 RET keypad: PUSH ACC PUSH B MOV A,R0 PUSH ACC PUSH DPH PUSH DPL ; SAVE DPTR MOV DPTR,#KEYTABL ; POINT TO TRANSLATE TABLE MOV P2,#KEYSEL ; POINT TO KEYPAD PORT MOVX A,@R1 ; GET KEY FROM PORT ANL A,#00011111B ; ONLY 5 BITS MOVC A,@A+DPTR ; TRANSLATE TO KEY FROM TABLE (ASCII) LCALL KEYFUNCTION POP DPL POP DPH POP ACC MOV R0,A POP B POP ACC RETI KEYTABL: DB '123C456D789EA0BF' KEYFUNCTION: KEY0: CJNE A,#30H,KEY1 MOV A,#0 MOV KEYPAD_FLAG,A RET KEY1: CJNE A,#31H,KEY2 MOV A,#1 MOV KEYPAD_FLAG,A RET KEY2: CJNE A,#32H,KEY3 MOV A,#2 MOV KEYPAD_FLAG,A RET KEY3: CJNE A,#33H,KEY4 MOV A,#3 MOV KEYPAD_FLAG,A RET KEY4: CJNE A,#34H,KEY5 MOV A,#4 MOV KEYPAD_FLAG,A RET KEY5: CJNE A,#35H,KEY6 MOV A,#5 MOV KEYPAD_FLAG,A RET KEY6: CJNE A,#36H,KEY7 MOV A,#6 MOV KEYPAD_FLAG,A RET KEY7: CJNE A,#37H,KEY8 MOV A,#7 MOV KEYPAD_FLAG,A RET KEY8: CJNE A,#38H,KEY9 MOV A,#8 MOV KEYPAD_FLAG,A RET KEY9: CJNE A,#39H,KEYA MOV A,#9 MOV KEYPAD_FLAG,A RET KEYA: CJNE A,#41H,KEYB MOV A,#0AH MOV KEYPAD_FLAG,A RET KEYB: CJNE A,#42H,KEYC MOV A,#0BH MOV KEYPAD_FLAG,A RET KEYC: CJNE A,#43H,KEYD MOV A,#0CH MOV KEYPAD_FLAG,A RET KEYD: CJNE A,#44H,KEYE MOV A,#0DH MOV KEYPAD_FLAG,A RET KEYE: CJNE A,#45H,KEYF MOV A,#0EH MOV KEYPAD_FLAG,A RET KEYF: CJNE A,#46H,NOKEY MOV A,#0FH MOV KEYPAD_FLAG,A RET NOKEY: RET END