ili9486 SPI LCD屏幕LVGL驱动程序

· 更新于

ILI9486lcdlvgl

屏幕链接: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