⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ade7758_dx.c.svn-base

📁 一个基于UCOS/2操作系统开发的实际产品(电力负控)的代码
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
	    		      key_z = 0;
	    		      while (key_z == 0) 
	    		         {
	    		            Process_PCF8574(); 
	    		            Clrwdt();
	    		            
	    		            sum = Read_Period(0,2);
	    		            Dian_Neng();
	    		         }		
	    		      if (key_z == KEY4)
	    		         {
	    		            if (bs==1)  bs = 10;
	    		                  else if (bs==10)  bs = 20;
	    		                            else if (bs==20)  bs = 1;
	    		         }
	    		      if (key_z == KEY1)
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	    	temp += 1*bs;
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	        temp += 2*bs;	
	    		      	    }
	    		        }	    		      
	    		        if (key_z == KEY2) 
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	      temp -= 1*bs;  	
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	    	temp -= 2*bs;
	    		      	    }
	    		        }
	    		      
	    		      spi_buf[0] = temp;
					  Write_ADE7758(reg1,1);
					  i2c_buf[0] = temp;
					  Write_2408((phase+PHCAL_ADDR),1);		//保存PHCAL值  
	    		   }
           }
/**********************
**名称: 标定有功电量
 	   **第三步:条件:220V,0.075A,COS=1.0 
	 
***********************/	
		 Beep(1000);
	YG3();   			//显示  有功电能  3步
		 
		while(key_z != KEY4) {Process_PCF8574(); Delay_Ms_Stop(100); Clrwdt();}
	    key_z = 0;
		 
       spi_buf[0] = 0;
	   spi_buf[1] = 0x64;
	   Write_ADE7758(APCFNUM,2);		
	   
	   for (phase=0;phase<3;phase++)	
	       {
				if (phase==0){reg1 = AWATTOS; reg2 = 0x04; curr[8]=0x41;}
				if (phase==1){reg1 = BWATTOS; reg2 = 0x08; curr[8]=0x42;}
				if (phase==2){reg1 = CWATTOS; reg2 = 0x10; curr[8]=0x43;}
						
				spi_buf[0] = 0;		//恢复为初始状态 
				spi_buf[1] = 0;
				Write_ADE7758(reg1,2); 
	    		
	    		spi_buf[0] = reg2;					//3P4L
				Write_ADE7758(COMPMODE,1);
	    		
	    		temp = 0;	
	    	    bs   = 1;		    			    		
	    		key_z = 0;
	    		while (key_z != KEY3)
	    		   {  
	    		      key_z = 0;
	    		      while (key_z == 0) 
	    		         {
	    		            Process_PCF8574(); 
	    		            Clrwdt();
	    		            
	    		            sum = Read_Period(0,2);
	    		         Dian_Neng();
	    		         }		
	    		      if (key_z == KEY4)
	    		         {
	    		            if (bs==1)  bs = 10;
	    		                  else if (bs==10)  bs = 20;
	    		                            else if (bs==20)  bs = 1;
	    		         }
	    		      if (key_z == KEY1)
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	    	temp += 1*bs;
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	        temp += 2*bs;	
	    		      	    }
	    		        }	    		      
	    		        if (key_z == KEY2) 
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	      temp -= 1*bs;  	
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	    	temp -= 2*bs;
	    		      	    }
	    		        }
	    		      Save_Reg(temp,reg1,(phase*2+WATTOS_ADDR));		//保存WATTOS值  
	    		   }
	       } 

