我正在研究一个需要将TFT显示器与il9325驱动程序接口的项目。我已经成功地初始化了显示器,但是我不能旋转显示器。请告诉我要插入的寄存器和值,以便将显示设置为纵向或横向模式。
这是我的LCD初始化代码。
void LCD_ILI9325_Init(void)
{
unsigned char i;
unsigned int f;
LCD_Port_Init();
LCD_REST_L; //??
_delay_ms(50);
LCD_REST_H;
_delay_ms(50);
LCD_WriteReg(0x0001,0x0000);//зеркально вертикаль (0x0100)
LCD_WriteReg(0x0002,0x0700);
LCD_WriteReg(0x0003,0x1030);//преобразования RGB в GBR, строчной развертки
LCD_WriteReg(0x0004,0x0000);//зеркально вертикаль (0x0000)
LCD_WriteReg(0x0008,0x0207);
LCD_WriteReg(0x0009,0x0000);
LCD_WriteReg(0x000A,0x0000);
LCD_WriteReg(0x000C,0x0000);
LCD_WriteReg(0x000D,0x0000);
LCD_WriteReg(0x000F,0x0000);
//power on sequence VGHVGL
//Питания на последовательности VGHVGL
LCD_WriteReg(0x0010,0x0000);
LCD_WriteReg(0x0011,0x0007);
LCD_WriteReg(0x0012,0x0000);
LCD_WriteReg(0x0013,0x0000);
//vgh
LCD_WriteReg(0x0010,0x1290);
LCD_WriteReg(0x0011,0x0227);
//vregiout
LCD_WriteReg(0x0012,0x001d);//0x001b
//vom amplitude
// По амплитуде
LCD_WriteReg(0x0013,0x1500);
//vom H
LCD_WriteReg(0x0029,0x0018);
LCD_WriteReg(0x002B,0x000D);
//gamma
// Диапазон
LCD_WriteReg(0x0030,0x0004);
LCD_WriteReg(0x0031,0x0307);
LCD_WriteReg(0x0032,0x0002);//0006
LCD_WriteReg(0x0035,0x0206);
LCD_WriteReg(0x0036,0x0408);
LCD_WriteReg(0x0037,0x0507);
LCD_WriteReg(0x0038,0x0204);//0200
LCD_WriteReg(0x0039,0x0707);
LCD_WriteReg(0x003C,0x0405);//0504
LCD_WriteReg(0x003D,0x0F02);
//ram
LCD_WriteReg(0x0050,0x0000);
LCD_WriteReg(0x0051,0x00EF);
LCD_WriteReg(0x0052,0x0000);
LCD_WriteReg(0x0053,0x013F);
LCD_WriteReg(0x0060,0x2700);//зеркально горизонталь (0xA700)
LCD_WriteReg(0x0061,0x0001);
LCD_WriteReg(0x006A,0x0000);
//
LCD_WriteReg(0x0080,0x0000);
LCD_WriteReg(0x0081,0x0000);
LCD_WriteReg(0x0082,0x0000);
LCD_WriteReg(0x0083,0x0000);
LCD_WriteReg(0x0084,0x0000);
LCD_WriteReg(0x0085,0x0000);
//
LCD_WriteReg(0x0090,0x0010);
LCD_WriteReg(0x0092,0x0600);
LCD_WriteReg(0x0093,0x0003);
LCD_WriteReg(0x0095,0x0110);
LCD_WriteReg(0x0097,0x0000);
LCD_WriteReg(0x0098,0x0000);
LCD_WriteReg(0x0007,0x0133);
LCD_WriteComand(0x0022);//Start to write to display RAM
//paint screen black
for(i=0;i<2;i++)
{
for(f=0;f<38400;f++)
{
LCD_WriteData(WHITE);
}
}
}
请建议我在这段代码中更新什么来旋转显示。
谢谢
如果不了解这个LCD如何工作,您将无法解决您的问题。首先,我建议仔细阅读硬件文档。里面总有一些有趣的信息。我知道这听起来像是浪费时间,但从来都不是。
o o o o o o o
o o o o o o o
o o o o o o o
o o o o o o o
^
|
LCD DRIVER < - > LCD RAM
^
|
input
LCD驱动程序控制两件事:
1)你的输入数据如何存储在LCD RAM
2)如何将存储在LCD RAM中的输入数据传输到单个像素
让我们从il9325 LCD文档的这一部分开始:
7.2.3。第52页驱动器输出控制(R01h)
它清楚地说,这个寄存器控制ILI9325内部驱动程序。但是,它不影响驱动程序将输入数据存储在LCD RAM中的方式。
当SS = 0时,输出位移方向为S1到S720
当SS = 1时,输出位移方向为S720到S1
(11页):
S720~S1 O(输出)LCD
施加到液晶的源输出电压信号。要改变信号输出的移位方向,使用SS位。SS = " 0 ",则内存地址" h00000 "中的数据从S1输出。SS ="1",则RAM地址"h00000"中的数据是从S720输出的。S1, S4, S7,…显示红色(R), S2, S5, S8,…显示绿色(G),和S3, s6, s9,…显示蓝色(B) (SS = 0).
该寄存器仅控制LCD RAM的内容如何连接到LCD像素。它清楚地表明驱动程序的输出方向发生了变化。驱动程序能够通过将此寄存器中的SS设置从0更改为1来逆转您的映像。请阅读更多关于它的文档,因为你也需要调整RGB设置。
如果你想改变你的输入数据在LCD RAM中存储的方式,看看下面的部分:
7.2.5。进入模式(R03h)第54页
这个寄存器允许你控制你的输入如何存储在LCD RAM中。在第55页,你有关于如何调整水平和垂直模式的驱动程序的细节:
水平:AM = 0, I/D[1:0] = 11
垂直方向:AM = 1, I/D[1:0] = 10
我想说,如果你想解决你的问题,不要改变的设置同时得到R01h和R03h。一旦显示了数据,就进行更改R01h的设置,看看驱动程序做什么。但不要更改输入数据,因为一旦你开始搞乱R03h你的数据在LCD RAM将在其他RAM位置。不要把这两件事混在一起。
另外,请记住,如果您改变在LCD RAM中存储数据的方向,线变成列,反之亦然。仔细看一下,第55页描述得很好。我认为你的软件需要意识到,分辨率从320x240到240x320(行变成列,反之亦然)。