Dr cregans solution for keypad polling

Dependencies:   mbed

Committer:
andrewbw01
Date:
Sat Feb 20 13:22:01 2021 +0000
Revision:
0:d866ad9b15fb
lab3 creg

Who changed what in which revision?

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