mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
{{
 | 
						|
*****************************************
 | 
						|
* 4x4 Keypad Reader           v1.0      *
 | 
						|
* Author: Beau Schwabe                  *
 | 
						|
* Copyright (c) 2007 Parallax           *               
 | 
						|
* See end of file for terms of use.     *               
 | 
						|
*****************************************
 | 
						|
}}
 | 
						|
{
 | 
						|
 | 
						|
Operation:
 | 
						|
 | 
						|
This object uses a capacitive PIN approach to reading the keypad.
 | 
						|
To do so, ALL pins are made LOW and an OUTPUT to "discharge" the
 | 
						|
I/O pins.  Then, ALL pins are set to an INPUT state.  At this point,
 | 
						|
only one pin is made HIGH and an OUTPUT at a time.  If the "switch"
 | 
						|
is closed, then a HIGH will be read on the input, otherwise a LOW
 | 
						|
will be returned.
 | 
						|
 | 
						|
The keypad decoding routine only requires two subroutines and returns
 | 
						|
the entire 4x4 keypad matrix into a single WORD variable indicating
 | 
						|
which buttons are pressed.  Multiple button presses are allowed with
 | 
						|
the understanding that“BOX entries can be confused. An example of a
 | 
						|
BOX entry... 1,2,4,5 or 1,4,3,6 or 4,6,*,#  etc. where any 3 of the 4
 | 
						|
buttons pressed will evaluate the non pressed button as being pressed,
 | 
						|
even when they are not.  There is no danger of any physical or
 | 
						|
electrical damage, that s just the way this sensing method happens to
 | 
						|
work.
 | 
						|
 | 
						|
Schematic:
 | 
						|
No resistors, No capacitors.  The connections are directly from the
 | 
						|
keypad to the I/O's.  I literally plugged mine right into the demo
 | 
						|
board RevC.
 | 
						|
 | 
						|
Looking at the Back of the 4x4 keypad...
 | 
						|
 | 
						|
       P7         P0
 | 
						|
         ││││││││
 | 
						|
┌─────── ││││││││ ───────┐
 | 
						|
│     oo ││││││││ o      │
 | 
						|
│                        │
 | 
						|
│  O    O    O    O    O │ 
 | 
						|
│                        │
 | 
						|
│  O    O    O    O    O │
 | 
						|
│         {LABEL}        │
 | 
						|
│  O    O    O    O    O │ 
 | 
						|
│                        │
 | 
						|
│  O    O    O    O    O │
 | 
						|
│                        │
 | 
						|
│  O    O    O    O    O │
 | 
						|
│             o    o     │
 | 
						|
└────────────────────────┘
 | 
						|
 | 
						|
}
 | 
						|
VAR
 | 
						|
  word  keypad
 | 
						|
  
 | 
						|
PUB ReadKeyPad
 | 
						|
    keypad := 0                 'Clear 4x4 'keypad' value
 | 
						|
    ReadRow(3)                  'Call routine to read entire ROW 0
 | 
						|
    keypad <<= 4                'Shift 'keypad' value left by 4
 | 
						|
    ReadRow(2)                  'Call routine to read entire ROW 1
 | 
						|
    keypad <<= 4                'Shift 'keypad' value left by 4
 | 
						|
    ReadRow(1)                  'Call routine to read entire ROW 2
 | 
						|
    keypad <<= 4                'Shift 'keypad' value left by 4
 | 
						|
    ReadRow(0)                  'Call routine to read entire ROW 3
 | 
						|
    Result := keypad
 | 
						|
 | 
						|
PRI ReadRow(n)
 | 
						|
    outa[0..7]~                 'preset P0 to P7 as LOWs
 | 
						|
    dira[0..7]~~                'make P0 to P7 OUTPUTs ... discharge pins or "capacitors" to VSS
 | 
						|
    dira[0..7]~                 'make P0 to P7 INPUTSs ... now the pins act like tiny capacitors
 | 
						|
    outa[n]~~                   'preset Pin 'n' HIGH         
 | 
						|
    dira[n]~~                   'make Pin 'n' an OUTPUT... Make only one pin HIGH ; will charge
 | 
						|
                                '                          "capacitor" if switch is closed.
 | 
						|
                                ' 
 | 
						|
    keypad += ina[4..7]         'read ROW value        ... If a switch is open, the pin or "capacitor"
 | 
						|
    dira[n]~                    'make Pn an INPUT          will remain discharged
 | 
						|
    
 | 
						|
DAT
 | 
						|
{{
 | 
						|
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 | 
						|
│                                                   TERMS OF USE: MIT License                                                  │                                                            
 | 
						|
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
 | 
						|
│Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation    │ 
 | 
						|
│files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,    │
 | 
						|
│modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│
 | 
						|
│is furnished to do so, subject to the following conditions:                                                                   │
 | 
						|
│                                                                                                                              │
 | 
						|
│The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│
 | 
						|
│                                                                                                                              │
 | 
						|
│THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE          │
 | 
						|
│WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR         │
 | 
						|
│COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,   │
 | 
						|
│ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                         │
 | 
						|
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
 | 
						|
}}     |