欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

lcd.c

FE42X单相防窃电电表DEMO(编译器 AQ430 AQ430 V2.0.6.5)
C
第 1 页 / 共 2 页
字号:
    			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 + -