
lab 5a
Dependencies: mbed mbed-rtos tsi_sensor SLCD
keypad4x4.h@2:cad0ec8e29a5, 2020-05-03 (annotated)
- Committer:
- teajaypierce
- Date:
- Sun May 03 12:55:12 2020 +0000
- Revision:
- 2:cad0ec8e29a5
- Parent:
- 0:78b84e1ce9df
lab 5a
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wstapleton | 0:78b84e1ce9df | 1 | #ifndef KEYPAD4x4_H |
wstapleton | 0:78b84e1ce9df | 2 | #define KEYPAD4x4_H |
wstapleton | 0:78b84e1ce9df | 3 | |
wstapleton | 0:78b84e1ce9df | 4 | /* |
wstapleton | 0:78b84e1ce9df | 5 | +-----------------+ |
wstapleton | 0:78b84e1ce9df | 6 | | +-+ +-+ +-+ +-+ | |
wstapleton | 0:78b84e1ce9df | 7 | | |1| |2| |3| |A| | |
wstapleton | 0:78b84e1ce9df | 8 | | +-+ +-+ +-+ +-+ | |
wstapleton | 0:78b84e1ce9df | 9 | | +-+ +-+ +-+ +-+ | |
wstapleton | 0:78b84e1ce9df | 10 | | |4| |5| |5| |B| | |
wstapleton | 0:78b84e1ce9df | 11 | | +-+ +-+ +-+ +-+ | |
wstapleton | 0:78b84e1ce9df | 12 | | +-+ +-+ +-+ +-+ | |
wstapleton | 0:78b84e1ce9df | 13 | | |7| |8| |9| |C| | |
wstapleton | 0:78b84e1ce9df | 14 | | +-+ +-+ +-+ +-+ | |
wstapleton | 0:78b84e1ce9df | 15 | | +-+ +-+ +-+ +-+ | |
wstapleton | 0:78b84e1ce9df | 16 | | |*| |0| |#| |D| | |
wstapleton | 0:78b84e1ce9df | 17 | | +-+ +-+ +-+ +-+ | |
wstapleton | 0:78b84e1ce9df | 18 | +-----------------+ |
wstapleton | 0:78b84e1ce9df | 19 | | o o o o o o o o | |
wstapleton | 0:78b84e1ce9df | 20 | C C C C R R R R |
wstapleton | 0:78b84e1ce9df | 21 | O O O O O O O O |
wstapleton | 0:78b84e1ce9df | 22 | L L L L W W W W |
wstapleton | 0:78b84e1ce9df | 23 | 0 1 2 3 0 1 2 3 |
wstapleton | 0:78b84e1ce9df | 24 | |
wstapleton | 0:78b84e1ce9df | 25 | */ |
wstapleton | 0:78b84e1ce9df | 26 | |
wstapleton | 0:78b84e1ce9df | 27 | #ifndef BIT |
wstapleton | 0:78b84e1ce9df | 28 | #define BIT(N) (1 << (N)) |
wstapleton | 0:78b84e1ce9df | 29 | #endif |
wstapleton | 0:78b84e1ce9df | 30 | |
wstapleton | 0:78b84e1ce9df | 31 | //BusOut keypad4x4_columns(KEYPAD4X4_COLUMN0, KEYPAD4X4_COLUMN1, KEYPAD4X4_COLUMN2, KEYPAD4X4_COLUMN3); |
wstapleton | 0:78b84e1ce9df | 32 | //BusIn keypad4x4_rows(KEYPAD4X4_ROW0, KEYPAD4X4_ROW1, KEYPAD4X4_ROW2, KEYPAD4X4_ROW3); |
wstapleton | 0:78b84e1ce9df | 33 | BusOut keypad4x4_columns(PTE19, PTE18, PTE17, PTE16); |
wstapleton | 0:78b84e1ce9df | 34 | BusIn keypad4x4_rows(PTA14, PTA15, PTA16, PTA17); |
wstapleton | 0:78b84e1ce9df | 35 | InterruptIn keypad4x4_interrupt(PTC16); |
wstapleton | 0:78b84e1ce9df | 36 | |
wstapleton | 0:78b84e1ce9df | 37 | #define KEYPAD4X4_TYPE_MIN 0 |
wstapleton | 0:78b84e1ce9df | 38 | #define KEYPAD4X4_TELEPHONE 0 |
wstapleton | 0:78b84e1ce9df | 39 | #define KEYPAD4X4_TELEPHONE_ALT 1 |
wstapleton | 0:78b84e1ce9df | 40 | #define KEYPAD4X4_HEXADECIMAL 2 |
wstapleton | 0:78b84e1ce9df | 41 | #define KEYPAD4X4_TYPE_MAX 2 |
wstapleton | 0:78b84e1ce9df | 42 | #define KEYPAD4X4_TYPE_DEFAULT KEYPAD4X4_TELEPHONE_ALT |
wstapleton | 0:78b84e1ce9df | 43 | |
wstapleton | 0:78b84e1ce9df | 44 | #ifndef KEYPAD4X4_TYPE |
wstapleton | 0:78b84e1ce9df | 45 | #define KEYPAD4X4_TYPE KEYPAD4X4_TYPE_DEFAULT |
wstapleton | 0:78b84e1ce9df | 46 | #endif /* #ifndef KEYPAD4X4_TYPE */ |
wstapleton | 0:78b84e1ce9df | 47 | |
wstapleton | 0:78b84e1ce9df | 48 | #if (KEYPAD4X4_TYPE < KEYPAD4X4_TYPE_MIN) || (KEYPAD4X4_TYPE > KEYPAD4X4_TYPE_MAX) |
wstapleton | 0:78b84e1ce9df | 49 | #warning "invalid KEYPAD4X4_TYPE specified, default KEYPAD4X4_TYPE used" |
wstapleton | 0:78b84e1ce9df | 50 | #undef KEYPAD4X4_TYPE |
wstapleton | 0:78b84e1ce9df | 51 | #define KEYPAD4X4_TYPE KEYPAD4X4_TYPE_DEFAULT |
wstapleton | 0:78b84e1ce9df | 52 | #endif /* #if (KEYPAD4X4_TYPE < KEYPAD4X4_TYPE_MIN) || (KEYPAD4X4_TYPE > KEYPAD4X4_TYPE_MAX) */ |
wstapleton | 0:78b84e1ce9df | 53 | |
wstapleton | 0:78b84e1ce9df | 54 | int keypad4x4_type=KEYPAD4X4_TYPE; |
wstapleton | 0:78b84e1ce9df | 55 | |
wstapleton | 0:78b84e1ce9df | 56 | char keypad4x4_ASCII[KEYPAD4X4_TYPE_MAX+1][4][4]={ |
wstapleton | 0:78b84e1ce9df | 57 | {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'}}, |
wstapleton | 0:78b84e1ce9df | 58 | {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'E','0','F','D'}}, |
wstapleton | 0:78b84e1ce9df | 59 | {{'0','1','2','3'},{'4','5','6','7'},{'8','9','A','B'},{'C','D','E','F'}} }; |
wstapleton | 0:78b84e1ce9df | 60 | /* KEYPAD4X4_ASCII[0][][] is KEYPAD4X4_TELEPHONE (e.g. '*' and '#') */ |
wstapleton | 0:78b84e1ce9df | 61 | /* KEYPAD4X4_ASCII[1][][] is KEYPAD4X4_TELEPHONE_ALT (e.g. 'E' and 'F')*/ |
wstapleton | 0:78b84e1ce9df | 62 | /* KEYPAD4X4_ASCII[2][][] is KEYPAD4X4_HEXADECIMAL (e.g. 0-F in order) */ |
wstapleton | 0:78b84e1ce9df | 63 | |
wstapleton | 0:78b84e1ce9df | 64 | int keypad4x4_set_type(int type) |
wstapleton | 0:78b84e1ce9df | 65 | { |
wstapleton | 0:78b84e1ce9df | 66 | if((type < KEYPAD4X4_TYPE_MIN) || (type > KEYPAD4X4_TYPE_MAX)) { type=KEYPAD4X4_TYPE_DEFAULT; } |
wstapleton | 0:78b84e1ce9df | 67 | keypad4x4_type=type; |
wstapleton | 0:78b84e1ce9df | 68 | return(keypad4x4_type); |
wstapleton | 0:78b84e1ce9df | 69 | } |
wstapleton | 0:78b84e1ce9df | 70 | |
wstapleton | 0:78b84e1ce9df | 71 | int keypad4x4_query(char *key_value, int * key_row, int *key_column) |
wstapleton | 0:78b84e1ce9df | 72 | { |
wstapleton | 0:78b84e1ce9df | 73 | int row, column, temp, type; |
wstapleton | 0:78b84e1ce9df | 74 | keypad4x4_rows.mode(PullDown); |
wstapleton | 0:78b84e1ce9df | 75 | |
wstapleton | 0:78b84e1ce9df | 76 | if((keypad4x4_type < KEYPAD4X4_TYPE_MIN) || (keypad4x4_type > KEYPAD4X4_TYPE_MAX)) |
wstapleton | 0:78b84e1ce9df | 77 | { |
wstapleton | 0:78b84e1ce9df | 78 | keypad4x4_type=KEYPAD4X4_TYPE_DEFAULT; |
wstapleton | 0:78b84e1ce9df | 79 | } |
wstapleton | 0:78b84e1ce9df | 80 | |
wstapleton | 0:78b84e1ce9df | 81 | keypad4x4_columns=0xF; |
wstapleton | 0:78b84e1ce9df | 82 | if(keypad4x4_rows == 0) |
wstapleton | 0:78b84e1ce9df | 83 | { |
wstapleton | 0:78b84e1ce9df | 84 | *key_row=-1; |
wstapleton | 0:78b84e1ce9df | 85 | *key_column=-1; |
wstapleton | 0:78b84e1ce9df | 86 | *key_value='\0'; |
wstapleton | 0:78b84e1ce9df | 87 | return(-1); |
wstapleton | 0:78b84e1ce9df | 88 | } |
wstapleton | 0:78b84e1ce9df | 89 | |
wstapleton | 0:78b84e1ce9df | 90 | for (column=0; column < 4; column++) |
wstapleton | 0:78b84e1ce9df | 91 | { |
wstapleton | 0:78b84e1ce9df | 92 | row=4; |
wstapleton | 0:78b84e1ce9df | 93 | // keypad4x4_columns=(1<<column); |
wstapleton | 0:78b84e1ce9df | 94 | keypad4x4_columns=BIT(column); |
wstapleton | 0:78b84e1ce9df | 95 | temp=keypad4x4_rows; |
wstapleton | 0:78b84e1ce9df | 96 | if (temp != 0) |
wstapleton | 0:78b84e1ce9df | 97 | { |
wstapleton | 0:78b84e1ce9df | 98 | for(row=0; row <4; row++) |
wstapleton | 0:78b84e1ce9df | 99 | { |
wstapleton | 0:78b84e1ce9df | 100 | // if((temp & (1<<row)) != 0) |
wstapleton | 0:78b84e1ce9df | 101 | if((temp & BIT(row)) != 0) |
wstapleton | 0:78b84e1ce9df | 102 | { |
wstapleton | 0:78b84e1ce9df | 103 | break; |
wstapleton | 0:78b84e1ce9df | 104 | } |
wstapleton | 0:78b84e1ce9df | 105 | } |
wstapleton | 0:78b84e1ce9df | 106 | } |
wstapleton | 0:78b84e1ce9df | 107 | if(row<4) |
wstapleton | 0:78b84e1ce9df | 108 | { |
wstapleton | 0:78b84e1ce9df | 109 | *key_row=row; |
wstapleton | 0:78b84e1ce9df | 110 | *key_column=column; |
wstapleton | 0:78b84e1ce9df | 111 | *key_value=keypad4x4_ASCII[keypad4x4_type][row][column]; |
wstapleton | 0:78b84e1ce9df | 112 | while(keypad4x4_rows != 0) {} |
wstapleton | 0:78b84e1ce9df | 113 | // wait(0.01); |
wstapleton | 0:78b84e1ce9df | 114 | return((row<<2)+column); |
wstapleton | 0:78b84e1ce9df | 115 | } |
wstapleton | 0:78b84e1ce9df | 116 | else |
wstapleton | 0:78b84e1ce9df | 117 | { |
wstapleton | 0:78b84e1ce9df | 118 | *key_row=-1; |
wstapleton | 0:78b84e1ce9df | 119 | *key_column=-1; |
wstapleton | 0:78b84e1ce9df | 120 | *key_value='\0'; |
wstapleton | 0:78b84e1ce9df | 121 | return(-1); |
wstapleton | 0:78b84e1ce9df | 122 | } |
wstapleton | 0:78b84e1ce9df | 123 | } |
wstapleton | 0:78b84e1ce9df | 124 | return(-3); |
wstapleton | 0:78b84e1ce9df | 125 | } /* end of KEYPAD4X4_query() */ |
wstapleton | 0:78b84e1ce9df | 126 | |
wstapleton | 0:78b84e1ce9df | 127 | char keypad4x4_getc(void) |
wstapleton | 0:78b84e1ce9df | 128 | { |
wstapleton | 0:78b84e1ce9df | 129 | int row, column, type, temp; |
wstapleton | 0:78b84e1ce9df | 130 | char c; |
wstapleton | 0:78b84e1ce9df | 131 | while((temp=keypad4x4_query(&c, &row, &column)) < 0) |
wstapleton | 0:78b84e1ce9df | 132 | { } |
wstapleton | 0:78b84e1ce9df | 133 | return(c); |
wstapleton | 0:78b84e1ce9df | 134 | |
wstapleton | 0:78b84e1ce9df | 135 | } /* end of keypad4x4_getc() */ |
wstapleton | 0:78b84e1ce9df | 136 | |
wstapleton | 0:78b84e1ce9df | 137 | int keypad4x4_input(char *key_value, int * key_row, int *key_column) |
wstapleton | 0:78b84e1ce9df | 138 | { |
wstapleton | 0:78b84e1ce9df | 139 | int row, column, temp, type; |
wstapleton | 0:78b84e1ce9df | 140 | char c; |
wstapleton | 0:78b84e1ce9df | 141 | |
wstapleton | 0:78b84e1ce9df | 142 | while((temp=keypad4x4_query(&c, &row, &column)) < 0) |
wstapleton | 0:78b84e1ce9df | 143 | { } |
wstapleton | 0:78b84e1ce9df | 144 | *key_row=row; |
wstapleton | 0:78b84e1ce9df | 145 | *key_column=column; |
wstapleton | 0:78b84e1ce9df | 146 | *key_value=c; |
wstapleton | 0:78b84e1ce9df | 147 | return(temp); |
wstapleton | 0:78b84e1ce9df | 148 | |
wstapleton | 0:78b84e1ce9df | 149 | |
wstapleton | 0:78b84e1ce9df | 150 | } /* end of KEYPAD4X4_input() */ |
wstapleton | 0:78b84e1ce9df | 151 | |
wstapleton | 0:78b84e1ce9df | 152 | |
wstapleton | 0:78b84e1ce9df | 153 | |
wstapleton | 0:78b84e1ce9df | 154 | |
wstapleton | 0:78b84e1ce9df | 155 | |
wstapleton | 0:78b84e1ce9df | 156 | #endif /* #ifndef KEYPAD4x4_H */ |