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?
>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.
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; } } }
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.