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

📄 test.c

📁 a good program for battery charge,only for reference
💻 C
📖 第 1 页 / 共 3 页
字号:
		temp |= (1<<anther);
		alarm();	   				//报警扫描			
		Delay(0x7ff);  
		Delay(0x7ff);  		
		
		PORTD |= (1<<Red);			//指示灯显示红色		
		PORTD &= ~(1<<Green);		//绿色指示灯灭
										  
		PORTB &= ~(1<<P0);			//关断P0   4A恒流充电
		PORTD &= ~(1<<P1);			//关断P1   4A恒流充电
		PORTB &= ~(1<<P2);			//关断P2   4A恒流充电
		PORTB |= (1<<P3);   		//打开P3   4A恒流充电
		TC1321_SET(878);			// D/A送电压14.4V	
	 		while(Second_count_2>1459) 	//24小时到 1459
			{						   	//则跳到第七步					  
			goto	step_7;
			}	
				
				
			 adc_mux=0X07;
			 Delay(0xff);   				  		  //A/D采样延时
			 ad_reulst();
			 Second_count_3=00;
			 if(adc_old > 0x33 && adc_old < 390 )     //电流
			 {	
			 	  while(Second_count_3<2) 			  //等待2秒,因为拔掉电池,电流下降也会满足此条件,但是应该进入
				  {	  								  //0电流报警,而不该进入第四步,所以等待2秒															   
			//	    temp |= (1<<anther);
			//	  	alarm();
			//		PORTB &= ~(1<<P0);				  //关断P0   4A恒流充电
			//		PORTD &= ~(1<<P1);				  //关断P1   4A恒流充电
			//		PORTB &= ~(1<<P2);				  //关断P2   4A恒流充电
			//		PORTB |= (1<<P3);   			  //打开P3   4A恒流充电				  
				;
				  }	  
					 adc_mux=0X07;
			         Delay(0xff);   				  //A/D采样延时
			 		 ad_reulst();
					 if(adc_old > 0x33 && adc_old < 390 )
					 {
			 		 goto	step_4;  
					 }
			 }	
			 
			 
				adc_mux=0X01;  		   	  		  		//采样当前电池电压大小		
			    Delay(0xff);   		//A/D采样延时
			    ad_reulst();	    //刷新A/D采样值
				if(adc_old > 390 )  //检测当前电压是不是大于14.4V  A/D电压1.31 
				{	
				goto	step_4;     //则跳到第四步
				}
		}
