lab 5a

Dependencies:   mbed mbed-rtos tsi_sensor SLCD

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?

UserRevisionLine numberNew 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 */