| **银杏科技有限公司旗下技术文档发布平台** |||| |技术支持电话|**0379-69926675-801**||| |技术支持邮件|Gingko@vip.163.com||| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | V1.0 | 2020-11-30 | yang | 初次建立 | ===== 实验十:lv_led指示灯 ===== ==== 一、LED ==== LED 是矩形(或圆形)的对象。它的亮度可以调节。亮度降低时,LED 的颜色会变暗。 LED 只有一个主要部分,称为 **LED LV_LED_PART_MAIN** ,它使用了所有典型的背景样式属性。 ==== 二、开关控制 ==== 使用 **lv_led_on(led)** 和 **lv_led_off(led)** 可以控制LED的开关状态,函数 **lv_led_toggle(led)** 可以实现LED在**ON** 和 **OFF** 状态之间切换。 {{ :icore4t:icore4t_rtt_lvgl_10_1.gif?direct |}} void lv_gui_run(void) { lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */ label = lv_label_create(lv_scr_act(), NULL); /* 创建标签 */ lv_label_set_text(label, "LED1"); /* 设置标签文本 */ lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, 0); /* 中心对齐 */ lv_obj_t * led1 = lv_led_create(lv_scr_act(), NULL); /* 创建LED */ lv_obj_align(led1, label, LV_ALIGN_OUT_RIGHT_MID, 20, 0); lv_led_off(led1); /* 初始LED关闭 */ while(true){ rt_thread_mdelay(1000); lv_led_toggle(led1); /* 翻转LED状态 */ } } ==== 三、亮度控制 ==== LED 除了亮灭两种状态外,还可以使用函数** lv_led_set_bright(led, bright)** 设置LED的亮度,亮度值 **bright** 应介于 0(最暗)和 255(最亮)之间。 {{ :icore4t:icore4t_rtt_lvgl_10_2.png?direct |}} void lv_gui_run(void) { lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */ lv_obj_t * led1 = lv_led_create(lv_scr_act(), NULL); /* 创建LED1 */ lv_obj_align(led1, NULL, LV_ALIGN_CENTER, -160, 0); /* 相对位置 */ lv_led_off(led1); /* 关闭LED */ lv_obj_t * led2 = lv_led_create(lv_scr_act(), led1); /* 创建LED2 */ lv_obj_align(led2, NULL, LV_ALIGN_CENTER, -80, 0); /* 相对位置 */ lv_led_set_bright(led2, 120); /* 设置亮度值 */ lv_obj_t * led3 = lv_led_create(lv_scr_act(), led1); /* 创建LED3 */ lv_obj_align(led3, NULL, LV_ALIGN_CENTER, 0, 0); /* 相对位置 */ lv_led_set_bright(led3, 180); /* 设置亮度值 */ lv_obj_t * led4 = lv_led_create(lv_scr_act(), led1); /* 创建LED4 */ lv_obj_align(led4, NULL, LV_ALIGN_CENTER, 80, 0); /* 相对位置 */ lv_led_set_bright(led4, 240); /* 设置亮度值 */ lv_obj_t * led5 = lv_led_create(lv_scr_act(), led1); /* 创建LED5 */ lv_obj_align(led5, NULL, LV_ALIGN_CENTER, 160, 0); /* 相对位置 */ lv_led_on(led5); /* 打开LED */ } ==== 四、事件 ==== LED 支持通用事件,下面的例子就是将iCore4T板载LED与LED对象联系起来,通过点击LED对象或者标签来控制板载LED的亮灭,同时更新标签内容。 {{ :icore4t:icore4t_rtt_lvgl_10_3.gif?direct |}} #include #define LED0_PIN GET_PIN(A, 10) /* 定义iCore4T的LED引脚 */ lv_obj_t * label; lv_obj_t * led1; static void event_handler(lv_obj_t * obj, lv_event_t event) /* 回调函数 */ { if(event == LV_EVENT_PRESSED) { /* 按键状态切换的话 */ if(rt_pin_read(LED0_PIN) == PIN_LOW ){ /* 切换LED状态 */ rt_pin_write(LED0_PIN, PIN_HIGH); lv_label_set_text(label, "LED off"); /* 更新标签内容 */ lv_led_off(led1); /* 更新LED状态 */ }else{ rt_pin_write(LED0_PIN, PIN_LOW); lv_label_set_text(label, "#ff0000 LED on#"); /* 更新标签内容并设为红色 */ lv_led_on(led1); } } } 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默认关闭 */ label = lv_label_create(lv_scr_act(), NULL); lv_label_set_text(label, "LED off"); lv_obj_set_click(label, true); /* 开启标签点击使能 */ lv_label_set_recolor(label, true); /* 开启标签重着色 */ lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, 0); led1 = lv_led_create(lv_scr_act(), NULL); /* 创建led对象 */ lv_obj_align(led1, label, LV_ALIGN_CENTER, 60, 0); lv_led_off(led1); lv_obj_set_event_cb(label, event_handler); /* 添加回调函数 */ lv_obj_set_event_cb(led1, event_handler); /* led对象与标签对象使用同一回调函数 */ }