LCD-读液晶型号

液晶有型号,不同型号的液晶引脚排不同,控制寄存器指令也不同。可以通过发送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()也不

相同,因为不了解这些寄存器,所以看不懂,有待学习。

 

 

你可能感兴趣的:(STM32)