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.                         │
 | |
| └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
 | |
| }}     |