1. 程式人生 > >ili9486液晶驅動函式8位模式,使用PB0到PB7為資料口,初始化、讀點函式、寫點函式

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);         }