/**********************
**名称: 标定无功电量
 	   **第一步:条件:220V,1.5A,COS0=0 
	  
***********************/
        Beep(1000);
	WG1();     			//显示  无功电能  1步
		 
		 while(key_z != KEY4) { Process_PCF8574(); 
		                       //Delay_Ms_Stop(100); 
		                       Clrwdt();}
	     key_z = 0;
		 
         spi_buf[0] = 0;		//恢复为初始状态 
		 spi_buf[1] = 0x3F;
	     Write_ADE7758(VARCFDEN,2); 
	     
	     spi_buf[0] = 0;
	     spi_buf[1] = 0x0A;
	     Write_ADE7758(VARCFNUM,2);	 	
	     
		 for (phase=0;phase<3;phase++)	
	       {
				if (phase==0){reg1 = AVARG; reg2 = 0x04; curr[8]=0x41;}
				if (phase==1){reg1 = BVARG; reg2 = 0x08; curr[8]=0x42;}
				if (phase==2){reg1 = CVARG; reg2 = 0x10; curr[8]=0x43;}
			
				spi_buf[0] = 0;		//恢复为初始状态 
				spi_buf[1] = 0;
	    		Write_ADE7758(reg1,2); 
	    		
	    		spi_buf[0] = reg2;					//3P4L
				Write_ADE7758(COMPMODE,1);
				
				if (phase==0)
				   {
				      sum = Read_Period(1,2);
					  if (sum == 0) sum = 1;
				      temp = 3409 * 0x3F / sum;
					  if (temp>0xFFF) temp = 0xFFF;  			//12bit
					  Save_Reg(temp,VARCFDEN,VARCFDEN_ADDR);	//保存VARCFDEN值
				   }
				
				temp = 0;	
	    	    bs   = 1;	   			    		
	    		key_z = 0;
	    		while (key_z != KEY3)
	    		   {  
	    		      key_z = 0;
	    		      while (key_z == 0) 
	    		         {
	    		            Process_PCF8574(); 
	    		            Clrwdt();
	    		            
	    		            sum = Read_Period(1,2);
	    		            Dian_Neng();
	    		         }		
	    		      if (key_z == KEY4)
	    		         {
	    		            if (bs==1)  bs = 10;
	    		                  else if (bs==10)  bs = 20;
	    		                            else if (bs==20)  bs = 1;
	    		         }
	    		      if (key_z == KEY1)
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	    	temp += 1*bs;
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	        temp += 2*bs;	
	    		      	    }
	    		        }	    		      
	    		        if (key_z == KEY2) 
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	      temp -= 1*bs;  	
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	    	temp -= 2*bs;
	    		      	    }
	    		        }
	    		      Save_Reg(temp,reg1,(phase*2+VARG_ADDR));		//保存VARG值 
	    		   }
		   } 
	       
/**********************
**名称: 标定无功电量
 	   **第二步:220V,0.075A,COS=0 
	 
***********************/	
 		 Beep(1000);
                 WG2();     			//显示  无功电能  2步

		while(key_z != KEY4) {Process_PCF8574(); 
		                      //Delay_Ms_Stop(100); 
		                      Clrwdt();}
	    key_z = 0;

	   spi_buf[0] = 0;
       spi_buf[1] = 0x64;
       Write_ADE7758(VARCFNUM,2);	  	
	     
	   for (phase=0;phase<3;phase++)	
	       {
				if (phase==0){reg1 = AVAROS; reg2 = 0x04; curr[8]=0x41;}
				if (phase==1){reg1 = BVAROS; reg2 = 0x08; curr[8]=0x42;}
				if (phase==2){reg1 = CVAROS; reg2 = 0x10; curr[8]=0x43;}
			
				spi_buf[0] = 0;		//恢复为初始状态 
				spi_buf[1] = 0;
				Write_ADE7758(reg1,2); 
	    		
	    		spi_buf[0] = reg2;					//3P4L
				Write_ADE7758(COMPMODE,1);
	    		
	    		temp = 0;	
	    	    bs   = 1;			    			    		
	    		key_z = 0;
	    		while (key_z != KEY3)
	    		   {  
	    		      key_z = 0;
	    		      while (key_z == 0) 
	    		         {
	    		            Process_PCF8574(); 
	    		            Clrwdt();
	    		            
	    		            sum = Read_Period(1,2);
	    		            Dian_Neng();
	    		         }		
	    		      if (key_z == KEY4)
	    		         {
	    		            if (bs==1)  bs = 10;
	    		                  else if (bs==10)  bs = 20;
	    		                            else if (bs==20)  bs = 1;
	    		         }
	    		      if (key_z == KEY1)
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	    	temp += 1*bs;
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	        temp += 2*bs;	
	    		      	    }
	    		        }	    		      
	    		        if (key_z == KEY2) 
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	      temp -= 1*bs;  	
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	    	temp -= 2*bs;
	    		      	    }
	    		        }
	    		      Save_Reg(temp,reg1,(phase*2+VAROS_ADDR));		//保存VAROS值   
	    		   }
	       } 
	       Beep(1000);	
             
