A simple 4x4 matrix key pad test program
Embed:
(wiki syntax)
Show/hide line numbers
matrix_key_4x4.cpp
00001 /** 00002 * matrix key scan program 00003 * 00004 * @note assuming key pad of 16 keys 00005 * @note 4 x 4 matrix scan 00006 */ 00007 #include "mbed.h" 00008 00009 #if defined (TARGET_KL25Z) 00010 #define COL0 PTC7 00011 #define COL1 PTC0 00012 #define COL2 PTC3 00013 #define COL3 PTC4 00014 #define ROW0 PTC5 00015 #define ROW1 PTC6 00016 #define ROW2 PTC10 00017 #define ROW3 PTC11 00018 #endif 00019 00020 #define NUM_COL 4 00021 #define NUM_ROW 4 00022 #define NUM_KEY (NUM_COL * NUM_ROW) 00023 00024 int key[ NUM_KEY ] = { 00025 0, 0, 0, 0, 00026 0, 0, 0, 0, 00027 0, 0, 0, 0, 00028 0, 0, 0, 0 00029 } ; 00030 00031 #if 0 00032 /* Sengoku 4x4 keypad */ 00033 unsigned char key_char[NUM_KEY] = { 00034 '1', '2', '3', 'A', 00035 '4', '5', '6', 'B', 00036 '7', '8', '9', 'C', 00037 '*', '0', '#', 'D' 00038 } ; 00039 #endif /* Sengoku 4x4 keypad */ 00040 #if 1 00041 /* Aitendo HC-54375 */ 00042 unsigned char key_char[NUM_KEY] = { 00043 'C', 'D', 'E', 'F', 00044 '9', '0', 'A', 'B', 00045 '5', '6', '7', '8', 00046 '1', '2', '3', '4' 00047 } ; 00048 #endif /* Aitendo HC-54375 */ 00049 00050 DigitalIn *col[NUM_COL] ; 00051 DigitalOut *row[NUM_ROW] ; 00052 00053 void init_hardware(void) 00054 { 00055 col[3] = new DigitalIn(COL3, PullUp) ; 00056 col[2] = new DigitalIn(COL2, PullUp) ; 00057 col[1] = new DigitalIn(COL1, PullUp) ; 00058 col[0] = new DigitalIn(COL0, PullUp) ; 00059 00060 row[3] = new DigitalOut(ROW3, 1) ; 00061 row[2] = new DigitalOut(ROW2, 1) ; 00062 row[1] = new DigitalOut(ROW1, 1) ; 00063 row[0] = new DigitalOut(ROW0, 1) ; 00064 } 00065 00066 int scan_key(int key[]) 00067 { 00068 int r, c ; 00069 int count = 0 ; 00070 00071 for (r = 0 ; r < NUM_ROW ; r++ ) { 00072 row[r]->write(0) ; 00073 for (c = 0 ; c < NUM_COL ; c++ ) { 00074 if (col[c]->read() == 0) { 00075 key[r * NUM_COL + c] = 1 ; 00076 count++ ; 00077 } else { 00078 key[r * NUM_COL + c] = 0 ; 00079 } 00080 } 00081 row[r]->write(1) ; 00082 } 00083 return(count) ; 00084 } 00085 00086 void print_key(int key[]) 00087 { 00088 int i ; 00089 for (i = 0 ; i < NUM_KEY ; i++ ) { 00090 if (key[i]) { 00091 printf("%c", key_char[i]) ; 00092 } 00093 } 00094 } 00095 00096 int main() { 00097 int count ; 00098 00099 init_hardware() ; 00100 00101 printf("\n=== Matrix Key Test %s ===\n", __DATE__) ; 00102 00103 while(1) { 00104 count = scan_key(key) ; 00105 if (count) { 00106 print_key(key) ; 00107 fflush(stdout) ; 00108 wait(0.2) ; 00109 } 00110 wait(0.1) ; 00111 } 00112 }
Generated on Wed Jul 13 2022 18:42:51 by
1.7.2