4x4matrixmembranekeypad v1.2
4x4matrixmembranekeypad v1.2
4x4matrixmembranekeypad v1.2
com
Office: (916) 624-8333 Fax: (916) 624-8003 Sales: (888) 512-1024 Tech Support: (888) 997-8267
Features Ultra-thin design Adhesive backing Excellent price/performance ratio Easy interface to any microcontroller Example programs provided for the BASIC
Stamp 2 and Propeller P8X32A microcontrollers
Key Specifications Maximum Rating: 24 VDC, 30 mA Interface: 8-pin access to 4x4 matrix Operating temperature: 32 to 122 F
(0 to 50C)
Dimensions: Keypad, 2.7 x 3.0 in (6.9 x 7.6 cm) Cable: 0.78 x 3.5 in (2.0 x 8.8 cm)
Application Ideas Security systems Menu selection Data entry for embedded systems
How it Works
Matrix keypads use a combination of four rows and four columns to provide button states to the host device, typically a microcontroller. Underneath each key is a pushbutton, with one end connected to one row, and the other end connected to one column. These connections are shown in Figure 1.
Figure 1: Matrix Keypad Connections In order for the microcontroller to determine which button is pressed, it first needs to pull each of the four columns (pins 1-4) either low or high one at a time, and then poll the states of the four rows (pins 5-8). Depending on the states of the columns, the microcontroller can tell which button is pressed. For example, say your program pulls all four columns low and then pulls the first row high. It then reads the input states of each column, and reads pin 1 high. This means that a contact has been made between column 4 and row 1, so button A has been pressed.
Connection Diagrams
Figure 2 For use with the BASIC Stamp example program listed below.
Figure 3 For use with the Propeller P8X32A example program listed below.
DEBUG CLS GOSUB Update DO GOSUB ReadKeypad DEBUG HOME, BIN16 keypad, CR, CR, BIN4 keypad >> 12,CR, BIN4 keypad >> 8, CR, BIN4 keypad >> 4, CR, BIN4 keypad
Read keypad button states Display 16-bit keypad value Display 1st row 4-bit keypad Display 2nd row 4-bit keypad Display 3rd row 4-bit keypad Display 4th row 4-bit keypad
IF keypad <> keypadOld THEN GOSUB Update ENDIF IF keypad THEN GOSUB display ENDIF keypadOld = keypad LOOP
' If different button is pressed, ' update the keypad graphic to clear ' old display ' Display button pressed in graphic
' -----[ Subroutine - ReadKeypad ]------------------------------------------------' Read keypad button states ReadKeypad: keypad = 0 OUTL = %00000000 ' Initialize IO DIRL = %00000000 FOR row = 0 TO 3 DIRB = %1111 OUTB = %0000 OUTA = 1 << row DIRA = 1 << row temp = 0 FOR column = 0 TO 3 INPUT (column + 4) temp = temp | (INB & (1 << column)) NEXT keypad = keypad << 4 | (Temp REV 4) NEXT RETURN
' Set columns (P7-P4) as outputs ' Pull columns low (act as pull down) ' Set rows high one by one
' Reset temp variable to 0 ' Set columns as inputs ' Poll column state and store in temp
' -----[ 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"
Revision History
v1.0: original document v1.1: Updated Figure 1 on page 2 v1.2: Updated Figure 1 on page 2 (again); updated BS2 comments