/**********************
**名称: 标定视在电量
 	   **第一步:条件:220V,1.5A,COS0=1 
	   
***********************/
		 Beep(1000);
                 SZ1();			//显示  有无功电能  1步
		 
		 while(key_z != KEY4) {Process_PCF8574(); 
		                       //Delay_Ms_Stop(100); 
		                       Clrwdt();}
	     key_z = 0;
		 
		 spi_buf[0] = 0;
         spi_buf[1] = 0x0A;
         Write_ADE7758(VARCFNUM,2);	  	
		 		 
		 spi_buf[0] = 0x80;					
		 Write_ADE7758(WAVMODE,1);			
		 
         for (phase=0;phase<3;phase++)	
	       {
				if (phase==0){reg1 = AVAG; reg2 = 0x04; curr[8]=0x41;}
				if (phase==1){reg1 = BVAG; reg2 = 0x08; curr[8]=0x42;}
				if (phase==2){reg1 = CVAG; reg2 = 0x10; curr[8]=0x43;}
			
				spi_buf[0] = 0;		//恢复为初始状态 
				spi_buf[1] = 0;
	    		Write_ADE7758(reg1,2); 
	    		
	    		spi_buf[0] = reg2;					//3P4L
				Write_ADE7758(COMPMODE,1);
	    		
	    		temp = 0;	
	    	    bs   = 1;			    			    		
	    		key_z = 0;
	    		while (key_z != KEY3)
	    		   {  
	    		      key_z = 0;
	    		      while (key_z == 0) 
	    		         {
	    		            Process_PCF8574(); 
	    		            Clrwdt();
	    		            
	    		            sum = Read_Period(1,2);
	    		          Dian_Neng();
	    		         }		
	    		      if (key_z == KEY4)
	    		         {
	    		            if (bs==1)  bs = 10;
	    		                  else if (bs==10)  bs = 20;
	    		                            else if (bs==20)  bs = 1;
	    		         }
	    		      if (key_z == KEY1)
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	    	temp += 1*bs;
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	        temp += 2*bs;	
	    		      	    }
	    		        }	    		      
	    		        if (key_z == KEY2) 
	    		        {
	    		      	    if(bs==1)
	    		      	    {
	    		      	      temp -= 1*bs;  	
	    		      	    }
	    		      	    else
	    		      	    {
	    		      	    	temp -= 2*bs;
	    		      	    }
	    		        }
	    		      Save_Reg(temp,reg1,(phase*2+VAG_ADDR));		//保存VAG值    
	    		   }
	       } 
	//*/       
	    //-------------------   
	    i2c_buf[0] = 0x55;
		i2c_buf[1] = 0x55;
		Write_2408(FINISH_FLAG_ADDR,2);		//写校表结束标志  
		
		//--------备份校表数据------- 
		Read_2408(FINISH_FLAG_ADDR,2);
		Write_2408(FINISH_FLAG_ADDR+BANK1,2);
		Read_2408(FINISH_FLAG_ADDR,2);
		Write_2408(FINISH_FLAG_ADDR+BANK2,2);  //校表标志
		
		Read_2408(IRMSOS_ADDR,16);
		Write_2408(IRMSOS_ADDR+BANK1,16);
		Read_2408(IRMSOS_ADDR,16);
		Write_2408(IRMSOS_ADDR+BANK2,16);		//电流相关的寄存器
		
		Read_2408(VRMSOS_ADDR,16);
		Write_2408(VRMSOS_ADDR+BANK1,16);
		Read_2408(VRMSOS_ADDR,16);
		Write_2408(VRMSOS_ADDR+BANK2,16);		//电压相关的寄存器
		
		Read_2408(APCFDEN_ADDR,16);
		Write_2408(APCFDEN_ADDR+BANK1,16);
		Read_2408(APCFDEN_ADDR,16);
		Write_2408(APCFDEN_ADDR+BANK2,16);		//有功电量相关的寄存器
		
		Read_2408(VARCFDEN_ADDR,16);
		Write_2408(VARCFDEN_ADDR+BANK1,16);
		Read_2408(VARCFDEN_ADDR,16);
		Write_2408(VARCFDEN_ADDR+BANK2,16);		//无功电量相关的寄存器
		
		Read_2408(VAG_ADDR,16);
		Write_2408(VAG_ADDR+BANK1,16);
		Read_2408(VAG_ADDR,16);
		Write_2408(VAG_ADDR+BANK2,16);			//视在功率和相位偏差的寄存器
		
		//------------------
		Beep(1000); 				        //提示校表结束
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -