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

📄 ze015_1.c

📁 一款完整的家用电器程序,具有控制商用机的功能,应用广泛,有一定的参考价值
💻 C
📖 第 1 页 / 共 3 页
字号:
 		//t_180s_10s=1200; //180秒到快测10秒	
 		//t_10min_15s_std=1500; //10min快测时时间	15秒
 		//快测时计数时间按8ms
 		t_1min_3s_std=375; //1min快测时时间	3秒 
 		t_10min_10s_std=1250;	//10min快测时时间	10秒 
 		t_180s_10s=1250; //180秒到快测12秒	
 		t_10min_15s_std=1875; //10min快测时时间	15秒
 	 	}
 	 else
 	  {//不快测时计数时间
 		t_1min_3s_std=60; //1min快测时时间	3秒
 		t_10min_10s_std=600;	//SHT读正确次数 10min
 		t_180s_10s=180; //180秒到快测10秒
 		t_10min_15s_std=600; //10min快测时时间	10秒
 		}
 		
 		
  //f_100ms==1启动AD采样	,检测湿度SHT15的测量应答时间 	
 	 if (time_flag &b_time_100ms)
 		{//将AD采样值进行64次加,取高8位为AD值
 	 		WDR();	//
	 	 	fun_1232_wdt();  //1232的看门狗翻转时钟脉冲
 		 funADsum(); //test	
 			time_flag &=~b_time_100ms;
 			t_100ms_times++;	//计时+1
	//	if (t_100ms_times >=50)	 //50*0.1=定时5s到
	if (t_100ms_times >=52)	 //20080612 52*0.08=定时5s到
		  {//20080201因SHT不能快测,将SHT测试程序移到100ms的计时中 
		    fun_measure_temp(); //测量rt1温度\湿度程序		  	
		  	t_100ms_times=0;	//计时清0
		  } 
 		}
 //定时5s到		
 	if (time_flag &b_time_5s)  //定时5s到时读SHT15温湿度检测
	  {
		time_flag &=~b_time_5s;	//clear
		//5S中定时20s				
		t_20s_times++;	//计时+1
		if (t_20s_times >=4)	 //定时20s到
		  { t_20s_times=0;	//计时清0
			 time_flag |=b_time_20s;	//置标志1
		  } 
//拨到ON时引脚0地址为1,拨到OFF时引脚1地址为0。
		if ((PINB &0x03)==0x00)address =0x43;	//
		else if ((PINB &0x03)==0x02)address =0x42;
		else if ((PINB &0x03)==0x01)address =0x41;
		else address =0x40;
		NOP();
	  }  
	  		
 	if (time_flag &b_time_1s)  //定时1s到
 	  {
 	  	fun_key(); //连续按钮5秒时按钮动作-应急、故障复位按钮快测
 	  	time_flag &=~b_time_1s;	//定时1s清0
 	  	if (evin_AD>1000 || evin_AD<20) evin_time++;
 	  	else {evin_time=0;b_evinerr=0;}
 	  	if (defrost_AD>1000 || defrost_AD<20) defrost_time++;
 	  	else {defrost_time=0;b_defrosterr=0;}	
 	  		if (PINB &b_comp) valctlcount++;
 	  	
 	  	if (mode & b_kaiji) 
 	  	  {
	 	  	if (mode & b_urgent)//开机且应急时灯闪烁
	 	  	  {
	 	  		if (PINE &led_run) PORTE&=~led_run;
	 	  		else  PORTE |=led_run;//开机时
	 	  	  }
	 	  	else PORTE |=led_run;//开机非应急时运行灯亮
 	  	  }
 	  	else PORTE&=~led_run;		//关机时PE7运行灯灭
//20080215 	  	if ((fault_state==0) &&(fault_state2==0)&&(fault_state3==0)&&(fault_state4==0)&&(fault_state5==0)&&(fault_state==0)&&(fault_state6==0))PORTE&=~led_alarm;
	  	if ((fault_state2==0)&&(fault_state3==0)&&(fault_state4==0)&&(fault_state5==0)&&(fault_state==0))PORTE&=~led_alarm;
 	  	else PORTE |=led_alarm;		//有故障时故障灯亮
 	  	fun_delaytime_1s();	//1s中执行延时启动的计时程序
 	  	if (run_state2 &b_fault_reset)  //故障复位命令
 	  	  {
 	  	  	fun_fault_reset();	//故障复位程序
 	  	  	run_state2 &=~b_fault_reset;  //故障复位命令clear
	 	    fun_fault_beep();	//20080201增加故障报警蜂鸣器子程序
 	  	  }
 	fun_fault_detect(); //上电就开始故障检测程序
  	 fun_act_state();  //计算输出状态1、2
  	  if (t_power_on <3000) t_power_on++;  //上电时间超过24分钟时不继续加
	 if (t_power_on >=180) //上电时间超过180秒后才开始动作
 	  {//初次上电时机组开始时运行时间
 	  	if (mode & b_urgent)//开机且应急时灯闪烁
 	  	{
 	  		mode &=~b_manual_on;	//应急时为自动
			fun_set_default(); //应急下设置值为出厂设置值
 	  	}
	//	 if (((fault_state2&b_fault_tongxun)!=0)||((fault_state5&0x90) !=0)||((fault_state3&b_fault_pfan) !=0)||((fault_yuliu&b_fault_stop) !=0)) 
		if (((fault_state5&0x90) !=0)||((fault_state3&b_fault_pfan) !=0)||((fault_yuliu&b_fault_stop) !=0))
			{//通讯、风机低风压故障、离心风机过载、逆相保护时、主模块板的故障关机
			fun_fault_guanji(); //故障停机关闭压缩机、电加热、加湿器
			}
		else if (fault_state2 &b_fault_sht) fun_guanji_sht();	//回风探头故障正常关机,风机保持原状 
		else if (((fault_state2&b_fault_tongxun)!=0)&&((mode & b_urgent) ==0))fun_guanji_sht(); //正常时通讯故障停机关闭压缩机、电加热、加湿器
		else if (((fault_yuliu&b_fault_hmi)!=0)&&((mode & b_urgent) ==0))fun_guanji_sht(); //正常时通讯故障停机关闭压缩机、电加热、加湿器
		else fun_nofault_run();	//无故障时动作或应急时有通讯故障也正常动作
		
 		if ((mode & b_kaiji)==0) manual_set=0;	//20080417add关机时请求=0
	  }	  
	}
	
	
 		
	if (valctlcount>=30)
		{//每隔 30秒取膨胀阀开度
			valctlcount=0;valveproc();
		}
		
	if (b_evinerr==1) {fault_state3 = fault_state3|0x02;}
	else {fault_state3 = fault_state3&0xFD;}
	if (b_defrosterr==1) {fault_state3 = fault_state3|0x01;}
	else {fault_state3 = fault_state3&0xFE;}	

 	if (time_flag &b_time_20s)  //定时20s到
 	  {
 	  	time_flag &=~b_time_20s;	//定时20s清0
 	  	fun_delaytime_20s();	//20s中执行程序
 	  } 
 	 if (time_flag &b_time_1min)  //定时2min到
 	  {
 	  	time_flag &=~b_time_1min;	//定时2min清0
 	  	if (mode &b_fast_test)
 	  	{//快测10分钟后结束
 	  		//	if (fast_test_time>1000)
 	  		if (fast_test_time>1250)	//20080612 125:1
 	  		{//结束快测时,将故障计时清0,防止在慢测时溢出
 	  			mode &=~b_fast_test;	//
 	  			rxd_nogood_time =0;	//
 	  			tongxun_ok_time=0;	//通讯正常时间
	 	  		t_b_fault_tongxun=0;	//通讯故障时间
 	  			t_b_fault_sht=0;	//在1秒计时中定义SHT故障是否恢复
 	  			sht_ok_times=0;	//SHT读正确次数清0
 	  			sht_noread_time=0;	//20080222改为未读到SHT的计时
				
 	  		}
 	  		else fast_test_time++;
 	  		}
 	  }  
 	
 	  
    }    
  }

