Forum: Mikrocontroller und Digitale Elektronik EA-DOG-XL-240-7 wo ist der Befehl zum löschen?


von Tho S. (thoso805)


Lesenswert?

Hallo Freunde,

ich habe das oben beschriebene Display erfolgreich implementiert.

Jedoch wüsste ich gerne wie man das Display löschen kann und wie man 
einen Bereich löschen kann.

Die kleineren Displays haben meines Wissens einen Befehl dafür.

Muss man es wirklich " zu Fuß " machen und die BITS der Pixel löschen?

von u8g2 (Gast)


Lesenswert?

Tho S. schrieb:
> Muss man es wirklich " zu Fuß " machen und die BITS der Pixel löschen?

Ja.

Aber eigentlich steht das ja alles im Datenblatt des UC1611. Oder besser 
gesagt, es steht eben kein Befehl darin, der Bereiche löschen kann.

Grüße,
Oliver

von Gerhard G. (xmega)


Lesenswert?

Hallo,

//-----------------------------------------------------
//Func: ClrDisplay
//Desc: Clears entire Display content and set home pos
//-----------------------------------------------------

void ClrDisplay(void)
{
  WriteIns(0x01);
  SetPostion(LINE1);
}

so schaut das Original aus.

Initialisierungsbeispiele für EA DOGM204-A hier:

http://www.lcd-module.de/support/application-note.html


Gruß GG

von spess53 (Gast)


Lesenswert?

Hi

>Initialisierungsbeispiele für EA DOGM204-A hier:

Was hat ein Text-Display mit einem Grafikdisplsy und ganz anderen 
Displaycontroller zu tun?

MfG Spess

von Tho S. (thoso805)


Lesenswert?

Hallo,

habe es so gelöst:

void lcd_clear()
{
  int i;
      move_to(0,0);

        for(i=0;i<4800;i++)
        {

          lcd_dat(0x00);

        }
      move_to(0,0);
}

void lcd_clear_char(char y, char x)
{
  move_to(y,x);

    lcd_dat(0x00);
    lcd_dat(0x00);
    lcd_dat(0x00);
    lcd_dat(0x00);
    lcd_dat(0x00);
    lcd_dat(0x00);


}


void lcd_clear_area(char y, char x, char cly, char clx)
{
  int i, j;

  move_to(y, x);

  for(j=0;j<cly;j++)
  {
    for(i=0;i<clx;i++)
  {
    lcd_dat(0x00);
  }

  y++;

  }



Klappt wunderbar.

Mein einziges Problem mit dem Display ist nun, dass die großen 
Schriftarten aus der DOGM Library  nicht klappen´.

Jemand ´Lust mir dabei zu helfen?

von spess53 (Gast)


Lesenswert?

Hi

> for(i=0;i<4800;i++)

Wie kommst du auf '<4800'? Ein kompletter Screen hat 16x240=3840 Bytes. 
Das EA DOGXL240-7 hat ein integriertes RAM für 4 komplette 
Bildschirmseiten.

>void lcd_clear_area(char y, char x, char cly, char clx)

Der Displaycontroller UC1611 hat eine Windows Funktion. Damit kann man 
Ausgaben auf bestimmte Bereiche definieren.

>...dass die großen Schriftarten aus der DOGM Library  nicht klappen´.

Welche DOGM Library?

MfG spess

von Tho S. (thoso805)


Lesenswert?

Hallo,

oh hast recht 3840 muss dahin.

dann muss ich wohl nochmal mit der Window Funktion bekannt machen.

Das ist aber erstmal ein kleineres Problem mein kleines Skript klappt 
ja.

Hier aus dem Topic ist die Library mit den Fonts.

Beitrag "Library für EA-DOGM Grafikdisplays inkl. Font-Generator"

ich bin mir ziemlich sicher dass es an meiner lcd_put_char Funktion 
liegt.


************************************************************************ 
******
 * Outputs a character on the display, using the given font and style
 */
uint8_t lcd_put_char(FONT_P font, uint8_t style, char character) {
  uint16_t  i;
  uint8_t row  = 0;                             //current row of char
  #ifdef LCD_DOUBLE_PIXEL
    uint8_t hc   = 1;                           //height forced
  #else
    uint8_t hc   = (style & DOUBLE_HEIGHT)?1:0; //height changed
  #endif
  uint8_t wc   = (style & DOUBLE_WIDTH)?1:0;    //width changed
  uint8_t ul   = (style & UNDERLINE)?0x80:0x00; //underline
  uint8_t inv  = (style & INVERT)?0xFF:0;       //inverted
  uint8_t spc  = (style & SPACING)?3:1;         //spacing
  uint8_t tmp;

  //load information about character
   uint8_t char_width    = font_get_char_width(font,character);
   uint8_t font_height   = font_get_height_bytes(font);
   uint8_t free_space    = font_get_add_space(font,character)*spc;
   PGM_P   tableposition = font_get_char_position(font,character);

  //final size of character
  uint8_t char_final_width  = (uint8_t)(char_width+free_space) << wc;
  uint8_t char_final_height = (uint8_t)font_height << hc;

  /*//check for avail. space on display

  if ((style & WRAP) && (LCD_CURRENT_COL() + char_final_width > 
LCD_WIDTH)) {
    LCD_MOVE_TO(LCD_CURRENT_PAGE()+char_final_height,0);
    if (character == ' ') return 0;
    }
*/
  //write chracter
  do {
    for(i=(row>>hc); i<char_width*font_height; i+=font_height) {
      tmp = pgm_read_byte(tableposition+i);
      if(row == char_final_height-1)
        tmp |= ul;
      if(hc)
        tmp = double_bits((row&1),tmp);
      if(inv)
        tmp = ~tmp;
      lcd_dat(tmp);
      if(wc)
        lcd_dat(tmp);
      }
    if (free_space) {
      uint8_t c = inv;
      if(row == char_final_height-1) {
        c ^= ul;
        if(hc)
          c ^= ul>>1;
          }
      for(uint8_t x = free_space; x>0;x--) {
        lcd_dat(c);
        }
      }
  // move_yx(1,-char_final_width);
    } while (++row < char_final_height);

  //move cursor to upper right corner of character
  //move_yx(-char_final_height,char_final_width);
  return char_final_width;
  }

von Tho S. (thoso805)


Lesenswert?

Hallo kannst du mir kurz erklären wie die Window Funktion benutzt werden 
muss?

Gruß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.