| **银杏科技有限公司旗下技术文档发布平台** |||| |技术支持电话|**0379-69926675-801**||| |技术支持邮件|Gingko@vip.163.com||| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | V1.0 | 2020-12-4 | yang | 初次建立 | ===== 实验十四:lv_switch开关 ===== ==== 一、开关 ==== 复选框开关可用于打开/关闭某物,实现的效果与选中使能状态下的按钮类似。它看起来像一个小滑块。 开关由以下部分组成: * **LV_SWITCH_PART_BG** : 主要部分 * **LV_SWITCH_PART_INDIC** :指示器(虚拟部分) * **LV_SWITCH_PART_KNOB** :旋钮(虚拟部分) 小部件和样式的工作原理与滑块相同。阅读其文档以获取详细说明。 ==== 二、改变状态 ==== 开关的状态可以通过点击它来改变,也可以使用函数 **lv_switch_on(switch, LV_ANIM_ON/OFF)、lv_switch_off(switch, LV_ANIM_ON/OFF)、lv_switch_toggle(switch, LV_ANOM_ON/OFF)** 来改变开关状态。 若想改变开关状态切换时的动画速度,可以通过 **lv_switch_set_anim_time(switch, anim_time)** 进行调整。 ==== 三、事件 ==== 除通用事件外,交换机还会发送以下特殊事件: * **LV_EVENT_VALUE_CHANGED** 当开关更改状态时发送。 * **LV_KEY_UP,LV_KEY_RIGHT** 打开滑块。 * **LV_KEY_DOWN,LV_KEY_LEFT** 关闭滑块。 {{ :icore4t:icore4t_rtt_lvgl_14_1.gif?direct |}} #include /* 操作GPIO加载头文件 */ #define LED0_PIN GET_PIN(A, 10) /* iCore4T LED引脚为PA10 */ lv_obj_t * label; /* 先定义标签label */ lv_obj_t *sw1; /*定义标签label */ static void event_handler(lv_obj_t * obj, lv_event_t event) /* 回调函数 */ { if(event == LV_EVENT_VALUE_CHANGED) { /* 按键状态切换的话 */ if(lv_switch_get_state(sw1) == false){ /* 判断开关状态 */ rt_pin_write(LED0_PIN, PIN_HIGH); lv_label_set_text(label, "LED off"); /* 更新标签内容 */ }else{ rt_pin_write(LED0_PIN, PIN_LOW); lv_label_set_text(label, "LED on"); } } } void lv_gui_run(void){ lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */ rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); /* 设置LED为推挽输出 */ rt_pin_write(LED0_PIN, PIN_HIGH); /* LED默认关闭 */ sw1 = lv_switch_create(lv_scr_act(), NULL); /* 创建开关 */ lv_obj_align(sw1, NULL, LV_ALIGN_CENTER, 0, 0); /* 设置开关位置 */ lv_obj_set_event_cb(sw1, event_handler); /* 设置回调函数 */ lv_obj_set_size(sw1, 30, 20); /* 设置开关尺寸 */ lv_switch_off(sw1,LV_ANIM_OFF); /*设置开关状态*/ label = lv_label_create(lv_scr_act(), NULL); /* 创建标签 */ lv_label_set_text(label, "LED off"); /* 设置标签默认内容 */ lv_obj_align(label, sw1, LV_ALIGN_OUT_LEFT_MID, -10, 0); /* 设置标签位置 */ }