C语言 设置ILI 9325 TFT显示器的方向



我正在研究一个需要将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(行变成列,反之亦然)。

相关内容

  • 没有找到相关文章

最新更新