Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed mbed-rtos tsi_sensor SLCD
keypad4x4.h
00001 #ifndef KEYPAD4x4_H 00002 #define KEYPAD4x4_H 00003 00004 /* 00005 +-----------------+ 00006 | +-+ +-+ +-+ +-+ | 00007 | |1| |2| |3| |A| | 00008 | +-+ +-+ +-+ +-+ | 00009 | +-+ +-+ +-+ +-+ | 00010 | |4| |5| |5| |B| | 00011 | +-+ +-+ +-+ +-+ | 00012 | +-+ +-+ +-+ +-+ | 00013 | |7| |8| |9| |C| | 00014 | +-+ +-+ +-+ +-+ | 00015 | +-+ +-+ +-+ +-+ | 00016 | |*| |0| |#| |D| | 00017 | +-+ +-+ +-+ +-+ | 00018 +-----------------+ 00019 | o o o o o o o o | 00020 C C C C R R R R 00021 O O O O O O O O 00022 L L L L W W W W 00023 0 1 2 3 0 1 2 3 00024 00025 */ 00026 00027 #ifndef BIT 00028 #define BIT(N) (1 << (N)) 00029 #endif 00030 00031 //BusOut keypad4x4_columns(KEYPAD4X4_COLUMN0, KEYPAD4X4_COLUMN1, KEYPAD4X4_COLUMN2, KEYPAD4X4_COLUMN3); 00032 //BusIn keypad4x4_rows(KEYPAD4X4_ROW0, KEYPAD4X4_ROW1, KEYPAD4X4_ROW2, KEYPAD4X4_ROW3); 00033 BusOut keypad4x4_columns(PTE19, PTE18, PTE17, PTE16); 00034 BusIn keypad4x4_rows(PTA14, PTA15, PTA16, PTA17); 00035 InterruptIn keypad4x4_interrupt(PTC16); 00036 00037 #define KEYPAD4X4_TYPE_MIN 0 00038 #define KEYPAD4X4_TELEPHONE 0 00039 #define KEYPAD4X4_TELEPHONE_ALT 1 00040 #define KEYPAD4X4_HEXADECIMAL 2 00041 #define KEYPAD4X4_TYPE_MAX 2 00042 #define KEYPAD4X4_TYPE_DEFAULT KEYPAD4X4_TELEPHONE_ALT 00043 00044 #ifndef KEYPAD4X4_TYPE 00045 #define KEYPAD4X4_TYPE KEYPAD4X4_TYPE_DEFAULT 00046 #endif /* #ifndef KEYPAD4X4_TYPE */ 00047 00048 #if (KEYPAD4X4_TYPE < KEYPAD4X4_TYPE_MIN) || (KEYPAD4X4_TYPE > KEYPAD4X4_TYPE_MAX) 00049 #warning "invalid KEYPAD4X4_TYPE specified, default KEYPAD4X4_TYPE used" 00050 #undef KEYPAD4X4_TYPE 00051 #define KEYPAD4X4_TYPE KEYPAD4X4_TYPE_DEFAULT 00052 #endif /* #if (KEYPAD4X4_TYPE < KEYPAD4X4_TYPE_MIN) || (KEYPAD4X4_TYPE > KEYPAD4X4_TYPE_MAX) */ 00053 00054 int keypad4x4_type=KEYPAD4X4_TYPE; 00055 00056 char keypad4x4_ASCII[KEYPAD4X4_TYPE_MAX+1][4][4]={ 00057 {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'}}, 00058 {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'E','0','F','D'}}, 00059 {{'0','1','2','3'},{'4','5','6','7'},{'8','9','A','B'},{'C','D','E','F'}} }; 00060 /* KEYPAD4X4_ASCII[0][][] is KEYPAD4X4_TELEPHONE (e.g. '*' and '#') */ 00061 /* KEYPAD4X4_ASCII[1][][] is KEYPAD4X4_TELEPHONE_ALT (e.g. 'E' and 'F')*/ 00062 /* KEYPAD4X4_ASCII[2][][] is KEYPAD4X4_HEXADECIMAL (e.g. 0-F in order) */ 00063 00064 int keypad4x4_set_type(int type) 00065 { 00066 if((type < KEYPAD4X4_TYPE_MIN) || (type > KEYPAD4X4_TYPE_MAX)) { type=KEYPAD4X4_TYPE_DEFAULT; } 00067 keypad4x4_type=type; 00068 return(keypad4x4_type); 00069 } 00070 00071 int keypad4x4_query(char *key_value, int * key_row, int *key_column) 00072 { 00073 int row, column, temp, type; 00074 keypad4x4_rows.mode(PullDown); 00075 00076 if((keypad4x4_type < KEYPAD4X4_TYPE_MIN) || (keypad4x4_type > KEYPAD4X4_TYPE_MAX)) 00077 { 00078 keypad4x4_type=KEYPAD4X4_TYPE_DEFAULT; 00079 } 00080 00081 keypad4x4_columns=0xF; 00082 if(keypad4x4_rows == 0) 00083 { 00084 *key_row=-1; 00085 *key_column=-1; 00086 *key_value='\0'; 00087 return(-1); 00088 } 00089 00090 for (column=0; column < 4; column++) 00091 { 00092 row=4; 00093 // keypad4x4_columns=(1<<column); 00094 keypad4x4_columns=BIT(column); 00095 temp=keypad4x4_rows; 00096 if (temp != 0) 00097 { 00098 for(row=0; row <4; row++) 00099 { 00100 // if((temp & (1<<row)) != 0) 00101 if((temp & BIT(row)) != 0) 00102 { 00103 break; 00104 } 00105 } 00106 } 00107 if(row<4) 00108 { 00109 *key_row=row; 00110 *key_column=column; 00111 *key_value=keypad4x4_ASCII[keypad4x4_type][row][column]; 00112 while(keypad4x4_rows != 0) {} 00113 // wait(0.01); 00114 return((row<<2)+column); 00115 } 00116 else 00117 { 00118 *key_row=-1; 00119 *key_column=-1; 00120 *key_value='\0'; 00121 //return(-1); 00122 } 00123 } 00124 return(-3); 00125 } /* end of KEYPAD4X4_query() */ 00126 00127 char keypad4x4_getc(void) 00128 { 00129 int row, column, type, temp; 00130 char c; 00131 while((temp=keypad4x4_query(&c, &row, &column)) < 0) 00132 { } 00133 return(c); 00134 00135 } /* end of keypad4x4_getc() */ 00136 00137 int keypad4x4_input(char *key_value, int * key_row, int *key_column) 00138 { 00139 int row, column, temp, type; 00140 char c; 00141 00142 while((temp=keypad4x4_query(&c, &row, &column)) < 0) 00143 { } 00144 *key_row=row; 00145 *key_column=column; 00146 *key_value=c; 00147 return(temp); 00148 00149 00150 } /* end of KEYPAD4X4_input() */ 00151 00152 00153 00154 00155 00156 #endif /* #ifndef KEYPAD4x4_H */
Generated on Thu Jul 21 2022 08:33:46 by
 1.7.2
 1.7.2