Wim Huiskamp
/
mbed_TM1650
Test program for TM1650 LED controller library (32 LEDs max, 28 keys max)
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 /* mbed TM1650 Test program, for TM1650 LED controller 00002 * Copyright (c) 2017, v01: WH, Initial version 00003 * 00004 * Permission is hereby granted, free of charge, to any person obtaining a copy 00005 * of this software and associated documentation files (the "Software"), to deal 00006 * in the Software without restriction, including without limitation the rights 00007 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00008 * copies of the Software, and to permit persons to whom the Software is 00009 * furnished to do so, subject to the following conditions: 00010 * 00011 * The above copyright notice and this permission notice shall be included in 00012 * all copies or substantial portions of the Software. 00013 * 00014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00015 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00017 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00019 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00020 * THE SOFTWARE. 00021 */ 00022 #include "mbed.h" 00023 #include "TM1650.h" 00024 00025 #if (MEIBAI_TEST == 1) 00026 // MEIBAI TM1650 4 Digit display test 00027 #include "Font_7Seg.h" 00028 00029 Serial pc(USBTX, USBRX); 00030 DigitalOut myled(LED1); //NOTE: On F401 LED1 is Pin D13, which is SCK! 00031 00032 // DisplayData_t size is 4 bytes (4 Grids @ 8 Segments) 00033 TM1650::DisplayData_t all_str = {0xFF, 0xFF, 0xFF, 0xFF}; 00034 TM1650::DisplayData_t cls_str = {0x00, 0x00, 0x00, 0x00}; 00035 TM1650::DisplayData_t hello_str = {C7_H, C7_I, 0x00, 0x00}; 00036 TM1650::DisplayData_t bye_str = {C7_B, C7_Y, C7_E, 0x00}; 00037 00038 // KeyData_t size is 1 bytes 00039 TM1650::KeyData_t keydata; 00040 00041 //TM1650_MEIBAI declaration 00042 TM1650_MEIBAI MEIBAI(p6, p7); //LPC1768 00043 //TM1650_MEIBAI MEIBAI(D9, D10); //F401 00044 00045 void show_menu() { 00046 // pc.printf("0: Exit\n\r"); 00047 pc.printf("1: All\n\r"); 00048 pc.printf("2: Show all segs\r\n"); 00049 pc.printf("3: Show all chars\n\r"); 00050 pc.printf("4: Show all digits\n\r"); 00051 pc.printf("5: Show all icons\n\r"); 00052 pc.printf("6: Counter\n\r"); 00053 pc.printf("7: Floats\n\r"); 00054 pc.printf("8: Kitt\n\r"); 00055 pc.printf("9: Cls\n\r"); 00056 pc.printf("A: Bye\n\r"); 00057 pc.printf("k: Key\n\r"); 00058 pc.printf("u: UDC\n\r"); 00059 } 00060 00061 00062 char cmd, bits; 00063 int main() { 00064 00065 pc.printf("Hello World\r\n"); // 00066 00067 MEIBAI.cls(); 00068 MEIBAI.writeData(all_str); 00069 wait(2); 00070 MEIBAI.setBrightness(TM1650_BRT3); 00071 wait(1); 00072 MEIBAI.setBrightness(TM1650_BRT0); 00073 wait(1); 00074 MEIBAI.setBrightness(TM1650_BRT4); 00075 00076 wait(1); 00077 MEIBAI.cls(true); 00078 MEIBAI.writeData(hello_str); 00079 00080 MEIBAI.setUDC(0, S7_A | S7_B | S7_F | S7_G); // Degree symbol 00081 00082 char cmd2 = '0'; 00083 while (1) { 00084 00085 show_menu(); 00086 cmd2 = pc.getc(); 00087 00088 switch (cmd2) { 00089 case '1' : { 00090 pc.printf("all\r\n"); 00091 MEIBAI.cls(); 00092 MEIBAI.writeData(all_str); 00093 break; 00094 } 00095 00096 case '2' : { 00097 #if(1) 00098 //test to show all segs 00099 pc.printf("Show all segs\r\n"); 00100 wait(1); 00101 MEIBAI.cls(); 00102 00103 for (int i=0; i<TM1650_DISPLAY_MEM; i++) { 00104 for (int bit=0; bit<8; bit++) { 00105 MEIBAI.cls(); 00106 00107 bits = 0x01 << bit; 00108 MEIBAI.writeData(bits, i); 00109 00110 pc.printf("Idx = %d, Bits = 0x%02x\r\n", i, bits); 00111 // wait(0.5); 00112 cmd = pc.getc(); // wait for key 00113 } 00114 } 00115 pc.printf("\r\nShow all segs done\r\n"); 00116 #endif 00117 break; 00118 } 00119 00120 case '3' : { 00121 00122 #if(1) 00123 //test to show all chars 00124 pc.printf("Show all alpha chars\r\n"); 00125 wait(1); 00126 MEIBAI.cls(); 00127 00128 for (int i=0; i<26; i++) { 00129 MEIBAI.printf("%c", char(i + 'A')); 00130 // MEIBAI.printf("%c", char(i + 'a')); 00131 wait(0.25); 00132 } 00133 pc.printf("Show all alpha chars done\r\n"); 00134 #endif 00135 00136 #if(0) 00137 //test to show all chars 00138 pc.printf("Show all chars\r\n"); 00139 wait(1); 00140 MEIBAI.cls(); 00141 00142 for (int i=FONT_7S_START; i<FONT_7S_END; i++) { 00143 MEIBAI.printf("%c", char(i)); 00144 // wait(0.25); 00145 cmd = pc.getc(); // wait for key 00146 } 00147 pc.printf("Show all chars done\r\n"); 00148 #endif 00149 break; 00150 } 00151 case '4': { 00152 #if(0) 00153 //test to show all digits (base is 10) 00154 pc.printf("Show all digits\r\n"); 00155 wait(1); 00156 MEIBAI.cls(); 00157 00158 for (int i=0; i<MEIBAI_NR_DIGITS; i++) { 00159 00160 for (int cnt=0; cnt<10; cnt++) { 00161 MEIBAI.locate(i); 00162 MEIBAI.printf("%0d", cnt); 00163 00164 // wait(0.5); 00165 cmd = pc.getc(); // wait for key 00166 } 00167 } 00168 pc.printf("\r\nShow all digits done\r\n"); 00169 #endif 00170 00171 #if(1) 00172 //test to show all digits (base is 0x10) 00173 pc.printf("Show all hex digits\r\n"); 00174 wait(1); 00175 MEIBAI.cls(); 00176 00177 MEIBAI.printf("%04x", 0x01AB); 00178 cmd = pc.getc(); // wait for key 00179 MEIBAI.printf("%04x", 0x0); 00180 00181 for (int i=0; i<MEIBAI_NR_DIGITS; i++) { 00182 00183 for (int cnt=0; cnt<0x10; cnt++) { 00184 MEIBAI.locate(i); 00185 MEIBAI.printf("%0x", cnt); 00186 00187 // wait(0.5); 00188 cmd = pc.getc(); // wait for key 00189 } 00190 } 00191 pc.printf("\r\nShow all hex digits done\r\n"); 00192 #endif 00193 break; 00194 } 00195 case '5': { 00196 #if(1) 00197 //test to show all icons 00198 pc.printf("Show all icons\r\n"); 00199 MEIBAI.cls(true); // Also clear all Icons 00200 00201 float delay=0.1; 00202 // Icons on, Note that some versions do not have decimal points, but a 00203 // a double colon on the second digit to show hours:min 00204 MEIBAI.setIcon(TM1650_MEIBAI::DP1); wait(delay); 00205 MEIBAI.setIcon(TM1650_MEIBAI::DP2); wait(delay); 00206 MEIBAI.setIcon(TM1650_MEIBAI::DP3); wait(delay); 00207 MEIBAI.setIcon(TM1650_MEIBAI::DP4); wait(delay); 00208 00209 wait(delay); 00210 00211 // Icons off 00212 MEIBAI.clrIcon(TM1650_MEIBAI::DP4); wait(delay); 00213 MEIBAI.clrIcon(TM1650_MEIBAI::DP3); wait(delay); 00214 MEIBAI.clrIcon(TM1650_MEIBAI::DP2); wait(delay); 00215 MEIBAI.clrIcon(TM1650_MEIBAI::DP1); wait(delay); 00216 00217 // wait(1); 00218 // MEIBAI.cls(); // clear all, preserve Icons 00219 pc.printf("Show all icons done\r\n"); 00220 #endif 00221 break; 00222 } 00223 00224 case '6': { 00225 MEIBAI.cls(); // clear all, preserve Icons 00226 00227 #if(1) 00228 MEIBAI.locate(0); 00229 00230 for (int cnt=0; cnt<=0xFF; cnt++) { 00231 MEIBAI.locate(2); 00232 MEIBAI.printf("%02x", cnt); 00233 wait(0.2); 00234 } 00235 #endif 00236 00237 // MEIBAI.writeData(hello_str); 00238 // MEIBAI.printf("hello"); 00239 00240 break; 00241 } 00242 case '7': { 00243 MEIBAI.cls(); // clear all, preserve Icons 00244 MEIBAI.printf("%1.2f", -0.12); // test decimal point display 00245 wait(0.5); 00246 MEIBAI.cls(); // clear all, preserve Icons 00247 MEIBAI.printf("%1.3f", 1.234); // test decimal point display 00248 break; 00249 } 00250 00251 case '8': { 00252 00253 #if(1) 00254 //test to show KITT 00255 pc.printf("Show KITT scanner\r\n"); 00256 00257 00258 // 0123 00259 const char KITT[][5] = {{"8 "}, 00260 {"38 "}, 00261 {" 38 "}, 00262 {" 38"}, 00263 {" 3"}, 00264 {" "}, 00265 {" 8"}, 00266 {" 8E"}, 00267 {" 8E "}, 00268 {"8E "}, 00269 {"E "}, 00270 {" "} 00271 }; 00272 00273 MEIBAI.cls(); // clear all, preserve Icons 00274 00275 while (!pc.readable()) { // wait for key 00276 for (int i=0; i < (sizeof(KITT) / 5) ; i++) { 00277 MEIBAI.locate(0); 00278 MEIBAI.printf("%s", KITT[i]); 00279 wait(0.05); 00280 } 00281 } 00282 cmd = pc.getc(); // read key 00283 pc.printf("Show KITT done\r\n"); 00284 #endif 00285 break; 00286 } 00287 00288 case '9': { 00289 // MEIBAI.cls(); // clear all, preserve Icons 00290 MEIBAI.cls(true); // clear all, including Icons 00291 break; 00292 } 00293 00294 case 'A': { 00295 00296 MEIBAI.cls(); // clear all, preserve Icons 00297 // MEIBAI.writeData(bye_str); 00298 MEIBAI.printf("Bye"); 00299 00300 break; 00301 } 00302 00303 case 'k': { 00304 if (MEIBAI.getKeys(&keydata)) { 00305 pc.printf("Keydata = 0x%02x\r\n", keydata); 00306 } 00307 break; 00308 } 00309 00310 case 'u': { 00311 pc.printf("Show UDC\r\n"); 00312 MEIBAI.cls(); // clear all, preserve Icons 00313 MEIBAI.putc(0); MEIBAI.putc(0); MEIBAI.putc(0); MEIBAI.putc(0); 00314 break; 00315 } 00316 00317 default : { 00318 break; 00319 } 00320 00321 } //switch cmd 00322 00323 #if(1) 00324 // Check and read keydata 00325 if (MEIBAI.getKeys(&keydata)) { 00326 pc.printf("Keydata = 0x%02x\r\n", keydata); 00327 00328 MEIBAI.cls(); 00329 switch (keydata) { 00330 case TM1650_SW1_BIT : { //sw1, 0x44 00331 MEIBAI.printf("--01"); 00332 break; 00333 } 00334 00335 case TM1650_SW5_BIT: { //sw5, 0x4C 00336 MEIBAI.printf("--02"); 00337 break; 00338 } 00339 00340 case TM1650_SW9_BIT: { //sw9, 0x5C 00341 MEIBAI.printf("--03"); 00342 break; 00343 } 00344 00345 default : { 00346 MEIBAI.printf("----"); 00347 break; 00348 } 00349 } 00350 00351 } // Check keydata 00352 #endif 00353 00354 myled = !myled; 00355 wait(0.3); 00356 } //while 00357 } 00358 #endif 00359 00360 00361 #if (TM1650_TEST == 1) 00362 // Direct TM1650 Test 00363 00364 Serial pc(USBTX, USBRX); 00365 DigitalOut myled(LED1); 00366 00367 // DisplayData_t size is 4 bytes (4 Grids @ 8 Segments) 00368 TM1650::DisplayData_t all_str = {0xFF, 0xFF, 0xFF, 0xFF}; 00369 TM1650::DisplayData_t cls_str = {0x00, 0x00, 0x00, 0x00}; 00370 00371 // KeyData_t size is 1 bytes 00372 TM1650::KeyData_t keydata; 00373 00374 // TM1650 declaration 00375 TM1650 TM1650(p6,p7); //LPC1768 00376 00377 void show_menu() { 00378 // pc.printf("0: Exit\n\r"); 00379 pc.printf("1: All\n\r"); 00380 pc.printf("2: Cls\n\r"); 00381 pc.printf("3: Show all segs\r\n"); 00382 } 00383 00384 00385 char cmd, bits; 00386 int main() { 00387 00388 pc.printf("Hello World\r\n"); // 00389 00390 TM1650.cls(); 00391 TM1650.writeData(all_str); 00392 wait(1); 00393 TM1650.setBrightness(TM1650_BRT3); 00394 wait(1); 00395 TM1650.setBrightness(TM1650_BRT0); 00396 wait(1); 00397 TM1650.setBrightness(TM1650_BRT3); 00398 00399 while (1) { 00400 show_menu(); 00401 cmd = pc.getc(); 00402 00403 switch (cmd) { 00404 case '1' : 00405 TM1650.cls(); 00406 TM1650.writeData(all_str); 00407 break; 00408 00409 case '2' : 00410 TM1650.cls(); 00411 TM1650.writeData(cls_str); 00412 break; 00413 00414 case '3' : 00415 00416 #if(1) 00417 //test to show all segs 00418 pc.printf("Show all segs\r\n"); 00419 wait(1); 00420 TM1650.cls(); 00421 00422 for (int i=0; i<TM1650_DISPLAY_MEM; i++) { 00423 for (int bit=0; bit<8; bit++) { 00424 TM1650.cls(); 00425 00426 bits = 0x01 << bit; 00427 TM1650.writeData(bits, i); 00428 00429 pc.printf("Idx = %d, Bits = 0x%02x\r\n", i, bits); 00430 // wait(0.5); 00431 cmd = pc.getc(); // wait for key 00432 } 00433 } 00434 pc.printf("Show all segs done\r\n"); 00435 #endif 00436 break; 00437 00438 default : 00439 break; 00440 00441 } //switch cmd 00442 00443 // Check and read keydata 00444 if (TM1650.getKeys(&keydata)) { 00445 pc.printf("Keydata = 0x%02x\r\n", keydata); 00446 00447 if (keydata == TM1650_SW9_BIT) { //sw9 00448 TM1650.cls(); 00449 TM1650.writeData(0xFF, 1); 00450 TM1650.writeData(0xFF, 2); 00451 } 00452 } // Check keydata 00453 00454 myled = !myled; 00455 wait(0.3); 00456 } //while 00457 } 00458 #endif
Generated on Wed Jul 13 2022 12:25:15 by 1.7.2