54 lines
1.8 KiB
C
54 lines
1.8 KiB
C
#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%
|
||
}
|