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

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

实现效果:

使用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 - 龙芯嵌入式开发环境软件

文件 -> 新建项目向导

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

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

1.配置文件

打开bsp.h文件定义宏

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

2.修改分辨率大小

文件:main.c

文件:lv_conf.h

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);//创建按钮1lv_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);//创建按钮2lv_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横屏,龙芯只自带了竖屏触摸驱动,获取触点坐标与实际不符合,还需修改。(自己修改触摸驱动即可)

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

  1. 龙芯1b(LS1B200)使用LVGL7.0.1组件 使用中文的坑

    问题 龙芯1b(LS1B200),使用LVGL库.无法正常显示中文字体问题. 问题查找 1.查看配置文件lvgl-7.0.1\lv_conf.h 在文件中发现龙芯已经帮助我们使用宏定义配置好了中文字库 ...

  2. 龙芯1b(LS1B200)使用LVGL7.0.1组件 按钮矩阵 实现简易计算器

    需求:通过按钮点击实现加减乘除的简易计算器. 1.我们使用矩阵按钮(lv_btnmatrix)快速创建布局,文本框(lv_textarea)显示结果. 2.在按钮回调中将点击结果加入文本框上显示. 矩 ...

  3. 龙芯1b(LS1B200)使用LVGL7.0.1组件的滑杆控件控制三色RGB灯的亮度

    需求:通过三个滑杆,分别控制RGB三色灯的红绿蓝颜色.并显示0-100%的滑动数值 在这里我们使用LVGL库的滑杆 (lv_slider)组件来控制数值,并绑定回调事件,在回调事件中控制RGB灯的颜色 ...

  4. 【龙芯1B】:74HC595数码管或74HC138数码管程序开发

    学习目标:解决龙芯1B:74HC595或74HC138数码管显示问题 首先我们要知道数码管的原理:以74HC595为例,74HC595是具有三态输出功能(即具有高电平.低电平和高阻抗三种输出状态)的门 ...

  5. 【龙芯1B】:有源蜂鸣器例程

    前言 大家对龙芯1B200有任何问题都可以私信我,大家的关注才是我不断更新的动力. 可能私信不能很及时的回,大家稍微谅解一下,看到立马就回. 一.蜂鸣器介绍 这里简单的介绍一下大家众所周知的蜂鸣器,蜂 ...

  6. 【国产之光】:龙芯1B(嵌入式方向)

    自从嵌入式1B的出产,我就开始了解了,毕竟是嵌入式方向的工程师,不管什么岗位都爱国,不过的确国产的一出自然想去看看国产之光,也希望祖国芯片事业越来越好.(作为一名博主当然说这些就像说废话)那么我们开始 ...

  7. 【龙芯1B】:龙芯1B200字号修改程序(基于龙芯1B200)

    嵌入式芯片与系统设计竞赛开发板 项目场景:   由于龙芯的资料很少,于是想普及一下龙芯1B的字号修改例程.希望对大家有所帮助,如有不妥之处,可联系博主!一切的资源都是为了传播学习,让大家都能学会,这才 ...

  8. 【龙芯1B】:LCD显示图片文字背景色前景色、小创语音控制lcd显示、数码管倒计时

    项目场景:     闲来无事,写了几个关于嵌入式技能大赛的任务.希望对大家有所帮助.本文开发板由百科荣创的龙芯1b开发板支持,关于嵌入式技能大赛的开发板.  LCD显示图片&文字&背景 ...

  9. 龙芯1B核心板QT4环境下,phonon+phonon_mplayer+mplayer,实现音频控制播放

    应用Phonon框架实质上分4个部分,你的程序,Phonon库,Phonon后端插件(phonon_backend),真正的后端. Phonon其实什么都不干,他只是提供了一套API接口,这套接口可以 ...

最新文章

  1. 浅谈Chatbot的架构模型和响应机制
  2. 在这个什么都看脸的时代,如何用 GUI 提高 python 程序的颜值?
  3. Excel-开发者工具(WPS)
  4. Python学习之 !/usr/bin/python 和 !/usr/bin/env python区别
  5. 合并两个已经排好序的不等长的数组
  6. Plastic SCM的介绍
  7. 在Java 中 使用 AWS SNS 来发送短信的例子
  8. Maven的下载安装配置教程(详细图文)
  9. wpf-折线图绘制2-oxyplot-1
  10. ASP.NET2005各类教程实例1[视频下载]
  11. matlab如何定义dmod函数,matlab中的dmod函数
  12. 《NLP汉语自然语言处理原理与实践》郑捷书中代码
  13. element el-table 在IE浏览器 表头失效问题
  14. 2021-2025年中国军用浮桥行业市场供需与战略研究报告
  15. 讯飞输入法电脑版语音识别方法
  16. 本地代码上传到gitlab
  17. Linux操作系统下/etc/hosts文件配置方法(域名映射)
  18. MFC中英文切换实现过程中遇到的问题
  19. c语言四大湖问题答案,上海交通大学C++课程课件.PPT
  20. 三菱PLC手轮控制功能

热门文章

  1. Dubbo Diretory
  2. rk3308b-cc-plus编译过程、遇到的所有问题及解决方案
  3. Effie for Mac(简约的跨平台写作软件)
  4. axios原生请求设置请求头
  5. 限幅电路和钳位电路 利用二极管的单向导电性
  6. python之父guido-Python之父Guido谈Python的未来
  7. 软件项目计划书格式 [转]
  8. 飞腾FT-2000/4开发板上移植Ubuntu18.04.5且更换飞腾内核4.19.8教程
  9. 什么是VIE架构?如何搭建VIE架构?
  10. vivo手机光环助手下载游戏怎么打不开_全新5G自拍手机,vivo S6系列正式发布