11. 屏幕

LubanCat-RV06 板卡支持RGB接口屏幕,支持 野火5寸屏和野火7寸屏,分辨率是 800x480。 野火七寸屏 的显示效果不太好,建议使用 野火5寸屏

LubanCat-RV06板卡的显示能力是RGB666

11.1. 硬件连接

屏幕的接口如图下所示

未找到图片

注解

RGB屏连接的排线为0.5mm 40pin 同面的fpc排线

警告

RGB接口不支持热插拔,需要在板子关机的情况下连接屏幕,如果在开机的情况下连接屏幕,可能会导致屏幕无法正常显示或者导致板卡无法正常使用。

11.2. 开机显示

当将屏幕连接到板子开机后,会出下面下面的显示情况

未找到图片

可以看到有三个滑块,从上到下分别是R,G,B三个通道,可以调节颜色的值,然后点击 set 按钮,可以看到屏幕的显色框颜色会变化, 如图像下所示,将红色通道调成最大

未找到图片

11.3. 程序控制

程序版本有两个分别是

  • LVGL v8.3.11 : 对应的是 lvgl_app 程序

  • LVGL v9.2.2 : 对应的是 lvgl_app_v9 程序

区别是 2025/03/27后,系统会默认使用 LVGL v9.2.2 版本的程序,即 lvgl_app_v9 程序

可以使用下面命令查看当前程序版本

ls /oem/usr/bin/lvgl_app*

后面的教程用 lvgl_app_v9 来演示,如果使用的是 LVGL v8.3.11 版本的程序,将 lvgl_app_v9 替换成 lvgl_app 即可

11.3.1. 临时关闭

执行下面命令

pkill lvgl_app_v9

执行上面命令后,应用就会停止,画面就不会更新了

可以执行下面命令让屏幕变成黑色

cat /dev/zero > /dev/fb0

11.3.2. 永久关闭

首先执行临时关闭的命令,然后修改 /oem/usr/bin/RkLunch.sh/oem/usr/bin/lvgl_app_v9 & 注释掉

可以执行下面命令进行修改

sed -i 's/\/oem\/usr\/bin\/lvgl_app_v9/# \/oem\/usr\/bin\/lvgl_app_v9 /g' /oem/usr/bin/RkLunch.sh

注解

如果不运行临时关闭的命令,可以使用重启来生效

11.3.3. 永久开启

修改 /oem/usr/bin/RkLunch.sh/oem/usr/bin/lvgl_app_v9 & 取消注释

可以执行下面命令进行修改

sed -i 's/# \/oem\/usr\/bin\/lvgl_app_v9/\/oem\/usr\/bin\/lvgl_app_v9/g' /oem/usr/bin/RkLunch.sh

11.4. 其他模式运行

lvgl_app -> usr
lvgl_app 0 -> lv_demo_widgets
lvgl_app 1 -> lv_demo_music
lvgl_app 2 -> lv_demo_benchmark
lvgl_app 3 -> lv_demo_stress
lvgl_app 4 -> usr

lvgl_app 有五种模式

  • lvgl_applvgl_app 4 : 运行 usr 模式,就是默认开启的模式

  • lvgl_app 0 : 运行 lv_demo_widgets 模式, lvgl 的官方示例

  • lvgl_app 1 : 运行 lv_demo_music 模式, lvgl 的官方示例

  • lvgl_app 2 : 运行 lv_demo_benchmark 模式, lvgl 的官方示例

  • lvgl_app 3 : 运行 lv_demo_stress 模式, lvgl 的官方示例

lvgl_app_v9 -> usr
lvgl_app_v9 -M 0 -> usr
lvgl_app_v9 -M 1 -> lv_demo_widgets
lvgl_app_v9 -M 2 -> lv_demo_music
lvgl_app_v9 -M 3 -> lv_demo_benchmark
lvgl_app_v9 -M 4 -> lv_demo_stress

lvgl_app_v9 有五种模式:

  • lvgl_app_v9lvgl_app_v9 -M 0 : 运行 usr 模式,就是默认开启的模式

  • lvgl_app_v9 -M 1 : 运行 lv_demo_widgets 模式, lvgl 的官方示例

  • lvgl_app_v9 -M 2 : 运行 lv_demo_music 模式, lvgl 的官方示例

  • lvgl_app_v9 -M 3 : 运行 lv_demo_benchmark 模式, lvgl 的官方示例

  • lvgl_app_v9 -M 4 : 运行 lv_demo_stress 模式, lvgl 的官方示例

lv_demo_widgets:

未找到图片

lv_demo_music:

未找到图片

lv_demo_benchmark:

未找到图片

lv_demo_stress:

未找到图片

11.5. 编程指导

除了使用 lvgl_app_v9 外,还能使用 C语言 framebuffer 编程来控制屏幕

下面是示例

#include <stdio.h>
#include <sys/types.h>              //open需要的头文件
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>         //write
#include <sys/types.h>
#include <sys/mman.h>               //mmap  内存映射相关函数库
#include <stdlib.h>         //malloc free 动态内存申请和释放函数头文件
#include <string.h>
#include <linux/fb.h>
#include <sys/ioctl.h>

//32位的颜色
#define Black       0x00000000
#define White       0xffFFFFFF
#define Red         0xffFF0000
#define Green       0xff00ff00
#define Blue        0xff99ffff

int fd;
unsigned int *fb_mem  = NULL;       //设置显存的位数为32位
struct fb_var_screeninfo var;
struct fb_fix_screeninfo fix;

int main(void)
{
    unsigned int i;
    int ret;

    /*--------------第一步--------------*/
    fd = open("/dev/fb0",O_RDWR);                   //打开framebuffer设备
    if(fd == -1){
        perror("Open LCD");
        return -1;
    }
    /*--------------第二步--------------*/

    //获取屏幕的可变参数
    ioctl(fd, FBIOGET_VSCREENINFO, &var);
    //获取屏幕的固定参数
    ioctl(fd, FBIOGET_FSCREENINFO, &fix);

    //打印分辨率
    printf("xres= %d,yres= %d \n",var.xres,var.yres);
    //打印总字节数和每行的长度
    printf("line_length=%d,smem_len= %d \n",fix.line_length,fix.smem_len);
    printf("xpanstep=%d,ypanstep= %d \n",fix.xpanstep,fix.ypanstep);

    /*--------------第三步--------------*/

fb_mem = (unsigned int *)mmap(NULL, var.xres*var.yres*4,            //获取显存,映射内存
            PROT_READ |  PROT_WRITE, MAP_SHARED, fd, 0);

    if(fb_mem == MAP_FAILED){
        perror("Mmap LCD");
        return -1;
    }

    memset(fb_mem,0xff,var.xres*var.yres*4);                //清屏
    sleep(1);
    /*--------------第四步--------------*/
    //将屏幕全部设置成蓝色
    for(i=0;i< var.xres*var.yres ;i++)
        fb_mem[i] = Red;
    sleep(2);
    memset(fb_mem,0x00,var.xres*var.yres*4);                //清屏

    munmap(fb_mem,var.xres*var.yres*4); //映射后的地址,通过mmap返回的值
    close(fd);                      //关闭fb0设备文件
    return 0;
}
  • 交叉编译

arm-rockchip830-linux-uclibcgnueabihf-gcc framebuffer.c -o framebuffer
  • 将文件传输到板子上

  • 设置程序的权限

  • 运行程序

chmod 777 framebuffer
./framebuffer

可以看到屏幕先变白,1秒后变成红色,2秒后变成黑色