本文所指刷屏是向屏幕发送某一颜色数据填满屏幕。
一般的并口屏刷屏的函数:
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() 实现输出数据到屏幕。