void fun_nofault_run(void)	// 无故障时动作
 {
 	if (mode & b_kaiji) //开机时根据手动,自动时条件选择
 	 {
	  if ((mode&b_manual_on)==0)  //自动on 
      	{
		if (t_auto_start>=10) 
		  {//自动10秒后
		    fun_auto_set_caculate(); //计算设定值的温度湿度 
		    fun_auto_set(); //10s后判定自动所处状态,选择具体模式
		  }
		else 
		 {
   		    t_auto_start++;  //10秒前加自动开始时间
	  		manual_set=0;  //刚进入自动时清除模式选择
     	  }	
     	manual_set |=b_fan_onask; //自动开机时内风机为开
 		manual_set &=~b_paishui_onask;	//自动排水开请求始终为关
 		mokuai_set &=~b_jinshui_onask;	//自动进水开请求始终为关
	  }
    else   //手动开机时取手动设定,无等待时间
     {
   	    manual_set =manual_act_ask; //手动开时以显示板或触摸屏的手动设置 
  		if (manual_act_ask &0x74) //comp\heat1\heat2\humid开时风机默认为开
		{
		manual_set |=b_fan_onask; //comp\heat1\heat2\humid开时内风机为开
		}
 		if ((manual_act_ask &b_comp_onask)==0) //手动开时comp不开时除湿阀、能量调节阀关
		{
			manual_set &=~b_yvadjust_onask; //
 			manual_set  &=~b_dry_offask; //除湿关
 		}
 		if ((PINB &b_comp)==0)manual_set &=~b_yvadjust_onask; //压缩机未开时能量调节阀关
	}
  	fun_act_on();	//根据请求动作manual_set
  	} 
 else  	fun_guanji();	//关机
}


