PowerTGS440

LcdBigDigit

Jan 17th, 2021
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 31.49 KB | None | 0 0
  1. // ------------------------------------------------------------------------------------------------------------- //
  2. // --- LcdBigDigit v0.0.4 beta by Tomasz Majcher (10.10.2018) -------------------------------------------------- //
  3. // --- email: [email protected]                        ----------------------------------------------------- //
  4. // --- optymalizacja dla wyświetlacza 20x4                 ----------------------------------------------------- //
  5. // ------------------------------------------------------------------------------------------------------------- //
  6. class LcdBigDigit                                                                                                //
  7. {                                                                                                                //
  8.     // --- prywatne klasy BigDigit ----------------------------------------------------------------------------- //
  9.     private:                                                                                                     //
  10.         // --- definicje nowych znaków ------------------------------------------------------------------------- //
  11.         byte LGc[8]  = { B00111, B01111, B11111, B11111, B11111, B11111, B11111, B11111 };   // lewy górny ----- //
  12.         byte LDc[8]  = { B11111, B11111, B11111, B11111, B11111, B11111, B01111, B00111 };   // lewy dolny ----- //
  13.         byte PGc[8]  = { B11100, B11110, B11111, B11111, B11111, B11111, B11111, B11111 };   // prawy górny ---- //
  14.         byte PDc[8]  = { B11111, B11111, B11111, B11111, B11111, B11111, B11110, B11100 };   // prawy dolny ---- //
  15.         byte UDb[8]  = { B11111, B11111, B11111, B11111, B11111, B00000, B00000, B00000 };   // górny 1/2 ------ //
  16.         byte DDb[8]  = { B00000, B00000, B00000, B11111, B11111, B11111, B11111, B11111 };   // dolny 1/2 ------ //
  17.         byte blk[8]  = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111 };   // blok pełny ----- //
  18.         byte emp[8]  = { B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000 };   // blok pusty ----- //
  19.                                                                                                                  //
  20.     // --- wskaźnik do obiektu lcd klasy LiquidCrystal_I2C ----------------------------------------------------- //
  21.     LiquidCrystal_I2C *lcd;                                              // wskaźnik do LC --------------------- //
  22.                                                                                                                  //
  23.     // --- publiczne klasy BigDigit ---------------------------------------------------------------------------- //
  24.     public:                                                                                                      //
  25.         // ----------------------------------------------------------------------------------------------------- //
  26.         // --- konstruktor klasy ------------------------------------------------------------------------------- //
  27.         // ----------------------------------------------------------------------------------------------------- //
  28.         LcdBigDigit()                                                                                            //
  29.         {                                                                                                        //
  30.                                                                                                                  //
  31.         }                                                                                                        //
  32.         // ----------------------------------------------------------------------------------------------------- //
  33.         void INIT(LiquidCrystal_I2C *_lcd)                                                                       //
  34.         {                                                                                                        //
  35.           lcd = _lcd;                                                   // przypisz do wskaznika w klasie        //                                                                                                                 //
  36.           lcd -> createChar(0,LGc);                                     // 0 -> lewy górny narożnik ------------ //
  37.           lcd -> createChar(1,LDc);                                     // 1 -> lewy dolny narożnik ------------ //
  38.           lcd -> createChar(2,PGc);                                     // 2 -> prawy górny narożnik ----------- //
  39.           lcd -> createChar(3,PDc);                                     // 3 -> prawy dolny narożnik ----------- //
  40.           lcd -> createChar(4,UDb);                                     // 4 -> górny pół-blok ----------------- //
  41.           lcd -> createChar(5,DDb);                                     // 5 -> dolny pół-blok ----------------- //
  42.           lcd -> createChar(6,blk);                                     // 6 -> pełny blok --------------------- //
  43.           lcd -> createChar(7,emp);                                     // 7 -> pusty blok --------------------- //          
  44.         }                                                                                                        //
  45.         // --- Duża liczba 0 ----------------------------------------------------------------------------------- //
  46.         void Liczba0(uint_fast8_t *x, uint_fast8_t *y)                                                           //
  47.         {                                                                                                        //
  48.           lcd->setCursor(x,y);                                          // ustaw kursor ------------------------ //
  49.           lcd->write(0);                                                // lewy górny narożnk ------------------ //
  50.           lcd->write(4);                                                // kropa górna ------------------------- //
  51.           lcd->write(2);                                                // prawy górny narożnik ---------------- //
  52.           lcd->setCursor(x,y+1);                                        // ustaw kursor ------------------------ //
  53.           lcd->write(6);                                                // pełny 5x8 --------------------------- //
  54.           lcd->write(7);                                                // pusty 5x8 --------------------------- //
  55.           lcd->write(6);                                                // pełny 5x8 --------------------------- //
  56.           lcd->setCursor(x,y+2);                                        // ustaw kursor ------------------------ //
  57.           lcd->write(1);                                                // lewy dolny narożnik ----------------- //
  58.           lcd->write(5);                                                // kropa dolna ------------------------- //
  59.           lcd->write(3);                                                // prawy dolny narożnik ---------------- //
  60.         }                                                                                                        //
  61.         // --- Duża liczba 1 ----------------------------------------------------------------------------------- //
  62.         void Liczba1(uint_fast8_t *x, uint_fast8_t *y)                                                           //
  63.         {                                                                                                        //
  64.           lcd->setCursor(x,y);                                           // ustaw kursor ----------------------- //
  65.           lcd->write(4);                                                 // górna kropa ------------------------ //
  66.           lcd->write(2);                                                 // prawy górny narożnik --------------- //          
  67.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //          
  68.           lcd->setCursor(x,y+1);                                         // ustaw kursor ----------------------- //
  69.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //          
  70.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //          
  71.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //          
  72.           lcd->setCursor(x,y+2);                                         // ustaw kursor ----------------------- //
  73.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  74.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //
  75.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  76.         }                                                                                                        //
  77.         // --- Duża liczba 2 ----------------------------------------------------------------------------------- //
  78.         void Liczba2(uint_fast8_t *x, uint_fast8_t *y)                                                           //
  79.         {                                                                                                        //                  
  80.           lcd->setCursor(x,y);                                           // ustaw kursor ----------------------- //
  81.           lcd->write(4);                                                 // kropa górna ------------------------ //
  82.           lcd->write(4);                                                 // kropa górna ------------------------ //
  83.           lcd->write(2);                                                 // prawy górny narożnik --------------- //          
  84.           lcd->setCursor(x, y+1);                                        // ustaw kursor ----------------------- //
  85.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  86.           lcd->write(4);                                                 // kropa górna ------------------------ //
  87.           lcd->write(4);                                                 // kropa górna ------------------------ //          
  88.           lcd->setCursor(x, y+2);                                        // ustaw kursor ----------------------- //
  89.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //  
  90.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  91.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  92.         }                                                                                                        //
  93.         // --- Duża liczba 3 ----------------------------------------------------------------------------------- //
  94.         void Liczba3(uint_fast8_t *x, uint_fast8_t *y)                                                           //
  95.         {                                                                                                        //                  
  96.           lcd->setCursor(x,y);                                           // ustaw kursor ----------------------- //
  97.           lcd->write(4);                                                 // kropa górna ------------------------ //
  98.           lcd->write(4);                                                 // kropa górna ------------------------ //
  99.           lcd->write(2);                                                 // prawy górny narożnik --------------- //          
  100.           lcd->setCursor(x, y+1);                                        // ustaw kursor ----------------------- //
  101.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //
  102.           lcd->write(4);                                                 // kropa górna ------------------------ //
  103.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //          
  104.           lcd->setCursor(x, y+2);                                        // ustaw kursor ----------------------- //          
  105.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  106.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  107.           lcd->write(3);                                                 // prawy dolny narożnik --------------- //
  108.         }                                                                                                        //
  109.         // --- Duża liczba 4 ----------------------------------------------------------------------------------- //
  110.         void Liczba4(uint_fast8_t *x, uint_fast8_t *y)                                                           //
  111.         {                                                                                                        //                  
  112.           lcd->setCursor(x,y);                                           // ustaw kursor ----------------------- //
  113.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //          
  114.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //          
  115.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //                    
  116.           lcd->setCursor(x, y+1);                                        // ustaw kursor ----------------------- //
  117.           lcd->write(1);                                                 // lewy dolny narożnik ---------------- //          
  118.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  119.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //          
  120.           lcd->setCursor(x, y+2);                                        // ustaw kursor ----------------------- //          
  121.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //
  122.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //
  123.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //
  124.         }                                                                                                        //
  125.         // --- Duża liczba 5 ----------------------------------------------------------------------------------- //
  126.         void Liczba5(uint_fast8_t *x, uint_fast8_t *y)                                                           //
  127.         {                                                                                                        //                  
  128.           lcd->setCursor(x,y);                                           // ustaw kursor ----------------------- //
  129.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //          
  130.           lcd->write(4);                                                 // kropa górna ------------------------ //
  131.           lcd->write(4);                                                 // kropa górna ------------------------ //                    
  132.           lcd->setCursor(x, y+1);                                        // ustaw kursor ----------------------- //
  133.           lcd->write(4);                                                 // kropa górna ------------------------ //        
  134.           lcd->write(4);                                                 // kropa górna ------------------------ //
  135.           lcd->write(2);                                                 // prawy górny narożnik --------------- //          
  136.           lcd->setCursor(x, y+2);                                        // ustaw kursor ----------------------- //          
  137.           lcd->write(1);                                                 // lewy dolny narożnik ---------------- //
  138.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  139.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //
  140.         }                                                                                                        //
  141.         // --- Duża liczba 6 ----------------------------------------------------------------------------------- //
  142.         void Liczba6(uint_fast8_t *x, uint_fast8_t *y)                                                           //
  143.         {                                                                                                        //                  
  144.           lcd->setCursor(x,y);                                           // ustaw kursor ----------------------- //
  145.           lcd->write(0);                                                 // lewy górny narożnk ----------------- //          
  146.           lcd->write(4);                                                 // kropa górna ------------------------ //
  147.           lcd->write(4);                                                 // kropa górna ------------------------ //                    
  148.           lcd->setCursor(x, y+1);                                        // ustaw kursor ----------------------- //
  149.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //          
  150.           lcd->write(4);                                                 // kropa górna ------------------------ //
  151.           lcd->write(2);                                                 // prawy górny narożnik --------------- //          
  152.           lcd->setCursor(x, y+2);                                        // ustaw kursor ----------------------- //          
  153.           lcd->write(1);                                                 // lewy dolny narożnik ---------------- //
  154.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  155.           lcd->write(3);                                                 // prawy dolny narożnik --------------- //
  156.         }                                                                                                        //
  157.         // --- Duża liczba 6 ----------------------------------------------------------------------------------- //
  158.         void Liczba7(uint_fast8_t *x, uint_fast8_t *y)                                                           //
  159.         {                                                                                                        //                  
  160.           lcd->setCursor(x,y);                                           // ustaw kursor ----------------------- //
  161.           lcd->write(4);                                                 // kropa górna ------------------------ //
  162.           lcd->write(4);                                                 // kropa górna ------------------------ //
  163.           lcd->write(2);                                                 // prawy górny narożnik --------------- //                    
  164.           lcd->setCursor(x, y+1);                                        // ustaw kursor ----------------------- //
  165.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //          
  166.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //
  167.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //          
  168.           lcd->setCursor(x, y+2);                                        // ustaw kursor ----------------------- //          
  169.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //          
  170.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //
  171.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //
  172.         }                                                                                                        //
  173.         // --- Duża liczba 8 ----------------------------------------------------------------------------------- //
  174.         void Liczba8(uint_fast8_t *x, uint_fast8_t *y)                                                           //
  175.         {                                                                                                        //                  
  176.           lcd->setCursor(x,y);                                           // ustaw kursor ----------------------- //
  177.           lcd->write(0);                                                 // lewy górny narożnk ----------------- //          
  178.           lcd->write(4);                                                 // kropa górna ------------------------ //
  179.           lcd->write(2);                                                 // prawy górny narożnik --------------- //                    
  180.           lcd->setCursor(x, y+1);                                        // ustaw kursor ----------------------- //
  181.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //          
  182.           lcd->write(4);                                                 // kropa górna ------------------------ //
  183.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //          
  184.           lcd->setCursor(x, y+2);                                        // ustaw kursor ----------------------- //          
  185.           lcd->write(1);                                                 // lewy dolny narożnik ---------------- //
  186.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  187.           lcd->write(3);                                                 // prawy dolny narożnik --------------- //
  188.         }                                                                                                        //
  189.         // --- Duża liczba 9 ----------------------------------------------------------------------------------- //
  190.         void Liczba9(uint_fast8_t *x, uint_fast8_t *y)                                                           //
  191.         {                                                                                                        //                  
  192.           lcd->setCursor(x,y);                                           // ustaw kursor ----------------------- //
  193.           lcd->write(0);                                                 // lewy górny narożnk ----------------- //  
  194.           lcd->write(4);                                                 // kropa górna ------------------------ //
  195.           lcd->write(2);                                                 // prawy górny narożnik --------------- //                    
  196.           lcd->setCursor(x, y+1);                                        // ustaw kursor ----------------------- //
  197.           lcd->write(1);                                                 // lewy dolny narożnik ---------------- //          
  198.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  199.           lcd->write(6);                                                 // pełny 5x8 -------------------------- //          
  200.           lcd->setCursor(x, y+2);                                        // ustaw kursor ----------------------- //          
  201.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  202.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  203.           lcd->write(3);                                                 // prawy dolny narożnik --------------- //
  204.         }                                                                                                        //
  205.         // ----------------------------------------------------------------------------------------------------- //
  206.         void Dwukropek(uint_fast8_t *x, uint_fast8_t *y)                                                         //
  207.         {                                                                                                        //
  208.           lcd->setCursor(x,y);                                           // ustaw kursor ----------------------- //
  209.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //
  210.           lcd->setCursor(x,y+1);                                         // ustaw kursor ----------------------- //
  211.           lcd->write(4);                                                 // kropa górna ------------------------ //
  212.           lcd->setCursor(x,y+2);                                         // ustaw kursor ----------------------- //
  213.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  214.         }                                                                                                        //
  215.         // ----------------------------------------------------------------------------------------------------- //
  216.         void Kropka(uint_fast8_t *x, uint_fast8_t *y)                                                            //
  217.         {                                                                                                        //
  218.           lcd->setCursor(x,y);                                           // ustaw kursor ----------------------- //
  219.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //
  220.           lcd->setCursor(x,y+1);                                         // ustaw kursor ----------------------- //
  221.           lcd->write(7);                                                 // pusty 5x8 -------------------------- //
  222.           lcd->setCursor(x,y+2);                                         // ustaw kursor ----------------------- //
  223.           lcd->write(5);                                                 // kropa dolna ------------------------ //
  224.         }                                                                                                        //        
  225.         // ----------------------------------------------------------------------------------------------------- //
  226.         void WyswietlCyfre(uint_fast8_t *x, uint_fast8_t *y, uint_fast8_t numer)                                 //
  227.         {                                                                                                        //
  228.           // --- sprawdz czy liczba miesci sie na wyswietlaczu ------------------------------------------------- //
  229.           if(x > 17) x = 17;                         // jesli pozycja x większa niż 17, ustaw maksymalną ------- //
  230.           if(y >  1) y =  1;                         // jesli pozycja y wieksza niz 1 , ustaw maksymalna ------- //
  231.           // --- sprawdz jaka cyfre wyswietlic ----------------------------------------------------------------- //
  232.           switch (numer)                                                                                         //
  233.           {                                                                                                      //
  234.             case  0:  Liczba0(x,y); break;                                                                       //
  235.             case  1:  Liczba1(x,y); break;                                                                       //
  236.             case  2:  Liczba2(x,y); break;                                                                       //
  237.             case  3:  Liczba3(x,y); break;                                                                       //
  238.             case  4:  Liczba4(x,y); break;                                                                       //
  239.             case  5:  Liczba5(x,y); break;                                                                       //
  240.             case  6:  Liczba6(x,y); break;                                                                       //
  241.             case  7:  Liczba7(x,y); break;                                                                       //
  242.             case  8:  Liczba8(x,y); break;                                                                       //
  243.             case  9:  Liczba9(x,y); break;                                                                       //
  244.           }                                                                                                      //
  245.         }                                                                                                        //
  246.         // ----------------------------------------------------------------------------------------------------- //
  247.         void WyswietlCzas(uint8_t tablica[4])                                                                    //
  248.         {                                                                                                        //
  249.             static bool flaga = false;                                    // flaga zmiany : na . --------------- //
  250.             int x = 2;                                                    // pozycja x ------------------------- //
  251.             int y = 0;                                                    // pozycja y ------------------------- //
  252.             // --- wyswietl pierwsze 2 cyfry z tablicy --------------------------------------------------------- //
  253.             WyswietlCyfre(x  , y, tablica[0]);                                                                   //
  254.             WyswietlCyfre(x+4, y, tablica[1]);                                                                   //
  255.             // --- w zależności od stanu na fladze FALSE/TRUE wyświetl dwukropkę lub kropkę -------------------- //            
  256.             switch (flaga)                                                                                       //
  257.             {                                                                                                    //
  258.               case 0 : { Dwukropek(x+8,y); flaga = true;  break; }        // dwukropek i przestaw flagę -------- //
  259.               case 1 : { Kropka(x+8, y);   flaga = false; break; }        // kropka i przestaw flagę ----------- //
  260.               default: break;                                                                                    //
  261.             }                                                                                                    //
  262.             // --- wyswietl ostatnie 2 cyfry z tablicy --------------------------------------------------------- //
  263.             WyswietlCyfre(x+10,y, tablica[2]);                                                                   //
  264.             WyswietlCyfre(x+14,y, tablica[3]);                                                                   //
  265.             // koniec ------------------------------------------------------------------------------------------ //
  266.         }                                                                                                        //
  267. };                                                                                                               //
  268. // --- END FILE ------------------------------------------------------------------------------------------------ //
Advertisement
Add Comment
Please, Sign In to add comment