littlevGL-如何添加自己程序--2

如何添加自己程序

一、 目的

 前一章移植了开发环境,当前这章节描述如何搭建自己的案列。

二、 描述

对于任何一个UI图像系统而言,它只是一个人机界面图形处理一个逻辑,主要处理的是图像显示,成像效果,输入操作(触摸,鼠标,感应等),以便完成人与机的最直接交互。    

 实际操作中,UI很多工作是功能方面,与实际硬件无关,如图像渲染,各种模块的绘制,比如按键等,这些操作属于功能,而不和具体的平台有关系。如果将这些即在各种设备中实现的UI提取出来,剥离于和硬件平台,独立于外。用户只需要移植必要的和硬件相关的接口,则那些UI可以各种平台公用。
 
 所以无论你是andriod还是qt,还是我们的littlegl,最基本的需要给UI实现一些必要的平台相关的接口,则这些UI系统已经由前人实现的各种功能直接提取用,比如3d动画,比如各种模块等。
 
 对于UI而言,实现的最基本的接口为两大类,一个是当前要依托的显示平台接口,另一个是输入设备接口。这一部分后面有时间会具体描述。
 
 同时会根据平台的设备具体情况,在lv_conf.h中配置一些必要的参数,如显示屏的大小,支持的颜色格式。显示任务刷新的频率等。

在这里插入图片描述

标题

实现的图形系统,大体可以分为上图中的3层。应用层为用户采用各种API实现的方案。这个API主要是由LittlevGL库和用户依托的操作系统的功能函数实现(驱动会加载到操作系统中实现)。
这里的drivers主要填充于操作系统的功能应用中,或LittlevGL的接口函数中。用户在移植LittlevGL时,需要调用LittlevGL的显示和输入设备驱动注册接口函数,即HAL(硬件抽象层)。此部分在后面有时间编写移植部分描述。

三、 实现案例

 打开pc_simulator_sdl_visual_studio工程后,按下“F5”按键会看到以下demo界面。

在这里插入图片描述

 用户想实现自己的程序,比如一个按键显示,那么可以屏蔽掉demo_create()函数,并在此位置调用自己想要实现的按键函数。代码如下:


/*按键的回应事件,即回调函数*/
void BtnEventCb(lv_obj_t * btn, lv_event_t event)
{
	if (event == LV_EVENT_CLICKED) {
		printf("捞金鱼clicked!\r\n");
	}
}

void ButtonTest()
{
	//1、创建一个名字为Button的按钮
	lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL);     /*Add a button the current screen*/
	lv_obj_set_pos(btn, 10, 10);                            /*Set its position*/
	lv_obj_set_size(btn, 100, 50);                          /*Set its size*/
	lv_obj_t * label = lv_label_create(btn, NULL);
	lv_label_set_text(label, "Button");

//2. 配置此button的释放时风格
static lv_style_t style_btn_rel;
lv_style_copy(&style_btn_rel, &lv_style_plain);         /*Initialize from a built-in style*/
style_btn_rel.body.border.color = lv_color_hex3(0x269);//颜色
style_btn_rel.body.border.width = 1;
style_btn_rel.body.main_color = lv_color_hex3(0xADF);
style_btn_rel.body.grad_color = lv_color_hex3(0x46B);
style_btn_rel.body.shadow.width = 4;
style_btn_rel.body.shadow.type = LV_SHADOW_BOTTOM;
style_btn_rel.body.radius = LV_RADIUS_CIRCLE;
style_btn_rel.text.color = lv_color_hex3(0xDEF);

//3. 配置此button的按下风格
static lv_style_t style_btn_pr;                         /*A variable to store the pressed style*/
lv_style_copy(&style_btn_pr, &style_btn_rel);           /*Initialize from the released style*/
style_btn_pr.body.border.color = lv_color_hex3(0x46B);
style_btn_pr.body.main_color = lv_color_hex3(0x8BD);
style_btn_pr.body.grad_color = lv_color_hex3(0x24A);
style_btn_pr.body.shadow.width = 2;
style_btn_pr.text.color = lv_color_hex3(0xBCD);

//4. 装配风格
lv_btn_set_style(btn, LV_BTN_STYLE_REL, &style_btn_rel);    /*Set the button's released style*/
lv_btn_set_style(btn, LV_BTN_STYLE_PR, &style_btn_pr);      /*Set the button's pressed style*/

//5. 给此按键绑定一个响应事件【回调函数】
lv_obj_set_event_cb(btn, BtnEventCb);

}

int main(int argc, char** argv)
{
/Initialize LittlevGL/
lv_init();

/*Initialize the HAL for LittlevGL*/
hal_init();

/*
 * Demo, benchmark, tests and tutorial.
 *
 * Uncomment any one (and only one) of the functions below to run that
 * particular demo, test or tutorial.
 */

//DrawArc();

//ButtonTest(); SliderInit(); ListInit();
ButtonTest();
//demo_create();
//benchmark_create();
//lv_test_theme_1(lv_theme_night_init(210, NULL));
//lv_test_theme_1(lv_theme_night_init(100, NULL));
//lv_test_theme_1(lv_theme_material_init(210, NULL));
//lv_test_theme_1(lv_theme_alien_init(210, NULL));
//lv_test_theme_1(lv_theme_zen_init(210, NULL));
//lv_test_theme_1(lv_theme_nemo_init(210, NULL));
//lv_test_theme_1(lv_theme_mono_init(210, NULL));
//lv_test_theme_1(lv_theme_default_init(210, NULL));
//lv_tutorial_keyboard(kb_indev);

while (1) {
    /* Periodically call the lv_task handler.
    * It could be done in a timer interrupt or an OS task too.*/
    lv_task_handler();
    Sleep(8);       /*Just to let the system breathe */
}

return;

}

标题四、 运行结果

 当用户按下按键时,会打印对应应答信息.

在这里插入图片描述

发布了17 篇原创文章 · 获赞 5 · 访问量 5632

猜你喜欢

转载自blog.csdn.net/weixin_43854435/article/details/100992050