
Copyright © Parallax Inc. 4x4 Matrix Membrane Keypad (#27899) v1.2 12/16/2011 Page 4 of 5
IF keypad <> keypadOld THEN ' If different button is pressed,
GOSUB Update ' update the keypad graphic to clear
ENDIF ' old display
IF keypad THEN ' Display button pressed in graphic
GOSUB display
ENDIF
keypadOld = keypad ' Store keypad value in variable keypadOld
LOOP
' -----[ Subroutine - ReadKeypad ]-------------------------------------------------
' Read keypad button states
ReadKeypad:
keypad = 0
OUTL = %00000000 ' Initialize IO
DIRL = %00000000
FOR row = 0 TO 3
DIRB = %1111 ' Set columns (P7-P4) as outputs
OUTB = %0000 ' Pull columns low (act as pull down)
OUTA = 1 << row ' Set rows high one by one
DIRA = 1 << row
temp = 0 ' Reset temp variable to 0
FOR column = 0 TO 3
INPUT (column + 4) ' Set columns as inputs
temp = temp | (INB & (1 << column)) ' Poll column state and store in temp
NEXT
keypad = keypad << 4 | (Temp REV 4) ' Store keypad value
NEXT
RETURN
' -----[ Subroutine - Update ]-----------------------------------------------------
' Graphical depiction of keypad
Update:
DEBUG CRSRXY,0,7,
"+---+---+---+---+",CR,
"| | | | |",CR,
"+---+---+---+---+",CR,
"| | | | |",CR,
"+---+---+---+---+",CR,
"| | | | |",CR,
"+---+---+---+---+",CR,
"| | | | |",CR,
"+---+---+---+---+"
RETURN
' -----[ Subroutine - Display ]----------------------------------------------------
' Display button pressed in keypad graphic
Display:
IF KeyPad.BIT15 THEN DEBUG CRSRXY, 02,08,"1"
IF Keypad.BIT14 THEN DEBUG CRSRXY, 06,08,"2"
IF KeyPad.BIT13 THEN DEBUG CRSRXY, 10,08,"3"
IF Keypad.BIT12 THEN DEBUG CRSRXY, 14,08,"A"
IF KeyPad.BIT11 THEN DEBUG CRSRXY, 02,10,"4"
IF Keypad.BIT10 THEN DEBUG CRSRXY, 06,10,"5"
IF KeyPad.BIT9 THEN DEBUG CRSRXY, 10,10,"6"
IF Keypad.BIT8 THEN DEBUG CRSRXY, 14,10,"B"
IF KeyPad.BIT7 THEN DEBUG CRSRXY, 02,12,"7"
IF Keypad.BIT6 THEN DEBUG CRSRXY, 06,12,"8"
IF KeyPad.BIT5 THEN DEBUG CRSRXY, 10,12,"9"