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

📄 process.c

📁 用KEILC 编的充电器程序。自动调节充电电压。需要电路资料与我联系
💻 C
字号:
#include <stcad.c>
#define Flash3() {flash_3=0;flash_0=flash_1=flash_2=1;}
#define Flash1(){flash_3=1;flash_0=flash_1=flash_2=0;}
#define FlashAll(){flash_0=flash_1=flash_2=flash_3=1;}
#define NoFlash(){flash_0=flash_1=flash_2=flash_3=0;}
void chgc_clear()
{
chg_1=chg_2=chg_4=chg_8=1;
}

void jd_change()
{
if (jd_bit)
	{	
	jd_bit=0;
//	if (jd_state==0) 	chgc_state=0; 
//	else  chgc_state=1;
	switch (jd_state)
		{
		case 0:
		case 1:	   //4v
			jd_2=jd_4=jd_8=1;
			NOP();
			break;
		case 2:	   //6v
			jd_4=jd_8=1;
			NOP();
			jd_2=0;
			NOP();
			break;
		case 3:	  //8v
			jd_2=jd_8=1;
			NOP();
			jd_4=0;
			NOP();
			break;
		case 4:	  //10v
			jd_8=1;
			NOP();
			jd_2=jd_4=0;
			NOP();
			break;
		case 5:	  //12v
			jd_2=jd_4=1;
			NOP();
			jd_8=0;
			NOP();
			break;
		case 6:	  //14v
			jd_4=1;
			NOP();
			jd_2=jd_8=0;
			NOP();
			break;
		case 7:	 //16v
			jd_2=1;
			NOP();
			jd_4=jd_8=0;
			NOP();
			break;
		case 8:	 //18v
			jd_2=jd_4=jd_8=0;
			NOP();
			break;
		}
	}
}


void chgc_change() //电流充电选择
{
switch (chgc_state)
	{
	case 0:		//无充电电流
		chg_1=chg_2=chg_4=chg_8=1;
		NOP();
		break;
	case 1:		//充电电流为100MA ,微充电。
		chg_2=chg_4=chg_8=1;
		NOP();
		chg_1=0;
		NOP();
		break;
	case 2:	   //充电电流为300MA
		chg_4=chg_8=1;
		NOP();
		chg_1=chg_2=0;
		NOP();
		break;
	case 3:	   //充电电流为600MA
		chg_1=chg_8=1;
		NOP();
		chg_2=chg_4=0;
		NOP();
		break;
	case 4:	   //充电电流为800MA
		chg_1=chg_2=chg_4=1;
		NOP();
		chg_8=0;
		NOP();
		break;
	case 5:	   //充电电流为1000MA
		chg_1=chg_4=1;
		NOP();
		chg_2=chg_8=0;
		NOP();
		break;
	case 6:	   //充电电流为1200MA
		chg_1=chg_2=1;
		NOP();
		chg_4=chg_8=0;
		NOP();
		break;
	case 7:	   //充电电流为1500MA
		chg_1=chg_2=chg_4=chg_8=0;
		NOP();
		break;

	}

}


void key_process() 	//键处理程序
{
switch (keyword)
	{
		case key_menu:
			
			if (inmode<0x10)	inmode=0x10;
			else  inmode=0;
			break;
		case key_fen:  //设置分功能显示
			if (inmode<0x10)
				{
				inmode++;
				if (inmode>2)inmode=0;
				}
			break;
		case key_add:
			if (inmode==0)				  //设置状态下调整电压值
				{
				chgc_state=0;
				battery_v_standard=battery_v_standard+12;
				if (battery_v_standard>144) 	battery_v_standard=144;
				}		
			else if (inmode==1)
			   	{
				chgc_state=0;
				battery_i_standard++;
				if (battery_i_standard>7)	battery_i_standard=7;
				}
			else if (inmode==2)	
				{
				jd_state++;
				if (jd_state>8) jd_state=8;
				}
			break;
		case key_dec:
			if (inmode==0)								//设置状态下调整电压值
				{
				chgc_state=0;
				battery_v_standard=battery_v_standard-12;
				if 	(battery_v_standard==0)	battery_v_standard=12;
				}	 
			else if (inmode==1)
				{
				chgc_state=0;
				battery_i_standard--;
				if (battery_i_standard==0)	battery_i_standard=1;
				}
					 	
			else if (inmode==2)	 
				{	
				jd_state--;
				if (jd_state>254)	jd_state=0;	
				}
			break;
	}
	keyword=0xff;
}



