龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验

这篇具有很好参考价值的文章主要介绍了龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由比赛入坑龙芯1b(LS1B200),需要对板上驱动进行开发,使用LVGL库来做UI界面控制驱动。

网上资料难以查找,在本文中记录学习。

实现效果:

龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验

使用LVGL库的基本步骤:

1.硬件和需求设置LV_COLOR_DEPTH,LV_HOR_RES_MAX,LV_VER_RES_MAX等宏。

2.根据你的显示器和输入设备,选择或编写相应的驱动程序,并在你的项目中包含它们。

3.在你的项目中初始化lvgl库,并定期调用lv_task_handler()和lv_tick_inc()函数。

4.使用lvgl提供的各种控件和样式,创建你的用户界面,并设置事件回调函数和动画效果。

LVGL库需要设置好屏幕的分辨率,我使用的是4.3寸LCD横屏的触摸屏(龙芯驱动库只有竖屏,还需要修改驱动)

打开 Embedded IDE for Loongson - 龙芯嵌入式开发环境软件

文件 -> 新建项目向导

龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验
龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验

在创建项目时,main会自动帮我们调用install_3th_libraries 函数。

该函数会帮我们做好初始化LVGL库和LCD屏幕等驱动。我们只需要要在bsp.h文件中定义宏即可使用。

龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验

1.配置文件

打开bsp.h文件定义宏

选择触摸屏驱动,注释XPT2046驱动,定义GT1151驱动

龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验
龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验
龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验
龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验
龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验

2.修改分辨率大小

文件:main.c

龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验

文件:lv_conf.h

龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验

3.代码编写

绘制UI测试

#include "./lvgl-7.0.1/lvgl.h"

/* Declare an event handler function for the button */
static void event_handler(lv_obj_t * obj, lv_event_t event)
{
    if(event == LV_EVENT_CLICKED)
    {
        printf("Clicked\n");
    }
    else if(event == LV_EVENT_VALUE_CHANGED)
    {
        printf("Toggled\n");
    }

}

/* Initialize the button */
void init_button(void)
{

    lv_obj_t * label;

    lv_obj_t * win = lv_win_create(lv_scr_act(), NULL);//创建一个窗口

    
    lv_obj_t * btn1 = lv_btn_create(win, NULL);//创建按钮1
    lv_obj_set_event_cb(btn1, event_handler);
    lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, -40);

    label = lv_label_create(btn1, NULL);//创建标签1 (按钮上的文字)
    lv_label_set_text(label, "Button1");

    lv_obj_t * btn2 = lv_btn_create(win, NULL);//创建按钮2
    lv_obj_set_event_cb(btn2, event_handler);
    lv_obj_align(btn2, NULL, LV_ALIGN_CENTER, 0, 40);
    
    label = lv_label_create(btn2, NULL);//创建标签1 (按钮上的文字)
    lv_label_set_text(label, "Button2");
    
    
    lv_btn_set_checkable(btn2, true);
    lv_btn_toggle(btn2);
    lv_btn_set_fit2(btn2, LV_FIT_NONE, LV_FIT_TIGHT);


}

需要定期调用lv_tick_inc();和lv_task_handler(); LVGL才能正常运行

4.lv_tick_inc 和lv_task_handler函数介绍与调用

lv_task_handler函数

lv_task_handler 函数是 LVGL 的一个任务处理器函数,它用于处理 LVGL 的内部任务,如动画、事件、刷新等。你需要定期调用 lv_task_handler () 函数,可以在以下几种方式中选择一种:

- 在 main 函数中的 while (1) 循环中调用

- 在定时中断中调用 (优先级低于 lv_tick_inc ())

- 在操作系统的任务中调用

调用的周期不需要很严格,但是应该保持在大约 5 毫秒左右,

lv_tick_inc 函数

lv_tick_inc是 LVGL 的一个心跳函数,它用于告诉 LVGL 时间的流逝,从而实现动画和事件的处理。你需要定期调用 lv_tick_inc (tick_period) 函数,并以毫秒为单位告知调用周期。

例如, lv_tick_inc (1) 用于每毫秒调用一次。为了精确地知道经过的毫秒数。

lv_tick_inc 应该在比 lv_task_handler () 更高优先级的例程中被调用 (例如在中断中),即使 lv_task_handler 的执行花费较长时间。

使用 FreeRTOS 时,可以在 vApplicationTickHook 中调用 lv_tick_inc。

//-------------------------------------------------------------------------------------------------
//  定期调用 
//-------------------------------------------------------------------------------------------------
void vApplicationTickHook() {
   /*告诉lvgl已经过去了1毫秒
     在freeRTOS中 我们需要配置FreeRTOSConfig.h配置宏configUSE_TICK_HOOK 1
     然后定义void vApplicationTickHook()函数并调用lv_tick_inc(freeRTOS的tick是1ms);
   */
  lv_tick_inc(1);
}

static void gui_task(void *arg)
{
    unsigned int tickcount;

    for ( ; ; )
    {
        lv_task_handler();//必须调用,否则LVGL将无法正常使用
        vTaskDelay(5);
    }
}


int main(void)
{

    ls1x_drv_init();                    /* Initialize device drivers */

    install_3th_libraries();              /* Install 3th libraies */

    init_button();
    
    xTaskCreate(gui_task,
                     "guiTask",
                     (2*1024),    
                     NULL,
                     20,          
                     &gui_task);//创建UI线程 

    /*
     * Start the tasks running.
     */
    vTaskStartScheduler();

    /* If all is well we will never reach here as the scheduler will now be
     * running.  If we do reach here then it is likely that there was insufficient
     * heap available for the idle task to be created.
     */
    for ( ; ; )
    {
        ;
    }

    return 0;
}

