Author | Javier MartÃnez, Copyright © 2003, all rights reserved. |
Adapted-by | Eur van Andel, eur@fiwihex.nl, Joep Suijs, Rob Hamerling |
Compiler | >=2.4g |
This library is used to scan a 4x3 or 4x4 keyboard. To use it, you need to define three variables: keydrive is the half port (_high or _low) with the cols connected. keydrive_direction is the related direction register. keyscan is the half port (_high or _low) with the rows connected. Example: var volatile byte keyscan is porta_low -- rows of keyboard var volatile byte keydrive is portb_low -- columns of keyboard var volatile byte keydrive_direction is portb_low_direction include keyboard Note: if you don't want keyboard.jal change the direction of your pins, make sure all keydrive pins are set to output before you call the library and define: var volatile byte keydrive_direction is keydrive The library has two functions to read the keyboard: getkey() returns the key pressed. getkey_once() returns a pressed key only once (and 'none', 0x10 until the next key is pressed) Hardware setup: connect the keyboard rows to a half port (higher or lower 4 bits of a port) and connect the cols to a half port. Put a pull-down resistor (10k - 47k) on each row pin. Adaptation: soldering your wires in the right order is a lot harder than you think. Make sure you keep the rows and cols together and connect them to right port. You could either adapt your wiring to match the default configuration or reconfigure the library by defining the next 8 constants before you include keyboard.jal, like: const row1 = 0b0000_0100 const row2 = 0b0000_0001 const row3 = 0b0000_0010 const row4 = 0b0000_1000 const col1 = 0b0000_1000 const col2 = 0b0000_0010 const col3 = 0b0000_0100 const col4 = 0b0000_0001 Connect the keyboard and press the buttons. Adapt the row and column constants so pressing the buttons give the right result. Note: you need to specify all 8 constants, even when you have a 4x3 keyboard. In this case you can specify: const col4 = 0b0000_0000 keyboard map (4x4, col4 is left out with 4x3 keyboard) 1 2 3 C row 1 4 5 6 D row 2 7 8 9 E row 3 * 0 # F row 4 col 1 2 3 4
[RobH] Added a 1 microsecond delay after changing keydrive to obtain reliable results with oscillator frequencies of 8 MHz and higher
No dependency found
var byte scan0, scan1, scan2, scan3
No documentation found
var byte lastkey = 0xff
No documentation found
getkey() return byte
getkey - return the key pressed (until it is released) return: 0 .. 9 numeric key pressed 0..9 10 * (or A) 11 # (or B) 12 .. 15 C, D, E, F 16 no key pressed. 17 error (more then one key pressed)
getkey_once() return byte
getkey_once - return the value of a key pressed only once returns: see getkey()
16f648a | 16f648a_keyboard.jal |
16f723 | 16f723_keyboard.jal |
16f73 | 16f73_keyboard.jal |
16f876a | 16f876a_rtc_timeset.jal |
16f876a | 16f876a_keyboard_lcd.jal |
16f877 | 16f877_keyboard.jal |
16f877a | 16f877a_rtc_timeset.jal |
16f877a | 16f877a_keyboard_lcd.jal |
16f877a | 16f877a_keyboard.jal |
16f88 | 16f88_keyboard.jal |
18f14k50 | 18f14k50_keyboard.jal |
18f2450 | 18f2450_keyboard.jal |
18f2520 | 18f2520_keyboard.jal |
18f2550 | 18f2550_keyboard.jal |
18f2620 | 18f2620_keyboard.jal |
18f26j11 | 18f26j11_rtcc_hw_kbd_lcd.jal |
18f452 | 18f452_keyboard.jal |
18f4550 | 18f4550_keyboard.jal |
18f4620 | 18f4620_keyboard.jal |
18f67j50 | 18f67j50_keyboard.jal |