Andrew Bell
/
lab3_creg
Dr cregans solution for keypad polling
main.cpp@0:d866ad9b15fb, 2021-02-20 (annotated)
- Committer:
- andrewbw01
- Date:
- Sat Feb 20 13:22:01 2021 +0000
- Revision:
- 0:d866ad9b15fb
lab3 creg
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
andrewbw01 | 0:d866ad9b15fb | 1 | #include "mbed.h" |
andrewbw01 | 0:d866ad9b15fb | 2 | |
andrewbw01 | 0:d866ad9b15fb | 3 | BusOut LED_Disp(p7,p11,p9,p8,p5,p6,p10,p12); |
andrewbw01 | 0:d866ad9b15fb | 4 | |
andrewbw01 | 0:d866ad9b15fb | 5 | |
andrewbw01 | 0:d866ad9b15fb | 6 | |
andrewbw01 | 0:d866ad9b15fb | 7 | DigitalOut col1 (p26); // pin 4 on keypad |
andrewbw01 | 0:d866ad9b15fb | 8 | DigitalOut col2 (p28); // pin 2 |
andrewbw01 | 0:d866ad9b15fb | 9 | DigitalOut col3 (p24); // pin 6 |
andrewbw01 | 0:d866ad9b15fb | 10 | |
andrewbw01 | 0:d866ad9b15fb | 11 | DigitalIn row1 (p27); // pin 3 |
andrewbw01 | 0:d866ad9b15fb | 12 | DigitalIn row2 (p22); // pin 8 |
andrewbw01 | 0:d866ad9b15fb | 13 | DigitalIn row3 (p23); // pin 7 |
andrewbw01 | 0:d866ad9b15fb | 14 | DigitalIn row4 (p25); // pin 5 |
andrewbw01 | 0:d866ad9b15fb | 15 | |
andrewbw01 | 0:d866ad9b15fb | 16 | char keypad(void); // declare keypad function will return character pressed |
andrewbw01 | 0:d866ad9b15fb | 17 | void DisplayNumber(int); // Declare functio to display number on seven seg |
andrewbw01 | 0:d866ad9b15fb | 18 | |
andrewbw01 | 0:d866ad9b15fb | 19 | int main() |
andrewbw01 | 0:d866ad9b15fb | 20 | { |
andrewbw01 | 0:d866ad9b15fb | 21 | char kp_val = ' '; // character that changes when the key is pressed, has initial value |
andrewbw01 | 0:d866ad9b15fb | 22 | |
andrewbw01 | 0:d866ad9b15fb | 23 | LED_Disp = 0xFF; |
andrewbw01 | 0:d866ad9b15fb | 24 | |
andrewbw01 | 0:d866ad9b15fb | 25 | while(1) |
andrewbw01 | 0:d866ad9b15fb | 26 | { |
andrewbw01 | 0:d866ad9b15fb | 27 | kp_val = keypad(); |
andrewbw01 | 0:d866ad9b15fb | 28 | |
andrewbw01 | 0:d866ad9b15fb | 29 | if(kp_val!= ' ') // poll keypad and check if any value is pressed |
andrewbw01 | 0:d866ad9b15fb | 30 | { |
andrewbw01 | 0:d866ad9b15fb | 31 | if(kp_val=='*') LED_Disp = ~0x63; |
andrewbw01 | 0:d866ad9b15fb | 32 | if(kp_val=='#') LED_Disp = ~0x5C; |
andrewbw01 | 0:d866ad9b15fb | 33 | |
andrewbw01 | 0:d866ad9b15fb | 34 | if(kp_val>='0' && kp_val<='9') |
andrewbw01 | 0:d866ad9b15fb | 35 | DisplayNumber(kp_val-48); // subtract 48 to change ASCII into number |
andrewbw01 | 0:d866ad9b15fb | 36 | |
andrewbw01 | 0:d866ad9b15fb | 37 | kp_val=' '; // reset keypad_char |
andrewbw01 | 0:d866ad9b15fb | 38 | } |
andrewbw01 | 0:d866ad9b15fb | 39 | wait(0.1); |
andrewbw01 | 0:d866ad9b15fb | 40 | } |
andrewbw01 | 0:d866ad9b15fb | 41 | } |
andrewbw01 | 0:d866ad9b15fb | 42 | |
andrewbw01 | 0:d866ad9b15fb | 43 | |
andrewbw01 | 0:d866ad9b15fb | 44 | char keypad(void) |
andrewbw01 | 0:d866ad9b15fb | 45 | { |
andrewbw01 | 0:d866ad9b15fb | 46 | col1=1; |
andrewbw01 | 0:d866ad9b15fb | 47 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 48 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 49 | |
andrewbw01 | 0:d866ad9b15fb | 50 | if(row1==1) |
andrewbw01 | 0:d866ad9b15fb | 51 | { |
andrewbw01 | 0:d866ad9b15fb | 52 | while(row1==1){} |
andrewbw01 | 0:d866ad9b15fb | 53 | |
andrewbw01 | 0:d866ad9b15fb | 54 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 55 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 56 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 57 | return('1'); |
andrewbw01 | 0:d866ad9b15fb | 58 | } |
andrewbw01 | 0:d866ad9b15fb | 59 | else if(row2==1) |
andrewbw01 | 0:d866ad9b15fb | 60 | { |
andrewbw01 | 0:d866ad9b15fb | 61 | while (row2==1){} |
andrewbw01 | 0:d866ad9b15fb | 62 | |
andrewbw01 | 0:d866ad9b15fb | 63 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 64 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 65 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 66 | return('4'); |
andrewbw01 | 0:d866ad9b15fb | 67 | } |
andrewbw01 | 0:d866ad9b15fb | 68 | else if(row3==1) |
andrewbw01 | 0:d866ad9b15fb | 69 | { |
andrewbw01 | 0:d866ad9b15fb | 70 | while (row3==1){} |
andrewbw01 | 0:d866ad9b15fb | 71 | |
andrewbw01 | 0:d866ad9b15fb | 72 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 73 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 74 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 75 | return('7'); |
andrewbw01 | 0:d866ad9b15fb | 76 | } |
andrewbw01 | 0:d866ad9b15fb | 77 | else if(row4==1) |
andrewbw01 | 0:d866ad9b15fb | 78 | { |
andrewbw01 | 0:d866ad9b15fb | 79 | while(row4==1){} |
andrewbw01 | 0:d866ad9b15fb | 80 | |
andrewbw01 | 0:d866ad9b15fb | 81 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 82 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 83 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 84 | return('*'); |
andrewbw01 | 0:d866ad9b15fb | 85 | } |
andrewbw01 | 0:d866ad9b15fb | 86 | |
andrewbw01 | 0:d866ad9b15fb | 87 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 88 | col2=1; |
andrewbw01 | 0:d866ad9b15fb | 89 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 90 | |
andrewbw01 | 0:d866ad9b15fb | 91 | if(row1==1) |
andrewbw01 | 0:d866ad9b15fb | 92 | { |
andrewbw01 | 0:d866ad9b15fb | 93 | while(row1==1){} |
andrewbw01 | 0:d866ad9b15fb | 94 | |
andrewbw01 | 0:d866ad9b15fb | 95 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 96 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 97 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 98 | return('2'); |
andrewbw01 | 0:d866ad9b15fb | 99 | } |
andrewbw01 | 0:d866ad9b15fb | 100 | else if(row2==1) |
andrewbw01 | 0:d866ad9b15fb | 101 | { |
andrewbw01 | 0:d866ad9b15fb | 102 | while (row2==1){} |
andrewbw01 | 0:d866ad9b15fb | 103 | |
andrewbw01 | 0:d866ad9b15fb | 104 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 105 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 106 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 107 | return('5'); |
andrewbw01 | 0:d866ad9b15fb | 108 | } |
andrewbw01 | 0:d866ad9b15fb | 109 | else if(row3==1) |
andrewbw01 | 0:d866ad9b15fb | 110 | { |
andrewbw01 | 0:d866ad9b15fb | 111 | while (row3==1){} |
andrewbw01 | 0:d866ad9b15fb | 112 | |
andrewbw01 | 0:d866ad9b15fb | 113 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 114 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 115 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 116 | return('8'); |
andrewbw01 | 0:d866ad9b15fb | 117 | } |
andrewbw01 | 0:d866ad9b15fb | 118 | else if(row4==1) |
andrewbw01 | 0:d866ad9b15fb | 119 | { |
andrewbw01 | 0:d866ad9b15fb | 120 | while(row4==1){} |
andrewbw01 | 0:d866ad9b15fb | 121 | |
andrewbw01 | 0:d866ad9b15fb | 122 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 123 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 124 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 125 | return('0'); |
andrewbw01 | 0:d866ad9b15fb | 126 | } |
andrewbw01 | 0:d866ad9b15fb | 127 | |
andrewbw01 | 0:d866ad9b15fb | 128 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 129 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 130 | col3=1; |
andrewbw01 | 0:d866ad9b15fb | 131 | |
andrewbw01 | 0:d866ad9b15fb | 132 | if(row1==1) |
andrewbw01 | 0:d866ad9b15fb | 133 | { |
andrewbw01 | 0:d866ad9b15fb | 134 | while(row1==1){} |
andrewbw01 | 0:d866ad9b15fb | 135 | |
andrewbw01 | 0:d866ad9b15fb | 136 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 137 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 138 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 139 | return('3'); |
andrewbw01 | 0:d866ad9b15fb | 140 | } |
andrewbw01 | 0:d866ad9b15fb | 141 | else if(row2==1) |
andrewbw01 | 0:d866ad9b15fb | 142 | { |
andrewbw01 | 0:d866ad9b15fb | 143 | while (row2==1){} |
andrewbw01 | 0:d866ad9b15fb | 144 | |
andrewbw01 | 0:d866ad9b15fb | 145 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 146 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 147 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 148 | return('6'); |
andrewbw01 | 0:d866ad9b15fb | 149 | } |
andrewbw01 | 0:d866ad9b15fb | 150 | else if(row3==1) |
andrewbw01 | 0:d866ad9b15fb | 151 | { |
andrewbw01 | 0:d866ad9b15fb | 152 | while (row3==1){} |
andrewbw01 | 0:d866ad9b15fb | 153 | |
andrewbw01 | 0:d866ad9b15fb | 154 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 155 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 156 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 157 | return('9'); |
andrewbw01 | 0:d866ad9b15fb | 158 | } |
andrewbw01 | 0:d866ad9b15fb | 159 | else if (row4==1) |
andrewbw01 | 0:d866ad9b15fb | 160 | { |
andrewbw01 | 0:d866ad9b15fb | 161 | while(row4==1){} |
andrewbw01 | 0:d866ad9b15fb | 162 | |
andrewbw01 | 0:d866ad9b15fb | 163 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 164 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 165 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 166 | return('#'); |
andrewbw01 | 0:d866ad9b15fb | 167 | } |
andrewbw01 | 0:d866ad9b15fb | 168 | |
andrewbw01 | 0:d866ad9b15fb | 169 | col1=0; |
andrewbw01 | 0:d866ad9b15fb | 170 | col2=0; |
andrewbw01 | 0:d866ad9b15fb | 171 | col3=0; |
andrewbw01 | 0:d866ad9b15fb | 172 | |
andrewbw01 | 0:d866ad9b15fb | 173 | return(' '); |
andrewbw01 | 0:d866ad9b15fb | 174 | } |
andrewbw01 | 0:d866ad9b15fb | 175 | |
andrewbw01 | 0:d866ad9b15fb | 176 | void DisplayNumber(int num) |
andrewbw01 | 0:d866ad9b15fb | 177 | { |
andrewbw01 | 0:d866ad9b15fb | 178 | switch(num) |
andrewbw01 | 0:d866ad9b15fb | 179 | { |
andrewbw01 | 0:d866ad9b15fb | 180 | case 0: |
andrewbw01 | 0:d866ad9b15fb | 181 | LED_Disp = ~0x3F; |
andrewbw01 | 0:d866ad9b15fb | 182 | break; |
andrewbw01 | 0:d866ad9b15fb | 183 | case 1: |
andrewbw01 | 0:d866ad9b15fb | 184 | LED_Disp = ~0x06; |
andrewbw01 | 0:d866ad9b15fb | 185 | break; |
andrewbw01 | 0:d866ad9b15fb | 186 | case 2: |
andrewbw01 | 0:d866ad9b15fb | 187 | LED_Disp = ~0x5B; |
andrewbw01 | 0:d866ad9b15fb | 188 | break; |
andrewbw01 | 0:d866ad9b15fb | 189 | case 3: |
andrewbw01 | 0:d866ad9b15fb | 190 | LED_Disp = ~0x4F; |
andrewbw01 | 0:d866ad9b15fb | 191 | break; |
andrewbw01 | 0:d866ad9b15fb | 192 | case 4: |
andrewbw01 | 0:d866ad9b15fb | 193 | LED_Disp = ~0x66; |
andrewbw01 | 0:d866ad9b15fb | 194 | break; |
andrewbw01 | 0:d866ad9b15fb | 195 | case 5: |
andrewbw01 | 0:d866ad9b15fb | 196 | LED_Disp = ~0x6D; |
andrewbw01 | 0:d866ad9b15fb | 197 | break; |
andrewbw01 | 0:d866ad9b15fb | 198 | case 6: |
andrewbw01 | 0:d866ad9b15fb | 199 | LED_Disp = ~0x7D; |
andrewbw01 | 0:d866ad9b15fb | 200 | break; |
andrewbw01 | 0:d866ad9b15fb | 201 | case 7: |
andrewbw01 | 0:d866ad9b15fb | 202 | LED_Disp = ~0x07; |
andrewbw01 | 0:d866ad9b15fb | 203 | break; |
andrewbw01 | 0:d866ad9b15fb | 204 | case 8: |
andrewbw01 | 0:d866ad9b15fb | 205 | LED_Disp = ~0x7F; |
andrewbw01 | 0:d866ad9b15fb | 206 | break; |
andrewbw01 | 0:d866ad9b15fb | 207 | case 9: |
andrewbw01 | 0:d866ad9b15fb | 208 | LED_Disp = ~0x67; |
andrewbw01 | 0:d866ad9b15fb | 209 | break; |
andrewbw01 | 0:d866ad9b15fb | 210 | case 10: //# |
andrewbw01 | 0:d866ad9b15fb | 211 | LED_Disp = ~0x5c; |
andrewbw01 | 0:d866ad9b15fb | 212 | break; |
andrewbw01 | 0:d866ad9b15fb | 213 | case 11: //* |
andrewbw01 | 0:d866ad9b15fb | 214 | LED_Disp = ~0x63; |
andrewbw01 | 0:d866ad9b15fb | 215 | break; |
andrewbw01 | 0:d866ad9b15fb | 216 | } |
andrewbw01 | 0:d866ad9b15fb | 217 | } |
andrewbw01 | 0:d866ad9b15fb | 218 |