交给吴工的第二版显示程序

1.将浓度显示部分新增了断码表显示
2.去除了中间88的显示
This commit is contained in:
ipason 2026-01-13 18:44:13 +08:00
parent 2251469662
commit 5429711e5f
6 changed files with 2835 additions and 2886 deletions

View File

@ -230,7 +230,7 @@ static const PanelDisplayInfo panel_display_default =
.total_time =
{
.time_mode = MODE_TOTAL_TIME,
.time_mode = MODE_TIME_TOTAL_TIME,
.hours = 88888,
.first8_segtable_index = 10,
.second8_segtable_index = 10,
@ -240,14 +240,6 @@ static const PanelDisplayInfo panel_display_default =
.is_light = LIGHT_ON
},
.error =
{
.first8_segtable_index = 8,
.second8_segtable_index = 8,
.is_light = LIGHT_ON
},
.oxg =
{
.value = 888,
@ -414,7 +406,7 @@ void user_display_refresh(void)
if(panel_display_info.total_time.is_light == LIGHT_ON)
{
if(panel_display_info.total_time.time_mode == MODE_TOTAL_TIME)
if(panel_display_info.total_time.time_mode == MODE_TIME_TOTAL_TIME)
{
// 永远只取前五位 不用防止溢出
total_time_unit = panel_display_info.total_time.hours % 10;
@ -440,7 +432,7 @@ void user_display_refresh(void)
display_buffer[TOTAL_TIME_H2_ARRAY_INDEX] |= ADDITION_SEG_POS;
}else if(panel_display_info.total_time.time_mode == MODE_INDEX)
}else if(panel_display_info.total_time.time_mode == MODE_TIME_INDEX)
{
// 中间累时部分按照索引显示
display_buffer[TIME_FIRST8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.total_time.first8_segtable_index]&0x0F)<<4;
@ -463,46 +455,50 @@ void user_display_refresh(void)
}
// 故障码显示
if(panel_display_info.error.is_light == LIGHT_ON)
{
// 防止超出断码表范围
panel_display_info.error.first8_segtable_index = panel_display_info.error.first8_segtable_index >= SEG_TABLE_SIZE?\
(SEG_TABLE_SIZE-1):panel_display_info.error.first8_segtable_index;
panel_display_info.error.second8_segtable_index = panel_display_info.error.second8_segtable_index >= SEG_TABLE_SIZE?\
(SEG_TABLE_SIZE-1):panel_display_info.error.second8_segtable_index;
display_buffer[ERROR_FIRT8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.error.first8_segtable_index]&0x0F);
display_buffer[ERROR_FIRT8_BGC_SEG_NUM/2] |= (SEG_TAB[panel_display_info.error.first8_segtable_index]&0xF0);
display_buffer[ERROR_SECOND8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.error.second8_segtable_index]&0x0F);
display_buffer[ERROR_SECOND8_BGC_SEG_NUM/2] |= (SEG_TAB[panel_display_info.error.second8_segtable_index]&0xF0);
}
// 氧浓度显示
if(panel_display_info.oxg.is_light == LIGHT_ON)
{
oxg_decimal = panel_display_info.oxg.value % 10;
oxg_unit = (panel_display_info.oxg.value / 10) % 10;
oxg_ten = (panel_display_info.oxg.value / 100) % 10;
if(panel_display_info.oxg.oxg_mode == MODE_OXG_VALUE)
{
oxg_decimal = panel_display_info.oxg.value % 10;
oxg_unit = (panel_display_info.oxg.value / 10) % 10;
oxg_ten = (panel_display_info.oxg.value / 100) % 10;
display_buffer[OXG_FIRST8_AFED_SEG_NUM/2] |= (SEG_TAB[oxg_ten]&0x0F);
display_buffer[OXG_FIRST8_BGC_SEG_NUM/2] |= (SEG_TAB[oxg_ten]&0xF0);
display_buffer[OXG_SECOND8_AFED_SEG_NUM/2] |= (SEG_TAB[oxg_unit]&0x0F);
display_buffer[OXG_SECOND8_BGC_SEG_NUM/2] |= (SEG_TAB[oxg_unit]&0xF0);
display_buffer[OXG_THIRD8_AFED_SEG_NUM/2] |= (SEG_TAB[oxg_decimal]&0x0F);
display_buffer[OXG_THIRD8_BGC_SG_NUM/2] |= (SEG_TAB[oxg_decimal]&0xF0);
display_buffer[OXG_S1_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
display_buffer[OXG_POINT_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
display_buffer[OXG_PERCEENET_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
display_buffer[OXG_FIRST8_AFED_SEG_NUM/2] |= (SEG_TAB[oxg_ten]&0x0F);
display_buffer[OXG_FIRST8_BGC_SEG_NUM/2] |= (SEG_TAB[oxg_ten]&0xF0);
display_buffer[OXG_SECOND8_AFED_SEG_NUM/2] |= (SEG_TAB[oxg_unit]&0x0F);
display_buffer[OXG_SECOND8_BGC_SEG_NUM/2] |= (SEG_TAB[oxg_unit]&0xF0);
display_buffer[OXG_THIRD8_AFED_SEG_NUM/2] |= (SEG_TAB[oxg_decimal]&0x0F);
display_buffer[OXG_THIRD8_BGC_SG_NUM/2] |= (SEG_TAB[oxg_decimal]&0xF0);
display_buffer[OXG_S1_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
display_buffer[OXG_POINT_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
display_buffer[OXG_PERCEENET_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
}else if(panel_display_info.oxg.oxg_mode == MODE_OXG_INDEX)
{
display_buffer[OXG_FIRST8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.oxg.first8_segtable_index]&0x0F);
display_buffer[OXG_FIRST8_BGC_SEG_NUM/2] |= (SEG_TAB[panel_display_info.oxg.first8_segtable_index]&0xF0);
display_buffer[OXG_SECOND8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.oxg.second8_segtable_index]&0x0F);
display_buffer[OXG_SECOND8_BGC_SEG_NUM/2] |= (SEG_TAB[panel_display_info.oxg.second8_segtable_index]&0xF0);
display_buffer[OXG_THIRD8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.oxg.third8_segtable_index]&0x0F);
display_buffer[OXG_THIRD8_BGC_SG_NUM/2] |= (SEG_TAB[panel_display_info.oxg.third8_segtable_index]&0xF0);
if(panel_display_info.oxg.chn_is_light == LIGHT_ON)
{
display_buffer[OXG_S1_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
display_buffer[OXG_POINT_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
display_buffer[OXG_PERCEENET_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
}
}
}
// ------------------- 加载显示缓冲区数据 -------------------
// 发送I2C起始条件

View File

@ -187,14 +187,25 @@ typedef enum
LIGHT_ON = 1 // 亮起值为1
}LightState;
// 用于选择累时部分显示模式
typedef enum
{
MODE_TOTAL_TIME, // 累时部分五个8按照total_time的值进行显示 用于显示H及累时
MODE_INDEX // 累时部分五个8使用index的值进行显示不显示H 用于上电显示Hello
MODE_TIME_TOTAL_TIME, // 累时部分五个8按照total_time的值进行显示 用于显示H及累时
MODE_TIME_INDEX // 累时部分五个8使用index的值进行显示不显示H 用于上电显示Hello
}Time_Mode;
// 用于选择浓度部分显示模式
typedef enum
{
MODE_OXG_VALUE, // 用于显示浓度当前浓度值 该模式下将同时显示字符与数字
MODE_OXG_INDEX // 用于按照索引值进行显示 该模式下数字根据索引进行显示 字符根据配置选择是否显示
}OXG_Mode;
// 用于设置界面显示的内容的结构体
typedef struct
{
@ -208,7 +219,7 @@ typedef struct
struct
{
Time_Mode time_mode; // 显示累时还是HELLO MODE_TOTAL_TIME显示累时 MODE_INDEX用于按照索引值显示
Time_Mode time_mode; // 显示累时还是HELLO MODE_TIME_TOTAL_TIME显示累时 MODE_TIME_INDEX用于按照索引值显示
uint32_t hours; // 累时小时数
@ -221,18 +232,20 @@ typedef struct
LightState is_light; // 显示控制
}total_time;
struct
{
uint8_t first8_segtable_index; // 从左向右第1个8 显示内容对应断码表索引
uint8_t second8_segtable_index;
LightState is_light; // 故障码显示控制
}error;
struct
{
uint16_t value; // 浓度值 999对应99.9%
LightState is_light; // 显示控制
OXG_Mode oxg_mode; // 显示模式 MODE_OXG_VALUE显示当前浓度值 MODE_OXG_INDEX根据索引显示当前值
uint16_t value; // 浓度值 999对应99.9% 用于MODE_OXG_VALUE显示当前浓度值
uint8_t first8_segtable_index; // 从左向右数第一个8显示内容对应断码表索引
uint8_t second8_segtable_index;
uint8_t third8_segtable_index;
LightState chn_is_light; // 用于选择在 MODE_OXG_INDEX模式下是否还要显示浓度相关的字符
LightState is_light; // 整个浓度区域显示控制 包含字符与数字
}oxg;

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -117,11 +117,6 @@
<pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>岏~</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>

View File

@ -107,7 +107,6 @@ int main(void)
User_PowerMeter_Init(); // 初始化电量计芯片
panel_display_info.error.is_light = LIGHT_OFF;
while(1)
{
FL_DelayMs(500);