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

📄 gq-1.c

📁 这是一款温度控制器的控制程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	_pa1=1;
	_pa2=1;
	_pa3=0;
	delay(3);
	_pa3=1;
}
//-----------------------------------------------
//		增加键
//-----------------------------------------------
void	key_inc()
{
	qdz8(0xfd);	
	if(port_com==0&&flag_inc==0&&windows!=0&&windows!=10&&flag_set==1)
	{
		flag_inc=1;
		flag_inc_check=1;
		flag_close=1;
		flag_disp=0;
		time_15s=0;
		time_keep=0;
		time_close=0;
		
		switch(windows)
		{
		case 1:
			if(temp_set<250)
			{
				temp_set++;
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;
		
		case 2:
			if(time_set<240)
			{
			time_set++;
				
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;
		
		case 3:
			if(temp_low<240)
			{
			temp_low++;
				
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;
		
		case 4:
			if(temp_high<250)	
			{
			temp_high++;
			
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;
		
		case 5:
			if(time_delay<240)
			{
			time_delay++;
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}			
			}
		break;
		case 6:
			if(time_temp_keep<240)	
			{
			time_temp_keep++;
			
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;	
		
		case 7:
			if(time_temp_close<240)	
			{
			time_temp_close++;
			
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;	
		
		case 8:
			if(product_count>0)	
			{
			product_count=0;
			
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;		
		}
	}
	else
	{
	qdz8(0xfd);
		if(port_com==1)
		{
		flag_inc=0;
		flag_inc_check=0;	
		}	
	}
}
//-----------------------------------------------
//		减少键
//-----------------------------------------------
void	key_dec()
{
	qdz8(0xdf);	
	if(port_com==0&&flag_dec==0&&windows!=0&&windows!=10&&flag_set==1)
	{
		flag_dec=1;
		flag_dec_check=1;
		flag_close=1;
		flag_disp = 0;	
		time_15s=0;
		time_keep=0;
		time_close=0;
		
		switch(windows)
		{
		case 1:
			if(temp_set>0)
			{
			temp_set--;
				
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;
		
		case 2:
			if(time_set>0)
			{
			time_set--;
				
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;
		
		case 3:
			if(temp_low>0)
			{
			temp_low--;
			
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;
		
		case 4:
			if(temp_high>0)	
			{
			temp_high--;
				
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;
		
		case 5:
			if(time_delay>0)
			{
			time_delay--;	
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;
		
		case 6:
			if(time_temp_keep>0)	
			{
			time_temp_keep--;
			
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;	
		
		
		case 7:
			if(time_temp_close>0)	
			{
			time_temp_close--;
			
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;	
		
		case 8:
			if(product_count>0)	
			{
			product_count=0;
			
				if(flag_soon==0)
				{
					flag_buzzer=0;
					port_buzzer=1;
					flag_alarm=0;
				}		
			}
		break;		
		}
	}
	else
	{
	qdz8(0xdf);
		if(port_com==1)
		{
		flag_dec=0;	
		flag_dec_check=0;
		}	
	}
}
//-----------------------------------------------
//		清按键长闭合的标志
//-----------------------------------------------
void	clr_key()
{
	if (flag_inc_check==0 && flag_dec_check==0)
	{
		flag_close=0;
		flag_soon=0;
		data_key=0;	
	}
}
//-----------------------------------------------
//		ok键
//-----------------------------------------------
void	key_ok()
{
	qdz8(0xf7);
	if(port_com==0&&flag_ok==0)
	{
		flag_ok=1;
		flag_buzzer=0;
		port_buzzer=1;	
		flag_alarm=0;
		time_delay_check=time_delay;
		flag_temp_music=0;
		flag_temp_keep=0;
		flag_temp_close=0;
		data_keep=temp_set;
		time_15s=0;
		time_keep=0;
		time_close=0;
		
		switch (windows)
		{
			case 1:
				write24c02(temp_set,0x0);
			break;
			case 2:
				write24c02(time_set,0x1);
			break;
			case 3:
				write24c02(temp_low,0x2);
			break;
			case 4:
				write24c02(temp_high,0x3);
			break;
			case 5:
				write24c02(time_delay,0x4);
			break;
			case 6:
				write24c02(time_temp_keep,0x5);
			break;
			case 7:
				write24c02(time_temp_close,0x6);
			break;
			case 8:
				write24c02(product_count,0x7);
			break;
		}	
		
		windows++;
		win_delay=0;
		flag_win=1;
		
		flag_disp=1;
		flag_set=1;
		num3=0x8c;
		num2=0xbf;
		num1=frg[windows];
		if(windows>=0x9)
			{
			windows=0;
			flag_disp=0;
			flag_set=0;
				data_keep=temp_set;
				flag_temp_reach=0;
			}
		
	}
	else
	{
		qdz8(0xf7);
		if(port_com==1)	
		{
		flag_ok=0;	
		}
	}	
}
//-----------------------------------------------
//		Enter键
//-----------------------------------------------
void	key_enter()
{
	qdz8(0x7f);
	if(port_com==0&&flag_enter==0)
	{
		flag_enter=1;
		time_15s=0;
		time_keep=0;
		time_close=0;
		if(windows==0||windows==8||windows==10)
		{
			switch(windows)	
			{
				case 0:			//实际温度显示界面
				if(flag_temp_reach==1)
				{
					flag_time_auto=1;
					windows=10;
					time_sec=time_set;
				
					flag_buzzer=0;
					port_buzzer=1;	
					flag_alarm=0;
				}
				break;
				
				case 8:			//烤杯计数器界面
				if(flag_set==0)
				{
				windows=0;
				data_keep=temp_set;
				flag_temp_keep=0;
				flag_temp_close=0;
				flag_buzzer=0;
				port_buzzer=1;	
				flag_alarm=0;
				flag_temp_music=0;
				flag_temp_reach=0;
				write24c02(product_count,0x7);
				}
				break;
				
				case 10:		//倒计时界面
				
				windows=8;
				time_delay1=0;
				flag_buzzer=0;
				port_buzzer=1;	
				flag_alarm=0;
				time_delay_check=time_delay;
				break;
				
			}
		}
	}
	else
	{
		qdz8(0x7f);
		if(port_com==1)	
		{
			flag_enter=0;	
		}
	}	
}
//-----------------------------------------------
//		数据交换
//-----------------------------------------------
void data_set()
{
	
	if (windows!=0)
	{
	 	switch (windows)	
			{
			case 1: 
			data_disp  = temp_set;			//设定温度显示
			break;
		
			case 2: 
			data_disp  = time_set;
			break;
		
			case 3:	
			data_disp  = temp_low;
			break;
			
			case 4:
			data_disp  = temp_high;
			break;
			
			case 5:
			data_disp  = time_delay;
			break;
			
			case 6:
			data_disp  = time_temp_keep;
			break;
			
			case 7:
			data_disp  = time_temp_close;
			break;
			
			case 8:
			data_disp  = product_count;
			if(flag_temp_keep==1)
			{
			data_disp = temperature;	
			}
			break;
			
			case 10:
			data_disp  = time_sec;
			break;
			}
	}
	else
	{
			data_disp = temperature;		//实际温度显示
	}	
	
}
//-----------------------------------------------
//		AD检测
//-----------------------------------------------
void ad_check()
{
	
		_adcr=0x8;
		_acsr=0x1;
		ad_start=0;
		ad_start=1;
		ad_start=0;
		while(ad_eoc==1)
		{
		}
		ad_zong=ad_zong+_adrh;
		ad_count++;
		if(ad_count==10)
		{
			temperature=ad_zong/10;
			ad_count=0;
			ad_zong=0;
			temp_check=temperature;
		}	
}
//-----------------------------------------------
//		恒温
//-----------------------------------------------
void	hengwen()
{	
	
	if(windows==0||windows==8||windows==10)
	{
		if(flag_set==0&&flag_temp_close==0)
		{
			if(temp_check+15>=data_keep)
			{
				flag_temp15=1;		//实际温度接近设定温度15度了,置标志
				if(temp_check+4<=time_set)
				{
					//flag_temp_music=0;	//温度低清音乐标志
					flag_temp_reach=0;
					flag_time_auto=0;
					time_delay_check=time_delay;
				}

				if(temp_check+2>=data_keep)
				{
					if(temp_check>=data_keep)
					{
						port_temp=1;	//实际温度大于设定温度停止加热
						flag_temp_on=0;	//清加热指示的标志	
						flag_temp2=1;	//实际温度在设定温度2度以内的标志置1
						flag_pid_90=0;	//清90秒加热没到设定温度的标志
						time_pid=0;	//清间歇加热90秒计时寄存器
						data_pid=0;	//导通时间清0
					
						flag_temp_reach=1;	//实际温度达到设定温度的标志置1
						//time_delay_check=time_delay;
					}
					else
					{
						port_temp=0;
						flag_temp_on=1;	//置加热指示的标志	
					}
				}

				else
				{
					flag_temp2=0;		//实际温度小于设定温度2度以下,清标志
				}	
			}
			else
			{
				port_temp=0;			//实际温度小于设定温度15度以下,加热	
				flag_temp_on=1;	//置加热指示的标志	
				
				flag_temp15=0;		//实际温度小于设定温度15度以下,清标志
				flag_pid_90=0;		//清90秒加热没到设定温度的标志
				time_pid=0;		//清间歇加热90秒计时寄存器
				data_pid=0;		//导通时间清0
			}
		}
		else
		{
		
			port_temp=1;			//不在设定状态停止加热
			flag_temp_on=0;	//清加热指示的标志		
		}	
	
	}
	else
	{
		port_temp=1;			//不在设定状态停止加热
		flag_temp_on=0;	//清加热指示的标志		
	}
}
//-----------------------------------------------
//		超高温报警
//-----------------------------------------------
void	e_temp_high()
{
	if(temp_high>temp_set)
	{
		if(temp_check>=temp_high)
		{
			temp_tall_e=1;	
		}
		if(temp_check<=temp_set)
		{
			temp_tall_e=0;	
		}
	}	
}
//-----------------------------------------------
//		主程序
//-----------------------------------------------
	void main() {
	safeguard_int();
	clr_ram();
	start();
	check_at24();
	temp_set  = read24c02(0x0);
	time_set  = read24c02(0x1);
	temp_low  = read24c02(0x2);
	temp_high = read24c02(0x3);
	time_delay = read24c02(0x4);
	time_temp_keep = read24c02(0x5);
	time_temp_close = read24c02(0x6);
	product_count = read24c02(0x7);
	time_delay_check=time_delay;
	data_keep=temp_set;
	while(1)
	{
	_clrwdt();
	d_aa(data_disp);
	display();
	key_inc();
	key_dec();
	key_ok();
	data_set();
	clr_key();
	ad_check();
	hengwen();
	key_enter();
	e_temp_high();
	auto_wt();
	/*key_shift();
	check_low();	
	check_high();
	clr_alarm();*/
	}
	}		

⌨️ 快捷键说明

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