void LCD_INIT_ILI9486(void)
{
LCD_GPIOInit();
//************* Reset LCD Driver ****************//
LCD_RST_SET;
delay_ms(1); // Delay 1ms
LCD_RST_CLR;
delay_ms(20); // Delay 10ms
LCD_RST_SET;
delay_ms(50); // Delay 50 ms
LCD_CS_CLR;
LCD_RD_SET;
//************* Start Initial Sequence **********//
LCD_WrCom(0xE0);
LCD_WrDat(0x00);
LCD_WrDat(0x07);
LCD_WrDat(0x0f);
LCD_WrDat(0x0D);
LCD_WrDat(0x1B);
LCD_WrDat(0x0A);
LCD_WrDat(0x3c);
LCD_WrDat(0x78);
LCD_WrDat(0x4A);
LCD_WrDat(0x07);
LCD_WrDat(0x0E);
LCD_WrDat(0x09);
LCD_WrDat(0x1B);
LCD_WrDat(0x1e);
LCD_WrDat(0x0f);
LCD_WrCom(0xE1);
LCD_WrDat(0x00);
LCD_WrDat(0x22);
LCD_WrDat(0x24);
LCD_WrDat(0x06);
LCD_WrDat(0x12);
LCD_WrDat(0x07);
LCD_WrDat(0x36);
LCD_WrDat(0x47);
LCD_WrDat(0x47);
LCD_WrDat(0x06);
LCD_WrDat(0x0a);
LCD_WrDat(0x07);
LCD_WrDat(0x30);
LCD_WrDat(0x37);
LCD_WrDat(0x0f);
LCD_WrCom(0xC0);
LCD_WrDat(0x10);
LCD_WrDat(0x10);
LCD_WrCom(0xC1);
LCD_WrDat(0x41);
LCD_WrCom(0xC5);
LCD_WrDat(0x00);
LCD_WrDat(0x22);
LCD_WrDat(0x80);
LCD_WrCom(0x36);
LCD_WrDat(0x68); //68竖屏,C8横屏
LCD_WrCom(0x3A); //Interface Mode Control
LCD_WrDat(0x55);
LCD_WrCom(0XB0); //Interface Mode Control
LCD_WrDat(0x00);
LCD_WrCom(0xB1); //Frame rate 70HZ
LCD_WrDat(0xB0);
LCD_WrDat(0x11);
LCD_WrCom(0xB4);
LCD_WrDat(0x02);
LCD_WrCom(0xB6); //RGB/MCU Interface Control
LCD_WrDat(0x02);
LCD_WrDat(0x02);
LCD_WrCom(0xB7);
LCD_WrDat(0xC6);
LCD_WrCom(0xE9);
LCD_WrDat(0x00);
LCD_WrCom(0XF7);
LCD_WrDat(0xA9);
LCD_WrDat(0x51);
LCD_WrDat(0x2C);
LCD_WrDat(0x82);
LCD_WrCom(0x11);
delay_ms(10);
LCD_WrCom(0x29);
lcddev.dir = 0;//竖屏
lcddev.setxcmd=0x2A;
lcddev.setycmd=0x2B;
lcddev.wramcmd=0x2C;
lcddev.width=320;
lcddev.height=480;
LCD_Clear(BLACK);
}
//读取个某点的颜色值
//x,y:坐标
//返回值:此点的颜色
u16 LCD_ReadPoint(u16 x,u16 y)
{
u16 r,g,b,x1;
u8 r1,b1;
if(x>=lcddev.width||y>=lcddev.height)return 0; //超过了范围,直接返回
LCD_SetCursor(x,y);
LCD_WR_REG(0X2E); //发送读GRAM指令
GPIOB->CRL = 0X88888888; //PB0-7 上拉输入
GPIOB->ODR |= 0X00FF; //全部输出高
LCD_RS_SET;
LCD_CS_CLR;
//读取数据(读GRAM时,第一次为假读)
LCD_RD_CLR;
delay_us(1);//延时1us
LCD_RD_SET;
LCD_RD_CLR;
delay_us(1);//延时1us
r1 = DATAIN;
r = r1;
r <<= 8;
LCD_RD_SET;
LCD_RD_CLR;
delay_us(1);//延时1us
r1 = DATAIN;
r |= r1;
LCD_RD_SET;
LCD_RD_CLR;
b1=DATAIN;
b = b1;
b <<= 8;
LCD_RD_SET;
LCD_RD_CLR;
b1=DATAIN;
b |= b1;
LCD_RD_SET;
g=r&0XFF;
g<<=8;
GPIOB->CRL = 0X33333333; //PB0-7 上拉输出
GPIOB->ODR |= 0X00FF; //全部输出高
x1 = (((r>>11)<<11)|((g>>10)<<5)|(b>>11));
return x1;
}
void ILI9486_DrawPoint(u16 Xpos,u16 Ypos,u16 RGB_Code)
{
LCD_SetCursor(Xpos,Ypos);
LCD_WriteRAM_Prepare();
LCD_WR_DATAX(RGB_Code);
}