/************************ 第四步 恒压、14.4V、橙色灯***************************/		
step_4:		
    		Second_count_1=00; 	  		 		//延时10小时,等于36000秒
 			Second_count_2=00; 	  		 		//Second_count_1*Second_count_2=60*600
	while(1)
		{
		temp |= (1<<anther);			 		//允许0电流检测		 
		alarm();	   		    		 		//报警扫描			
		PORTB &= ~(1<<P0);				 		//关断P0   4A恒流充电
		PORTD &= ~(1<<P1);				 		//关断P1   4A恒流充电
		PORTB &= ~(1<<P2);				 		//关断P2   4A恒流充电
		PORTB |= (1<<P3);   			 		//打开P3   4A恒流充电		
		PORTD |= (1<<Green);			 		//指示灯显示绿色		
		PORTD |= (1<<Red);				 		//红色指示亮
		TC1321_SET(878);	 			 		// D/A送电压14.4V ,同时进行温度补偿	
		
	 		while(Second_count_2>600)  			//10小时到  600
			{						   			//则跳到第七步					  
				Second_count_1=00; 				//延时55秒
				while(1)		   				//延时3分钟,防止电流反灌
				{
				 	TC1321_SET_138(892);	 	// D/A送电压13.8V ,同时进行温度补偿	
				    if(Second_count_1>55)
				    {goto	step_7;}
				}	
			}	
			
			
			adc_mux=0X01;  		   		 		//采样当前电池电压大小		
			Delay(0xff);   		   				//A/D采样延时
			ad_reulst();	  	   				//刷新A/D采样值
			if(adc_old < 353) 	   				//检测当前电压是不是小于13V 
			{			  		   				//小于13V则跳到第3步
			goto	step_3;    
			}			
			
			
			adc_mux=0X07;  		    			//采样当前电流大小		
			Delay(0xff);   						//A/D采样延时
			ad_reulst();						//刷新A/D采样值		
			Second_count_3=0;					//为3秒等待做准备,因为拔掉电池插座也会满足此条件,但应该进入0电流报警,所以等3秒再检测电流
			if(adc_old > 0x33 && adc_old < 217) //检测当前电流是不是小于2A---0.6V A/D
			{			  		    	   		//小于则跳到第5步
			 	  while(Second_count_3<4)
				  {	  
//				  	  temp |= (1<<anther);
//	  				  alarm();
//					  PORTB &= ~(1<<P0);		//关断P0   4A恒流充电
//					  PORTD &= ~(1<<P1);		//关断P1   4A恒流充电
//					  PORTB &= ~(1<<P2);		//关断P2   4A恒流充电
//					  PORTB |= (1<<P3);   		//打开P3   4A恒流充电				  
					  ;		
				  }	  
					  adc_mux=0X07;
			          Delay(0xff);   			//A/D采样延时
			 		  ad_reulst();
			
				
					  Second_count_3=00; 		//延时3分钟
 					  Second_count_4=00; 		//Second_count_1*Second_count_2=60*3
				while(adc_old > 0x33 && adc_old < 217)//延时3分钟,防止电流反灌
				{	  
				 	TC1321_SET_138(900);	 	// D/A送电压13.8V
				    while(Second_count_3<119){;}   //死等2分钟
					
					
							while(1)
							{
							 adc_mux=0X01;  	//采样当前电池电压大小		
							 Delay(0xff);   	//A/D采样延时
							 ad_reulst();	  	//刷新A/D采样值
							if(adc_old < 353)	//检测当前电压是不是大于13V 
							{goto	step_3;}		
								
					  		 	adc_mux=0X07;
			          		 	Delay(0xff);   	//A/D采样延时
			 		  		 	ad_reulst();
					  			//if(adc_old > 0x45 )
								if(adc_old > 0x33 && adc_old < 217)
								{goto	step_7;}	
												
				 			 TC1321_SET_1(814);	// D/输出14.1V,不补偿					
							}
				}	   
			}		
		}	
/************************ 第五步 分析、绿色灯 12V *****************************/
step_5:
goto	 step_3;
/****************** 第六步 最高充电电压、15.8V 绿色指示灯 *********************/	
step_6:
goto	 step_3;
/******************* 第七步 维护模式、浮充13.8V 绿色指示灯 ********************/	 
step_7:
       		Second_count_1=00; 					//延时48小时,等于172800秒 
 			Second_count_2=00; 					//Second_count_1*Second_count_2=60*2880
			while(1)
			{
			 temp |= (1<<anther);
			 alarm();	   		    			//报警扫描			
			 PORTD |= (1<<Green);				//指示灯显示绿色		
			 PORTD &= ~(1<<Red);					//红色指示灯灭
				  	 											  	 
		     PORTB &= ~(1<<P0);					//关断P0   2A恒流充电
			 PORTD &= ~(1<<P1);					//关断P1   2A恒流充电
			 PORTB |= (1<<P2);   				//打开P2   2A恒流充电
			 PORTB &= ~(1<<P3);					//关断P3   2A恒流充电
			
			 TC1321_SET_138(900);	 	// D/A送电压13.8V 	
					
			 if(Second_count_2>28880)   //大于48小时 28880
			 {						   	//则跳到第8步					    
			 goto	step_8;
			 }
			 
			
		 	 adc_mux=0X07;
			 Delay(0xff);   				  		  //A/D采样延时
			 ad_reulst();
			 Second_count_3=00;
			 if(adc_old > 56 && adc_old < 90 )     	  //电流	   0.5A
			 {	
			 	  while(Second_count_3<3) 			  //等待2秒,因为拔掉电池,电流下降也会满足此条件,但是应该进入
				  {	  								  //0电流报警,而不该进入第四步,所以等待2秒															   
				  	//temp |= (1<<anther);
				  	//alarm();	   
					//PORTB &= ~(1<<P0);			  //关断P0   2A恒流充电
					//PORTD &= ~(1<<P1);			  //关断P1   2A恒流充电
					//PORTB |= (1<<P2);   			  //打开P2   2A恒流充电
					//PORTB &= ~(1<<P3);			  //关断P3   2A恒流充电	
					;		  
				  }	  
					 adc_mux=0X07;
			         Delay(0xff);   				  //A/D采样延时
			 		 ad_reulst();
					 if(adc_old > 56 && adc_old < 90 )
					 {
			 		 goto	step_8;  
					 }
			 }				 
			 
			 
			adc_mux=0X01;  		   				  	 //采样当前电池电压大小		
			Delay(0xff);   		   				  	 //A/D采样延时
			ad_reulst();		   				  	 //刷新A/D采样值
			if(adc_old < 353) 					  	 //检测当前电压是不是小于13V 
			{			  		   				  	 //小于则跳到第3步
			goto	step_3;    
			}	
		}
