- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 6 von 6

Thema: lcd.clear Display flackern

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698
    Zitat Zitat von StephanG90
    .. per I2C Bus angeschlossenen 16x2 Display .. allerdings flackert dann immer das Display..
    Zitat Zitat von Sly
    .. Übrigens: meistens haben die Controller der LCD-Displays die Möglichkeit, eigene Zeichen zu definieren ..
    Grüß Dich Stephan. Mit den I²C-Displays habe ich wenig (schlechte?) Erfahrung. Meine Displays schließe ich immer mit einem (für mich standardisierten) 10pol-Kabel an. Den Vorschlag von Sly - NUR partiell zu löschen vor schreiben - habe ich vielfach installiert. Meist reicht es mir ab einer angesteuerten Position des Cursors den Zeilenrest zu löschen - soweit ich das im KOpf habe, kann man beruhigt über die Zeile rausschreiben. Wozu? Weil man dann nur eine komplette Leerzeile als "Löschbefehl" ab aktueller Cursorposition senden muss. Der Überhang geht ins Leere .. soweit ich mich erinnere.

    Zu Sonderzeichen und so hilft Dir vielleicht ein Ausschnitt aus einer meiner üblichen C-Bibliotheken weiter. Für mich selber tricky (im Programmieren) sind die Sonderzeichen wie z.B. µ, © oder ein schräges ↕ ...

    Code:
    /* >>       NUR AUSSCHNITT        ohne Gewähr          © oberallgeier
      Stand  ..\C5_Ronny-5_etc\ALCo\ALCo_kalij.c
      ============================================================================== =
    ...
      void LCD_SZ1 (void)         ; // LCD-Sonderzeichen, Satz 1 Balken
      void LCD_SZ2 (void)         ; // LCD-Sonderzeichen, Satz 2 Grosse Ziffern
      void LCD_SZ3 (void)         ; // Generiere LCD-Sonderzeichen, Satz 1 Balken hori
      void LCD_SZ4 (void)         ; // LCD-So-zeichn, RETURN, auf, ab à la pololu, ±
      ============================================================================== =
      *** Versionsgeschichte:
      x04 21Sep22 1122 ~com~+~kal~ korrigiert wegen Start- und End-Stellung, siehe LOG
    ...
     =============================================================================== =
      *** Aufgabenstellung : Software RJjr, ArmLiController/Servobetrieb,  ATmega1284p
      Original: ...\C5_Ronny-5_etc\ALCo\ALCo_kalij.c,       eigentlich aber 
        D:\D_pro-fils\compu_MC\C7\ALCo\ALCo\ALCokalij.c     x41 25Mar19 1204 ~kal~:...
     ============================================================================== */
    
    
    // FP FP FP FP FP FP FP FP FP FP FP FP FP FP FP FP FP FP FP FP FP FP FP FP FP FP =
    /* ==  Funktionsprototypen      Kalibrierung/Startwerte, LDC-Routinen
    ...
      void LCD_SZ1(void)          ; // Generiere LCD-Sonderzeichen, Satz 1 = Balken
      void LCD_SZ2(void)          ; // LCD-Sonderzeichen, Satz 2 = große Ziffern
      void LCD_SZ3(void)          ; // Generiere LCD-Sonderzeichen, Satz 1 Balken hori
      void LCD_SZ4(void)          ; // LCD-Sonderzeichen: RET à la pololu, ©, etc
    // FP FP FP FP FP FP FP FP FP FP FP FP FP       ******************************* */
    
    
    
    
    // ============================================================================= =
    //  Generierung von LCD-Sonderzeichen für DEM162xx, Satz 1 = Balken vertikal
    // ============================================================================= =
      void LCD_SZ1(void)            // Generiere LCD-Sonderzeichen, Satz 1 = Balken
     {                              //   vertikal, 7 Zeichen
    // - - - - - - - - - - - - - - - -
    
    // Es folgen LCD-Daten für den Balken 1 bis 7 Pixelreihen hoch
    //      der "Balken8" ist DEM-Code 255, der leere Balken ist DEM-Code 254
      uint8_t LCD_c_1[8] =          // LCD-Character 1, unterste Linie
        { 0,  0,  0,  0,  0,  0,  0,  31 };
      lcd_generatechar(LCD_GC_CHAR1, LCD_c_1);
    
      uint8_t LCD_c_2[8] =          // LCD-Character 2
        { 0,  0,  0,  0,  0,  0, 31,  31 };
      lcd_generatechar(LCD_GC_CHAR2, LCD_c_2);
    
      uint8_t LCD_c_3[8] =          // LCD-Character 3
        { 0,  0,  0,  0,  0, 31, 31,  31 };
      lcd_generatechar(LCD_GC_CHAR3, LCD_c_3);
    
      uint8_t LCD_c_4[8] =          // LCD-Character 4
        { 0,  0,  0,  0, 31, 31, 31,  31 };
      lcd_generatechar(LCD_GC_CHAR4, LCD_c_4);
    
      uint8_t LCD_c_5[8] =          // LCD-Character 5
        { 0,  0,  0, 31, 31, 31, 31,  31 };
      lcd_generatechar(LCD_GC_CHAR5, LCD_c_5);
    
      uint8_t LCD_c_6[8] =          // LCD-Character 6
        { 0,  0, 31, 31, 31, 31, 31,  31 };
      lcd_generatechar(LCD_GC_CHAR6, LCD_c_6);
    
      uint8_t LCD_c_7[8] =          // LCD-Character 7
        { 0, 31, 31, 31, 31, 31, 31,  31 };
      lcd_generatechar(LCD_GC_CHAR7, LCD_c_7);
    
    /*
      uint8_t LCD_c_0[8] =          // LCD-Character 0
        { 31, 31, 31, 31, 31, 31, 31,  31 };
      lcd_generatechar(LCD_GC_CHAR0, LCD_c_0);
      */
    
      return;                       //
     }              // Ende void LCD_SZ1(void)
    // === Ende
    // ============================================================================= =
    
    
    // ============================================================================= =
    //  Generierung von LCD-Sonderzeichen für DEM162xx, Satz 2 für große Ziffern
    // ============================================================================= =
      void LCD_SZ2(void)            // LCD-Sonderzeichen, Satz 2 = große Ziffern
     {                              //
    // - - - - - - - - - - - - - - - -
    
    // Es folgen LCD-Daten für Element 0 bis 7 für große Zifferndarstellung
    //
    //      00011   =  3    11000   = 24    11011   = 27    11111   = 31
    
      uint8_t LCD_c_0[8] =          // LCD-Character 0, rechte Linie 
        {  3,  3,  3,  3,  3,  3,  3,  3 };
    //  {  6,  6,  6,  6,  6,  6,  6,  6 };
      lcd_generatechar(LCD_GC_CHAR0, LCD_c_0);
    
      uint8_t LCD_c_1[8] =          // LCD-Character 1, ne Art 7
        { 31, 31,  3,  3,  3,  3,  3,  3 };
      lcd_generatechar(LCD_GC_CHAR1, LCD_c_1);
    
      uint8_t LCD_c_2[8] =          // LCD-Character 2, ne Art L
        {  3,  3,  3,  3,  3,  3, 31,  31 };
      lcd_generatechar(LCD_GC_CHAR2, LCD_c_2);
    
      uint8_t LCD_c_3[8] =          // LCD-Character 3, ne Art C
        { 31, 31, 24, 24, 24, 24, 31,  31 };
      lcd_generatechar(LCD_GC_CHAR3, LCD_c_3);
    
      uint8_t LCD_c_4[8] =          // LCD-Character 4, Spiegel-C
        { 31, 31,  3,  3,  3,  3, 31,  31 };
      lcd_generatechar(LCD_GC_CHAR4, LCD_c_4);
    
      uint8_t LCD_c_5[8] =          // LCD-Character 5, U
        { 27, 27, 27, 27, 27, 27, 31,  31 };
      lcd_generatechar(LCD_GC_CHAR5, LCD_c_5);
    
      uint8_t LCD_c_6[8] =          // LCD-Character 6, "n"
        { 31, 31, 27, 27, 27, 27, 27,  27 };
      lcd_generatechar(LCD_GC_CHAR6, LCD_c_6);
    
      uint8_t LCD_c_7[8] =          // LCD-Character 7, O
        { 31, 31, 27, 27, 27, 27, 31,  31 };
      lcd_generatechar(LCD_GC_CHAR7, LCD_c_7);
    
      return;                       //
     }              // Ende void LCD_SZ2void)
    // === Ende
    // ============================================================================= =
    
    
    // ============================================================================= =
    //  Generierung von LCD-Sonderzeichen für DEM162xx, Satz 3 = Balken horizontal
    // ============================================================================= =
      void LCD_SZ3(void)            // Generiere LCD-Sonderzeichen, Satz 1 Balken hori
     {                              //
    // - - - - - - - - - - - - - - - -
    
    // Es folgen LCD-Daten für den Balken 1 bis 5 Pixelreihen breit
      uint8_t LCD_c_1[8] =          // LCD-Character 1, Balken 1 breit
        { 16, 16, 16, 16, 16, 16, 16, 16 };
      lcd_generatechar(LCD_GC_CHAR1, LCD_c_1);
    
      uint8_t LCD_c_2[8] =          // LCD-Character 1, Balken 2 breit
        { 24, 24, 24, 24, 24, 24, 24, 24 };
      lcd_generatechar(LCD_GC_CHAR2, LCD_c_2);
    
      uint8_t LCD_c_3[8] =          // LCD-Character 3, Balken 3 breit
        { 28, 28, 28, 28, 28, 28, 28, 28 };
      lcd_generatechar(LCD_GC_CHAR3, LCD_c_3);
    
      uint8_t LCD_c_4[8] =          // LCD-Character 4, Balken 4 breit
        { 30, 30, 30, 30, 30, 30, 30, 30 };
      lcd_generatechar(LCD_GC_CHAR4, LCD_c_4);
    
      uint8_t LCD_c_5[8] =          // LCD-Character 5, Balken 5 breit
        { 31, 31, 31, 31, 31, 31, 31, 31 };
      lcd_generatechar(LCD_GC_CHAR5, LCD_c_5);
    
      return;                       //
     }              // Ende void LCD_SZ3(void)
    // === Ende
    // ============================================================================= =
    
    
    // ============================================================================= =
    //  Generierung von LCD-Sonderzeichen für DEM162xx, Satz 4 = RETURN
    // ============================================================================= =
      void LCD_SZ4(void)            // LCD-Sonderzeichen, NUR RETURN à la Pololu
    // - - - - - - - - - - - - - - - -
     {                              //
    //      Returnzeichen à la Pololu
      uint8_t LCD_c_0[8] = {        // LCD-Character 0
            0b00000000,     //  -----
            0b00000010,     //  ---X-
            0b00000001,     //  ----X
            0b00000101,     //  --X-X
            0b00001001,     //  -X--X
            0b00011110,     //  XXXX-
            0b00001000,     //  -X---
            0b00000100      //  --X--
            };
      lcd_generatechar(LCD_GC_CHAR0, LCD_c_0);
    
    // - - - - - - - - - - - - - - - -
    //      Pfeil auf
      uint8_t LCD_c_1[8] = {        // LCD-Character 1
            0b00000000,     //  -----
            0b00000000,     //  -----
            0b00000100,     //  --X--
            0b00001110,     //  -XXX-
            0b00010101,     //  X-X-X
            0b00000100,     //  --X--
            0b00000100,     //  --X--
            0b00000000      //  -----
            };
      lcd_generatechar(LCD_GC_CHAR1, LCD_c_1);
      
    // - - - - - - - - - - - - - - - -
    //      Pfeil ab
      uint8_t LCD_c_2[8] = {        // LCD-Character 2
            0b00000000,     //  -----
            0b00000000,     //  -----
            0b00000100,     //  --X--
            0b00000100,     //  --X--
            0b00010101,     //  X-X-X
            0b00001110,     //  -XXX-
            0b00000100,     //  --X--
            0b00000000      //  -----
            };
      lcd_generatechar(LCD_GC_CHAR2, LCD_c_2);
      
    // - - - - - - - - - - - - - - - -
    //      Pfeil ab
      uint8_t LCD_c_3[8] = {        // LCD-Character 3, ©
            0b00001110,     //  -XXX-
            0b00010001,     //  X---X
            0b00001101,     //  -XX-X
            0b00010001,     //  X---X
            0b00010001,     //  X---X
            0b00001101,     //  -XX-X
            0b00010001,     //  X---X
            0b00001110      //  -XXX-
            };
      lcd_generatechar(LCD_GC_CHAR3, LCD_c_3);
      
    // - - - - - - - - - - - - - - - -
    //      Doppelpfeil   schräg linksunten<=>rechtsoben
      uint8_t LCD_c_4[8] = {        // LCD-Character 4 => Pfeil-lu-ro
            0b00000000,     //  -----
            0b00000111,     //  --XXX
            0b00000011,     //  ---XX
            0b00010101,     //  X-X-X
            0b00011000,     //  XX---
            0b00011100,     //  XXX--
            0b00000000,     //  -----
            0b00000000      //  -----
            };
      lcd_generatechar(LCD_GC_CHAR4, LCD_c_4);
      
    // - - - - - - - - - - - - - - - -
    //      linke Hälfte Copyright  ©
      uint8_t LCD_c_5[8] = {        // LCD-Character 5 => © linke Hälfte
            0b00000011,     //  ---XX
            0b00000100,     //  --X--
            0b00001001,     //  -X--X
            0b00001010,     //  -X-X-
            0b00001010,     //  -X-X-
            0b00001001,     //  -X--X
            0b00000100,     //  --X--
            0b00000011      //  ---XX
            };
      lcd_generatechar(LCD_GC_CHAR5, LCD_c_5);
      
    // - - - - - - - - - - - - - - - -
    //      Rechte Hälfte Copyright  ©
      uint8_t LCD_c_6[8] = {        // LCD-Character 6 => © rechte Hälfte
            0b00011000,     //  XX---
            0b00000100,     //  --X--
            0b00010010,     //  X--X-
            0b00000010,     //  ---X-
            0b00000010,     //  ---X-
            0b00010010,     //  X--X-
            0b00000100,     //  --X--
            0b00011000      //  XX---
            };
      lcd_generatechar(LCD_GC_CHAR6, LCD_c_6);
      
    // - - - - - - - - - - - - - - - -
    //      Charakter       µ
      uint8_t LCD_c_7[8] = {        // LCD-Character 7 => µ
            0b00000000,     //  -----
            0b00000000,     //  -----
            0b00010001,     //  X---X
            0b00010001,     //  X---X
            0b00010011,     //  X--XX
            0b00011101,     //  XXX-X
            0b00010000,     //  X----
            0b00010000      //  X----
            };
      lcd_generatechar(LCD_GC_CHAR7, LCD_c_7);
    
      return;                       //
     }              // Ende void LCD_SZ4(void)
    // === Ende
    // ============================================================================= =
    
    
    // ============================================================================= =
    // =====  ENDE    Subroutinen  ================================================== =
    // ============================================================================= =
    Viel Erfolg, vielleicht hilft der Rat.

    Nachtrag: Anwendungsbeispiel:
    Code:
    // ============================================================================= =
    // ==   LCDausgabe, Test Sonderzeichen 4
    // ============================================================================= =
      void lcd_tSZ4 (void)          // LCDausgabe , insbes. neues RETURN à la Pololu
     {                              //
    // - - - - - - - - - - - - - - - -
      wms (  100);                  // Vor-Wartezeit
      LCD_SZ4( );                   // Initialisiere neues (05 Mai 2013) RETURN     kal
      lcd_clear();                  // Vor LCD-Ausgabe Display leeren               lcd
    
    // - - - - - - - - - - - - - - - -
      Line2();              // An den Anfang der 2. Zeile springen
      lcd_string("A: ");    // 
      lcd_data(127);        // Pfeil links
      lcd_string(" B: ");  // 
      lcd_data(0);          // Sonderzeichen 0, hier RETURN
      lcd_data(1);          // Sonderzeichen 1, hier RETURN
      lcd_data(2);          // Sonderzeichen 2, hier RETURN
      lcd_string(" C: ");  // 
      lcd_data(126);        // Pfeil rechts
      wms ( 1000);
      while ( TBaus ) {}
      while ( TBan ) {}    //
      while ( TBaus ) {}
      lcd_clear();                  // Vor LCD-Ausgabe Display leeren               lcd
      wms ( 1000);          // Wartezeit
    
    // - - - - - - - - - - - - - - - -
    
     }              // Ende von void snd_01
    // ============================================================================= =
    Geändert von oberallgeier (09.08.2024 um 09:10 Uhr)
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 06.01.2013, 08:49
  2. Timer1 - Clear Timer on Input-Capture?
    Von Tyrald im Forum C - Programmierung (GCC u.a.)
    Antworten: 20
    Letzter Beitrag: 14.08.2010, 19:39
  3. Clear Screen Bascom + Hyperterminal
    Von maximum2006 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 25.05.2009, 13:12
  4. LED's flackern leicht
    Von TOYO im Forum Asuro
    Antworten: 10
    Letzter Beitrag: 10.02.2007, 10:33
  5. PWM - Unterschied zwischen Clear up und Clear down
    Von roboter im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 20.05.2005, 18:55

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen