我们追溯到LTDC_Color_Fill函数,可以看出这个函数主要是在向LCD屏幕传输数据。我选择的是竖屏,会执行else里的语句,进行了坐标系转换。但是DMA2D仍然是按照横屏的方向进行数据传输的。 我们抛弃LCD_Color_Fill的方式填充屏幕,使用最原始的画点方式: 烧录检测: OK噜(●’◡’●)...
修改disp_flush函数,该函数是lvgl绘制界面的关键函数,是用于绘制界面的最基本的函数,也是lvgl与底层屏幕的绘制适配接口函数。 LVGL给的例程中是想让我们使用画点方式进行实现,但画点方式效率比较低,所以此处我们使用LCD_Color_Fill函数实现,该函数通常支持一次性填充整个屏幕或者特定区域,可以大大提高cpu的运行效率。 三...
//disp_drv.gpu_fill_cb = gpu_fill; /*Finally register the driver*/ lv_disp_drv_register(&disp_drv); } 3、修改disp_flush函数 该函数就是调用底层LCD描点函数进行绘制UI界面的。 // LCD描点函数 void LCD_Color_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 *color) { u16 i, j; u16 ...
LCD_WR_DATA(color[i * width + j]); } } } static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { // 调用底层LCD描点函数 LCD_Color_Fill(area->x1, area->y1, area->x2, area->y2, (uint16_t *)color_p); /*IMPORTANT!!! *...
voidLCD_LVGL_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,lv_color_t*color){uint32_t y=0;u16 height,width;width=ex-sx+1;//得到填充的宽度height=ey-sy+1;//高度LCD_Address_Set(sx,sy,ex,ey);for(y=0;y<width*height;y++){LCD_WR_DATA(color->full);color++;}} ...
其本质是与 屏幕颜色深度相关、其次是与 LCD_Color_Fill 函数原型相关。 lv_port_indev.c 中: 使能文件、添加必要的 触摸屏头文件如 #include "touch.h" 函数lv_port_indev_init 中仅保留 touchpad 部分的代码,其他可以用 # if 0 及 #endif 编译宏失能。
先初始化lcd,再初始化lvgl-》lv_init()。再就是lcd对接到lvgl初始化lv_hal_init(); lcd_init(); lcd_fill(0,0,GLCD_WIDTH-1,GLCD_HEIGHT-1,GLCD_COLOR_RED); Delay_ms(500); lcd_fill(0,0,GLCD_WIDTH-1,GLCD_HEIGHT-1,GLCD_COLOR_GREEN); ...
LCD驱动芯片:ST7789V 触摸IC:CST816T 本次移植是基于 RT-Thread 系统上运行 LVGL 的,所以在移植前...
lcd_color_fill(area->x1, area->y1, area->x2, area->y2, (uint16_t *)color_p); 这里是正电原子提供的函数,根据自己的工程不同进行替换。 最后,在main函数中初始化时调用函数lv_port_disp_init进行初始化即可。 这是影响刷新速度最关键的一个步骤!!! 其实这里...
void lvgl_LCD_Color_Fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, lv_color_t *color) { uint32_t y=0; uint16_t height, width; width = ex - sx + 1; //得到填充的宽度 height = ey - sy + 1; //高度