Module #5: Keypad Code
;*************************************************************************
;
; KEYPAD subroutine: waits for key pressed and returns it in ACC.
; (MODULE #5)
;
;*************************************************************************
$NOMOD51 ; omit assembler micro definitions
$Include(reg515.inc) ; define 515 micro
Name KEYPAD
PUBLIC KPD
EXTRN CODE (LCDOUT)
KEYPAD SEGMENT CODE
RSEG KEYPAD ; 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
KPD:
JNB IE1,KPD ; LOOP TILL KEY PRESSED
CLR IE1 ; clear for next transition
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)
POP DPL
POP DPH
RET
KEYTABL: DB '123C456D789EA0BF'
END