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

📄 88888pid.c

📁 基于AT89s51的温湿度检测报警程序
💻 C
📖 第 1 页 / 共 3 页
字号:
	write_eeprom(SEC3_ADDR0,set_temper>>8);		
	write_eeprom(SEC3_ADDR1,set_temper&0xff);
}
void sec_3_min_up()							//第3段的	设定时间min+
{
	min_up();
}
void sec_3_min_down()						//第3段的	设定时间min-													
{
	min_down();
}
void sec_3_hour()							//第3段的	设定时间hour				
{
	//dis_data0=10;
	dis_data1=11;
	dis_data2=10;
	//dis_data3=3;
}
void sec_3_hour_up()						//第3段的	设定时间hour+
{
	hour_up();
}
void sec_3_hour_down()						//第3段的	设定时间hour-
{
	hour_down();
}
void sec_4_temper()							//第4段的  设定温度
{
	dis_data0=11;
	dis_data1=10;
	//dis_data2=10;
	dis_data3=4;

	temper_set();
	min3=set_min;
	hour3=set_hour;	
	write_eeprom(SEC3_ADDR2,set_min);
	write_eeprom(SEC3_ADDR3,set_hour);
	set_min=set_hour=0;
}
void sec_4_temper_up()						//第4段的  设定温度+
{
	temper_up();
}
void sec_4_temper_down()					//第4段的  设定温度-
{
	temper_down();
}
void sec_4_min()							//第4段的	设定时间min				
{
	dis_data0=10;
	//dis_data1=10;
	dis_data2=11;
	//dis_data3=4;

	time_set();
	temper4=set_temper;
	write_eeprom(SEC4_ADDR0,set_temper>>8);		
	write_eeprom(SEC4_ADDR1,set_temper&0xff);
}
void sec_4_min_up()							//第4段的	设定时间min+
{
	min_up();	
}
void sec_4_min_down()						//第4段的	设定时间min-													
{
	min_down();
}
void sec_4_hour()							//第4段的	设定时间hour				
{
	//dis_data0=10;
	dis_data1=11;
	dis_data2=10;
	//dis_data3=4;
}
void sec_4_hour_up()						//第4段的	设定时间hour+
{
	hour_up();
}
void sec_4_hour_down()						//第4段的	设定时间hour-
{
	hour_down();
}

