620|2

1418

帖子

3

资源

版主

【平头哥RVB2601创意应用开发】LVGL 水平滚动显示 [复制链接]

本帖最后由 lugl4313820 于 2022-3-14 13:12 编辑

 【平头哥RVB2601创意应用开发】MP3播放器 - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

【平头哥RVB2601创意应用开发】开箱+详细图片分享 - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn)    

     LVGL(轻巧而多功能的图形库)是一个免费的开放源代码图形库,它提供创建具有易于使用的图形元素,精美的视觉效果和低内存占用的嵌入式GUI所需的一切

      LVGL的作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor,LVGL用C语言编写,以实现最大的兼容性(与C ++兼容),模拟器可在没有嵌入式硬件的PC上启动嵌入式GUI设计,同时LVGL作为一个图形库,它自带着接近三十多种小工具可以供开发者使用。这些强大的构建块按钮搭配上带有非常丝滑的动画以及可以做到平滑滚动的高级图形,同时兼具着不高的配置要求以及开源属性,显著的优势使得LVGL蔚然成风,成为广大开发者在选择GUI时的第一选择。

 主要特性

  • 强大的构建块,如按钮,图表,列表,滑块,图像等。
  • 高级图形动画,抗锯齿,不透明度,平滑滚动
  • 各种输入设备,如触摸板、鼠标、键盘、编码器等
  • 多语言支持与UTF-8编码
  • 多显示器支持,即使用更多的TFT,单色显示器同时
  • 完全可定制的图形元素与css类样式
  • 硬件独立与任何微控制器或显示器使用
  • 可扩展,使用少量内存(64kb Flash, 16kb RAM)
  • 支持操作系统、外部内存和GPU,但不是必需的
  • 单帧缓冲操作,甚至与高级图形效果
  • 用C编写的最大兼容性(c++兼容)
  • 模拟器在没有嵌入式硬件的PC上开始嵌入式GUI设计
  • 绑定到MicroPython
  • 教程,例子,快速GUI设计的主题
  • 文档可以在线和PDF格式获取
  • 麻省理工学院许可下的免费和开源

     官方提供的ch2601_gui已经给移植好了lvgl。虽然我用原生的spi驱动好了板载的128*64,但是看到lvgl后,感觉这个库非常强大。但是以前没有接触过,所以这几天反复看了一些教程。第一是上B站看视频,我这里感收获最多的是这个:LVGL开源GUI零基础入门课程(韦东山·监制) 教程基于lvgl v8.2版本,课程适配多个平台、多款板子(Linux单片机GUI、littleVGL教程)_哔哩哔哩_bilibili。这个教程我明白demo里面的lable标签是如何初始化和基本的设置。

下面就标签(lable)的显示分享如下:

1、首先要引入头文件:

     lvgl.h 这个好比是lvgl的总管吧,好比stm32f10x.h。

     lv_label.h 如果要使用lable,就得把这个头文件包含进来。

2、初始化lvgl任务函数:

static void gui_lvgl_task(void *arg)
{
    lv_init(); //初始化
    /*Initialize for LittlevGL*/
    oled_init(); //oled的初始、硬件

    gui_label_create();//显示初始图像 
    while (1) {
        /* Periodically call the lv_task handler.
         * It could be done in a timer interrupt or an OS task too.*/
        lv_task_handler();
        aos_msleep(5);
        lv_tick_inc(1);
    }
}

3、标签创建函数:

static void gui_label_create(void)
{
    lv_obj_t *label1 = lv_label_create(lv_scr_act(), NULL); //创建lable对象 labe1
    lv_label_set_long_mode(label1, LV_LABEL_LONG_BREAK);     /*显示模式固定*/ 
	lv_label_set_align(label1, LV_LABEL_ALIGN_CENTER);       /*居中显示*/
	lv_obj_set_pos(label1, 0, 0);                            /*显示的起始坐标*/                  
	lv_obj_set_size(label1, 128, 30);                       /*显示框的大小*/
    lv_label_set_text(label1,"RISC-V\nRVB2601");            /*显示标签的内容*/
    lv_obj_set_width(label1, 128);                          /*设置显示的宽度*/
    lv_obj_align(label1, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);  /*靠项端居中显示*/
	
    lv_obj_t * label3 = lv_label_create(lv_scr_act(), NULL);
    lv_label_set_long_mode(label3, LV_LABEL_LONG_SROLL_CIRC);     /*轮动显示*/
    lv_obj_set_width(label3, 150);
    lv_label_set_text(label3, "Hello EEWOLRD,2022-03-11!");
    lv_obj_align(label3, NULL, LV_ALIGN_CENTER, 0, 20);           

}

