#include "pages_pwm.h" #include "dzbj_gpio.h" #include "driver/ledc.h" // 当前亮度值(用于休眠恢复) static uint8_t current_brightness = 50; // 获取当前亮度值 uint8_t pwm_get_brightness(void) { return current_brightness; } // 设置屏幕亮度,percent范围0-100 // 0=完全关闭背光,10~100为正常亮度范围 // 显示10%~100%映射到实际亮度20%~100%,背光低电平有效需反转占空比 void pwm_set_brightness(uint8_t percent) { if (percent == 0) { // 完全关闭背光(低电平有效,占空比100%=全高=关闭) ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, 8191); ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0); return; } if (percent < 10) percent = 10; if (percent > 100) percent = 100; current_brightness = percent; uint32_t actual = 20 + (uint32_t)(percent - 10) * 80 / 90; uint32_t duty = 8191 - (8191 * actual) / 100; ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, duty); ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0); } // 初始化PWM背光 void pwm_init(void) { ledc_timer_config_t ledc_timer = { .speed_mode = LEDC_LOW_SPEED_MODE, .timer_num = LEDC_TIMER_0, .duty_resolution = LEDC_TIMER_13_BIT, .freq_hz = 5000, .clk_cfg = LEDC_AUTO_CLK }; ledc_timer_config(&ledc_timer); ledc_channel_config_t ledc_channel = { .speed_mode = LEDC_LOW_SPEED_MODE, .channel = LEDC_CHANNEL_0, .timer_sel = LEDC_TIMER_0, .intr_type = LEDC_INTR_DISABLE, .gpio_num = PIN_LCD_EN, .duty = 0, .hpoint = 0 }; ledc_channel_config(&ledc_channel); pwm_set_brightness(50); // 初始亮度50% }