浅谈16位并口屏刷屏速度

发布时间:2024年01月17日

本文所指刷屏是向屏幕发送某一颜色数据填满屏幕。

一般的并口屏刷屏的函数:

void LCD_Set_Port(unsigned char VH,unsigned char VL)
{
/*
    并口GPIO设置
*/

}

void LCD_Write_DATA16(unsigned short val)
{
    LCD_CS_CLR;
    LCD_RS_SET;
    LCD_RD_SET;
    LCD_WR_CLR;

    LCD_Set_Port((val>>8)&0xFF,val&0XFF);

    LCD_WR_CLR;
    LCD_WR_SET;
    LCD_CS_SET;
}

void LCD_Write_DATA(unsigned char VH,unsigned char VL)
{
    LCD_CS_CLR;
    LCD_RS_SET;
    LCD_Writ_Bus16(VH,VL);
    LCD_CS_SET;
}

void clrScr(unsigned short color)
{
    int i;
    u8 ch,cl;
    ch=color>>8;
    cl=color&0xff;

    clrXY();

    LCD_CS_CLR;
    LCD_RS_SET;

    for (i=0; i<((disp_x_size+1)*(disp_y_size+1)); i++)
    {
       LCD_Write_DATA(ch,cl);
    }
    LCD_CS_SET;

}

实际效果是刷屏很慢,主要的原因是用了void LCD_Writ_Bus16(unsigned char VH,unsigned char VL)这个通用的写数据函数来刷屏。每次都要设置并口的GPIO,写GPIO要浪费时间。

实际上在刷屏的过程中,输出给屏幕的COLOR 16位数据是不变的,只需要设置并口的GPIO一次,反复发送LCD_WR_CLR;LCD_WR_SET,就可以不断地向屏幕输出颜色数据。

#define LCD_WR_PULSE()  LCD_WR_CLR;LCD_WR_SET

void LCD_Set_Port(unsigned char VH,unsigned char VL)
{
    /*略*/
}

void clrScr(unsigned short color)
{
    uint16_t i;
    setXY(0, 0, 220, 176);

    LCD_Set_Port(color>>8,color&0xff);        //设置COLOR输出到并口

    LCD_CS_CLR;
    LCD_RS_SET;
    LCD_RD_SET;
    LCD_WR_CLR;

    for(i=0; i<220*176-1; i++)
    {
        LCD_WR_PULSE();                       //GPIO输出到屏幕
    }

    LCD_CS_SET;

}

经过上面改造,刷屏速度提高不少。

但此方法应该是适用于16位屏,8位屏1个16位COLOR数据需要分高低位两次输出,GPIO每次都要变,不能只调用LCD_WR_PULSE() 实现输出数据到屏幕。

文章来源:https://blog.csdn.net/weixin_44067125/article/details/135649346
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。