void inmode_process()		  //模式处理主程序
{
switch (inmode)
	{
	case 0:
		chgc_state=0;
		jd_state=0;
		battery_err=1;
		chgc_finish=0;
		dis_hex_buffer=battery_v_standard;
		htod_change();
		Flash3();
		disbuffer[3]=dismap1[battery_i_standard];
		break;
	case 1:
		chgc_state=0;
		jd_state=0;
		battery_err=1;
		chgc_finish=0;
		dis_hex_buffer=battery_v_standard;
		htod_change();
		Flash1();
		disbuffer[3]=dismap1[battery_i_standard];
		break;
	case 2:
		if (jd_state==0) chgc_state=0;
		else 			chgc_state=1;
		ad_change();
		NoFlash();
		battery_err=1;
		chgc_finish=0;
		dis_hex_buffer=adc_result;
		htod_change();
		disbuffer[3]=dismap1[jd_state];
		break;
	case 0x10:		  //自动充电过程开始,
		{
		if (chgc_bit==1)	   
			{
			chgc_clear();
			chgc_bit=0;
			battery_full=bat_full[(battery_v_standard/12-1)];	   //计算充满值、最低值和继电器开关状态
			battery_low =battery_v_standard/battery_low_plus;
			jd_state=bat_jds[(battery_v_standard/12)]; 			  //继电器打在相应档位。
			delay(200);
			ad_change();
			dis_hex_buffer=adc_result;
			htod_change();
			if (adc_result<battery_low||adc_result>(battery_full+10)) //先检测有无电池,小于低值或大于高值均视为无效。
				{
				battery_err=1;
				chgc_count=jd_state=chgc_state=chgc_finish=0;
				FlashAll();
				disbuffer[3]=dismap1[0];
				}
			else							  //首次充电清各计数器。
				{
				switch(chgc_finish)			 //有电池时延时10判断
					{
					case 0:
					if (battery_err) 
						{
						chgc_count++;
						if (chgc_count>50)	
							{
							battery_err=0;
							chgc_finish=1;
							chgc_count=0;
							chgc_state=battery_i_standard+2;
							if (chgc_state>7) chgc_state=7;
							jd_state=bat_jds[(battery_v_standard/12)];
							Flash1();
							disbuffer[3]=dismap1[chgc_state+8]; 
							}
						else 
							{
							jd_state=chgc_state=chgc_finish=0;
							FlashAll();
							disbuffer[3]=dismap1[0];
							}
						}
						break;
					case 1:
					
						if (adc_result>battery_full)	 //1秒不回落为半满
							{
							chgc_count++;
							chgc_state=0;
							if (chgc_count>2)
								{
								chgc_count=0;
								chgc_state=(battery_i_standard+2)/2;
								if (chgc_state==0) chgc_state=1;
								chgc_finish=2;
								Flash1();
								}
							}
						else  
							{
							chgc_count=0;
							chgc_state=battery_i_standard+2;
							if (chgc_state>7) chgc_state=7;
							}
						disbuffer[3]=dismap1[chgc_state+8];
						break;
					case 2:
						if (adc_result>battery_full)	 ////10秒不回落为充满
							{
							chgc_count++;
							chgc_state=0;
							if (chgc_count>20)
								{
								chgc_count=0;
								chgc_state=0;
								chgc_finish=3;
								NoFlash();
								}
							 }
						else  
							{
							chgc_count=0;
							chgc_state=(battery_i_standard+2)/2;
							if (chgc_state==0) chgc_state=1;
							}
						disbuffer[3]=dismap1[chgc_state+8];
						break;
					case 3:
						chgc_count=0;
						if (adc_result>battery_full)chgc_state=0;	 ////充满状态下转为自动浮充
						else  chgc_state=1;
						NoFlash();
						disbuffer[3]=dismap1[chgc_state+8];
						break;
					}
				}
		
			}
	 	break;
		}
	}
jd_change();
chgc_change();
}

⌨️ 快捷键说明

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