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