STM32模拟16BIT并口驱动3.0’TFT屏(二)

TFT并口写时序图:

clip_image002

图中,当RS为0时,表示写入的是寄存器地址,RS为1的时候,表示写入的是数据(寄存器值/GRAM数据)

并口读时序图:

clip_image004

RS为0时,表示读取的是状态寄存器值,RS为1时,表示读取的是像素数据。

写函数如下:

void DataToWrite(u16 data)

{

GPIO_Write(GPIOE, data);

}

void LCD_WriteReg(u16 Index,u16 CongfigTemp)

{

Clr_Cs;

Clr_Rs;//RS为0,写索引寄存器 为1,写入的是寄存器值/GRAM数据

Set_nRd;

DataToWrite(Index);

Clr_nWr;

Set_nWr;

Set_Rs;

DataToWrite(CongfigTemp);

Clr_nWr;

Set_nWr;

Set_Cs;

}

读寄存器的函数如下:

u16 LCD_ReadReg(u16 regID)

{

u16 regData;

GPIO_InitTypeDef GPIO_InitStructure;

Clr_Cs;

Clr_Rs;

Set_nRd;

DataToWrite(regID);

Clr_nWr;

Set_nWr;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOE, &GPIO_InitStructure);

Clr_Rs; //读状态寄存器值RS为0,读像素数据,RS应为1

Clr_nRd;

Set_nRd;

regData = GPIO_ReadInputData(GPIOE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOE, &GPIO_InitStructure);

Set_Rs;

Set_Cs;

return regData;

}

读寄存器0的值,可以得到0X5420,就是TFT驱动芯片的型号。

i=LCD_ReadReg(0x000);

i的值为0X5420

读像素的值函数为

u16 LCD_ReadRAM(void)

{

u16 d1,d2;

u16 x, y;

GPIO_InitTypeDef GPIO_InitStructure;

Clr_Cs;

Clr_Rs;

Set_nRd;

DataToWrite(0x202);/* Select GRAM Reg */

Clr_nWr;

Set_nWr;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOE, &GPIO_InitStructure);

Set_Rs;

Clr_nRd;

Set_nRd;

d1 = GPIO_ReadInputData(GPIOE);

Clr_nRd;

Set_nRd;

d2 = GPIO_ReadInputData(GPIOE);

Set_Cs;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOE, &GPIO_InitStructure);

return d2;

}

根据SPFD5420数据手册,读GRAM值需要读取两次,第2次的值为正确的值。

要读取一个像素的值,首先设置要读像素的坐标

ili9320_SetCursor(x,y);

然后调用LCD_ReadRAM()即可读到像素值。

发表评论

电子邮件地址不会被公开。 必填项已用*标注