Motoo Tanaka
/
matrix_key_4x4
A simple 4x4 matrix key pad test program
matrix_key_4x4.cpp@3:1c25a2ed28fe, 2017-05-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |