32. LED部件

一、LED部件

  LED 部件常用于指示硬件的状态,它的亮度与背景颜色深度有关,亮度越低,对应的背景颜色越深。LED 部件只有一个组成部分:主体LV _PART_MAIN)。

  LVGL 官方提供了一些与 LED 部件相关 API。

lv_obj_t * lv_led_create(lv_obj_t * parent);                    // 创建LED部件
void lv_led_set_color(lv_obj_t * obj, lv_color_t color);        // 设置LED部件主体颜色
void lv_led_set_brightness(lv_obj_t * obj, uint8_t bright);     // 设置LED部件的亮度
uint8_t lv_led_get_brightness(const lv_obj_t * obj);            // 获取LED部件的亮度
void lv_led_on(lv_obj_t * led);                                 // 打开LED
void lv_led_off(lv_obj_t * led);                                // 关闭LED
void lv_led_toggle(lv_obj_t * obj);                             // 翻转LED的状态

  我们可以通过 lv_led_create() 函数 创建 LED 部件

/**
 * @brief 创建LED部件
 * 
 * @param parent 指向父部件的指针
 * @return lv_obj_t* 指向LED部件的指针
 */
lv_obj_t * lv_led_create(lv_obj_t * parent);

  在默认的情况下,LED 部件的 主体颜色蓝色,如果用户改变 LED 主体颜色,可调用 lv_led_set_color() 函数进行设置。

/**
 * @brief 设置LED的颜色
 * 
 * @param obj 指向LED部件的指针
 * @param color 颜色值
 */
void lv_led_set_color(lv_obj_t * obj, lv_color_t color);

  LED 部件的亮度与颜色深度有关,亮度越低,颜色越深,它的亮度值可选范围是 0 ~ 255(整数)。如果 LED 部件的亮度设置为 0,则它的 主体颜色最深,亮度最低;如果 LED 部件的亮度设置为 255,则它的主体颜色最浅,亮度最高。

  在默认的情况下,LED 部件的亮度为最大值,如果用户想 修改 LED 部件的亮度值,可调用 lv_led_set_brightness() 函数进行设置。

/**
 * @brief 设置LED的亮度
 * 
 * @param obj 指向LED的指针
 * @param bright 亮度值
 */
void lv_led_set_brightness(lv_obj_t * obj, uint8_t bright);

二、实验例程

#include "lvgl.h"
#include "lv_port_disp_template.h"
#include "lv_port_indev_template.h"

lv_obj_t *led; 
lv_obj_t *switch1;

int main(void)
{
    HAL_Init();
    System_Clock_Init(8, 336, 2, 7);
    Delay_Init(168);

    SPI_Simulate_Init();
    // SRAM_Init();
    TIM_Base_Init(&g_tim6_handle, TIM6, 83, 999);
    __HAL_TIM_CLEAR_IT(&g_tim6_handle, TIM_IT_UPDATE);                          // 清除更新中断标志位
    HAL_TIM_Base_Start_IT(&g_tim6_handle);                                      // 使能更新中断,并启动计数器

    lv_init();
    lv_port_disp_init();
    lv_port_indev_init();

    // 测试代码
    led =  lv_led_create(lv_scr_act());                                         // 创建LED部件

    lv_obj_set_size(led, 100, 100);                                             // 设置LED部件的大小
    lv_obj_center(led);                                                         // 设置LED部件居中对齐

    lv_led_set_color(led, lv_color_hex(0x00BFFF));                              // 设置LED部件的颜色
    lv_led_set_brightness(led, 255);                                            // 设置LED部件的亮度
    lv_led_off(led);

    switch1 = lv_switch_create(lv_scr_act());                                   // 创建开关部件
    lv_obj_set_size(switch1, 100, 50);                                          // 设置开关部件大小
    lv_obj_align(switch1, LV_ALIGN_CENTER, 0, 100);                             // 设置开关部件位置
    lv_obj_add_event_cb(switch1, switch_event_cb, LV_EVENT_VALUE_CHANGED, NULL);

    while (1)
    {
        lv_timer_handler();
        Delay_ms(5);
    }
  
    return 0;
}
void switch_event_cb(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e);                                // 获取事件的触发类型

    if (code == LV_EVENT_VALUE_CHANGED)
    {
        lv_led_toggle(led);
    }
}
posted @ 2024-08-27 21:12  星光映梦  阅读(14)  评论(0编辑  收藏  举报