液晶有型号,不同型号的液晶引脚排不同,控制寄存器指令也不同。可以通过发送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()也不
相同,因为不了解这些寄存器,所以看不懂,有待学习。