Read NTP time from Ethernet and drive six 7-segment LEDs using a MAX7221 to show time, date, month, week, year etc....
Dependencies: NTPClient_NetServices mbed
main.cpp
00001 /************************************************************* 00002 Author: Derek Cheung 00003 Email: cheungderek@hotmail.com 00004 Web: http://clients.teksavvy.com/~cheungderek 00005 Date: 21 Jun 2011 00006 Note: Just some testing but working code 00007 Read NTP time and date to show Time, Date, Month, 00008 Year automatically using MAX7221 to drive 6 LEDs 00009 See my home page for details 00010 *************************************************************/ 00011 00012 #include "mbed.h" 00013 #include "EthernetNetIf.h" 00014 #include "HTTPClient.h" 00015 #include "TextLCD.h" 00016 #include "NTPClient.h" 00017 #include "Max7221.h" 00018 00019 #define BLINK_PERIOD 1.8 // LED on period (Initial data) 00020 #define END_PERIOD 0.0001 // Finish period 00021 00022 DigitalOut myled1(LED1); // Assign LED output port LED1 to LED4 00023 DigitalOut myled2(LED2); 00024 DigitalOut myled3(LED3); 00025 DigitalOut myled4(LED4); 00026 00027 TextLCD lcd(p15, p16, p17, p26, p25, p24, p23, 16, 2); // rs,rw,e,d0,d1,d2,d3,16char's x 2 lines 00028 SPI max7221_spi(p5, p6, p7, "max7221"); // mosi, miso, sclk 00029 DigitalOut max7221_cs(p8); 00030 Serial pc(USBTX, USBRX); // tx, rx 00031 00032 unsigned int dec2bcd(unsigned int dec); 00033 void max7221_control(unsigned control); 00034 void display_weekOfDay_month(struct tm *tm_ptr); 00035 void display_day_year(struct tm *tm_ptr); 00036 00037 00038 /* 00039 #include "USBHost.h" 00040 #include "Utils.h" 00041 #include "FATFileSystem.h" 00042 void TestShell(); 00043 */ 00044 EthernetNetIf eth; 00045 00046 int main() { 00047 00048 float tim; 00049 char buf[40]; 00050 struct tm *tm_ptr; 00051 unsigned int tmp_int; 00052 char *test_ptr; 00053 time_t ctTime; 00054 00055 NTPClient ntp; 00056 00057 // Setup the spi for 16 bit data, sample at falling edge clcok at 1MHz 00058 max7221_spi.format(16,0); 00059 max7221_spi.frequency(1000000); 00060 00061 // shutdown operation 00062 // max7221_spi.write(0x0C00); 00063 00064 // turn on all display 00065 max7221_control(0x0F01); 00066 00067 // set normal operation 00068 max7221_control(0x0F00); 00069 00070 // normal operation 00071 max7221_control(0x0C01); 00072 00073 // sacn 6 LED 00074 max7221_control(0x0B05); 00075 00076 // BCD mode 00077 max7221_control(0x09FF); 00078 00079 // full intensity - Derek 00080 max7221_control(0x0A0F); 00081 00082 // testing the char display on the LEDs 00083 /* 00084 tm_ptr = localtime(&ctTime); 00085 tm_ptr->tm_mon=1; 00086 tm_ptr->tm_mday = 0; 00087 display_weekOfDay_month(tm_ptr); 00088 tm_ptr->tm_mon=2; 00089 tm_ptr->tm_mday = 1; 00090 display_weekOfDay_month(tm_ptr); 00091 tm_ptr->tm_mon=3; 00092 tm_ptr->tm_mday = 2; 00093 display_weekOfDay_month(tm_ptr); 00094 tm_ptr->tm_mon=4; 00095 tm_ptr->tm_mday = 3; 00096 display_weekOfDay_month(tm_ptr); 00097 tm_ptr->tm_mon=5; 00098 tm_ptr->tm_mday = 4; 00099 display_weekOfDay_month(tm_ptr); 00100 tm_ptr->tm_mon=6; 00101 tm_ptr->tm_mday = 5; 00102 display_weekOfDay_month(tm_ptr); 00103 tm_ptr->tm_mon=7; 00104 tm_ptr->tm_mday = 6; 00105 display_weekOfDay_month(tm_ptr); 00106 tm_ptr->tm_mon=8; 00107 display_weekOfDay_month(tm_ptr); 00108 tm_ptr->tm_mon=9; 00109 display_weekOfDay_month(tm_ptr); 00110 tm_ptr->tm_mon=10; 00111 display_weekOfDay_month(tm_ptr); 00112 tm_ptr->tm_mon=11; 00113 display_weekOfDay_month(tm_ptr); 00114 tm_ptr->tm_mon=12; 00115 display_weekOfDay_month(tm_ptr); 00116 */ 00117 00118 // BCD mode 00119 // max7221_control(0x09FF); 00120 00121 tim = BLINK_PERIOD; 00122 lcd.cls(); 00123 lcd.locate(0, 0); 00124 00125 // 0 1 00126 // lcd.printf("1234567890123456"); 00127 // lcd.locate(0, 1); 00128 // lcd.printf("Derek Cheung v2"); 00129 00130 // If you have implemented the "Windows USB Serial Port Driver", you can use follows. 00131 // http://mbed.org/projects/handbook/wiki/WindowsSerialConfiguration 00132 // printf("\r\n Derek Cheung Twitter Device Control - Setting up...\r\n"); 00133 EthernetErr ethErr = eth.setup(); 00134 if (ethErr) { 00135 printf("Error %d in setup.\n", ethErr); 00136 lcd.locate(0, 1); 00137 lcd.printf("Network Failed "); 00138 } 00139 printf("\r\n Network Connection Setup OK\r\n"); 00140 00141 HTTPClient twitter; 00142 00143 HTTPMap msg; 00144 msg["status"] = "Twitter Control logon successfully"; //A good example of Key/Value pair use with Web APIs 00145 00146 twitter.basicAuth("cheungderek", "34563456"); //We use basic authentication, replace with you account's parameters 00147 00148 //No need to retieve data sent back by the server 00149 HTTPResult r = twitter.post("http://api.supertweet.net/1/statuses/update.xml", msg, NULL); 00150 if ( r == HTTP_OK ) { 00151 printf("Tweet sent with success!\n"); 00152 } else { 00153 printf("Problem during tweeting, return code %d\n", r); 00154 } 00155 00156 lcd.cls(); 00157 00158 00159 unsigned short tmp_left_led_digit, tmp_right_led_digit; 00160 int blink_value = 3; 00161 Host server(IpAddr(), 123, "0.uk.pool.ntp.org"); 00162 ntp.setTime(server); 00163 int resyncNtpServerTimer = 0; 00164 int mDayDisplayTimer = 0; 00165 int monthDisplayTimer = 0; 00166 HTTPText txt; 00167 00168 while (1) { 00169 /* for (tim =BLINK_PERIOD; tim >= END_PERIOD; tim /= 3) { 00170 myled1 = 1; 00171 wait(tim); 00172 myled1 = 0; 00173 myled2 = 1; 00174 wait(tim); 00175 myled2 = 0; 00176 myled3 = 1; 00177 wait(tim); 00178 myled3 = 0; 00179 myled4 = 1; 00180 wait(tim); 00181 myled4 = 0; 00182 } 00183 */ 00184 00185 /* 00186 printf("\r\n trying to get a tweet \r\n"); 00187 twitter.get("http://api.supertweet.net/1/statuses/update.xml", &txt); //Blocking 00188 printf("\r\n HTTP data %s \r\n", txt); 00189 */ 00190 00191 tmp_left_led_digit = 0; 00192 tmp_right_led_digit = 0; 00193 00194 // sprintf(buf,"loop # = %d", count); 00195 ctTime = time(NULL) - 14400; // EST is 4 hours behind UTC 00196 // set_time(ctTime); // set the RTC clock) 00197 // printf("%d - RTC time is (UTC): %s \r \n", n++, ctime(&ctTime)); 00198 tm_ptr = localtime(&ctTime); 00199 00200 strftime(buf, 32, "%a %b %d %Y ", localtime(&ctTime)); 00201 lcd.locate(0,0); // 1st line 00202 lcd.printf(buf); 00203 00204 blink_value++; 00205 00206 // Display Seconds on the LED1 and LED2 00207 tmp_int = dec2bcd(tm_ptr->tm_sec); 00208 // re-sync the NTP clock to RTC every 2 minutes / hours 00209 resyncNtpServerTimer++; 00210 if (resyncNtpServerTimer == 100000) { 00211 lcd.locate(0, 1); 00212 lcd.printf("NTP Server Sync "); 00213 wait(1); 00214 // ethErr = eth.setup(); 00215 if (ethErr) { 00216 printf("Error %d in setup.\n", ethErr); 00217 lcd.locate(0, 1); 00218 lcd.printf("Network Failed "); 00219 } else { 00220 printf("\r\nNetwork Connection Setup OK\r\n"); 00221 // backup the time in case ntp server fails 00222 ctTime = time(NULL); 00223 if (ntp.setTime(server) != 0) { 00224 lcd.locate(0,1); 00225 lcd.printf("NTP Sync Failed "); 00226 set_time(ctTime); 00227 } 00228 } 00229 wait(1); 00230 resyncNtpServerTimer = 0; 00231 } 00232 // lcd.locate(0,1); 00233 // lcd.printf(" "); 00234 00235 mDayDisplayTimer++; 00236 if (mDayDisplayTimer == 1200) { 00237 display_day_year(tm_ptr); 00238 display_weekOfDay_month(tm_ptr); 00239 mDayDisplayTimer = 0; 00240 } 00241 00242 tmp_left_led_digit = (unsigned short) tmp_int >> 4; 00243 tmp_right_led_digit = (unsigned short) tmp_int & 0x000F; 00244 max7221_control(LED_DIGIT1 | tmp_right_led_digit); 00245 max7221_control(LED_DIGIT2 | tmp_left_led_digit); 00246 00247 00248 00249 // Display Minutes on the LED3 and LED4 00250 tmp_int = dec2bcd(tm_ptr->tm_min); 00251 tmp_left_led_digit = (unsigned short) tmp_int >> 4; 00252 tmp_right_led_digit = (unsigned short) tmp_int & 0x000F; 00253 max7221_control(LED_DIGIT3 | tmp_right_led_digit | 0x0080); 00254 00255 00256 /* 00257 if ((blink_value % 4) == 0) 00258 max7221_control(LED_DIGIT3 | tmp_right_led_digit | 0x0080); 00259 else 00260 max7221_control(LED_DIGIT3 | tmp_right_led_digit & 0xFF7F); 00261 */ 00262 max7221_control(LED_DIGIT4 | tmp_left_led_digit); 00263 00264 // Display Hours on the LED5 and LED6 00265 tmp_int = dec2bcd(tm_ptr->tm_hour); 00266 tmp_left_led_digit = (unsigned short) tmp_int >> 4; 00267 tmp_right_led_digit = (unsigned short) tmp_int & 0x000F; 00268 max7221_control(LED_DIGIT5 | tmp_right_led_digit | 0x0080); 00269 00270 00271 00272 /* 00273 if ((blink_value % 4) == 0) 00274 max7221_control(LED_DIGIT5 | tmp_right_led_digit | 0x0080); 00275 else 00276 max7221_control(LED_DIGIT5 | tmp_right_led_digit & 0xFF7F); 00277 */ 00278 max7221_control(LED_DIGIT6 | tmp_left_led_digit); 00279 00280 /* Ethernet read Twitter message */ 00281 00282 00283 /* 00284 tmp_left_led_digit = (unsigned short) tmp_int >> 4; 00285 tmp_right_led_digit = (unsigned short) tmp_int & 0x000F; 00286 00287 // printf("\r\n unsigned in %d, unsigned short int %d, char %d - ", sizeof(unsigned int), sizeof(unsigned short int), sizeof(char)); 00288 00289 00290 printf("\r\n tmp_left_led_digit %X \r\n", tmp_left_led_digit | 0x0100); 00291 max7221_cs = 0; 00292 max7221_spi.write(tmp_left_led_digit | 0x0200); 00293 max7221_cs = 1; 00294 wait(0.01); 00295 00296 max7221_cs = 0; 00297 max7221_spi.write(tmp_right_led_digit | 0x0100); 00298 max7221_cs = 1; 00299 00300 tmp_int = dec2bcd(tm_ptr->tm_sec); 00301 max7221_cs = 0; 00302 max7221_spi.write(0x0100 || (tmp_int & 0x0F)); 00303 max7221_cs = 1; 00304 */ 00305 00306 } 00307 return 0; 00308 }; 00309 00310 /* 00311 // strftime(buf, 16, "%X", localtime(&ctTime)); 00312 // lcd.locate(0, 1); // 2nd line 00313 // lcd.printf(buf); 00314 //sprintf(buf, ctime(&ctTime)); 00315 00316 // lcd.printf(buf); 00317 // printf(" Current loop count number = %d \r\n", count); 00318 // count++; 00319 00320 00321 pc.baud(460800); 00322 printf("BlueUSB\nNow get a bunch of usb or bluetooth things and plug them in\n"); 00323 TestShell(); 00324 */ 00325 00326 unsigned int dec2bcd(unsigned int dec) { 00327 unsigned int bits, bcd = 0; 00328 for ( bits = 0; dec; bits += 4, dec /= 10 ) { 00329 bcd |= dec % 10 << bits; 00330 } 00331 return bcd; 00332 } 00333 00334 00335 void max7221_control(unsigned control) { 00336 max7221_cs = 0; 00337 max7221_spi.write(control); 00338 max7221_cs = 1; 00339 wait(0.001); 00340 } 00341 00342 void display_weekOfDay_month(struct tm *tm_ptr) { 00343 00344 // no decode 00345 max7221_control(0x0900); 00346 00347 max7221_control(LED_DIGIT6 | LED__); 00348 max7221_control(LED_DIGIT5 | LED__); 00349 max7221_control(LED_DIGIT4 | LED__); 00350 00351 switch(tm_ptr->tm_mon + 1) { 00352 case 1 : 00353 max7221_control(LED_DIGIT6 | LED_J); 00354 max7221_control(LED_DIGIT5 | LED_A); 00355 max7221_control(LED_DIGIT4 | LED_N); 00356 max7221_control(LED_DIGIT3 | LED_U); 00357 max7221_control(LED_DIGIT2 | LED_A); 00358 max7221_control(LED_DIGIT1 | LED_r); 00359 break; 00360 case 2 : 00361 max7221_control(LED_DIGIT6 | LED_F); 00362 max7221_control(LED_DIGIT5 | LED_E); 00363 max7221_control(LED_DIGIT4 | LED_b); 00364 max7221_control(LED_DIGIT3 | LED_U); 00365 max7221_control(LED_DIGIT2 | LED_A); 00366 max7221_control(LED_DIGIT1 | LED_r); 00367 break; 00368 case 3 : 00369 max7221_control(LED_DIGIT5 | LED_M); 00370 max7221_control(LED_DIGIT4 | LED_A); 00371 max7221_control(LED_DIGIT3 | LED_r); 00372 max7221_control(LED_DIGIT2 | LED_C); 00373 max7221_control(LED_DIGIT1 | LED_H); 00374 break; 00375 case 4 : 00376 max7221_control(LED_DIGIT5 | LED_A); 00377 max7221_control(LED_DIGIT4 | LED_P); 00378 max7221_control(LED_DIGIT3 | LED_r); 00379 max7221_control(LED_DIGIT2 | LED_i); 00380 max7221_control(LED_DIGIT1 | LED_I); 00381 break; 00382 case 5 : 00383 max7221_control(LED_DIGIT3 | LED_M); 00384 max7221_control(LED_DIGIT2 | LED_A); 00385 max7221_control(LED_DIGIT1 | LED_y); 00386 break; 00387 case 6 : 00388 max7221_control(LED_DIGIT4 | LED_J); 00389 max7221_control(LED_DIGIT3 | LED_U); 00390 max7221_control(LED_DIGIT2 | LED_N); 00391 max7221_control(LED_DIGIT1 | LED_E); 00392 break; 00393 case 7 : 00394 max7221_control(LED_DIGIT4 | LED_J); 00395 max7221_control(LED_DIGIT3 | LED_U); 00396 max7221_control(LED_DIGIT2 | LED_L); 00397 max7221_control(LED_DIGIT1 | LED_y); 00398 break; 00399 case 8 : 00400 max7221_control(LED_DIGIT6 | LED_A); 00401 max7221_control(LED_DIGIT5 | LED_U); 00402 max7221_control(LED_DIGIT4 | LED_g); 00403 max7221_control(LED_DIGIT3 | LED_U); 00404 max7221_control(LED_DIGIT2 | LED_S); 00405 max7221_control(LED_DIGIT1 | LED_r); 00406 break; 00407 case 9 : 00408 max7221_control(LED_DIGIT6 | LED_S); 00409 max7221_control(LED_DIGIT5 | LED_E); 00410 max7221_control(LED_DIGIT4 | LED_P); 00411 max7221_control(LED_DIGIT3 | LED_t); 00412 max7221_control(LED_DIGIT2 | LED_E); 00413 max7221_control(LED_DIGIT1 | LED_M); 00414 break; 00415 case 10 : 00416 max7221_control(LED_DIGIT6 | LED_O); 00417 max7221_control(LED_DIGIT5 | LED_C); 00418 max7221_control(LED_DIGIT4 | LED_t); 00419 max7221_control(LED_DIGIT3 | LED_O); 00420 max7221_control(LED_DIGIT2 | LED_b); 00421 max7221_control(LED_DIGIT1 | LED_E); 00422 break; 00423 case 11 : 00424 max7221_control(LED_DIGIT6 | LED_N); 00425 max7221_control(LED_DIGIT5 | LED_O); 00426 max7221_control(LED_DIGIT4 | LED_V); 00427 max7221_control(LED_DIGIT3 | LED_E); 00428 max7221_control(LED_DIGIT2 | LED_M); 00429 max7221_control(LED_DIGIT1 | LED_b); 00430 break; 00431 case 12 : 00432 max7221_control(LED_DIGIT5 | LED_E); 00433 max7221_control(LED_DIGIT5 | LED_E); 00434 max7221_control(LED_DIGIT4 | LED_C); 00435 max7221_control(LED_DIGIT3 | LED_E); 00436 max7221_control(LED_DIGIT2 | LED_M); 00437 max7221_control(LED_DIGIT1 | LED_b); 00438 break; 00439 default : 00440 max7221_control(LED_DIGIT5 | LED_M); 00441 max7221_control(LED_DIGIT5 | LED_E); 00442 max7221_control(LED_DIGIT4 | LED_r); 00443 max7221_control(LED_DIGIT3 | LED_r); 00444 max7221_control(LED_DIGIT2 | LED_o); 00445 max7221_control(LED_DIGIT1 | LED_r); 00446 } 00447 00448 wait(1.5); 00449 00450 // printf("tm_ptr->tm_year %d \r\n", tm_ptr->tm_year); 00451 max7221_control(LED_DIGIT6 | LED__); 00452 max7221_control(LED_DIGIT5 | LED__); 00453 00454 switch(tm_ptr->tm_year - 100) { 00455 case 11 : 00456 max7221_control(LED_DIGIT4 | LED_2); 00457 max7221_control(LED_DIGIT3 | LED_0); 00458 max7221_control(LED_DIGIT2 | LED_1); 00459 max7221_control(LED_DIGIT1 | LED_1); 00460 break; 00461 case 12 : 00462 max7221_control(LED_DIGIT4 | LED_2); 00463 max7221_control(LED_DIGIT3 | LED_0); 00464 max7221_control(LED_DIGIT2 | LED_1); 00465 max7221_control(LED_DIGIT1 | LED_2); 00466 break; 00467 case 13 : 00468 max7221_control(LED_DIGIT4 | LED_2); 00469 max7221_control(LED_DIGIT3 | LED_0); 00470 max7221_control(LED_DIGIT2 | LED_1); 00471 max7221_control(LED_DIGIT1 | LED_3); 00472 break; 00473 case 14 : 00474 max7221_control(LED_DIGIT4 | LED_2); 00475 max7221_control(LED_DIGIT3 | LED_0); 00476 max7221_control(LED_DIGIT2 | LED_1); 00477 max7221_control(LED_DIGIT1 | LED_4); 00478 break; 00479 case 15 : 00480 max7221_control(LED_DIGIT4 | LED_2); 00481 max7221_control(LED_DIGIT3 | LED_0); 00482 max7221_control(LED_DIGIT2 | LED_1); 00483 max7221_control(LED_DIGIT1 | LED_5); 00484 break; 00485 case 16 : 00486 max7221_control(LED_DIGIT4 | LED_2); 00487 max7221_control(LED_DIGIT3 | LED_0); 00488 max7221_control(LED_DIGIT2 | LED_1); 00489 max7221_control(LED_DIGIT1 | LED_6); 00490 break; 00491 case 17 : 00492 max7221_control(LED_DIGIT4 | LED_2); 00493 max7221_control(LED_DIGIT3 | LED_0); 00494 max7221_control(LED_DIGIT2 | LED_1); 00495 max7221_control(LED_DIGIT1 | LED_7); 00496 break; 00497 case 18 : 00498 max7221_control(LED_DIGIT4 | LED_2); 00499 max7221_control(LED_DIGIT3 | LED_0); 00500 max7221_control(LED_DIGIT2 | LED_1); 00501 max7221_control(LED_DIGIT1 | LED_8); 00502 break; 00503 case 19 : 00504 max7221_control(LED_DIGIT4 | LED_2); 00505 max7221_control(LED_DIGIT3 | LED_0); 00506 max7221_control(LED_DIGIT2 | LED_1); 00507 max7221_control(LED_DIGIT1 | LED_9); 00508 break; 00509 case 20 : 00510 max7221_control(LED_DIGIT4 | LED_2); 00511 max7221_control(LED_DIGIT3 | LED_0); 00512 max7221_control(LED_DIGIT2 | LED_2); 00513 max7221_control(LED_DIGIT1 | LED_0); 00514 break; 00515 default : 00516 max7221_control(LED_DIGIT5 | LED_y); 00517 max7221_control(LED_DIGIT5 | LED_E); 00518 max7221_control(LED_DIGIT4 | LED_r); 00519 max7221_control(LED_DIGIT3 | LED_r); 00520 max7221_control(LED_DIGIT2 | LED_o); 00521 max7221_control(LED_DIGIT1 | LED_r); 00522 } 00523 00524 wait(1.5); 00525 // BCD mode 00526 max7221_control(0x09FF); 00527 } 00528 00529 void display_day_year(struct tm *tm_ptr) { 00530 // no decode 00531 max7221_control(0x0900); 00532 00533 printf("tm_ptr->tm_wday %d \r\n", tm_ptr->tm_wday); 00534 switch(tm_ptr->tm_wday) { 00535 case 0 : 00536 max7221_control(LED_DIGIT6 | LED_S); 00537 max7221_control(LED_DIGIT5 | LED_U); 00538 max7221_control(LED_DIGIT4 | LED_N); 00539 break; 00540 case 1 : 00541 max7221_control(LED_DIGIT6 | LED_M); 00542 max7221_control(LED_DIGIT5 | LED_O); 00543 max7221_control(LED_DIGIT4 | LED_N); 00544 break; 00545 case 2 : 00546 max7221_control(LED_DIGIT6 | LED_t); 00547 max7221_control(LED_DIGIT5 | LED_U); 00548 max7221_control(LED_DIGIT4 | LED_E); 00549 break; 00550 case 3 : 00551 max7221_control(LED_DIGIT6 | LED_W); 00552 max7221_control(LED_DIGIT5 | LED_E); 00553 max7221_control(LED_DIGIT4 | LED_d); 00554 break; 00555 case 4 : 00556 max7221_control(LED_DIGIT6 | LED_t); 00557 max7221_control(LED_DIGIT5 | LED_h); 00558 max7221_control(LED_DIGIT4 | LED_u); 00559 break; 00560 case 5 : 00561 max7221_control(LED_DIGIT6 | LED_F); 00562 max7221_control(LED_DIGIT5 | LED_r); 00563 max7221_control(LED_DIGIT4 | LED_i); 00564 break; 00565 case 6 : 00566 max7221_control(LED_DIGIT6 | LED_S); 00567 max7221_control(LED_DIGIT5 | LED_A); 00568 max7221_control(LED_DIGIT4 | LED_t); 00569 break; 00570 default : 00571 max7221_control(LED_DIGIT6 | LED_E); 00572 max7221_control(LED_DIGIT5 | LED_r); 00573 max7221_control(LED_DIGIT4 | LED_r); 00574 } 00575 00576 max7221_control(LED_DIGIT3 | LED__); 00577 max7221_control(LED_DIGIT2 | LED__); 00578 switch(tm_ptr->tm_mday) { 00579 case 1 : 00580 max7221_control(LED_DIGIT1 | LED_1); 00581 break; 00582 case 2 : 00583 max7221_control(LED_DIGIT1 | LED_2); 00584 break; 00585 case 3 : 00586 max7221_control(LED_DIGIT1 | LED_3); 00587 break; 00588 case 4 : 00589 max7221_control(LED_DIGIT1 | LED_4); 00590 break; 00591 case 5 : 00592 max7221_control(LED_DIGIT1 | LED_5); 00593 break; 00594 case 6 : 00595 max7221_control(LED_DIGIT1 | LED_6); 00596 break; 00597 case 7 : 00598 max7221_control(LED_DIGIT1 | LED_7); 00599 break; 00600 case 8 : 00601 max7221_control(LED_DIGIT1 | LED_8); 00602 break; 00603 case 9 : 00604 max7221_control(LED_DIGIT1 | LED_9); 00605 break; 00606 case 11 : 00607 max7221_control(LED_DIGIT2 | LED_1); 00608 max7221_control(LED_DIGIT1 | LED_0); 00609 break; 00610 case 12 : 00611 max7221_control(LED_DIGIT2 | LED_1); 00612 max7221_control(LED_DIGIT1 | LED_2); 00613 break; 00614 case 13 : 00615 max7221_control(LED_DIGIT2 | LED_1); 00616 max7221_control(LED_DIGIT1 | LED_3); 00617 break; 00618 case 14 : 00619 max7221_control(LED_DIGIT2 | LED_1); 00620 max7221_control(LED_DIGIT1 | LED_4); 00621 break; 00622 case 15 : 00623 max7221_control(LED_DIGIT2 | LED_1); 00624 max7221_control(LED_DIGIT1 | LED_5); 00625 break; 00626 case 16 : 00627 max7221_control(LED_DIGIT2 | LED_1); 00628 max7221_control(LED_DIGIT1 | LED_6); 00629 break; 00630 case 17 : 00631 max7221_control(LED_DIGIT2 | LED_1); 00632 max7221_control(LED_DIGIT1 | LED_7); 00633 break; 00634 case 18 : 00635 max7221_control(LED_DIGIT2 | LED_1); 00636 max7221_control(LED_DIGIT1 | LED_8); 00637 break; 00638 case 19 : 00639 max7221_control(LED_DIGIT2 | LED_1); 00640 max7221_control(LED_DIGIT1 | LED_9); 00641 break; 00642 case 20 : 00643 max7221_control(LED_DIGIT2 | LED_2); 00644 max7221_control(LED_DIGIT1 | LED_0); 00645 break; 00646 case 21 : 00647 max7221_control(LED_DIGIT2 | LED_2); 00648 max7221_control(LED_DIGIT1 | LED_1); 00649 break; 00650 case 22 : 00651 max7221_control(LED_DIGIT2 | LED_2); 00652 max7221_control(LED_DIGIT1 | LED_2); 00653 break; 00654 case 23 : 00655 max7221_control(LED_DIGIT2 | LED_2); 00656 max7221_control(LED_DIGIT1 | LED_3); 00657 break; 00658 case 24 : 00659 max7221_control(LED_DIGIT2 | LED_2); 00660 max7221_control(LED_DIGIT1 | LED_4); 00661 break; 00662 case 25 : 00663 max7221_control(LED_DIGIT2 | LED_2); 00664 max7221_control(LED_DIGIT1 | LED_5); 00665 break; 00666 case 26 : 00667 max7221_control(LED_DIGIT2 | LED_2); 00668 max7221_control(LED_DIGIT1 | LED_6); 00669 break; 00670 case 27 : 00671 max7221_control(LED_DIGIT2 | LED_2); 00672 max7221_control(LED_DIGIT1 | LED_7); 00673 break; 00674 case 28 : 00675 max7221_control(LED_DIGIT2 | LED_2); 00676 max7221_control(LED_DIGIT1 | LED_8); 00677 break; 00678 case 29 : 00679 max7221_control(LED_DIGIT2 | LED_2); 00680 max7221_control(LED_DIGIT1 | LED_9); 00681 break; 00682 case 30 : 00683 max7221_control(LED_DIGIT2 | LED_3); 00684 max7221_control(LED_DIGIT1 | LED_0); 00685 break; 00686 case 31 : 00687 max7221_control(LED_DIGIT2 | LED_3); 00688 max7221_control(LED_DIGIT1 | LED_1); 00689 break; 00690 } 00691 wait(1.5); 00692 // BCD mode 00693 max7221_control(0x09FF); 00694 } 00695 00696 /* 00697 DigitalOut myled(LED1); 00698 00699 int main() { 00700 while(1) { 00701 myled = 1; 00702 wait(0.2); 00703 myled = 0; 00704 wait(0.2); 00705 } 00706 } 00707 */
Generated on Tue Jul 12 2022 21:32:19 by 1.7.2