void sec_5_temper()							//第5段的  设定温度
{
	dis_data0=11;
	dis_data1=10;
	//dis_data2=10;
	dis_data3=5;

	temper_set();	
	min4=set_min;
	hour4=set_hour;	
	write_eeprom(SEC4_ADDR2,set_min);
	write_eeprom(SEC4_ADDR3,set_hour);
	set_min=set_hour=0;
	sect=1;
}
void sec_5_temper_up()						//第5段的  设定温度+
{
	temper_up();
}
void sec_5_temper_down()					//第5段的  设定温度-
{
	temper_down();
}
void sec_5_min()							//第5段的	设定时间min				
{
	dis_data0=10;
//	dis_data1=10;
	dis_data2=11;
//	dis_data3=5;
	SEC5_FLAG=1;
	time_set();
	temper5=set_temper;
	write_eeprom(SEC5_ADDR0,set_temper>>8);		
	write_eeprom(SEC5_ADDR1,set_temper&0xff);	
}
void sec_5_min_up()							//第5段的	设定时间min+
{
	min_up();
}
void sec_5_min_down()						//第5段的	设定时间min-													
{
	min_down();
}
void sec_5_hour()							//第5段的	设定时间hour				
{
	//dis_data0=10;
	dis_data1=11;
	dis_data2=10;
	//dis_data3=5;
}
void sec_5_hour_up()						//第5段的	设定时间hour+
{
	hour_up();
}
void sec_5_hour_down()						//第5段的	设定时间hour-
{
	hour_down();
}
//********************************	
//计算温度段理论值 扩大十倍的
//********************************
void theory_count()
{
	float 	k;
	int t1,t2,day,dax;
	char th,tm;
	if(sect==1)
	{
		t1=t0;
		t2=temper1;
		th=hour1;
		tm=min1;
	}
	else if(sect==2)
	{
		t1=temper1;
		t2=temper2;
		th=hour2;
		tm=min2;
	}
	else if(sect==3)
	{
		t1=temper2;
		t2=temper3;
		th=hour3;
		tm=min3;
	}
	else if(sect==4)
	{
		t1=temper3;
		t2=temper4;
		th=hour4;
		tm=min4;
	}
	else                           //(sect==5)
	{
		t1=temper4;
		t2=temper5;
		th=hour5;
		tm=min5;
	}
	dax=(th*600+tm*10);
	if(dax==0)    					//dax==0 表示时间到停止加热
		{
			sect=0;				   
			return;
		}
	day=t2-t1;	
	if(day==0){CT_FLAG=1;}
	else	  {CT_FLAG=0;}
	k=day*100.00/dax;					//计算斜率

	s_t0=k*min/10.0+10.00*t1;	
	//dis_data8=(s_t0)/1000;     		//百位	
	dis_data8=(s_t0%1000)/100;		//十位
	dis_data9=(s_t0%100)/10;	 	//个位	
	dis_data10=s_t0%10;
	//s_t1=s_t0;						//s_t1<=s_t0;
} 
//********************************		
//按键程序
//********************************
void key_scan()
{
	if(SCANKEY_FLAG)			   //10ms进来一次
{
	SCANKEY_FLAG=0;	
	P2_0=1;
	P2_1=1;
	P2_2=1;
	P2_3=1;						  //输入先置1
	key_data=P2;				  //状态保存在 key_data;
	key_data=~key_data;			  //取反
	key_data=key_data&0x0f;		  //与0x0f 相与
	if(key_data)				  //如果不为0表示有键按下
		{			
			key_state=key_state<<1;	//有键按下则挤一个零进入管道	
			if(!key_state)			//管道全为零后则表示按键有效了
				{
					key_serries_cx+=1;
					key_long_cx+=1;
					if(KEY_FLAG)	//KEY_FLAG=1表示不是连续按键只处理一次
						{
							KEY_FLAG=0;
							SERRIES_FLAG=1;
							DISP_FLAG=1;
							if(KeyFunIndex)
							{
								if(!P2_0)
								{
									set();								
								}
							}
							if(!P2_1)
								{
									up();								
								}
							if(!P2_2)
								{
									down();		   
								}
							if(!P2_3)
								{
									enter();							
								}
						}
//********************************
//连续按键					
					else					   //否则是连续按键了
					{
						if(key_long_cx==200)  //长按键2秒
						{	
							key_long_cx=0;
							if(!P2_0)
								{
									set();								
								}
						}
			    			//	连按键
							if(SERRIES_FLAG)
								{							//连加第一次500MS处理一次
									if(key_serries_cx==51)
									{
										key_serries_cx=0;			    
										SERRIES_FLAG=0;										
									}
								}							
								
									if(key_serries_cx==8)
									{					  //以后80MS处理一次				
										if(!SERRIES_FLAG)
										{
											key_serries_cx=0;
											DISP_FLAG=1;
											if(!P2_1)
											{
												up();								
											}
											if(!P2_2)
											{
												down();		   
											}
										}
									}								
							//
						}
//********************************
				}
		}
	else
		{
			key_state=key_state<<1;		//
			key_state=key_state|0x01;	//没有按键则管道挤1 进去
			//key_state=~key_state;		//
			SERRIES_FLAG=0;				//
			key_serries_cx=0;			//清标志清0
			key_long_cx=0;				//
		if(!KEY_FLAG)
				{
					KEY_FLAG=1;			//
				}
		}						
}
}
//********************************
void set()
{
	KeyFunIndex=KeyTab[KeyFunIndex].KeyCrState;		//找状态号
	KeyTab[KeyFunIndex].CurrentOperate();			//调状态程序
}
//********************************
void up()
{
	KeyFunIndex=KeyTab[KeyFunIndex].KeyUpState;	
	KeyTab[KeyFunIndex].CurrentOperate();
}
//********************************
void down()
{
	KeyFunIndex=KeyTab[KeyFunIndex].KeyDnState;
	KeyTab[KeyFunIndex].CurrentOperate();
}
//********************************
void enter()
{
	KeyFunIndex=KeyTab[KeyFunIndex].KeyBackState;
	KeyTab[KeyFunIndex].CurrentOperate();
}
//********************************
//in:dis_data0,dis_data1,dis_data2,dis_data3
//fun:  串口静态显示
//********************************
void display()
{
		uchar	temp;
		if(_testbit_(DISP_FLAG))
		{ 
		//	DISP_FLAG=0;				//清显示标志 1S 才显示
      dis(led_segment[dis_data15]);
      dis(led_segment[dis_data14]);
      dis(led_segment[dis_data13]);
      dis(led_segment[dis_data12]);
      dis(led_segment[dis_data11]);
      dis(led_segment[dis_data10]);
      dis(led_segment[dis_data9]);
      dis(led_segment[dis_data8]);
      dis(led_segment[dis_data7]);
      dis(led_segment[dis_data6]);
      dis(led_segment[dis_data5]);
      dis(led_segment[dis_data4]);
      dis(led_segment[dis_data3]);
		temp=led_segment[dis_data2];
		if(!KeyFunIndex){temp=temp&0xfe;}
      dis(temp);
      dis(led_segment[dis_data1]);
      dis(led_segment[dis_data0]);
  //    time2();
		}
}
//********************************
void init()
{
	read_max6675();
	a[0]=a[1]=a[2]=a[3]=a[4]=a[5]=a[6]=samping_temper;   //初始化采样数组
	time0_init();
	time1_init();	
	//            测试说明EEPROM OK!
	temper1=256*read_eeprom(SEC1_ADDR0)+read_eeprom(SEC1_ADDR1);
	min1=read_eeprom(SEC1_ADDR2);
	hour1=read_eeprom(SEC1_ADDR3);
	temper2=256*read_eeprom(SEC2_ADDR0)+read_eeprom(SEC2_ADDR1);
	min2=read_eeprom(SEC2_ADDR2);
	hour2=read_eeprom(SEC2_ADDR3);
	temper3=256*read_eeprom(SEC3_ADDR0)+read_eeprom(SEC3_ADDR1);
	min3=read_eeprom(SEC3_ADDR2);
	hour3=read_eeprom(SEC3_ADDR3);
	temper4=256*read_eeprom(SEC4_ADDR0)+read_eeprom(SEC4_ADDR1);
	min4=read_eeprom(SEC4_ADDR2);
	hour4=read_eeprom(SEC4_ADDR3);
	temper5=256*read_eeprom(SEC5_ADDR0)+read_eeprom(SEC5_ADDR1);
	min5=read_eeprom(SEC5_ADDR2);
	hour5=read_eeprom(SEC5_ADDR3);

	sect=read_eeprom(SECT_ADDR);
	min=read_eeprom(MIN_ADDR);
   /*
	dis_data0=temper1/10;
	dis_data1=temper1%10;
	dis_data2=min1/10;
	dis_data3=min1%10;
	dis_data4=hour1/10;
	dis_data5=hour1%10;
	display();
	*/
}
//********************************
void main()
{
	init();
	while(1)
	{
	key_scan();
	read_max6675();
	soft_filt();	
	display();
   cktx();
	}		
}

⌨️ 快捷键说明

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