Test program for TM1650 LED controller library (32 LEDs max, 28 keys max)

Dependencies:   TM1650 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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