A simple 4x4 matrix key pad test program

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Rhyme
Date:
Thu May 11 01:29:58 2017 +0000
Parent:
0:a05c97d07ea7
Child:
2:bac691bab19c
Commit message:
First commit

Changed in this revision

main.cpp Show diff for this revision Revisions of this file
matrix_key_4x4.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Apr 12 13:26:04 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-#include "mbed.h"
-
-#if defined (TARGET_KL25Z)
-#define ROW0 PTC9
-#define ROW1 PTC8
-#define ROW2 PTA5
-#define ROW3 PTA4
-#define COL0 PTA12
-#define COL1 PTD4
-#define COL2 PTA1
-#define COL3 PTA2
-#endif
-
-#define NUM_COL 4
-#define NUM_ROW 4
-#define NUM_KEY (NUM_COL * NUM_ROW)
-
-int key[ NUM_KEY ] = {
-    0, 0, 0, 0,
-    0, 0, 0, 0,
-    0, 0, 0, 0,
-    0, 0, 0, 0
-} ;
-
-unsigned char key_char[NUM_KEY] = {
-    '1', '4', '7', '*',
-    '2', '5', '8', '0',
-    '3', '6', '9', '#',
-    'A', 'B', 'C', 'D'
-} ; 
-
-
-DigitalIn  *col[NUM_COL] ;
-DigitalOut *row[NUM_ROW] ;
-
-void init_hardware(void)
-{
-    col[3] = new DigitalIn(PTC11, PullUp) ;
-    col[2] = new DigitalIn(PTC10, PullUp) ;
-    col[1] = new DigitalIn(PTC6, PullUp) ;
-    col[0] = new DigitalIn(PTC5, PullUp) ;
-
-    row[3] = new DigitalOut(PTC4, 1) ;
-    row[2] = new DigitalOut(PTC3,  1) ;
-    row[1] = new DigitalOut(PTC0,  1) ;
-    row[0] = new DigitalOut(PTC7,  1) ;
-}
-
-int scan_key(int key[])
-{
-    int r, c ;
-    int count = 0 ;
-
-    for (r = 0 ; r < NUM_ROW ; r++ ) {
-        row[r]->write(0) ;
-        for (c = 0 ; c < NUM_COL ; c++ ) {
-            if (col[c]->read() == 0) {
-                key[r * NUM_COL + c] = 1 ;
-                count++ ;
-            } else {
-                key[r * NUM_COL + c] = 0 ;
-            }
-        }
-        row[r]->write(1)  ;
-    }
-    return(count) ;
-}
-
-void print_key(int key[])
-{
-    int i ;
-    for (i = 0 ; i < NUM_KEY ; i++ ) {
-        if (key[i]) {
-            printf("%c", key_char[i]) ;
-        }
-    }
-}
-    
-int main() {
-    int count ;
-    
-    init_hardware() ;
-    
-    printf("\n=== Matrix Key Test %s ===\n", __DATE__) ;
-    
-    while(1) {
-        count = scan_key(key) ;
-        if (count) {
-            print_key(key) ;
-            fflush(stdout) ;
-            wait(0.2) ;
-        }
-        wait(0.1) ;
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/matrix_key_4x4.cpp	Thu May 11 01:29:58 2017 +0000
@@ -0,0 +1,101 @@
+/**
+ * matrix key scan program
+ *
+ * @note assuming key pad of 16 keys
+ * @note 4 x 4 matrix scan
+ */
+#include "mbed.h"
+
+#if defined (TARGET_KL25Z)
+#define ROW0 PTC9
+#define ROW1 PTC8
+#define ROW2 PTA5
+#define ROW3 PTA4
+#define COL0 PTA12
+#define COL1 PTD4
+#define COL2 PTA1
+#define COL3 PTA2
+#endif
+
+#define NUM_COL 4
+#define NUM_ROW 4
+#define NUM_KEY (NUM_COL * NUM_ROW)
+
+int key[ NUM_KEY ] = {
+    0, 0, 0, 0,
+    0, 0, 0, 0,
+    0, 0, 0, 0,
+    0, 0, 0, 0
+} ;
+
+unsigned char key_char[NUM_KEY] = {
+    '1', '4', '7', '*',
+    '2', '5', '8', '0',
+    '3', '6', '9', '#',
+    'A', 'B', 'C', 'D'
+} ; 
+
+
+DigitalIn  *col[NUM_COL] ;
+DigitalOut *row[NUM_ROW] ;
+
+void init_hardware(void)
+{
+    col[3] = new DigitalIn(PTC11, PullUp) ;
+    col[2] = new DigitalIn(PTC10, PullUp) ;
+    col[1] = new DigitalIn(PTC6,  PullUp) ;
+    col[0] = new DigitalIn(PTC5,  PullUp) ;
+
+    row[3] = new DigitalOut(PTC4, 1) ;
+    row[2] = new DigitalOut(PTC3, 1) ;
+    row[1] = new DigitalOut(PTC0, 1) ;
+    row[0] = new DigitalOut(PTC7, 1) ;
+}
+
+int scan_key(int key[])
+{
+    int r, c ;
+    int count = 0 ;
+
+    for (r = 0 ; r < NUM_ROW ; r++ ) {
+        row[r]->write(0) ;
+        for (c = 0 ; c < NUM_COL ; c++ ) {
+            if (col[c]->read() == 0) {
+                key[r * NUM_COL + c] = 1 ;
+                count++ ;
+            } else {
+                key[r * NUM_COL + c] = 0 ;
+            }
+        }
+        row[r]->write(1)  ;
+    }
+    return(count) ;
+}
+
+void print_key(int key[])
+{
+    int i ;
+    for (i = 0 ; i < NUM_KEY ; i++ ) {
+        if (key[i]) {
+            printf("%c", key_char[i]) ;
+        }
+    }
+}
+    
+int main() {
+    int count ;
+    
+    init_hardware() ;
+    
+    printf("\n=== Matrix Key Test %s ===\n", __DATE__) ;
+    
+    while(1) {
+        count = scan_key(key) ;
+        if (count) {
+            print_key(key) ;
+            fflush(stdout) ;
+            wait(0.2) ;
+        }
+        wait(0.1) ;
+    }
+}