注:由于使用的是4.3LCD横屏,龙芯只自带了竖屏触摸驱动,获取触点坐标与实际不符合,还需修改。(自己修改触摸驱动即可)文章来源地址https://www.toymoban.com/news/detail-481889.html

到了这里,关于龙芯1b(LS1B200)使用LVGL7.0.1组件的初次体验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IS210AEAAH1B 连续输出电流 Arms:1.6

    产品应用: 机器人、新能源、3C、电子设备、广告喷雕设备、激光设备、电子加工、贴标机、线材设备、数控机床、LED设备、印刷机械、食品生产线等 产品规格: 功率:200W 电压等级:220V 产品类型:高级型 安装方式:基板安装 连续输出电流 Arms:1.6 最大输出电流 Arms:5.

    2024年04月27日
    浏览(31)
  • 【3B1B笔记】e的矩阵指数——怎么算?为什么?

    【【官方双语】e的矩阵指数——怎么算?为什么?】 注:本文未记录薛定谔方程及量子力学部分 把不同的式子带入泰勒级数,记作e的指数 对于矩阵的式子来说,为矩阵的乘方和加减运算,但对是否可以推广到无穷存疑 将矩阵 带入该级数,取极限后趋近于 ,差不多是(-1)×单

    2024年02月05日
    浏览(53)
  • 【USRP】产品型号、参数、架构全解析系列 1:B200 / B210 / B200mini / B205mini

    通用软件无线电外设( USRP ) 是由 Ettus Research 及其母公司National Instruments设计和销售的一系列软件定义无线电。USRP 产品系列由Matt Ettus领导的团队开发,被研究实验室、大学和业余爱好者广泛使用。 大多数 USRP 通过以太网线连接到主机,基于主机的软件使用该链路来控制 USRP

    2024年02月10日
    浏览(35)
  • Hbase-技术文档-java.net.UnknownHostException: 不知道这样的主机。 (e64682f1b276)

            在使用spring-boot操作habse的时候,在对habse进行操作的时候出现这个问题。。 报错信息如下: java.net.UnknownHostException: e64682f1b276 错误 java.net.UnknownHostException: 不知道这样的主机 (e64682f1b276) 意味着你的程序无法解析对应的主机名 (host name)。这可能是因为你提供的主机名无

    2024年02月11日
    浏览(39)
  • Segment Anything论文翻译,SAM模型,SAM论文,SAM论文翻译;一个用于图像分割的新任务、模型和数据集;SA-1B数据集

    论文链接: https://arxiv.org/pdf/2304.02643.pdf https://ai.facebook.com/research/publications/segment-anything/ 代码连接:https://github.com/facebookresearch/segment-anything 论文翻译: http://t.csdn.cn/nnqs8 https://blog.csdn.net/leiduifan6944/article/details/130080159 本文提出Segment Anything (SA)项目:一个用于图像分割的新任务

    2023年04月19日
    浏览(51)
  • 通过USRP B200软件无线电SDR方式解码无人机坐标飞手坐标,实现无人机探测侦测监控,继而实现反制压制

    环境 详情 电脑 联想 系统 Windows gnuradio gnuradio-3.7.5 uhd UHD-Mirror-release_003_009_002 USRP 型号 USRP-B200-mini          无人机的应用领域越来越广泛,但是其目前大范围广泛使用给安全、安保和隐私带来了许多风险。例如,攻击方可能会使用无人机进行监视、运输非法物品,或通过侵

    2024年02月09日
    浏览(81)
  • linux(全志F1C100S/F1C200S)系列02:移植LCD st7789驱动,LVGL8.3移植

    st7789V中指定了rst与dc引脚,pio 4 3 对应PE3,pio 4 5对应PE5; 详细配置方式见链接:全志 :gpio使用 需要根据自身硬件配置。 Tips:更改 spi-max-frequency = 32000000 - spi-max-frequency = 100000000; 和 fps = 30; 改为 fps = 60; 感谢楼下老哥提示。 rotate = 90;根据屏幕方向更改。 只需要更改下面的三个地

    2024年01月18日
    浏览(67)
  • [LVGL]:MACOS下使用LVGL模拟器

    查看sdl2安装位置: 2.1 克隆仓库 仓库地址为:https://github.com/lvgl/lv_port_pc_vscode 2.2 修改makefile 打开根目录下的Makefile: 将lv_driver修改为sdl2 修改INC和LDIBS,链接SDL2 2.3编译与运行

    2024年04月27日
    浏览(41)
  • 使用74LS161设计任意进制计数器

    可预置的四位二进制同步计数器74LS161具有并行预置数据、清零、置数、计数和保持功能,并且有进位输出端,可以串接计数器使用。引脚排列如图7-1所示,功能表见7-2所示。 图7-1 74LS161引脚排列 从下表7-2中可知,该计数器具有信号清零端 ,信号使能端CEP、CET,信号置数端

    2024年02月02日
    浏览(65)
  • Linux系统知识1—Linux命令基础格式,什么是命令,命令行,ls命令入门,ls命令的参数和选项,-a,-l -h选项的使用及组合使用

    .命令行:即 Linux 终端( Terminal ),是一种命令提示符页面。以纯\\\"字符\\\"的形式操作系统,可以使用各种字符化命令对系统发出操作指令。 .命令:即 Linux 程序。一个命令就是一个 Linux 的程序。命令没有图形化页面,可以在命令行(终端中)提供字符化的反馈。 无论

    2024年02月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包