ITPub博客

首页 > 嵌入式/内核开发 > 嵌入式/内核开发 > 《LVGL开发指南 V1.0(G4电机开发板专用)》第十八章 开关部件(lv_switch)

《LVGL开发指南 V1.0(G4电机开发板专用)》第十八章 开关部件(lv_switch)

原创 嵌入式/内核开发 作者:正点原子 时间:2026-06-12 09:48:14 0 删除 编辑

第十八章 开关部件(lv_switch)


       在GUI界面中,我们经常用到开关部件,它就相当于一个当前值只有0和1的滑块部件。

       本章节将分为以下几个小节:

       18.1 开关部件的组成

       18.2 开关部件的相关知识

       18.3 开关部件的API函数

       18.4 开关部件的实验


        18.1 开关部件的组成

       开关部件由三个部分组成:主体背景、指示器和旋钮,示意图如下:


图18.1.1 开关部件组成部分


       各组成部分的相关枚举如下所示:

       ① 主体背景LV_PART_MAIN;

       ② 指示器LV_PART_INDICATOR;

       ③ 旋钮LV_PART_KNOB。

       关于部件样式设置的内容,请大家参考6.4.4章节。


        18.2 开关部件的相关知识


       18.2.1 获取开关部件状态

       用户可调用lv_obj_has_state函数获取开关的当前状态,示例如下:

lv_obj_has_state(switch1, LV_STATE_CHECKED);  /* 返回true:开启状态 */

       在上述函数中,我们判断开关是否为开启状态,如果已经开启,则返回true,否则返回false;


       18.2.2 设置开关部件的状态

       在默认情况下,开关创建出来之后,其是关闭的状态,如果用户需要添加开关的状态,可调用以下函数(用于打开开关):

lv_obj_add_state(switch1, LV_STATE_CHECKED);

       在上述函数中,我们将开关设置为开启的状态。

       如果用户想清除开关的状态,可调用以下函数(用于关闭开关):

lv_obj_clear_state(switch1, LV_STATE_CHECKED);

       注意:当开关状态发生变化时,其触发的事件类型是LV_EVENT_VALUE_CHANGED。


        18.3 开关部件的API函数

       lv_switch_create函数

       创建开关部件,该函数原型如下所示:

lv_obj_t *lv_switch_create(lv_obj_t *parent);

       该函数的形参,如表18.3.2所示:


表18.3.2 lv_switch_create函数形参描述


       返回值:指向开关部件的指针。


        18.4 开关部件的实验


       18.4.1 硬件设计


       1. 例程功能

       本实验主要测试开关部件API函数的使用,实验现象:开机后,屏幕上显示一个开关,用户可以通过KEY2来切换开关的状态。与此同时,LED0闪烁,提示系统正在运行。

       该实验的完整源码,请参考《LVGL例程15 lv_switch(开关)》例程,路径:A盘→4,程序源码 →3,扩展例程 →3,LVGL例程。


       18.4.2 软件设计


       18.4.2.1 程序流程图

       本实验的程序流程图,如下图18.4.2.1.1所示:


图18.4.2.1.1 开关部件实验流程图


       18.4.2.2 程序解析

       关于LVGL的用户代码,我们都是在lv_mainstart.c文件中编写的,本实验的源码如下所示:

/**************************** 第一部分 开始 ****************************/
/**
 * @brief  LVGL演示
 * @param  无
 * @return 无
 */
void lv_mainstart(void)
{
    lv_example_switch();       /* 开关 */
}
/**************************** 第一部分 结束 ****************************/
 
/**************************** 第二部分 开始 ****************************/
/**
 * @brief  开关示例
 * @param  无
 * @return 无
 */
static void lv_example_switch(void)
{
/* 创建“组” */
    lv_group_t *g = lv_group_create();
    lv_indev_set_group(indev_keypad, g);
    
    /* 标签 */
    lv_obj_t *label_cool = lv_label_create(lv_scr_act());    /* 创建标签 */
lv_label_set_text(label_cool, "Cool");                   /* 设置文本内容 */
/* 设置字体 */
    lv_obj_set_style_text_font(label_cool, &lv_font_montserrat_32, 0);   
    lv_obj_align(label_cool, LV_ALIGN_CENTER, 0, -30 );      /* 设置位置 */
 
    /* 开关 */
    lv_obj_t *switch_cool = lv_switch_create(lv_scr_act());  /* 创建开关 */
    lv_obj_set_size(switch_cool,80, 40 );                    /* 设置大小 */
    lv_obj_align(switch_cool, LV_ALIGN_CENTER, 0, 20 );      /* 设置位置 */
 
    lv_group_add_obj(g, switch_cool);         /* 添加到组 */
}
/**************************** 第二部分 结束 ****************************/

       上述源码可分为以下两个部分:

       ① lv_mainstart接口函数。在该函数中,我们调用了标签部件和开关部件相关的示例函数;

       ② 开关功能的实现。


       18.4.3 下载验证

       把工程编译并下载到我们的开发板中,运行效果如图18.4.3.1所示:


图18.4.3.1 开关部件实验

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040860/viewspace-3173589/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-30

  • 博文量
    588
  • 访问量
    763821