|
发表于 2019-4-17 22:42:28
|
显示全部楼层
以下希望可以帮到你:
//初始化lcd
//该初始化函数可以初始化各种ILI93XX液晶,但是其他函数是基于ILI9320的!!!
//在其他型号的驱动芯片上没有测试!
void LCD_Init(void)
{
RCC->APB2ENR|=1<<5;//先使能外设PORTD时钟
RCC->APB2ENR|=1<<6;//先使能外设PORTE时钟
//RCC->APB2ENR|=1<<0; //开启辅助时钟
GPIOD->CRH&=0X0000FFFF;//CRH高16位清零 PD12-PD15都输出1
GPIOD->CRH|=0X33330000; //CRH高16或上3333
//通用推挽输出最高速度50MHz
GPIOD->ODR=0XF000; //PD12-PD15都输出1
GPIOE->CRH=0X33333333;//PE8-PE15通用推挽输出最高速度50MHz
GPIOE->CRL=0X33333333; //PE0-PE7 通用推挽输出最高速度50MHz
GPIOE->ODR=0XFFFF; //PE0-PE15全都输出1 //全部输出高
delay_ms(50); // delay 50 ms
LCD_WriteReg(0x0000,0x0001); //写寄存器
delay_ms(50); // delay 50 ms
DeviceCode = LCD_ReadReg(0x0000); //读取驱动IC的ID号码
if (DeviceCode == 0x8999)
{
// SSD1298 芯片ID为 0x8999 //
// power supply setting
// set R07h at 0021h (GON=1,DTE=0,D[1:0]=01)
LCD_WriteReg(0x07,0x0021);
// set R00h at 0001h (OSCEN=1)
LCD_WriteReg(0x00,0x0001);
// set R07h at 0023h (GON=1,DTE=0,D[1:0]=11)
LCD_WriteReg(0x07,0x0023);
// set R10h at 0000h (Exit sleep mode)
LCD_WriteReg(0x10,0x0000);
// Wait 30ms
delay_ms(3000);
// set R07h at 0033h (GON=1,DTE=1,D[1:0]=11)
LCD_WriteReg(0x07,0x0033);
// Entry mode setting (R11h)
// R11H Entry mode
// vsmode DFM1 DFM0 TRANS OEDef WMode DMode1 DMode0 TY1 TY0 ID1 ID0 AM LG2 LG2 LG0
// 0 1 1 0 0 0 0 0 0 1 1 1 * 0 0 0
LCD_WriteReg(0x11,0x6070);
// LCD driver AC setting (R02h)
LCD_WriteReg(0x02,0x0600);
// power control 1
// DCT3 DCT2 DCT1 DCT0 BT2 BT1 BT0 0 DC3 DC2 DC1 DC0 AP2 AP1 AP0 0
// 1 0 1 0 1 0 0 0 1 0 1 0 0 1 0 0
// DCT[3:0] fosc/4 BT[2:0] DC{3:0] fosc/4
LCD_WriteReg(0x03,0x0804);//0xA8A4
LCD_WriteReg(0x0C,0x0000);//
LCD_WriteReg(0x0D,0x080C);//
// power control 4
// 0 0 VCOMG VDV4 VDV3 VDV2 VDV1 VDV0 0 0 0 0 0 0 0 0
// 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0
LCD_WriteReg(0x0E,0x2900);
LCD_WriteReg(0x1E,0x00B8);
// LCD_WriteReg(0x01,0x2B3F);//驱动输出控制320*240 0x6B3F
// LCD_WriteReg(0x0001,0x6B3F); // delayms(5);
LCD_WriteReg(0x0001,0x3B3F); // delayms(5);
LCD_WriteReg(0x10,0x0000);
LCD_WriteReg(0x0011,0x6070);//定义数据格式 16位色 横屏 0x6058////竖屏0x6070
LCD_WriteReg(0x05,0x0000);
LCD_WriteReg(0x06,0x0000);
LCD_WriteReg(0x16,0xEF1C);
LCD_WriteReg(0x17,0x0003);
LCD_WriteReg(0x07,0x0233);//0x0233
LCD_WriteReg(0x0B,0x0000|(3<<6));
LCD_WriteReg(0x0F,0x0000);//扫描开始地址
LCD_WriteReg(0x41,0x0000);
LCD_WriteReg(0x42,0x0000);
LCD_WriteReg(0x48,0x0000);
LCD_WriteReg(0x49,0x013F);
LCD_WriteReg(0x4A,0x0000);
LCD_WriteReg(0x4B,0x0000);
LCD_WriteReg(0x44,0xEF00);
LCD_WriteReg(0x45,0x0000);
LCD_WriteReg(0x46,0x013F);
LCD_WriteReg(0x30,0x0707);
LCD_WriteReg(0x31,0x0204);
LCD_WriteReg(0x32,0x0204);
LCD_WriteReg(0x33,0x0502);
LCD_WriteReg(0x34,0x0507);
LCD_WriteReg(0x35,0x0204);
LCD_WriteReg(0x36,0x0204);
LCD_WriteReg(0x37,0x0502);
LCD_WriteReg(0x3A,0x0302);
LCD_WriteReg(0x3B,0x0302);
LCD_WriteReg(0x23,0x0000);
LCD_WriteReg(0x24,0x0000);
LCD_WriteReg(0x25,0x8000); // 65hz
LCD_WriteReg(0x4f,0); // 行首址0
LCD_WriteReg(0x4e,0); // 列首址0
}
}
|
|