embedded 原文存档
ili9486 SPI LCD屏幕LVGL驱动程序
屏幕链接:http://www.lcdwiki.com/zh/4.0inch\_SPI\_Module\_ILI9486
这个驱动,困扰我很久,来源是原子的LCD驱动修改的。上面链接里,屏幕商家做的程序可以正常显示LCD
但是LVGL里面不能使用。
`void LCD_WR_REG(u8 data) { LCD_CS_CLR; LCD_RS_CLR; SPI2_ReadWriteByte(data); LCD_CS_SET; } void LCD_WR_DATA(u8 data) { LCD_CS_CLR; LCD_RS_SET; SPI2_ReadWriteByte(data); LCD_CS_SET; } void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd) { LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(xStar>>8); LCD_WR_DATA(0x00FF&xStar); LCD_WR_DATA(xEnd>>8); LCD_WR_DATA(0x00FF&xEnd); LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(yStar>>8); LCD_WR_DATA(0x00FF&yStar); LCD_WR_DATA(yEnd>>8); LCD_WR_DATA(0x00FF&yEnd); LCD_WriteRAM_Prepare(); //开始写入GRAM } // Write 8 bits to TFT #define tft_Write_8(C) LCD_WR_DATA(C) //0000 0000 1111 1000 F8 5 //0000 0000 1111 1100 FC 6 //0000 0000 1111 1000 F8 5 // Convert 16 bit colour to 18 bit and write in 3 bytes #define tft_Write_16(C) LCD_WR_DATA(((C) & 0xF800)>>8); \ LCD_WR_DATA(((C) & 0x07E0)>>3); \ LCD_WR_DATA(((C) & 0x001F)<<3) // Future option for transfer without wait #define tft_Write_16N(C) tft_Write_16(C) // Convert swapped byte 16 bit colour to 18 bit and write in 3 bytes #define tft_Write_16S(C) LCD_WR_DATA((C) & 0xF8); \ LCD_WR_DATA(((C) & 0xE000)>>11 | ((C) & 0x07)<<5); \ LCD_WR_DATA(((C) & 0x1F00)>>5) //OK,测试可用,比点填充速度快 void lB_LCD_Color_Fill(u16 x1,u16 y1,u16 x2,u16 y2, u16 *color_p) { uint32_t len=0; uint16_t height,width; width = x2 - x1 + 1; height = y2 - y1 + 1; len=width*height; LCD_SetWindows(x1,y1,x2,y2); while ( len-- ) {tft_Write_16(*color_p); color_p++;} } //OK 可以使用成功,颜色也对! void LB_LCD_DrawPoint3(u16 x,u16 y,u16 color) { LCD_SetCursor(x,y);//设置光标位置 uint8_t colortmp[3]; colortmp[0]=((color & 0xF800)>>8); colortmp[1]=((color & 0x07E0)>>3); colortmp[2]=((color & 0x001F)<<3); //18Bit LCD_WR_DATA(colortmp[0]);//RED LCD_WR_DATA(colortmp[1]);//GREEN LCD_WR_DATA(colortmp[2]);//BLUE }`
`static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { lB_LCD_Color_Fill(area->x1, area->y1, area->x2, area->y2, &color_p->full); /*IMPORTANT!!! *Inform the graphics library that you are ready with the flushing*/ lv_disp_flush_ready(disp_drv); }`
于22.03.28