ili9486液晶驅動函式8位模式,使用PB0到PB7為資料口,初始化、讀點函式、寫點函式
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); }