一.下载 以下4部分 

1.下载 lv_port_linux_frame_buffer-master

GitHub - lvgl/lv_port_linux_frame_buffer: LVGL configured to work with a standard Linux framebuffer

2.下载 lvgl

GitHub - lvgl/lvgl: Powerful and easy-to-use embedded GUI library with many widgets, advanced visual effects (opacity, antialiasing, animations) and low memory requirements (16K RAM, 64K Flash).

3.下载 lv_demos

GitHub - lvgl/lv_demos: Examples, tutorials and applications for the LVGL embedded GUI library

4.下载 lv_drivers

GitHub - lvgl/lv_drivers: TFT and touch pad drivers for LVGL embedded GUI library 

二.由于 lv_port_linux_frame_buffer-master中的lvgl、lv_demos、lv_drivers这三个文件夹内的内容是空的,我们需要把下载好的lvgl、lv_demos、lv_drivers放入lv_port_linux_frame_buffer-master中,如下图所示

三.修改lv_port_linux_frame_buffer-master文件夹下的lv_drv_conf.h

1.使能显示对应的frame_buffer,如下图所示

 2.使能输入设备对应的触摸屏event,如下图,

 其中,你的板子的输入事件可能不是event1,根据实际进行修改。使用cat命令来测试确认触摸屏输入对应的是哪一个event(命令输入按Enter之后,触摸板子的屏幕,如果有如下乱码则说明这个就是你的触摸屏对应的event)

 四.修改lv_port_linux_frame_buffer-master文件夹下的Makefile

对应你自己的板子对应的交叉编译器

 五.修改lv_port_linux_frame_buffer-master文件夹下的main.c

 具体代码如下

#include "lvgl/lvgl.h"
#include "lv_drivers/display/fbdev.h"
#include "lv_demos/lv_demo.h"
#include <unistd.h>
#include <pthread.h>
#include <time.h>
#include <sys/time.h>
#include "lv_drivers/indev/evdev.h"


#define DISP_BUF_SIZE (128 * 1024)

int main(void)
{
    /*LittlevGL init*/
    lv_init();

    /*Linux frame buffer device init*/
    fbdev_init();

    /*A small buffer for LittlevGL to draw the screen's content*/
    static lv_color_t buf[DISP_BUF_SIZE];

    /*Initialize a descriptor for the buffer*/
    static lv_disp_draw_buf_t disp_buf;
    lv_disp_draw_buf_init(&disp_buf, buf, NULL, DISP_BUF_SIZE);

    /*Initialize and register a display driver*/
    static lv_disp_drv_t disp_drv;
    lv_disp_drv_init(&disp_drv);
    disp_drv.draw_buf   = &disp_buf;
    disp_drv.flush_cb   = fbdev_flush;
    disp_drv.hor_res    = 1024;
    disp_drv.ver_res    = 600;
    lv_disp_drv_register(&disp_drv);


	evdev_init();
	
	lv_indev_drv_t indev_drv;
	
	lv_indev_drv_init(&indev_drv);
	
	indev_drv.type =LV_INDEV_TYPE_POINTER;
	
	indev_drv.read_cb =evdev_read;
	
	lv_indev_drv_register(&indev_drv);

    /*Create a Demo*/
    lv_demo_widgets();

    /*Handle LitlevGL tasks (tickless mode)*/
    while(1) {
        lv_task_handler();
        usleep(5000);
    }

    return 0;
}

/*Set in lv_conf.h as `LV_TICK_CUSTOM_SYS_TIME_EXPR`*/
uint32_t custom_tick_get(void)
{
    static uint64_t start_ms = 0;
    if(start_ms == 0) {
        struct timeval tv_start;
        gettimeofday(&tv_start, NULL);
        start_ms = (tv_start.tv_sec * 1000000 + tv_start.tv_usec) / 1000;
    }

    struct timeval tv_now;
    gettimeofday(&tv_now, NULL);
    uint64_t now_ms;
    now_ms = (tv_now.tv_sec * 1000000 + tv_now.tv_usec) / 1000;

    uint32_t time_ms = now_ms - start_ms;
    return time_ms;
}

六.确认lv_port_linux_frame_buffer-master文件夹下的用户心跳宏是   1

 七.lv_port_linux_frame_buffer-master文件夹下make  生产demo,

 复制到开发板运行./demo ,效果如下图,触摸屏效果很灵敏

 以上移植的前提是tslib 和linux_frame_buffer已ok

 

 

Logo

更多推荐