mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik GLCD 128x64 Darstellungsproblem


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich steuere gerade ein Display 128x64 an.Funktioniert auch recht gut.
Nur wenn ich Zahlen darstelle die sich verändern löscht es die 
vorherigen Pixel nicht. Wenn ich ein lcd_clear mache flackert das bild, 
wie kann man sowas umgehen?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wie kann man sowas umgehen?

Du musst halt die vorher gesetzten Pixel löschen.
Wenn du deine Zahl malst also die nicht gesetzten
Pixel auch auf 0 setzen.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist die Funktion (ist aus dem Forum) habe unten versucht die Pixel 
zu drehen die nicht gesetzt werden, geht auch schon besser hat aber 
immer noch fehldarstellugen.

void lcd_putc(uint8_t* font,uint8_t chr)
{
  uint8_t x,page,bit,data,cnt=0;

  if (font_char_present(font,chr)==1)  // print only if letter is 
present in font
  {
    if ( ( (cursor_x + font_char_width(font,chr)) <128)  && 
((cursor_y+font_char_height(font))<=64))  // only print leeter if it 
fits in screen
    {
      uint16_t offset= font_start_offset(font,chr);  // get the position 
of the first byte in font-array

      for(page=0;page<=(font_char_height(font)-1)/8;page++)  // write 
all pages(rows)
      {
        lcd_write_cmd(LCD_SET_PAGE|((cursor_y/8)+page),CHIP1|CHIP2);  // 
calc the current page

        if (cursor_x<64)  // set cursor to its poition (0 on the 
inactive controller so it can start directly on chip change)
        {
          lcd_write_cmd(LCD_SET_ADD|cursor_x,CHIP1);
          lcd_write_cmd(LCD_SET_ADD|0,CHIP2);
        }
        else
        {
          lcd_write_cmd(LCD_SET_ADD|(cursor_x-64),CHIP2);
        }

        for (x=cursor_x;x<cursor_x + font_char_width(font,chr);x++) 
//fill "pages"
        {
          data= pgm_read_byte(font+offset+cnt++);

          if ( page==font_char_height(font)/8)
            data>>=8-(font_char_height(font)%8);  // if char height is 
bigger than 8 we have to remove some leading zeros

          #ifdef FASTTEXT                // this is much much faster 
than using set_pixel (see discription in header file)

          if (cursor_y%8==0 )
          {
            if (x<64)
              lcd_write_data(data,CHIP1);
            else
              lcd_write_data(data,CHIP2);
          }
          else
          #endif
          {

        //  if ((data&(1<<bit))==0)
          //  lcd_fill_rect(x,cursor_y,5,10,WHITE);
            for(bit=0;bit<8;bit++)
          {

              // lcd_set_pixel(x,cursor_y+page*30+bit,WHITE);
            //lcd_set_pixel(x,cursor_y+page*8+bit,WHITE);
            //else
              if ((data&(1<<bit))!=0)
               lcd_set_pixel(x,cursor_y+page*8+bit,BLACK);
            else
            lcd_set_pixel(x,cursor_y+page*8+bit,WHITE);
        //  lcd_fill_rect(x,cursor_y+page*8+bit,5,10,WHITE);
            }

          }
        }

        #ifdef FASTTEXT
        if(cursor_y%8==0)
        {
          if (x<64)
            lcd_write_data(0,CHIP1);
          else
            lcd_write_data(0,CHIP2);
        }
        #endif
      }
      cursor_x += font_char_width(font,chr)+1;


    }
  }
}

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat kiner eine Lösung?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.