;*****************KEYPAD*****************
; by: Eng'r Roland Michael A. dela Peņa *
;****************************************

	LIST            P=16F84
	ERRORLEVEL      -302
	#INCLUDE P16F84.INC

;************************************************************
; REGISTER DEFINITIONS
;************************************************************
	CBLOCK	0CH
		ROLAND	; VARIABLE REGISTER
		VALUE	; DATA KEYPAD REGISTER
	ENDC
;************************************************************
; BIT DEFINITIONS
;************************************************************
	#DEFINE	COL1	PORTB,1 ; KEYPAD'S COLUMN 1
	#DEFINE	COL2	PORTB,2 ; KEYPAD'S COLUMN 2
	#DEFINE	COL3	PORTB,3 ; KEYPAD'S COLUMN 3
	#DEFINE	ROW1	PORTB,4 ; KEYPAD'S ROW 1
	#DEFINE	ROW2	PORTB,5 ; KEYPAD'S ROW 2
	#DEFINE	ROW3	PORTB,6 ; KEYPAD'S ROW 3
	#DEFINE	ROW4	PORTB,7 ; KEYPAD'S ROW 4
;************************************************************************
; THIS PART INITIALIZES THE PORTS AND OTHER PHERIPERALS 
; IN MICROCONTROLLER
;************************************************************************
	ORG 	0000h 		; SET POWER ON RESET VECTOR.
	CLRF 	PORTB
	CLRF	PORTA
	GOTO INIT
INIT
	BSF 	STATUS,RP0	; SET BANK = 1.
        BCF	OPTION_REG,7	; ENABLE BUILT-IN PULL-UP RESISTORS.
       	MOVLW 	b'00000000'	; SET PORTA TO ALL OUTPUT.
        MOVWF   TRISA
	MOVLW	b'00001110'	; SET RB0,RB4,RB5,RB6,RB7 TO OUTPUT
	MOVWF	TRISA		; AND RB1,RB2,RB3 TO INPUT.
        BCF 	STATUS,RP0	; SET BANK = 0.
;************************************************************************
; THIS SUBROUTINE MONITORS THE CONDITION OF THE KEYPAD
; THE DATA AQUIRED FROM THE KEYPAD WILL BE STORED IN "VALUE" REGISTER
;************************************************************************
MONITOR
	CALL SCAN		; GET DATA FROM THE KEYPAD.
	MOVF	ROLAND
	BTFSC	STATUS,2	; IS ANY BUTTON PRESSED?
	GOTO MONITOR		; NO.
	MOVFW	ROLAND		; YES.
	MOVWF	VALUE		; THEN STORE IT ON VALUE REGISTER.	
UNPRESS
	CALL SCAN		
	MOVF	ROLAND		; THEN WAIT UNTIL THIS BUTTON WAS UNPRESSED.
	BTFSC	STATUS,2	; IS THIS BUTTON UNPRESSED?
	GOTO UNPRESS		; NOPE.
	RETLW d'0'		; YES.
;************************************************************************
; THIS PART SCANS EACH COLUMN OF THE KEYPAD
; (IT DETERMINES WHAT BUTTON OF THE KEYPAD WAS PRESSED)
;************************************************************************
SCAN
	CLRF	ROLAND
	BCF	COL1		; SCAN COLUMN 1 OF THE KEYPAD.
	BTFSS	ROW1		; IS ROW 1 CHANGED?
	GOTO NO1		; YO, THEN THE KEY 1 PRESSED.
	BCF	COL1		; NOPE.
	BTFSS	ROW2		; IS ROW 2 CHANGED?
	GOTO NO4		; YO, THEN THE KEY 4 PRESSED.
	BCF	COL1		; NOPE.
	BTFSS	ROW3		; IS ROW 3 CHANGED?
	GOTO NO7		; YO, THEN THE KEY 7 PRESSED.
	BCF	COL1		; NOPE.
	BTFSS	ROW4		; IS ROW 4 CHANGED?
	GOTO NO11		; YO, THEN THE KEY * PRESSED.
	
	BCF	COL2		; SCAN COLUMN 2 OF THE KEYPAD.
	BTFSS	ROW1		; IS ROW 1 CHANGED?
	GOTO NO2		; YO, THEN THE KEY 2 PRESSED.
	BCF	COL2		; NOPE.
	BTFSS	ROW2		; IS ROW 2 CHANGED?
	GOTO NO5		; YO, THEN THE KEY 5 PRESSED.
	BCF	COL2		; NOPE.
	BTFSS	ROW3		; IS ROW 3 CHANGED?
	GOTO NO8		; YO, THEN THE KEY 8 PRESSED.
	BCF	COL2		; NOPE.
	BTFSS	ROW4		; IS ROW 4 CHANGED?
	GOTO NO10		; YO, THEN THE KEY 0 PRESSED.

	BCF	COL3		; SCAN COLUMN 3 OF THE KEYPAD.
	BTFSS	ROW1		; IS ROW 1 CHANGED?
	GOTO NO3		; YO, THEN THE KEY 3 PRESSED.
	BCF	COL3		; NOPE.
	BTFSS	ROW2		; IS ROW 2 CHANGED?
	GOTO NO6		; YO, THEN THE KEY 6 PRESSED.
	BCF	COL3		; NOPE.
	BTFSS	ROW3		; IS ROW 3 CHANGED?
	GOTO NO9		; YO, THEN THE KEY 9 PRESSED.
	BCF	COL3		; NOPE.
	BTFSS	ROW4		; IS ROW 4 CHANGED?
	GOTO NO12		; YO, THEN THE KEY # PRESSED.
	RETLW	d'0'
NO1
	MOVLW	d'1'
	MOVWF	ROLAND
	RETLW	d'0'
NO2
	MOVLW	d'2'
	MOVWF	ROLAND
	RETLW	d'0'
NO3
	MOVLW	d'3'
	MOVWF	ROLAND
	RETLW	d'0'
NO4
	MOVLW	d'4'
	MOVWF	ROLAND
	RETLW	d'0'
NO5
	MOVLW	d'5'
	MOVWF	ROLAND
	RETLW	d'0'
NO6
	MOVLW	d'6'
	MOVWF	ROLAND
	RETLW	d'0'
NO7
	MOVLW	d'7'
	MOVWF	ROLAND
	RETLW	d'0'
NO8
	MOVLW	d'8'
	MOVWF	ROLAND
	RETLW	d'0'
NO9
	MOVLW	d'9'
	MOVWF	ROLAND
	RETLW	d'0'
NO10
	MOVLW	d'10'
	MOVWF	ROLAND
	RETLW	d'0'
NO11
	MOVLW	d'11'
	MOVWF	ROLAND
	RETLW	d'0'
NO12
	MOVLW	d'12'
	MOVWF	ROLAND
	RETLW	d'0'

	END




    Source: geocities.com/ece23314/prog

               ( geocities.com/ece23314)