A simple 4x4 matrix key pad test program

Dependencies:   mbed

Committer:
Rhyme
Date:
Sat May 13 07:06:00 2017 +0000
Revision:
3:1c25a2ed28fe
Parent:
2:bac691bab19c
Commit before publishing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 1:be0aa2900453 1 /**
Rhyme 1:be0aa2900453 2 * matrix key scan program
Rhyme 1:be0aa2900453 3 *
Rhyme 1:be0aa2900453 4 * @note assuming key pad of 16 keys
Rhyme 1:be0aa2900453 5 * @note 4 x 4 matrix scan
Rhyme 1:be0aa2900453 6 */
Rhyme 1:be0aa2900453 7 #include "mbed.h"
Rhyme 1:be0aa2900453 8
Rhyme 1:be0aa2900453 9 #if defined (TARGET_KL25Z)
Rhyme 2:bac691bab19c 10 #define COL0 PTC7
Rhyme 2:bac691bab19c 11 #define COL1 PTC0
Rhyme 2:bac691bab19c 12 #define COL2 PTC3
Rhyme 2:bac691bab19c 13 #define COL3 PTC4
Rhyme 2:bac691bab19c 14 #define ROW0 PTC5
Rhyme 2:bac691bab19c 15 #define ROW1 PTC6
Rhyme 2:bac691bab19c 16 #define ROW2 PTC10
Rhyme 2:bac691bab19c 17 #define ROW3 PTC11
Rhyme 1:be0aa2900453 18 #endif
Rhyme 1:be0aa2900453 19
Rhyme 1:be0aa2900453 20 #define NUM_COL 4
Rhyme 1:be0aa2900453 21 #define NUM_ROW 4
Rhyme 1:be0aa2900453 22 #define NUM_KEY (NUM_COL * NUM_ROW)
Rhyme 1:be0aa2900453 23
Rhyme 1:be0aa2900453 24 int key[ NUM_KEY ] = {
Rhyme 1:be0aa2900453 25 0, 0, 0, 0,
Rhyme 1:be0aa2900453 26 0, 0, 0, 0,
Rhyme 1:be0aa2900453 27 0, 0, 0, 0,
Rhyme 1:be0aa2900453 28 0, 0, 0, 0
Rhyme 1:be0aa2900453 29 } ;
Rhyme 1:be0aa2900453 30
Rhyme 2:bac691bab19c 31 #if 0
Rhyme 2:bac691bab19c 32 /* Sengoku 4x4 keypad */
Rhyme 1:be0aa2900453 33 unsigned char key_char[NUM_KEY] = {
Rhyme 2:bac691bab19c 34 '1', '2', '3', 'A',
Rhyme 2:bac691bab19c 35 '4', '5', '6', 'B',
Rhyme 2:bac691bab19c 36 '7', '8', '9', 'C',
Rhyme 2:bac691bab19c 37 '*', '0', '#', 'D'
Rhyme 1:be0aa2900453 38 } ;
Rhyme 2:bac691bab19c 39 #endif /* Sengoku 4x4 keypad */
Rhyme 2:bac691bab19c 40 #if 1
Rhyme 2:bac691bab19c 41 /* Aitendo HC-54375 */
Rhyme 2:bac691bab19c 42 unsigned char key_char[NUM_KEY] = {
Rhyme 2:bac691bab19c 43 'C', 'D', 'E', 'F',
Rhyme 2:bac691bab19c 44 '9', '0', 'A', 'B',
Rhyme 2:bac691bab19c 45 '5', '6', '7', '8',
Rhyme 2:bac691bab19c 46 '1', '2', '3', '4'
Rhyme 2:bac691bab19c 47 } ;
Rhyme 2:bac691bab19c 48 #endif /* Aitendo HC-54375 */
Rhyme 1:be0aa2900453 49
Rhyme 1:be0aa2900453 50 DigitalIn *col[NUM_COL] ;
Rhyme 1:be0aa2900453 51 DigitalOut *row[NUM_ROW] ;
Rhyme 1:be0aa2900453 52
Rhyme 1:be0aa2900453 53 void init_hardware(void)
Rhyme 1:be0aa2900453 54 {
Rhyme 2:bac691bab19c 55 col[3] = new DigitalIn(COL3, PullUp) ;
Rhyme 2:bac691bab19c 56 col[2] = new DigitalIn(COL2, PullUp) ;
Rhyme 2:bac691bab19c 57 col[1] = new DigitalIn(COL1, PullUp) ;
Rhyme 2:bac691bab19c 58 col[0] = new DigitalIn(COL0, PullUp) ;
Rhyme 1:be0aa2900453 59
Rhyme 2:bac691bab19c 60 row[3] = new DigitalOut(ROW3, 1) ;
Rhyme 2:bac691bab19c 61 row[2] = new DigitalOut(ROW2, 1) ;
Rhyme 2:bac691bab19c 62 row[1] = new DigitalOut(ROW1, 1) ;
Rhyme 2:bac691bab19c 63 row[0] = new DigitalOut(ROW0, 1) ;
Rhyme 1:be0aa2900453 64 }
Rhyme 1:be0aa2900453 65
Rhyme 1:be0aa2900453 66 int scan_key(int key[])
Rhyme 1:be0aa2900453 67 {
Rhyme 1:be0aa2900453 68 int r, c ;
Rhyme 1:be0aa2900453 69 int count = 0 ;
Rhyme 1:be0aa2900453 70
Rhyme 1:be0aa2900453 71 for (r = 0 ; r < NUM_ROW ; r++ ) {
Rhyme 1:be0aa2900453 72 row[r]->write(0) ;
Rhyme 1:be0aa2900453 73 for (c = 0 ; c < NUM_COL ; c++ ) {
Rhyme 1:be0aa2900453 74 if (col[c]->read() == 0) {
Rhyme 1:be0aa2900453 75 key[r * NUM_COL + c] = 1 ;
Rhyme 1:be0aa2900453 76 count++ ;
Rhyme 1:be0aa2900453 77 } else {
Rhyme 1:be0aa2900453 78 key[r * NUM_COL + c] = 0 ;
Rhyme 1:be0aa2900453 79 }
Rhyme 1:be0aa2900453 80 }
Rhyme 1:be0aa2900453 81 row[r]->write(1) ;
Rhyme 1:be0aa2900453 82 }
Rhyme 1:be0aa2900453 83 return(count) ;
Rhyme 1:be0aa2900453 84 }
Rhyme 1:be0aa2900453 85
Rhyme 1:be0aa2900453 86 void print_key(int key[])
Rhyme 1:be0aa2900453 87 {
Rhyme 1:be0aa2900453 88 int i ;
Rhyme 1:be0aa2900453 89 for (i = 0 ; i < NUM_KEY ; i++ ) {
Rhyme 1:be0aa2900453 90 if (key[i]) {
Rhyme 1:be0aa2900453 91 printf("%c", key_char[i]) ;
Rhyme 1:be0aa2900453 92 }
Rhyme 1:be0aa2900453 93 }
Rhyme 1:be0aa2900453 94 }
Rhyme 1:be0aa2900453 95
Rhyme 1:be0aa2900453 96 int main() {
Rhyme 1:be0aa2900453 97 int count ;
Rhyme 1:be0aa2900453 98
Rhyme 1:be0aa2900453 99 init_hardware() ;
Rhyme 1:be0aa2900453 100
Rhyme 1:be0aa2900453 101 printf("\n=== Matrix Key Test %s ===\n", __DATE__) ;
Rhyme 1:be0aa2900453 102
Rhyme 1:be0aa2900453 103 while(1) {
Rhyme 1:be0aa2900453 104 count = scan_key(key) ;
Rhyme 1:be0aa2900453 105 if (count) {
Rhyme 1:be0aa2900453 106 print_key(key) ;
Rhyme 1:be0aa2900453 107 fflush(stdout) ;
Rhyme 1:be0aa2900453 108 wait(0.2) ;
Rhyme 1:be0aa2900453 109 }
Rhyme 1:be0aa2900453 110 wait(0.1) ;
Rhyme 1:be0aa2900453 111 }
Rhyme 1:be0aa2900453 112 }