void fun_txddata0_ID(void)	//取uart0发送ID
 {
 unsigned    char   i,temp ;
 i=0;
 txd_data0[i]=0x7E;	//头码
 i++;
 txd_data0[i]=0x7E;
 i++;
 txd_data0[i]=0xFF;	//显示板地址FF
 temp=txd_data0[i];	//异或校验
 i++;
 txd_data0[i]=0x40;	//20080201  address;	//本机地址
 temp ^=txd_data0[i];	//异或校验
 i++;
 txd_data0[i]=0x11;	//包号
 temp ^=txd_data0[i];	//异或校验
 i++;
 txd_data0[i]=4;	//长度
 temp ^=txd_data0[i];	//异或校验
 i++;
 txd_data0[i]=ID_l;	//IDH机组ID号
 temp ^=txd_data0[i];	//异或校验
 i++;
 txd_data0[i]=ID_h;	//IDl机组ID号
 temp ^=txd_data0[i];	//异或校验
 i++;
 txd_data0[i]=0x81;	//回复IDl机组ID号命令81H
 temp ^=txd_data0[i];	//异或校验
 i++;
 txd_data0[i]=temp;	//异或校验
 txd_len0_ask=10;  //ask len
 txd_rxd_delaytime0=00;		//clear 
 txd_state0 |=rxd_txdstart0;	//rxd_txdstart0=1
 } 
 
 void fun_1232_wdt(void)  //1232的看门狗翻转时钟脉冲
  {
  	if (PING &b_watchdog) PORTG &=~b_watchdog;//PG4看门狗
  	else PORTG |=b_watchdog;	
  	}
  	
	  	
