TFT并口写时序图:
图中,当RS为0时,表示写入的是寄存器地址,RS为1的时候,表示写入的是数据(寄存器值/GRAM数据)
并口读时序图:
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()即可读到像素值。