lcd.c
字号:
case 4: // GAINCORR2
emeter.uc_display_stage = DISPLAY_STAGE_TEST4;
break;
case 5: // POWEROFFSET2
emeter.uc_display_stage = DISPLAY_STAGE_TEST5;
break;
case 6: // PHASEOFFSET2
emeter.uc_display_stage = DISPLAY_STAGE_TEST6;
break;
case 7: // CURRENTCORR1
emeter.uc_display_stage = DISPLAY_STAGE_TEST7;
break;
case 8: // CURRENTCORR2
emeter.uc_display_stage = DISPLAY_STAGE_TEST8;
break;
case 9: // VOLTAGECORR1
emeter.uc_display_stage = DISPLAY_STAGE_TEST9;
break;
default:
break;
}
}
else
{
if (++emeter.uc_display_stage >= DISPLAY_STAGE_TEST1)
emeter.uc_display_stage = DISPLAY_STAGE_ACT_ENERGY_1;
}
switch (emeter.uc_display_stage)
{
case DISPLAY_STAGE_ACT_ENERGY_1:
{
clr_lcd_display();
LCDudec32( scale_long(emeter.ul_act_power1,emeter.f_Cz1), FIRST_POSITION, NUMBER_WIDTH, POWER_RESOLUTION);
LCDchar(CHAR_P, 0);
LCDchar(CHAR_1, 1);
LCDicon(ICON_DECIMAL_1, TRUE);
}break;
case DISPLAY_STAGE_ACT_ENERGY_2:
{
clr_lcd_display();
LCDudec32(scale_long(emeter.ul_act_power2,emeter.f_Cz2), FIRST_POSITION, NUMBER_WIDTH, POWER_RESOLUTION);
LCDchar(CHAR_P, 0);
LCDchar(CHAR_2, 1);
LCDicon(ICON_DECIMAL_1, TRUE);
}break;
case DISPLAY_STAGE_CURRENT:
{
// KI1 = VFSR/(GAIN*POW_2_16*Rsh*0.3)
// = 1.28/(16*65536*300E-6*1) = 0.00406901
/* 理论计算的电流通道I1常数为 0.00406901,这个值只能作为估计值
* 在实际情况中,由于电路,器件等的误差,这个常数需要作一些调整,
* 本例中实际的常数为 0.40434527
*/
LCDudec16( emeter.ui_current_IRMS , FIRST_POSITION, NUMBER_WIDTH, CURRENT_RESOLUTION);
LCDchar(CHAR_C, 0);
LCDchar(CHAR_SPACE, 1);
LCDicon(ICON_DECIMAL_1, TRUE);
}break;
case DISPLAY_STAGE_VOLTAGE:
{
// KV1 = (((990+1)/1)*(1.28*1))/POW_2_14 = 0.01935547
/* 理论计算的电压通道V1常数为 0.01935547,这个值只能作为估计值
* 在实际情况中,由于电路,器件等的误差,这个常数需要作一些调整,
* 本例中实际的常数为 0.0183518,为了显示小数点后的两位,*100
*/
LCDudec16( emeter.ui_voltage_V1RMS, FIRST_POSITION, NUMBER_WIDTH, VOLTAGE_RESOLUTION);
LCDchar(CHAR_U, 0);
LCDchar(CHAR_SPACE, 1);
LCDicon(ICON_DECIMAL_1, TRUE);
}break;
case DISPLAY_STAGE_FREQUENCY:
{
LCDudec16(emeter.ui_main_frequency, FIRST_POSITION, NUMBER_WIDTH, 2);
LCDchar(CHAR_F, 0);
LCDchar(CHAR_SPACE, 1);
LCDicon(ICON_DECIMAL_1, TRUE);
}break;
case DISPLAY_STAGE_POWERFACTOR:
{
LCDudec16(emeter.ui_power_factor, FIRST_POSITION, NUMBER_WIDTH, POWER_FACTOR_RESOLUTION);
LCDchar(CHAR_P, 0);
LCDchar(CHAR_F, 1);
LCDicon(ICON_DECIMAL_1, TRUE);
if ((int8)CAPIND < 0)
LCDMEM[4] |= BIT1; //显示为负
}break;
case DISPLAY_STAGE_REACT_ENERGY:
{
clr_lcd_display();
LCDudec32( scale_long(emeter.ul_react_power,emeter.f_Cz1), FIRST_POSITION, NUMBER_WIDTH, POWER_RESOLUTION);
LCDchar(CHAR_r, 0);
LCDchar(CHAR_P, 1);
LCDicon(ICON_DECIMAL_1, TRUE);
}break;
case DISPLAY_STAGE_APP_ENERGY:
{
clr_lcd_display();
LCDudec32(scale_long(emeter.ul_app_power,emeter.f_Cz1) , FIRST_POSITION, NUMBER_WIDTH, POWER_RESOLUTION);
LCDchar(CHAR_A, 0);
LCDchar(CHAR_P, 1);
LCDicon(ICON_DECIMAL_1, TRUE);
}break;
case DISPLAY_STAGE_TEMPERATURE:
{
clr_lcd_display();
if (emeter.i_last_temperature >=0)
LCDudec16(((uint16)emeter.i_last_temperature), FIRST_POSITION, NUMBER_WIDTH, 0);
else{
LCDudec16(((uint16)(-emeter.i_last_temperature)), FIRST_POSITION, NUMBER_WIDTH, 0);
LCDMEM[5] |= BIT1;
}
LCDchar(CHAR_t, 0);
LCDchar(CHAR_SPACE, 1);
LCDicon(ICON_DECIMAL_1, FALSE);
}break;
case DISPLAY_STAGE_TIME:
{
clr_lcd_display();
update_rtc_display();
_NOP();
_NOP();
}break;
case DISPLAY_STAGE_DATE:
{
clr_lcd_display();
update_date_display();
_NOP();
_NOP();
}break;
case DISPLAY_STAGE_TEST1:
{
clr_lcd_display();
LCDudec16(emeter.ui_GainCorr1 , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDicon(ICON_DECIMAL_1, FALSE);
}break;
case DISPLAY_STAGE_TEST2:
{
clr_lcd_display();
if(emeter.l_PowerOffset1 < 0)
{
LCDudec32((uint32)(-emeter.l_PowerOffset1) , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDMEM[2] |= BIT1;
}
else
LCDudec32((uint32)(emeter.l_PowerOffset1) , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDicon(ICON_DECIMAL_1, FALSE);
}break;
case DISPLAY_STAGE_TEST3:
{
clr_lcd_display();
if(emeter.f_PhaseCorr1 < 0)
{
LCDudec32((uint32)(-emeter.f_PhaseCorr1*1000) , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDMEM[2] |= BIT1;
}
else
LCDudec32((uint32)(emeter.f_PhaseCorr1*1000) , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDicon(ICON_DECIMAL_1, FALSE);
}break;
case DISPLAY_STAGE_TEST4:
{
clr_lcd_display();
LCDudec16(emeter.ui_GainCorr2 , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDicon(ICON_DECIMAL_1, FALSE);
}break;
case DISPLAY_STAGE_TEST5:
{
clr_lcd_display();
if(emeter.l_PowerOffset2 < 0)
{
LCDudec32((uint32)(-emeter.l_PowerOffset1) , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDMEM[2] |= BIT1;
}
else
LCDudec32((uint32)(emeter.l_PowerOffset1) , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDicon(ICON_DECIMAL_1, FALSE);
}break;
case DISPLAY_STAGE_TEST6:
{
clr_lcd_display();
if(emeter.f_PhaseCorr2 < 0)
{
LCDudec32((uint32)(-emeter.f_PhaseCorr2*1000) , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDMEM[2] |= BIT1;
}
else
LCDudec32((uint32)(emeter.f_PhaseCorr2*1000) , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDicon(ICON_DECIMAL_1, FALSE);
}break;
case DISPLAY_STAGE_TEST7:
{
clr_lcd_display();
LCDudec16(emeter.ui_SD16_CurrentCorr1 , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDicon(ICON_DECIMAL_1, FALSE);
}break;
case DISPLAY_STAGE_TEST8:
{
clr_lcd_display();
LCDudec16(emeter.ui_SD16_CurrentCorr2 , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDicon(ICON_DECIMAL_1, FALSE);
}break;
case DISPLAY_STAGE_TEST9:
{
clr_lcd_display();
LCDudec16(emeter.ui_SD16_VoltageCorr1 , FIRST_POSITION, NUMBER_WIDTH, 0);
LCDicon(ICON_DECIMAL_1, FALSE);
}break;
default: break;
}
if(emeter.ucCalibrationMode != 0)
{
LCDchar(lcd_digit_table[emeter.ucCalibrationMode], 0);
LCDchar(lcd_digit_table[emeter.ucCalibrationOption], 1);
}
if((emeter.ui_anti_tamperring_status & IN_SD16_MEASURE_MODE) == IN_SD16_MEASURE_MODE)
{
//LCDchar(CHAR_SPACE, 2); // display limp mode flag "L"
}
}
while (skip_stage);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -