Tom Davies
/
LU-3011
Basic code for multiplexing LU-3011 11 Digit 7 Segment Display
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 // 00002 // LU-3011 11 Digit 7 Segment Display 00003 // v0.1 06/10/11 00004 // Uses ticker to muliplex display to show whole numbers 00005 // Maybe more efficient way to code switch/case segment? 00006 // Doesn't currently handle decimal point - whole numbers only 00007 // 00008 00009 #include "mbed.h" 00010 00011 //Prototypes 00012 void dispNumDig (int num, int digit); 00013 void upDisp (void); 00014 void updateDisp (int num, int digit); 00015 void showNum(unsigned int num); 00016 00017 00018 //Globals 00019 int dispArray[15]; // Holds Displayed Value 00020 int dispArrayIndex = 0; // Used to cycle digits displayed by ticker 00021 00022 Ticker pov; // Ticker Interrupt 00023 Serial pc(USBTX,USBRX); // Default PC Comms 00024 DigitalOut myled(LED1); // Onboard LED for debug 00025 00026 // 7 Segment Display - PCB Connections 00027 // Digits 00028 DigitalOut D11(p7); //PCB Pin 1 - Digit 11 00029 DigitalOut D10(p30); //PCB Pin 2 00030 DigitalOut D9(p29); //PCB Pin 3 00031 DigitalOut D8(p28); //PCB Pin 4 00032 DigitalOut D7(p26); //PCB Pin 6 00033 DigitalOut D6(p24); //PCB Pin 8 00034 DigitalOut D5(p22); //PCB Pin 10 00035 DigitalOut D4(p20); //PCB Pin 12 00036 DigitalOut D3(p18); //PCB Pin 14 00037 DigitalOut D2(p16); //PCB Pin 16 00038 DigitalOut D1(p14); //PCB Pin 18 00039 00040 // Segments 00041 DigitalOut SP(p27); //PCB Pin 5 - Segment Decimal Point 00042 DigitalOut SA(p21); //PCB Pin 11 - Segment A 00043 DigitalOut SB(p13); //PCB Pin 19 00044 DigitalOut SC(p25); //PCB Pin 7 00045 DigitalOut SD(p17); //PCB Pin 15 00046 DigitalOut SE(p23); //PCB Pin 9 00047 DigitalOut SF(p15); //PCB Pin 17 00048 DigitalOut SG(p19); //PCB Pin 13 00049 00050 //////////////////////////////////////////////// 00051 00052 int main() 00053 { 00054 pov.attach_us(&upDisp, 100); // Function called (upDisp) by ticker(POV), interval (100uS) 00055 00056 while (1) 00057 { 00058 myled = 1; 00059 wait(0.2); 00060 myled = 0; 00061 wait(0.2); 00062 00063 // Quick check - wiring and code correct 00064 updateDisp (1, 11); //number, digit 00065 updateDisp (2, 10); //Directly updating array through function 00066 updateDisp (3, 9); 00067 updateDisp (4, 8); 00068 updateDisp (5, 7); 00069 updateDisp (6, 6); 00070 updateDisp (7, 5); 00071 updateDisp (8, 4); 00072 updateDisp (9, 3); 00073 updateDisp (0, 2); 00074 updateDisp (1, 1); 00075 wait(2); 00076 00077 for(int i=0;i<12;i++) 00078 { 00079 dispArray[i] = 11; //Any number other that 0-9 blanks digit 00080 } 00081 wait(1); 00082 00083 00084 while (1) 00085 { // Loop Counting 00086 for (unsigned int i=0; i<2000000000; i++) 00087 { //Loop - arbitary value 00088 showNum(i); //Update number 00089 wait_us(50); //Wait period 00090 } 00091 } 00092 00093 } //End While 00094 } //End of main 00095 00096 //////////////////////////////////////////////// 00097 00098 void showNum(unsigned int num) 00099 { //Splits number into digits 00100 if (num < 10) 00101 { //If < 10 only 1 digit needed 00102 updateDisp (num, 1); //Update array 00103 } 00104 else 00105 { //Otherwise split and add to array 00106 int count = 1; 00107 while (num!=0) 00108 { //Split each digit and add to array in position for display 00109 int digit = num % 10; 00110 num = num / 10; 00111 updateDisp (digit, count); 00112 count++; 00113 } 00114 } 00115 } 00116 00117 //////////////////////////////////////////////// 00118 00119 void updateDisp (int num, int digit) 00120 { //Update display array 00121 //Seperate function - not needed now but maybe for further fuctionality 00122 dispArray[digit] = num; 00123 } 00124 00125 //////////////////////////////////////////////// 00126 00127 void upDisp (void) 00128 { //Called by ticker - switched displayed digit - using POV to muliplex display 00129 if (dispArrayIndex < 11) 00130 { //Increment display index 00131 dispArrayIndex++; 00132 } 00133 else 00134 { //Otherwise out of rage - reset 00135 dispArrayIndex = 0; 00136 } 00137 // Call function to switch digit and value 00138 dispNumDig (dispArray[dispArrayIndex], dispArrayIndex); 00139 } 00140 00141 //////////////////////////////////////////////// 00142 00143 void dispNumDig (int num, int digit) 00144 { //Switches Digit and corrisponding Segments 00145 //Switch/Case setup - more efficient way of coding??? 00146 switch (digit) 00147 { 00148 case 1: 00149 D1 = 0; 00150 D2 = 1; 00151 D3 = 1; 00152 D4 = 1; 00153 D5 = 1; 00154 D6 = 1; 00155 D7 = 1; 00156 D8 = 1; 00157 D9 = 1; 00158 D10 = 1; 00159 D11 = 1; 00160 break; 00161 case 2: 00162 D1 = 1; 00163 D2 = 0; 00164 D3 = 1; 00165 D4 = 1; 00166 D5 = 1; 00167 D6 = 1; 00168 D7 = 1; 00169 D8 = 1; 00170 D9 = 1; 00171 D10 = 1; 00172 D11 = 1; 00173 break; 00174 case 3: 00175 D1 = 1; 00176 D2 = 1; 00177 D3 = 0; 00178 D4 = 1; 00179 D5 = 1; 00180 D6 = 1; 00181 D7 = 1; 00182 D8 = 1; 00183 D9 = 1; 00184 D10 = 1; 00185 D11 = 1; 00186 break; 00187 case 4: 00188 D1 = 1; 00189 D2 = 1; 00190 D3 = 1; 00191 D4 = 0; 00192 D5 = 1; 00193 D6 = 1; 00194 D7 = 1; 00195 D8 = 1; 00196 D9 = 1; 00197 D10 = 1; 00198 D11 = 1; 00199 break; 00200 case 5: 00201 D1 = 1; 00202 D2 = 1; 00203 D3 = 1; 00204 D4 = 1; 00205 D5 = 0; 00206 D6 = 1; 00207 D7 = 1; 00208 D8 = 1; 00209 D9 = 1; 00210 D10 = 1; 00211 D11 = 1; 00212 break; 00213 case 6: 00214 D1 = 1; 00215 D2 = 1; 00216 D3 = 1; 00217 D4 = 1; 00218 D5 = 1; 00219 D6 = 0; 00220 D7 = 1; 00221 D8 = 1; 00222 D9 = 1; 00223 D10 = 1; 00224 D11 = 1; 00225 break; 00226 case 7: 00227 D1 = 1; 00228 D2 = 1; 00229 D3 = 1; 00230 D4 = 1; 00231 D5 = 1; 00232 D6 = 1; 00233 D7 = 0; 00234 D8 = 1; 00235 D9 = 1; 00236 D10 = 1; 00237 D11 = 1; 00238 break; 00239 case 8: 00240 D1 = 1; 00241 D2 = 1; 00242 D3 = 1; 00243 D4 = 1; 00244 D5 = 1; 00245 D6 = 1; 00246 D7 = 1; 00247 D8 = 0; 00248 D9 = 1; 00249 D10 = 1; 00250 D11 = 1; 00251 break; 00252 case 9: 00253 D1 = 1; 00254 D2 = 1; 00255 D3 = 1; 00256 D4 = 1; 00257 D5 = 1; 00258 D6 = 1; 00259 D7 = 1; 00260 D8 = 1; 00261 D9 = 0; 00262 D10 = 1; 00263 D11 = 1; 00264 break; 00265 case 10: 00266 D1 = 1; 00267 D2 = 1; 00268 D3 = 1; 00269 D4 = 1; 00270 D5 = 1; 00271 D6 = 1; 00272 D7 = 1; 00273 D8 = 1; 00274 D9 = 1; 00275 D10 = 0; 00276 D11 = 1; 00277 break; 00278 case 11: 00279 D1 = 1; 00280 D2 = 1; 00281 D3 = 1; 00282 D4 = 1; 00283 D5 = 1; 00284 D6 = 1; 00285 D7 = 1; 00286 D8 = 1; 00287 D9 = 1; 00288 D10 = 1; 00289 D11 = 0; 00290 break; 00291 default: //If out of range switch off all digits 00292 D1 = 1; 00293 D2 = 1; 00294 D3 = 1; 00295 D4 = 1; 00296 D5 = 1; 00297 D6 = 1; 00298 D7 = 1; 00299 D8 = 1; 00300 D9 = 1; 00301 D10 = 1; 00302 D11 = 1; 00303 break; 00304 } 00305 00306 00307 00308 switch (num) 00309 { //Case not currently included for decimcal point (SP) 00310 case 0: 00311 SP = 0; 00312 SA = 1; 00313 SB = 1; 00314 SC = 1; 00315 SD = 1; 00316 SE = 1; 00317 SF = 1; 00318 SG = 0; 00319 break; 00320 case 1: 00321 SP = 0; 00322 SA = 0; 00323 SB = 1; 00324 SC = 1; 00325 SD = 0; 00326 SE = 0; 00327 SF = 0; 00328 SG = 0; 00329 break; 00330 case 2: 00331 SP = 0; 00332 SA = 1; 00333 SB = 1; 00334 SC = 0; 00335 SD = 1; 00336 SE = 1; 00337 SF = 0; 00338 SG = 1; 00339 break; 00340 case 3: 00341 SP = 0; 00342 SA = 1; 00343 SB = 1; 00344 SC = 1; 00345 SD = 1; 00346 SE = 0; 00347 SF = 0; 00348 SG = 1; 00349 break; 00350 case 4: 00351 SP = 0; 00352 SA = 0; 00353 SB = 1; 00354 SC = 1; 00355 SD = 0; 00356 SE = 0; 00357 SF = 1; 00358 SG = 1; 00359 break; 00360 case 5: 00361 SP = 0; 00362 SA = 1; 00363 SB = 0; 00364 SC = 1; 00365 SD = 1; 00366 SE = 0; 00367 SF = 1; 00368 SG = 1; 00369 break; 00370 case 6: 00371 SP = 0; 00372 SA = 1; 00373 SB = 0; 00374 SC = 1; 00375 SD = 1; 00376 SE = 1; 00377 SF = 1; 00378 SG = 1; 00379 break; 00380 case 7: 00381 SP = 0; 00382 SA = 1; 00383 SB = 1; 00384 SC = 1; 00385 SD = 0; 00386 SE = 0; 00387 SF = 0; 00388 SG = 0; 00389 break; 00390 case 8: 00391 SP = 0; 00392 SA = 1; 00393 SB = 1; 00394 SC = 1; 00395 SD = 1; 00396 SE = 1; 00397 SF = 1; 00398 SG = 1; 00399 break; 00400 case 9: 00401 SP = 0; 00402 SA = 1; 00403 SB = 1; 00404 SC = 1; 00405 SD = 1; 00406 SE = 0; 00407 SF = 1; 00408 SG = 1; 00409 break; 00410 00411 default: // If out of range switch off all segments 00412 SP = 0; 00413 SA = 0; 00414 SB = 0; 00415 SC = 0; 00416 SD = 0; 00417 SE = 0; 00418 SF = 0; 00419 SG = 0; 00420 } 00421 }
Generated on Fri Aug 5 2022 13:41:54 by 1.7.2