A simple 4x4 matrix key pad test program

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Rhyme
Date:
Wed Apr 12 13:26:04 2017 +0000
Child:
1:be0aa2900453
Commit message:
First commit, working anyway

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Apr 12 13:26:04 2017 +0000
@@ -0,0 +1,95 @@
+#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/mbed.bld	Wed Apr 12 13:26:04 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/856d2700e60b
\ No newline at end of file