| **银杏科技有限公司旗下技术文档发布平台** ||||
|技术支持电话|**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对象与标签对象使用同一回调函数 */
}