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_app
和lvgl_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_v9
和lvgl_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秒后变成黑色