帮我优化这段代码 val = get_ActionDZInfo_val(UNIT_GAP_RT1064,gapid,DBData[i]); if( DBData[i] >= RT1064KZZ_GL1_ALM && DBData[i] <= RT1064KZZ_KZHL && DBData[i] != RT1064KZZ_MODE && DBData[i] != RT1064KZZ_UAB_CH && DBData[i] != RT1064KZZ_UBC_CH && DBData[i] != RT1064KZZ_FBS && DBData[i] != RT1064KZZ_FBS_MODE) { displayString(isDraw,gcszOnOff[(int)val],(i%LISTOFFSET)+1,20); } else if(DBData[i] == RT1064KZZ_MODE) { displayString(isDraw,ModeName[(int)val],(i%LISTOFFSET)+1,20); } else if (DBData[i] == RT1064KZZ_FBS || DBData[i] == RT1064KZZ_FBS_MODE ) { displayString(isDraw,(DBData[i] == RT1064KZZ_FBS ?FBS_NAME[(int)val] :FBS_MODE_NAME[(int)val]),(i%LISTOFFSET)+1,20); } else if(DBData[i] == RT1064KZZ_UAB_CH || DBData[i] == RT1064KZZ_UBC_CH || DBData[i] == RT1064_DZ_CHZCS) { sprintf(szVal, "%0.f" , val); LCD_DisString((i%LISTOFFSET)+1, 19 , szVal); if(DBData[i] == RT1064_DZ_CHZCS) LCD_DisString((i%LISTOFFSET)+1, 24, (char *)"次"); if (isDraw == 1) len = LCD_BitNot(UNIT_PROTECT,UNIT_GAP_RT1064,gapid,DBData[i],i,bit); } else { sprintf(szVal, "%0.3f" , get_ActionDZInfo_val(UNIT_GAP_RT1064,gapid,DBData[i])); LCD_DisString((i%LISTOFFSET)+1, 19, szVal); if (DBData[i] >= RT1064_YS_GL1 && DBData[i] <= RT1064_YS_FBS_JY) LCD_DisString((i%9)+1, 25, (char *)"S"); else if ((DBData[i] >= RT1064_DZ_GL1 && DBData[i] <= RT1064_DZ_I02) || ((DBData[i] >= RT1064_DZ_PHASE_I && DBData[i] <= RT1064_DZ_I0DLT) && DBData[i] != RT1064_DZ_YL_HAR && DBData[i] != RT1064_DZ_LMJ) || DBData[i] == RT1064_DZ_SD || DBData[i] == RT1064_DZ_I0HJS || DBData[i] == RT1064_DZ_FC_CHZ || (DBData[i] >= RT1064_DZ_I03 && DBData[i] <= RT1064_DZ_FBS_I0)|| DBData[i] == RT1064_DZ_FBS_OL) { LCD_DisString((i%LISTOFFSET)+1, 25, (char *)"A"); } else if (DBData[i] == RT1064_DZ_LMJ || DBData[i] == RT1064_DZ_JC || DBData[i] == RT1064_DZ_GYJC) { LCD_DisString((i%LISTOFFSET)+1, 25, (char *)"°"); } else if (DBData[i] == RT1064_DZ_YL_HAR) LCD_DisString((i%LISTOFFSET)+1, 25, (char *)"%"); else if (DBData[i] == RT1064_DZ_IDS ||DBData[i] == RT1064_DZ_OPENCS || (DBData[i] >= RT1064_DZ_I03 && DBData[i] <= RT1064_DZ_FBS_I0)) { LCD_DisString((i%LISTOFFSET)+1, 24, (char *)"次"); } else if (DBData[i] == RT1064_DZ_DP || DBData[i] == RT1064_DZ_GP) { LCD_DisString((i%LISTOFFSET)+1, 25, (char *)"HZ"); } else LCD_DisString((i%LISTOFFSET)+1, 25, (char *)"V"); if (isDraw == 1)len = LCD_BitNot(UNIT_PROTECT,UNIT_GAP_RT1064,gapid,DBData[i],i,bit); }
时间: 2024-03-03 07:47:46 浏览: 137
首先,可以看到在代码中有很多重复的部分,比如调用`get_ActionDZInfo_val`函数、调用`sprintf`函数、调用`LCD_DisString`函数等。我们可以将这些重复的部分抽象成一个函数,减少代码的冗余。
其次,可以将一些常量和字符串存储到数组中,这样可以减少代码中的硬编码,提高可读性和可维护性。
最后,可以使用条件语句合并一些相似的逻辑,减少代码重复。
以下是重构后的代码:
```
const char* UNIT_NAME[] = {"V", "A", "S", "°", "%", "次", "HZ"};
const char* FBS_NAME[] = {"常开", "常闭"};
const char* FBS_MODE_NAME[] = {"标准", "反向"};
const char* ModeName[] = {"单相", "三相"};
void displayData(int isDraw, float val, int data, int i, int gapid, int bit) {
char szVal[16];
int x = (i % LISTOFFSET) + 1;
if (data >= RT1064KZZ_GL1_ALM && data <= RT1064KZZ_KZHL && data != RT1064KZZ_MODE && data != RT1064KZZ_UAB_CH && data != RT1064KZZ_UBC_CH && data != RT1064KZZ_FBS && data != RT1064KZZ_FBS_MODE) {
displayString(isDraw, UNIT_NAME[(int)val], x, 20);
} else if (data == RT1064KZZ_MODE) {
displayString(isDraw, ModeName[(int)val], x, 20);
} else if (data == RT1064KZZ_FBS || data == RT1064KZZ_FBS_MODE) {
displayString(isDraw, (data == RT1064KZZ_FBS ? FBS_NAME[(int)val] : FBS_MODE_NAME[(int)val]), x, 20);
} else if (data == RT1064KZZ_UAB_CH || data == RT1064KZZ_UBC_CH || data == RT1064_DZ_CHZCS) {
sprintf(szVal, "%0.f", val);
LCD_DisString(x, 19, szVal);
if (data == RT1064_DZ_CHZCS) {
LCD_DisString(x, 24, "次");
}
if (isDraw == 1) {
len = LCD_BitNot(UNIT_PROTECT, UNIT_GAP_RT1064, gapid, data, i, bit);
}
} else {
sprintf(szVal, "%0.3f", get_ActionDZInfo_val(UNIT_GAP_RT1064, gapid, data));
LCD_DisString(x, 19, szVal);
int index = -1;
if (data >= RT1064_YS_GL1 && data <= RT1064_YS_FBS_JY) {
index = 2;
} else if ((data >= RT1064_DZ_GL1 && data <= RT1064_DZ_I02) || ((data >= RT1064_DZ_PHASE_I && data <= RT1064_DZ_I0DLT) && data != RT1064_DZ_YL_HAR && data != RT1064_DZ_LMJ) || data == RT1064_DZ_SD || data == RT1064_DZ_I0HJS || data == RT1064_DZ_FC_CHZ || (data >= RT1064_DZ_I03 && data <= RT1064_DZ_FBS_I0) || data == RT1064_DZ_FBS_OL) {
index = 1;
} else if (data == RT1064_DZ_LMJ || data == RT1064_DZ_JC || data == RT1064_DZ_GYJC) {
index = 3;
} else if (data == RT1064_DZ_YL_HAR) {
index = 4;
} else if (data == RT1064_DZ_IDS || data == RT1064_DZ_OPENCS || (data >= RT1064_DZ_I03 && data <= RT1064_DZ_FBS_I0)) {
LCD_DisString(x, 24, "次");
} else if (data == RT1064_DZ_DP || data == RT1064_DZ_GP) {
index = 6;
}
if (index != -1) {
LCD_DisString(x, 25, UNIT_NAME[index]);
}
if (isDraw == 1) {
len = LCD_BitNot(UNIT_PROTECT, UNIT_GAP_RT1064, gapid, data, i, bit);
}
}
}
for (int i = 0; i < DBData.size(); i++) {
float val = get_ActionDZInfo_val(UNIT_GAP_RT1064, gapid, DBData[i]);
displayData(isDraw, val, DBData[i], i, gapid, bit);
}
```
阅读全文