我现在想用GRAM地址自动加减来实现TFT的横屏显示
部分程序如下:
#ifdef USE_HORIZONTAL
LCD_WriteReg(0x003,0x1014); //BGR=1 ID[1:0]=0X01 AM=1
#else
LCD_WriteReg(0x003,0x1030); //BGR=1 ID[1:0]=0X11 AM=0
#endif
/*---------------------显示图片函数-------------------------*/
//在指定区域内显示图片
//图片大小: (xend-xsta+1)*(yend-ysta+1)
void LCD_Photo(u16 xsta,u16 ysta,u16 xend,u16 yend,const unsigned char *p)
{
u16 i;
u16 xlen=0,ylen=0;
u16 dat=0;
#ifdef USE_HORIZONTAL
xlen=xend-xsta+1;
ylen=yend-ysta+1;
LCD_WriteReg(0x0210, ysta); //设置显示区域
LCD_WriteReg(0x0211, yend);
LCD_WriteReg(0x0212, 399-xend);
LCD_WriteReg(0x0213, 399-xsta); //432=01AF,400=018F
LCD_SetCursor(xsta,ysta); //设置显示起始点
LCD_WR_REG(0x0202);
for(i=0;i<xlen*ylen;i++)
{
dat=p[i*2+1];
dat=(dat<<8)|p[i*2];
LCD_WR_DATA(dat);
}
#else
xlen=xend-xsta+1;
ylen=yend-ysta+1;
LCD_WriteReg(0x0210,xsta );
LCD_WriteReg(0x0211, xend);
LCD_WriteReg(0x0212, ysta);
LCD_WriteReg(0x0213, yend); //432=01AF,400=018F
LCD_SetCursor(xsta,ysta);
LCD_WR_REG(0x0202);
for(i=0;i<xlen*ylen;i++)
{
//LCD_SetCursor(j,i); //设置光标位置
//LCD_WR_REG(R202); //开始写入GRAM
dat=p[i*2+1];
dat=(dat<<8)|p[i*2];
LCD_WR_DATA(dat);
}
#endif
}
但是现在的问题是竖屏的时候可以显示,但是横屏的时候显示不正确,我估计是寄存器配置的问题....求高手解答....... |