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);
}
}