4、动态显示时间:

static void get_time_task(void *arg)
{
	csi_rtc_time_t this_time;
	init_my_rtc();  //初始化RTC
	label2 = lv_label_create(lv_scr_act(), NULL); //创建lable对象 labe1
	lv_label_set_long_mode(label2, LV_LABEL_ALIGN_AUTO);     /*显示模式*/ 
	lv_label_set_align(label2, LV_LABEL_ALIGN_CENTER);       /*Center aligned lines*/
	lv_obj_set_pos(label2,0,26);
	lv_obj_set_width(label2, 128);
	//lv_label_set_text_fmt(label2,"time:%d",t);
	lv_obj_align(label2, NULL, LV_ALIGN_CENTER, 0, 5);
	while(1){
		csi_rtc_get_time(&g_rtc, &this_time);  //获取时间
		aos_msleep(1);
        //动态显示时间
		lv_label_set_text_fmt(label2,"%d-%02d-%02d %02d:%02d:%02d",this_time.tm_year+1900,this_time.tm_mon,this_time.tm_mday,this_time.tm_hour,this_time.tm_min,this_time.tm_sec);
		aos_msleep(5);
		lv_tick_inc(1);
	}
}

5、main函数创建两个任 一个为显示滚动标签,一个为显示实时时间:

int main(void)
{
    board_yoc_init();
    aos_task_new("gui", gui_lvgl_task, NULL, 10 * 1024); //显示标签,平行移动标签
	aos_task_new("rtc",get_time_task,NULL,10*1024);      //显示实时RTC时间
    return 0;
}

RVB260的功能强大,LVGL也功能强大,组合起来功能更加强大,我也是刚接触不久,只能说碰到皮毛,后面还需要继续努力的学习。也希望跟坛友们多交流学习。


 


回复

9784

帖子

21

资源

版主

这个不错

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复

5066

帖子

236

资源

管理员

其他可以也要搞基于lvgl搞作品的可以看过来

 

 

PS:把你的标签换成了“ 经验分享”,“作品提交”是最后提交完整作品的时候用的


回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    推荐帖子
    mos管控制电池充放电

    图中,三个相同的mos管的漏极连到同一个节点,如果三个mos管都导通的话,那个节点的电压按那个的算呢?谢谢!!!

    【转帖】五点开关电源设计时应注意的事项

    现在我们的生活可谓是离不开电源,照明需要电源,看电视需要电源,空调需要电源……所以如果我们在装修新房子最不能忽略的东西就 ...

    F28377 2P2Z(PID)设置与使用

    2P2Z是比较常用的电源环路补偿算法,这里对它的使用做一个简单的总结,便于后续使用 首先需要申明结构体: //CNTL2P2Z vo ...

    温度问题为您解决(五)通过可扩展的温度传感器实现高效的冷链管理

    在前几篇文章中,我们已经就温度传感器的基本原理进行了介绍。为了保持营养并确保质量和产品安全,制造商规定了包装和易腐商品( ...

    【TI荐课】#[高精度实验室] 运算放大器 : 2 输入失调电压与输入偏置电流#

    //training.eeworld.com.cn/TI/show/course/1940

    【GD32F350/GD32E103】使用开源工具链构建基于VSF的WebUSB DFU

    WebUSB DFU是一种USB固件更新协议,在Win10、安卓、MacOS等支持WebUSB的系统上都可通过Chrome浏览器使用。 构建过程: ...

    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表