keypad kutuphanesi, Interruptsiz

Dependents:   rtos_uygulamasi guvenlik_sistemi keypad_kullanimi lcd_kullanimi_keypad ... more

Revision:
0:7da3ab010a87
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Keypad.h	Mon May 06 10:27:01 2019 +0000
@@ -0,0 +1,70 @@
+#ifndef KEYPAD_H
+#define KEYPAD_H
+
+#include "mbed.h"
+
+#define  CHNG_CNT       4
+
+ /*
+  @code
+  #include "mbed.h"
+  #include "Keypad.h"
+ 
+Keypad key(D10, D9, D8, D7, D6, D5, D4, D3);
+ 
+ char key_table[] = { 
+                      '1', '2', '3', 'A',
+                      '4', '5', '6', 'B',
+                      '7', '8', '9', 'C',
+                      '*', '0', '#', 'D'
+                    };
+  int main() {
+      uint32_t key_num;
+      while(true) {
+         while ((key_num = key.read()) != 0){
+             printf("%c\r\n", *(key_table + key_num-1));
+         }
+         wait(1.0);  
+     }
+ }
+ * @endcode
+ */
+
+class Keypad {
+public:
+    /** 4x4 keypad interface:
+     *  @param key input port           A,B,C,D
+     *  @param key output(scan) port    Q,X,Y,Z
+     */
+    Keypad(PinName qx, PinName kx, PinName ky, PinName kz,
+           PinName ka, PinName kb, PinName kc, PinName kd);
+                    
+    /** Read key data into buffer
+     *  @param none
+     *  @return key number by ASCII code
+     */
+    uint8_t read(void);
+
+protected:
+    DigitalIn   *k_in[4];
+    DigitalOut  *k_out[4];
+    Ticker      tk;
+
+    // key control
+    enum State {Off_state, Off_to_on_transient, On_state, On_to_off_transient};
+    volatile State  key_state[4][4];
+    volatile int8_t key_transent_cntr[4][4];
+    void key_scan(void);
+    
+    // buffer control
+    #define BF_SIZE 20
+    uint8_t         read_addr;
+    uint8_t         write_addr;
+    uint8_t         buf[BF_SIZE];
+    void bf_put (char dat);
+    int8_t bf_get (void);
+
+};
+
+#endif // KEYPAD_H
+