Littlevgl介绍与移植
1、简介
Littlevgl是一种纯C语言编写的GUI,控件多且美,移植简单,只要对接一个显示接口,需要触摸的再加一个触摸控制接口。
2、移植
显示接口移植:
static void tft_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const lv_color_t * color_p)
{
/*Truncate the area to the screen*/
int32_t act_x1 = x1 < 0 ? 0 : x1;
int32_t act_y1 = y1 < 0 ? 0 : y1;
int32_t act_x2 = x2 > LV_HOR_RES ? LV_HOR_RES : x2;
int32_t act_y2 = y2 > LV_VER_RES ? LV_VER_RES : y2;
uint32_t x;
uint32_t y;
/*Put the map to the remaining area*/
for(y = act_y1; y <= act_y2; y++) //填充屏幕的像素点
{
for(x = act_x1; x <= act_x2; x++)
{
GUI_Point(x, y, color_p->full);
color_p++;
}
}
lv_flush_ready();
}
注册显示接口:
lv_disp_drv_t disp;
lv_disp_drv_init(&disp);
disp.disp_flush = tft_flush;
disp.disp_fill = lv_disp_fill; //单点填充
disp.disp_map = lv_disp_map; //与tft_flush同样
lv_disp_drv_register(&disp);
触摸接口:
static lv_indev_t *indev;
lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv);
indev_drv.read = my_input_read; //触摸屏返回按压状态以及触摸位置
indev_drv.type = LV_INDEV_TYPE_POINTER; //有几种类型,这里采用的是触摸屏
indev = lv_indev_drv_register(&indev_drv);
以上接口对接好后,基本上就算移植好了。
3、汉字显示
Littlevgl本身不带有中文字库,需要取模后添加中文字库,这里推荐一个离线取模软件 Lvgl Font Tool V0.3,添加需要显示的汉字,自动生成文件。
引用:假设用改该软件生成的文件名为myfont.c,使用前需要在lv_font.h文件加上
LV_FONT_DECLARE(myfont); //其实就是一个extern声明
之后就可以调用这个文件字库了。
调用:
1、样式调用
style.text.font = &my_font_name;
2、字库混合
lv_font_add(&myfont, &parent_font);
注意事项:keil中要使用中文,必须修改编码方式为UTF-8.