21ic问答首页 - ST7789-LCD驱动 如何用清屏切换两个页面不产生重叠
ST7789-LCD驱动 如何用清屏切换两个页面不产生重叠
zmkukude2022-10-02
本帖最后由 tyw 于 2022-10-2 19:44 编辑
我发现第二页显示的时候,第一页还在那,两者会产生重叠,所以需要在每次展示新的一页之前,将lcd清屏,但是清屏函数是用字节一位一位去写就很慢,请问还有什么其他方法吗
Arduino esp8266 1.3寸TFT屏(st7789驱动)显示图片教程.pdf
(2.27 MB)
玩转 ESP32 Arduino(二十八) TFT_eSPI库驱动ST7789_.pdf
(2.11 MB)
STM32 SPI驱动ST7789 LCD ISP TFT液晶屏幕.pdf
(14.1 MB)
st7789s-g4a 应用说明.pdf
(3.71 MB)
ST7789V_SPEC_V1.pdf
(44.88 MB)
ST7789V 310页.pdf
(3.15 MB)
tyw 注
我发现第二页显示的时候,第一页还在那,两者会产生重叠,所以需要在每次展示新的一页之前,将lcd清屏,但是清屏函数是用字节一位一位去写就很慢,请问还有什么其他方法吗
tyw 注
赞0
1. 提高spi速度,用DMA写入会提高减少写的时间。
2. 在内存开缓存,显示内容准备好后,再写入。
评论
2022-10-04
赞0
评论
2022-10-03
是的,主要是这个刷屏过程很不美观,太慢了,所以想问问有什么别的方法
赞0
LCD_ShowChar 用非叠加模式看看
评论
2022-10-03
@zmkukude :这简单啊,3个字的加两个空格把多余的覆盖掉呗。
非叠加模式试了一下也不行,比如我第一页4个字,第二页3个字,3个字会盖在4个字上面完全显示,但是没盖住的地方还是4个字的边边角角。
赞0
清屏函数如下,就是用全白就填满屏幕
void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color)
{
u16 i,j;
LCD_Address_Set(xsta,ysta,xend-1,yend-1);//设置显示范围
for(i=ysta;i<yend;i++)
{
for(j=xsta;j<xend;j++)
{
LCD_WR_DATA(color);
}
}
}
写函数如下
void LCD_ShowChar(u16 x,u16 y,u8 num,u16 fc,u16 bc,u8 sizey,u8 mode)
{
u16 temp,sizex,t,m=0;
u16 i,TypefaceNum;//一个字符所占字节大小
u16 x0=x;
sizex=sizey/2;
TypefaceNum=(sizex/8+((sizex%8)?1:0))*sizey;
num=num-' '; //得到偏移后的值
LCD_Address_Set(x,y,x+sizex-1,y+sizey-1); //设置光标位置
for(i=0;i<TypefaceNum;i++)
{
if(sizey==12)temp=ascii_1206[num][i]; //调用6x12字体
else if(sizey==16)temp=ascii_1608[num][i]; //调用8x16字体
else if(sizey==24)temp=ascii_2412[num][i]; //调用12x24字体
else if(sizey==32)temp=ascii_3216[num][i]; //调用16x32字体
else if(sizey==48)temp=ascii_4824[num][i]; //调用24x48字体
else return;
for(t=0;t<8;t++)
{
if(!mode)//非叠加模式
{
if(temp&(0x01<<t))LCD_WR_DATA(fc);
else LCD_WR_DATA(bc);
m++;
if(m%sizex==0)
{
m=0;
break;
}
}
else//叠加模式
{
if(temp&(0x01<<t))LCD_DrawPoint(x,y,fc);//画一个点
x++;
if((x-x0)==sizex)
{
x=x0;
y++;
break;
}
}
}
}
}
重叠就是我一直在往屏幕写,没有清屏,导致他们都出现了,叠加在一起,现在就是这个清屏很慢,导致不美观,有没有什么其他的办法呢
评论
2022-10-03
有的放矢,有写过的地方才清屏,会快得多.
赞0
评论
2022-10-02
已发在帖子里,没有用DMA
您需要登录后才可以回复 登录 | 注册