Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
卖小麦←_←
rt-thread
提交
21ef60c8
R
rt-thread
项目概览
卖小麦←_←
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
21ef60c8
编写于
10月 18, 2021
作者:
mysterywolf
提交者:
GitHub
10月 18, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #58 from mysterywolf/lvgl
[stm32][l745] add lvgl demo
上级
abf88128
ff4e819d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
154 addition
and
0 deletion
+154
-0
bsp/stm32/stm32l475-atk-pandora/applications/lvgl_demo.c
bsp/stm32/stm32l475-atk-pandora/applications/lvgl_demo.c
+154
-0
未找到文件。
bsp/stm32/stm32l475-atk-pandora/applications/lvgl_demo.c
0 → 100644
浏览文件 @
21ef60c8
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-10-17 Meco Man First version
*/
#include <rtthread.h>
#include <lvgl.h>
#include <drv_lcd.h>
#define DBG_TAG "LVGL"
#define DBG_LVL DBG_INFO
#include <rtdbg.h>
#ifndef LV_THREAD_STACK_SIZE
#define LV_THREAD_STACK_SIZE 2048
#endif
#ifndef LV_THREAD_PRIO
#define LV_THREAD_PRIO (RT_THREAD_PRIORITY_MAX*2/3)
#endif
static
void
lv_example_get_started_1
(
void
);
static
void
lv_example_get_started_3
(
void
);
#define MY_DISP_HOR_RES 240
/* 240*240 */
/*A static or global variable to store the buffers*/
static
lv_disp_draw_buf_t
disp_buf
;
/*Static or global buffer(s). The second buffer is optional*/
static
lv_color_t
buf_1
[
MY_DISP_HOR_RES
*
10
];
static
lv_color_t
buf_2
[
MY_DISP_HOR_RES
*
10
];
static
lv_disp_drv_t
disp_drv
;
/*Descriptor of a display driver*/
/*Flush the content of the internal buffer the specific area on the display
*You can use DMA or any hardware acceleration to do this operation in the background but
*'lv_disp_flush_ready()' has to be called when finished.*/
static
void
disp_flush
(
lv_disp_drv_t
*
disp_drv
,
const
lv_area_t
*
area
,
lv_color_t
*
color_p
)
{
lcd_fill_array
(
area
->
x1
,
area
->
y1
,
area
->
x2
,
area
->
y2
,
color_p
);
/*IMPORTANT!!!
*Inform the graphics library that you are ready with the flushing*/
lv_disp_flush_ready
(
disp_drv
);
}
static
void
lvgl_thread
(
void
*
parameter
)
{
lv_init
();
/*Initialize `disp_buf` with the buffer(s). With only one buffer use NULL instead buf_2 */
lv_disp_draw_buf_init
(
&
disp_buf
,
buf_1
,
buf_2
,
MY_DISP_HOR_RES
*
10
);
lv_disp_drv_init
(
&
disp_drv
);
/*Basic initialization*/
/*Set the resolution of the display*/
disp_drv
.
hor_res
=
MY_DISP_HOR_RES
;
disp_drv
.
ver_res
=
MY_DISP_HOR_RES
;
/*Set a display buffer*/
disp_drv
.
draw_buf
=
&
disp_buf
;
/*Used to copy the buffer's content to the display*/
disp_drv
.
flush_cb
=
disp_flush
;
/*Finally register the driver*/
lv_disp_drv_register
(
&
disp_drv
);
lv_example_get_started_1
();
lv_example_get_started_3
();
while
(
1
)
{
lv_task_handler
();
rt_thread_mdelay
(
10
);
}
}
static
int
lvgl_demo_init
(
void
)
{
rt_thread_t
tid
;
tid
=
rt_thread_create
(
"lvgl"
,
lvgl_thread
,
RT_NULL
,
LV_THREAD_STACK_SIZE
,
LV_THREAD_PRIO
,
0
);
rt_thread_startup
(
tid
);
return
0
;
}
INIT_COMPONENT_EXPORT
(
lvgl_demo_init
);
/* ------------------- demo1 ----------------------- */
static
void
btn_event_cb
(
lv_event_t
*
e
)
{
lv_event_code_t
code
=
lv_event_get_code
(
e
);
lv_obj_t
*
btn
=
lv_event_get_target
(
e
);
if
(
code
==
LV_EVENT_CLICKED
)
{
static
uint8_t
cnt
=
0
;
cnt
++
;
/*Get the first child of the button which is the label and change its text*/
lv_obj_t
*
label
=
lv_obj_get_child
(
btn
,
0
);
lv_label_set_text_fmt
(
label
,
"Button: %d"
,
cnt
);
}
}
/**
* Create a button with a label and react on click event.
*/
static
void
lv_example_get_started_1
(
void
)
{
lv_obj_t
*
btn
=
lv_btn_create
(
lv_scr_act
());
/*Add a button the current screen*/
lv_obj_set_pos
(
btn
,
10
,
10
);
/*Set its position*/
lv_obj_set_size
(
btn
,
120
,
50
);
/*Set its size*/
lv_obj_add_event_cb
(
btn
,
btn_event_cb
,
LV_EVENT_ALL
,
NULL
);
/*Assign a callback to the button*/
lv_obj_t
*
label
=
lv_label_create
(
btn
);
/*Add a label to the button*/
lv_label_set_text
(
label
,
"Button"
);
/*Set the labels text*/
lv_obj_center
(
label
);
}
/* ------------------- demo3 ----------------------- */
static
lv_obj_t
*
label
;
static
void
slider_event_cb
(
lv_event_t
*
e
)
{
lv_obj_t
*
slider
=
lv_event_get_target
(
e
);
/*Refresh the text*/
lv_label_set_text_fmt
(
label
,
"%d"
,
(
int
)
lv_slider_get_value
(
slider
));
lv_obj_align_to
(
label
,
slider
,
LV_ALIGN_OUT_TOP_MID
,
0
,
-
15
);
/*Align top of the slider*/
}
/**
* Create a slider and write its value on a label.
*/
static
void
lv_example_get_started_3
(
void
)
{
/*Create a slider in the center of the display*/
lv_obj_t
*
slider
=
lv_slider_create
(
lv_scr_act
());
lv_obj_set_width
(
slider
,
200
);
/*Set the width*/
lv_obj_center
(
slider
);
/*Align to the center of the parent (screen)*/
lv_obj_add_event_cb
(
slider
,
slider_event_cb
,
LV_EVENT_VALUE_CHANGED
,
NULL
);
/*Assign an event function*/
/*Create a label below the slider*/
label
=
lv_label_create
(
lv_scr_act
());
lv_label_set_text
(
label
,
"0"
);
lv_obj_align_to
(
label
,
slider
,
LV_ALIGN_OUT_TOP_MID
,
0
,
-
15
);
/*Align top of the slider*/
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录