更新硬件设置

This commit is contained in:
不吃油炸鸡
2025-11-02 17:02:19 +08:00
parent fd3b6f088e
commit 848f1173a9
7 changed files with 140 additions and 32 deletions

View File

@@ -1,7 +1,16 @@
#include "BL24C02.h"
#include "i2c.h"
// hardware settings
#include "lcd_init.h"
SysSettings_T sys_settings = {
typedef struct {
uint8_t backlight_level; // 0-100
uint8_t key_sound_enable; // 0:disable, 1:enable
uint8_t language_select; // 0:English, 1:Chinese
uint16_t rotation; // 0, 90, 180, 270
} SysSettings_T;
static SysSettings_T sys_settings = {
.backlight_level = 50,
.key_sound_enable = 1,
.language_select = 0,
@@ -123,3 +132,59 @@ bool EEPROM_UpdateCommand_Check(void)
return false;
}
}
// Set functions
void Sys_Set_BacklightLevel(uint8_t level)
{
if(level <= 100 && level >= 10) {
sys_settings.backlight_level = level;
LCD_Set_Light(level);
}
}
void Sys_Set_KeySoundEnable(bool enable)
{
if(enable) {
sys_settings.key_sound_enable = 1;
} else {
sys_settings.key_sound_enable = 0;
}
}
void Sys_Set_LanguageSelect(uint8_t lang)
{
if(lang <= 1) {
sys_settings.language_select = lang;
}
}
void Sys_Set_Rotation(uint16_t rotation)
{
if(rotation == 0 || rotation == 90 || rotation == 180 || rotation == 270) {
sys_settings.rotation = rotation;
LCD_SetRotation(rotation);
}
}
// Get functions
uint8_t Sys_Get_BacklightLevel(void)
{
return sys_settings.backlight_level;
}
uint8_t Sys_Get_KeySoundEnable(void)
{
return sys_settings.key_sound_enable;
}
uint8_t Sys_Get_LanguageSelect(void)
{
return sys_settings.language_select;
}
uint16_t Sys_Get_Rotation(void)
{
return sys_settings.rotation;
}

View File

@@ -7,19 +7,24 @@
#define BL24C02_ADDRESS 0x50
typedef struct {
uint8_t backlight_level; // 0-100
uint8_t key_sound_enable; // 0:disable, 1:enable
uint8_t language_select; // 0:English, 1:Chinese
uint16_t rotation; // 0, 90, 180, 270
} SysSettings_T;
extern SysSettings_T sys_settings;
uint8_t EEPROM_Init_Check(void);
void EEPROM_SysSetting_Save(void);
void EEPROM_SysSetting_Get(void);
void EEPROM_UpdateCommand_Write(bool is_update);
bool EEPROM_UpdateCommand_Check(void);
// set functions
void Sys_Set_BacklightLevel(uint8_t level);
void Sys_Set_KeySoundEnable(bool enable);
void Sys_Set_LanguageSelect(uint8_t lang);
void Sys_Set_Rotation(uint16_t rotation);
// get functions
uint8_t Sys_Get_BacklightLevel(void);
uint8_t Sys_Get_KeySoundEnable(void);
uint8_t Sys_Get_LanguageSelect(void);
uint16_t Sys_Get_Rotation(void);
#endif

View File

@@ -109,7 +109,8 @@ static void disp_init(void)
/*You code here*/
LCD_Init();
LCD_Fill(0,0, LCD_W, LCD_H, BLACK);
LCD_Set_Light(50);
#include "BL24C02.h"
LCD_Set_Light(Sys_Get_BacklightLevel());
}
volatile bool disp_flush_enabled = true;

View File

