A simple 4x4 matrix key pad test program
matrix_key_4x4.cpp@1:be0aa2900453, 2017-05-11 (annotated)
- 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?
| 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 | 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 | } |