液晶有型号,不同型号的液晶引脚排不同,控制寄存器指令也不同。可以通过发送0x0000指令,读取返回值,来查看。再根据不同的型号配置不同的LCD_WR_REG();
void LCD_WR_REG(u16 Index,u16 CongfigTemp)
{
Clr_Cs;
Clr_Rs;
Set_nRd;
GPIO_Write(GPIOE, Index);
Clr_nWr;
Set_nWr;
Set_Rs;
GPIO_Write(GPIOE,CongfigTemp);
Clr_nWr;
Set_nWr;
Set_Cs;
}
unsigned short rd_reg (unsigned short reg)
{
Clr_Cs;
wr_cmd(reg);
reg = rd_dat();
Set_Cs;
return reg;
}
__inline void wr_cmd (unsigned char c) {
Clr_Rs;
Set_nRd;
GPIOE->ODR = c;
Clr_nWr;
Set_nWr;
}
__inline unsigned short rd_dat (void)
{
unsigned short val = 0;
Set_Rs; // SPFD之类的芯片在读取ID时RS=0,这一点和ILI之类的RS=1不同。
Set_nWr;
Clr_nRd;
GPIOE->CRH = 0x44444444;
GPIOE->CRL = 0x44444444;
val = GPIOE->IDR;
val = GPIOE->IDR;
GPIOE->CRH = 0x33333333;
GPIOE->CRL = 0x33333333;
Set_nRd;
return val;
}
void Lcd_WR_Start(void)
{
Clr_Cs;
Clr_Rs;
Set_nRd;
GPIO_Write(GPIOE,0x0022); //DataToWrite(0x0022);//GPIOE脚接液晶16个DB数据脚,所以写液晶数据直接写GPIOE。
Clr_nWr;
Set_nWr;
Set_Rs;
}
void Lcd_Initialize(void)
{... ...
DriverCode = rd_reg(0x00);
if(DeviceCode==0x9325||DeviceCode==0x9328)
{
LCD_WR_REG(0x00e7,0x0010);
LCD_WR_REG(0x0000,0x0001);
... ....
}
else if(DeviceCode==0x9320||DeviceCode==0x9300)
{
LCD_WR_REG(0x00,0x0000);
LCD_WR_REG(0x01,0x0100);
... ...
}
else if(DeviceCode==0x9331)
{
LCD_WR_REG(0x00E7, 0x1014);
LCD_WR_REG(0x0001, 0x0100);
... ...
}
else if(DeviceCode==0x9919)
{
LCD_WR_REG(0x28,0x0006);
LCD_WR_REG(0x00,0x0001);
... ...
}
else if(DeviceCode==0x1505)
{
LCD_WR_REG(0x0007,0x0000);
ili9320_Delay(5);
LCD_WR_REG(0x0012,0x011C);
... ...
}
else if(DeviceCode==0x8989)
{
LCD_WR_REG(0x0000,0x0001); ili9320_Delay(50000);
LCD_WR_REG(0x0003,0xA8A4); ili9320_Delay(50000);
......
}
.....
}//种类繁多,而且液晶上都不会标出,通过软件查询硬件信息,但是及时同一个型号,在火牛光盘里不同的例程里LCD_WR_REG()也不
相同,因为不了解这些寄存器,所以看不懂,有待学习。