A simple 4x4 matrix key pad test program

Dependencies:   mbed

Committer:
Rhyme
Date:
Thu May 11 01:29:58 2017 +0000
Revision:
1:be0aa2900453
Child:
2:bac691bab19c
First commit

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 1:be0aa2900453 10 #define ROW0 PTC9
Rhyme 1:be0aa2900453 11 #define ROW1 PTC8
Rhyme 1:be0aa2900453 12 #define ROW2 PTA5
Rhyme 1:be0aa2900453 13 #define ROW3 PTA4
Rhyme 1:be0aa2900453 14 #define COL0 PTA12
Rhyme 1:be0aa2900453 15 #define COL1 PTD4
Rhyme 1:be0aa2900453 16 #define COL2 PTA1
Rhyme 1:be0aa2900453 17 #define COL3 PTA2
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 1:be0aa2900453 31 unsigned char key_char[NUM_KEY] = {
Rhyme 1:be0aa2900453 32 '1', '4', '7', '*',
Rhyme 1:be0aa2900453 33 '2', '5', '8', '0',
Rhyme 1:be0aa2900453 34 '3', '6', '9', '#',
Rhyme 1:be0aa2900453 35 'A', 'B', 'C', 'D'
Rhyme 1:be0aa2900453 36 } ;
Rhyme 1:be0aa2900453 37
Rhyme 1:be0aa2900453 38
Rhyme 1:be0aa2900453 39 DigitalIn *col[NUM_COL] ;
Rhyme 1:be0aa2900453 40 DigitalOut *row[NUM_ROW] ;
Rhyme 1:be0aa2900453 41
Rhyme 1:be0aa2900453 42 void init_hardware(void)
Rhyme 1:be0aa2900453 43 {
Rhyme 1:be0aa2900453 44 col[3] = new DigitalIn(PTC11, PullUp) ;
Rhyme 1:be0aa2900453 45 col[2] = new DigitalIn(PTC10, PullUp) ;
Rhyme 1:be0aa2900453 46 col[1] = new DigitalIn(PTC6, PullUp) ;
Rhyme 1:be0aa2900453 47 col[0] = new DigitalIn(PTC5, PullUp) ;
Rhyme 1:be0aa2900453 48
Rhyme 1:be0aa2900453 49 row[3] = new DigitalOut(PTC4, 1) ;
Rhyme 1:be0aa2900453 50 row[2] = new DigitalOut(PTC3, 1) ;
Rhyme 1:be0aa2900453 51 row[1] = new DigitalOut(PTC0, 1) ;
Rhyme 1:be0aa2900453 52 row[0] = new DigitalOut(PTC7, 1) ;
Rhyme 1:be0aa2900453 53 }
Rhyme 1:be0aa2900453 54
Rhyme 1:be0aa2900453 55 int scan_key(int key[])
Rhyme 1:be0aa2900453 56 {
Rhyme 1:be0aa2900453 57 int r, c ;
Rhyme 1:be0aa2900453 58 int count = 0 ;
Rhyme 1:be0aa2900453 59
Rhyme 1:be0aa2900453 60 for (r = 0 ; r < NUM_ROW ; r++ ) {
Rhyme 1:be0aa2900453 61 row[r]->write(0) ;
Rhyme 1:be0aa2900453 62 for (c = 0 ; c < NUM_COL ; c++ ) {
Rhyme 1:be0aa2900453 63 if (col[c]->read() == 0) {
Rhyme 1:be0aa2900453 64 key[r * NUM_COL + c] = 1 ;
Rhyme 1:be0aa2900453 65 count++ ;
Rhyme 1:be0aa2900453 66 } else {
Rhyme 1:be0aa2900453 67 key[r * NUM_COL + c] = 0 ;
Rhyme 1:be0aa2900453 68 }
Rhyme 1:be0aa2900453 69 }
Rhyme 1:be0aa2900453 70 row[r]->write(1) ;
Rhyme 1:be0aa2900453 71 }
Rhyme 1:be0aa2900453 72 return(count) ;
Rhyme 1:be0aa2900453 73 }
Rhyme 1:be0aa2900453 74
Rhyme 1:be0aa2900453 75 void print_key(int key[])
Rhyme 1:be0aa2900453 76 {
Rhyme 1:be0aa2900453 77 int i ;
Rhyme 1:be0aa2900453 78 for (i = 0 ; i < NUM_KEY ; i++ ) {
Rhyme 1:be0aa2900453 79 if (key[i]) {
Rhyme 1:be0aa2900453 80 printf("%c", key_char[i]) ;
Rhyme 1:be0aa2900453 81 }
Rhyme 1:be0aa2900453 82 }
Rhyme 1:be0aa2900453 83 }
Rhyme 1:be0aa2900453 84
Rhyme 1:be0aa2900453 85 int main() {
Rhyme 1:be0aa2900453 86 int count ;
Rhyme 1:be0aa2900453 87
Rhyme 1:be0aa2900453 88 init_hardware() ;
Rhyme 1:be0aa2900453 89
Rhyme 1:be0aa2900453 90 printf("\n=== Matrix Key Test %s ===\n", __DATE__) ;
Rhyme 1:be0aa2900453 91
Rhyme 1:be0aa2900453 92 while(1) {
Rhyme 1:be0aa2900453 93 count = scan_key(key) ;
Rhyme 1:be0aa2900453 94 if (count) {
Rhyme 1:be0aa2900453 95 print_key(key) ;
Rhyme 1:be0aa2900453 96 fflush(stdout) ;
Rhyme 1:be0aa2900453 97 wait(0.2) ;
Rhyme 1:be0aa2900453 98 }
Rhyme 1:be0aa2900453 99 wait(0.1) ;
Rhyme 1:be0aa2900453 100 }
Rhyme 1:be0aa2900453 101 }