Motoo Tanaka / Mbed 2 deprecated matrix_key_4x4

Dependencies:   mbed

Committer:
Rhyme
Date:
Wed Apr 12 13:26:04 2017 +0000
Revision:
0:a05c97d07ea7
First commit, working anyway

Who changed what in which revision?

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