;*****************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