void fun_act_state(void)  //计算输出状态1、2
{	
  	unsigned    char  temp_txd =0;	//数据6输出1
	 if (PINC &b_yv_dry) temp_txd |=0x08;	//yv_dry=1
	 if (PIND &b_yv_comp) temp_txd |=0x04;	//yv_comp=1
	 if (PIND &b_yv_in) temp_txd |=0x80;	//yv_in=1
	 if (PIND &b_yv_out) temp_txd |=0x40;	//yv_out=1
	 if (PINB &b_comp) temp_txd |=0x01;	//comp=1
	 if (PING &b_ofan) temp_txd |=0x02;	//b_ofan=1
	 if (PING &b_yv_adjust) temp_txd |=0x20;	//b_yv_adjust=1
	 if (PIND &b_heat_comp) temp_txd |=0x10;	//b_heat_comp=1
//	 if (mokuai_set &b_fault_rst_onask) temp_txd |=0x08;	//故障复位命令已收到
	 act_state1 =temp_txd;	//数据6输出1
	 temp_txd = mode &0x0f;	//数据7输出2
	 if (PING &b_fan) temp_txd |=0x80;	//b_fan=1
	 if (PIND &b_humid) temp_txd |=0x40;	//humid=1
	 if (PINB &b_heat1) temp_txd |=0x20;	//heat1=1
	 if (PINB &b_heat2) temp_txd |=0x10;	//heat2=1
	 act_state2 =temp_txd;	//数据7输出2
}

void fun_fault_reset(void)	//故障复位程序
{//显示板或触摸屏设置的故障复位命令或按钮时将所有故障清除,并清除计时
	fault_state=0;	//故障标志
 	fault_state2=0;	//故障标志
 	fault_state3=0;	//故障标志
 	fault_state4=0;	//故障标志
 	fault_state5=0;	//故障标志
 	fault_state6=0;	//故障标志
 	fault_lpp_times=0; //低压保护连续次数
 	fault_hpp_times=0; //h压保护连续次数
 	fault_exTH0_time=0; //排气感温包短路故障时间
 	fault_exTH0_times=0;	//排气感温包短路故障次数
 	fault_exTHh_time=0; //排气温度过高故障时间
 	fault_exh_times=0;	//排气温度保护次数
 	rxd_nogood_time =0; //通讯故障连续时间
	fault_highwater_time =0; //高水位保护故障时间  
	fault_humid_lowi_time =0; //加湿电流连续5分钟低于1A
	fault_i_humid_time =0;  //加湿电流连续高过载
	fault_low_fan_times =0;	//风机低风压故障时间
	sht_ok_times=0;	//SHT读正确次数清0
	t_b_fault_sht=0;	//20080214在1秒计时中定义SHT故障是否恢复
	b_fault_sht_times=0;
	auto_state &=~b_sht_noACK; //清除SHT无应答标志
	t_value_lowset_times=0;  //clear 
	t_value_highset_times=0;  //clear
	rh_value_highset_times=0;  //clear 
	rh_value_lowset_times=0;  //clear 
	fault_comp_guozai_s=0; //清除压缩机过载故障时间计数
	fault_comp_guozai_times =0;	//压缩机过载故障出现次数=0
	fault_overheat1_times=0;
	fault_overheat2_times =0;
	fault_pfan_times=0;
	fault_nixiang_times=0;
	fault_heatdai_times=0;
	fault_pfilter_times=0;	//20080114add
	start_state2 &=~b_exTHh_delaystart;
	start_state2 &=~b_exTH0_delaystart;
	start_state2 &=~b_lpp_delay2start;
	t_exh_delaytime=0;	//计时清0
	start_state2 &=~b_highwater_delaystart;	
	start_state2 &=~b_comp_gz_delaystart; //压缩机过载时启动计时3分钟
	t_comp_gz_delaytime=0; //
	comp_guozai_clear_time =0;	//开始过载恢复的计时
	t_lpp_compoff=0;	//关压缩机时低压保护的监测
	t_exTH0_delaytime=0;	//计时清0
	tongxun_ok_time=0;	//通讯正常时间
	t_b_fault_tongxun=0;	//通讯故障时间
	fault_tongxun_times=0;
	sht_noread_time=0;	//20080222改为未读到SHT的计时	
	NOP();
}

⌨️ 快捷键说明

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