Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
TM1650 LED controller (32 LEDs max), Keyboard scan (28 keys max).