@@ -57,19 +57,23 @@ void ui_set_page_key_handler(uint8_t key_id)
slider_value += 10;
if(slider_value > 100) slider_value = 100;
lv_slider_set_value(ui_SliderBL, slider_value, LV_ANIM_ON);
Sys_Set_BacklightLevel(slider_value);
} else if (key_id == KEYN_NUM) {
int16_t slider_value = lv_slider_get_value(ui_SliderBL);
slider_value -= 10;
if(slider_value < 0) slider_value = 10;
if(slider_value < 10) slider_value = 10;
lv_slider_set_value(ui_SliderBL, slider_value, LV_ANIM_ON);
Sys_Set_BacklightLevel(slider_value);
}
break;
// key sound
case 1:
if (key_id == KEYY_NUM) {
lv_obj_add_state(ui_SwitchKS, LV_STATE_CHECKED);
Sys_Set_KeySoundEnable(1);
} else if(key_id == KEYN_NUM) {
lv_obj_clear_state(ui_SwitchKS, LV_STATE_CHECKED);
Sys_Set_KeySoundEnable(0);
}
break;
@@ -80,26 +84,23 @@ void ui_set_page_key_handler(uint8_t key_id)
// chose rotation
case 3:
uint16_t rotation = Sys_Get_Rotation();
if (key_id == KEYY_NUM) {
sys_settings.rotation = (sys_settings.rotation + 360 + 90) % 360;
lv_display_rotation_t rotation = sys_settings.rotation / 90;
lv_display_set_rotation(lv_display_get_default(), rotation);
ui_full_screen_refresh(ui_SetPage);
rotation = (rotation + 360 + 90) % 360;
} else if(key_id == KEYN_NUM) {
sys_settings.rotation = (sys_settings.rotation + 360 - 90) % 360;
lv_display_rotation_t rotation = sys_settings.rotation / 90;
lv_display_set_rotation(lv_display_get_default(), rotation);
ui_full_screen_refresh(ui_SetPage);
rotation = (rotation + 360 - 90) % 360;
}
if (sys_settings.rotation == 0) {
if (rotation == 0) {
lv_label_set_text(ui_LabelRotNum, "< 0 >");
} else if (sys_settings.rotation == 90) {
} else if (rotation == 90) {
lv_label_set_text(ui_LabelRotNum, "< 90 >");
} else if (sys_settings.rotation == 180) {
} else if (rotation == 180) {
lv_label_set_text(ui_LabelRotNum, "< 180 >");
} else if (sys_settings.rotation == 270) {
} else if (rotation == 270) {
lv_label_set_text(ui_LabelRotNum, "< 270 >");
}
Sys_Set_Rotation(rotation);
ui_full_screen_refresh(ui_SetPage);
break;
// about
@@ -108,6 +109,32 @@ void ui_set_page_key_handler(uint8_t key_id)
break;
}
// save settings to eeprom
EEPROM_SysSetting_Save();
}
}
static void _setting_init(void) {
// backlight
lv_slider_set_value(ui_SliderBL, Sys_Get_BacklightLevel(), LV_ANIM_OFF);
// key sound
if(Sys_Get_KeySoundEnable())
lv_obj_add_state(ui_SwitchKS, LV_STATE_CHECKED);
else
lv_obj_clear_state(ui_SwitchKS, LV_STATE_CHECKED);
// lcd rotation
uint16_t rotation = Sys_Get_Rotation();
if (rotation == 0) {
lv_label_set_text(ui_LabelRotNum, "< 0 >");
} else if (rotation == 90) {
lv_label_set_text(ui_LabelRotNum, "< 90 >");
} else if (rotation == 180) {
lv_label_set_text(ui_LabelRotNum, "< 180 >");
} else if (rotation == 270) {
lv_label_set_text(ui_LabelRotNum, "< 270 >");
}
}
@@ -235,6 +262,9 @@ void ui_SetPage_screen_init(void)
lv_label_set_text(ui_LabelAbout, "About\nPower-Pico\nA uA current meter\nV 1.0.0");
lv_obj_set_style_text_font(ui_LabelAbout, &lv_font_montserrat_16, LV_PART_MAIN | LV_STATE_DEFAULT);
// init setting values
_setting_init();
// store panels in array
panels[0] = ui_PanelBL;
panels[1] = ui_PanelKS;

View File

@@ -36,15 +36,21 @@ void ui_main_page_key_handler(uint8_t key_id)
} else if (key_id == KEYL_NUM) {
// rotation - 90 degrees
// rotation LV_DISPLAY_ROTATION_0/90/180/270
sys_settings.rotation = (sys_settings.rotation + 360 - 90) % 360;
lv_display_rotation_t rotation = sys_settings.rotation / 90;
lv_display_set_rotation(lv_display_get_default(), rotation);
uint16_t rotation = Sys_Get_Rotation();
rotation = (rotation + 360 - 90) % 360;
// set rotation value
Sys_Set_Rotation(rotation);
// save settings to eeprom
EEPROM_SysSetting_Save();
ui_full_screen_refresh(ui_HomeScreen);
} else if (key_id == KEYR_NUM) {
// rotation + 90 degrees
sys_settings.rotation = (sys_settings.rotation + 360 + 90) % 360;
lv_display_rotation_t rotation = sys_settings.rotation / 90;
lv_display_set_rotation(lv_display_get_default(), rotation);
uint16_t rotation = Sys_Get_Rotation();
rotation = (rotation + 360 + 90) % 360;
// set rotation value
Sys_Set_Rotation(rotation);
// save settings to eeprom
EEPROM_SysSetting_Save();
ui_full_screen_refresh(ui_HomeScreen);
}
}

View File

@@ -72,7 +72,7 @@ void ui_init(void)
PageManager_register(&pages[i]);
}
PageManager_load_init_screen();
lv_display_set_rotation(dispp, sys_settings.rotation / 90);
lv_display_set_rotation(dispp, Sys_Get_Rotation() / 90);
//timer
// lv_timer_t * ui_MainTimer = lv_timer_create(main_timer, 1000, NULL);

View File

@@ -4,6 +4,7 @@
#include "main.h"
#include "key.h"
#include "beep.h"
#include "BL24C02.h" // settings
/* Private typedef -----------------------------------------------------------*/
@@ -29,7 +30,7 @@ void KeyTask(void *argument)
{
osMessageQueuePut(Key_MessageQueue, &keystr, 0, 1);
// beep
if(1)
if(Sys_Get_KeySoundEnable())
{
beep_open();
osDelay(50);