/***************** 第八步 脉冲维护充电 13.8V 绿色指示灯 ***********************/			
step_8:		
		_nop_();  
	while(1)
		{temp &= ~(1<<anther);		   //关断0电流报警
		 alarm();	   		    	   //报警扫描		
		 PORTB &= ~(1<<P0);			   //关断P0   0.16A恒流充电
		 PORTD |= (1<<P1); 			   //打开P1   0.16A恒流充电
		 PORTB &= ~(1<<P2);			   //关断P2   0.16A恒流充电
		 PORTB &= ~(1<<P3);			   //关断P3   0.16A恒流充电			
		 TC1321_SET_1(945);	 		   // D/A送电压11.5V 	
		 PORTD |= (1<<Green);		   //指示灯显示绿色		
		 PORTD &= ~(1<<Red);		   //红色指示灯灭
	
	
		 adc_mux=0X01;  			   //采样当前电池电压大小		
		 Delay(0xff);   			   //A/D采样延时
		 ad_reulst();				   //刷新A/D采样值
			if(adc_old < 345)   	   //检测当前电压是不是小于13V
			{			  			   //如果小于则跳到第3步
				goto	step_3;    	
			}	
	
		 adc_mux=0X01;  	    	   //采样当前电池电压大小		
		 Delay(0xff);   			   //A/D采样延时
		 ad_reulst();				   //刷新A/D采样值
			if(adc_old < 350)   	   //检测当前电压是不是小于13.2V 
			{			  		   	   //则用脉冲充电
			PORTD |= (1<<Green);   	   //指示灯显示绿色		
			PORTD &= ~(1<<Red);	   	   //红色指示灯灭			
			
			PORTB &= ~(1<<P0);	   	   //关断P0   2A恒流充电
			PORTD |= (1<<P1); 	   	   //打开P1   2A恒流充电
			PORTB &= ~(1<<P2);	   	   //关断P2   2A恒流充电
			PORTB &= ~(1<<P3);	   	   //关断P3   2A恒流充电
			 TC1321_SET_138(892);  	   // D/A送电压13.8V 	
			 
			adc_mux=0X01;  		   	   //采样当前电池电压大小		
			Delay(0xff);   		   	   //A/D采样延时
			ad_reulst();		   	   //刷新A/D采样值

			
					while(adc_old >= 345 && adc_old < 365)  //检测当前电压是不是小于13.75V
					{
					adc_mux=0X01;  	   //采样当前电池电压大小		
					Delay(0xff);   	   //A/D采样延时
					ad_reulst();	   //刷新A/D采样值
			  		} 
			 }				 
  }
}
}
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/

			/* 
   if(adc_old!=adc_rel)
     {    
	  adc_old=adc_rel;
	  if(adc_old > 0x45 && adc_old < 0x190)
	  { PORTD |= (1<<PD2);PORTD &= ~(1<<PD3);}
	  	
	  else
	    //PORTC &= ~((1<<PC3)|(1<<PC4)|(1<<PC5));//
		{PORTD &= ~(1<<PD2); PORTD |= (1<<PD3);	}    
	  }*/	  

⌨️ 快捷键说明

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