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

📄 88888pid.c

📁 基于AT89s51的温湿度检测报警程序
💻 C
📖 第 1 页 / 共 3 页
字号:
			out=1;
		}
	}
	pmw_cx++;	

	if(pmw_cx>=200)						//计数到200表示10S到 进行下一次PID运算
	{
		pmw_cx=0;						//计数清0
		pmw_out=pidprocess(s_t0,aver0); //PID运算
      cywd=aver0/10.0;
      lnwd=s_t0/10.0;								//
		dis_data5=pmw_out/100;	
		dis_data6=(pmw_out%100)/10;
		dis_data7=pmw_out%10;
	//	pmw_out=PIDprocess(s_t,set_temper);//	pmw_out=100;//			
	}
}   
	EA=1;
}
//**********************************
//
void cktx()
{
   if(cjsj==120)
   {
      cjsj=0; 
      czhi=lnwd-cywd;
      if(czhi<-1.2){cywd=cywd-0.4;czhi=lnwd-cywd;}
      time2();
    /* czhi=lnwd-cywd;
      if(czhi<=1.3&&czhi>=-1.1) 
      {   
         time2();
      } 
      else if(czhi<2.2&&czhi>1.3)
      {
         cywd=cywd*1.01;
         time2();
      }
      else if(czhi<-1.1&&czhi>-2.5)
      {
         cywd=lnwd*0.99;
         time2();
      } */  
   }
}
//***********************************
//*****模拟串口程序****************
void dis(uchar i)
{
   uint x;
   for(x=0x01;x<=0x80;x=x<<1)
   {
      if((i&x)==0)
      RXD=0;
      else
      RXD=1;
      TXD=0;
      TXD=1;
   }
//   while(sk_flag)
//   {sk_flag=0;}
}
//********************************
//out:sampling_temper
//fun:读取MAX6675
//********************************
read_max6675()
{
	if(!KeyFunIndex)   //按键状态
{
	if(COV_FLAG)             //转换标志
{ 	
	uchar i;
  	uint dat_temp;	
  	dat_temp=0;
	CS=0;
  	SCK=0;
  	for(i=16;i>0;i--)    //SCK由0→1   产生一上升  脉冲   
  	{	  
   	SCK=1;  
   	dat_temp=dat_temp<<1; 
   	if(SO==1)
   		{
   		dat_temp=dat_temp|0x01;
		}
  	SCK=0;
  	}
  	CS=1;
  	dat_temp=dat_temp<<1;	    //去掉最高位
  	dat_temp=dat_temp>>4;		//去掉低三位 						
	samping_temper=dat_temp;	//这个是实际温度的4倍 1024度是0xffff;

//	return (dat_temp);
}
}
}
//********************************
//fun:软件滤波
//********************************
void soft_filt()
{
	if(!KeyFunIndex)
{
	if(_testbit_(COV_FLAG))
{
	uchar i;
	uint max,min,sum=0; 
	for(i=6;i>=1;i--)
	{
		a[i]=a[i-1];			   // 每次加进一个采样数
	}
//	samping_temper=read_max6675();
	a[0]=samping_temper;
	max=min=a[0];
	for(i=0;i<7;i++)
	{
		if(max<a[i]) max=a[i];
		if(min>a[i]) min=a[i];
		sum+=a[i];
	}								 //去最大最小取平均值
	aver0=((sum-max-min)>>1); 		//aver=(sum/5/4)*10=(sum/2) 扩大十倍
	dis_data0=(aver0)/1000;     	//百位	
	dis_data1=(aver0%1000)/100;		//十位
	dis_data2=(aver0%100)/10;	 	//个位
	dis_data3=aver0%10;	 			//小数第1位
	/*		if(dis_data3<3)			//三分段
			{
				dis_data3=0;
			}			  
			else if(dis_data3>7)
			{
				dis_data3=0;		s
				dis_data2=dis_data2+1;
				if(	dis_data2==10)	dis_data2=0;
				if(dis_data2==0)
				{
					dis_data1=dis_data1+1;		
					if(	dis_data1==10)	dis_data1=0;						
					if(dis_data1==0)
					{
						dis_data0=dis_data0+1;
					}
				}
			}
				    else  dis_data3=5;*/
							
	//aver1=aver0;	                 //aver1<=aver0;
}
}
}
//********************************
//	多级菜单设计
//********************************
KbdTabStruct code KeyTab[]=
{
	{0,1,0,0,0,(normal)},					//正常模式
	{1,11,2,3,4,(sec_1_temper)},			//第一段的  设定温度
	{2,1,2,3,4,(sec_1_temper_up)},			//第一段的  设定温度+
	{3,1,2,3,4,(sec_1_temper_down)},		//第一段的  设定温度-
	{4,4,5,6,7,(sec_1_min)},				//第一段的	设定时间min				
	{5,4,5,6,7,(sec_1_min_up)},				//第一段的	设定时间min+
	{6,4,5,6,7,(sec_1_min_down)},			//第一段的	设定时间min-													
	{7,7,8,9,11,(sec_1_hour)},				//第一段的	设定时间hour				
	{8,7,8,9,11,(sec_1_hour_up)},			//第一段的	设定时间hour+
	{9,7,8,9,11,(sec_1_hour_down)},			//第一段的	设定时间hour-													
	{10,1,0,0,0,(normal)},  
	{11,21,12,13,14,(sec_2_temper)},		//第二段的  设定温度
	{12,11,12,13,14,(sec_2_temper_up)},		//第二段的  设定温度+
	{13,11,12,13,14,(sec_2_temper_down)},	//第二段的  设定温度-
	{14,14,15,16,17,(sec_2_min)},			//第二段的	设定时间min				
	{15,14,15,16,17,(sec_2_min_up)},		//第二段的	设定时间min+
	{16,14,15,16,17,(sec_2_min_down)},		//第二段的	设定时间min-													
	{17,17,18,19,21,(sec_2_hour)},			//第二段的	设定时间hour				
	{18,17,18,19,21,(sec_2_hour_up)},		//第二段的	设定时间hour+
	{19,17,18,19,21,(sec_2_hour_down)},		//第二段的	设定时间hour-				
	{20,1,0,0,0,(normal)},
	{21,31,22,23,24,(sec_3_temper)},		//第三段的  设定温度
	{22,21,22,23,24,(sec_3_temper_up)},		//第三段的  设定温度+
	{23,21,22,23,24,(sec_3_temper_down)},	//第三段的  设定温度-
	{24,24,25,26,27,(sec_3_min)},			//第三段的	设定时间min				
	{25,24,25,26,27,(sec_3_min_up)},		//第三段的	设定时间min+
	{26,24,25,26,27,(sec_3_min_down)},		//第三段的	设定时间min-													
	{27,27,28,29,31,(sec_3_hour)},			//第三段的	设定时间hour				
	{28,27,28,29,31,(sec_3_hour_up)},		//第三段的	设定时间hour+
	{29,27,28,29,31,(sec_3_hour_down)},		//第三段的	设定时间hour-				
	{30,1,0,0,0,(normal)},
	{31,41,32,33,34,(sec_4_temper)},		//第四段的  设定温度
	{32,31,32,33,34,(sec_4_temper_up)},		//第四段的  设定温度+
	{33,31,32,33,34,(sec_4_temper_down)},	//第四段的  设定温度-
	{34,34,35,36,37,(sec_4_min)},			//第四段的	设定时间min				
	{35,34,35,36,37,(sec_4_min_up)},		//第四段的	设定时间min+
	{36,34,35,36,37,(sec_4_min_down)},		//第四段的	设定时间min-													
	{37,37,38,39,41,(sec_4_hour)},			//第四段的	设定时间hour				
	{38,37,38,39,41,(sec_4_hour_up)},		//第四段的	设定时间hour+
	{39,37,38,39,41,(sec_4_hour_down)},		//第四段的	设定时间hour-				
	{40,1,0,0,0,(normal)},
	{41,0,42,43,44,(sec_5_temper)},			//第五段的  设定温度
	{42,41,42,43,44,(sec_5_temper_up)},		//第五段的  设定温度+
	{43,41,42,43,44,(sec_5_temper_down)},	//第五段的  设定温度-
	{44,44,45,46,47,(sec_5_min)},			//第五段的	设定时间min				
	{45,44,45,46,47,(sec_5_min_up)},		//第五段的	设定时间min+
	{46,44,45,46,47,(sec_5_min_down)},		//第五段的	设定时间min-													
	{47,47,48,49,0,(sec_5_hour)},			//第五段的	设定时间hour				
	{48,47,48,49,0,(sec_5_hour_up)},		//第五段的	设定时间hour+
	{49,47,48,49,0,(sec_5_hour_down)},		//第五段的	设定时间hour-				
};
//********************************
void temper_set()
{
	dis_data4=10;
	dis_data5=set_temper/100;
	dis_data6=(set_temper%100)/10;
	dis_data7=set_temper%10;
}
void temper_up()
{
	set_temper++;							//温度设置加
	if(set_temper>500){set_temper=0;}
	temper_set();	
}
void temper_down()
{	
	set_temper--;							 //温度设置减
	if(set_temper<0){set_temper=500;}
	temper_set();	
}
void time_set()
{
	dis_data4=set_hour/10;
	dis_data5=set_hour%10;
	dis_data6=set_min/10;
	dis_data7=set_min%10;	
}
void min_up()
{											 //分钟设置加
	set_min++;
	if(set_min>59){set_min=0;}
	time_set();
}
void min_down()
{
	set_min--;								 //分钟设置减
	if(set_min<0){set_min=59;}
	time_set();
}
void hour_up()
{
	set_hour++;								 //小时设置加
	if(set_hour>99){set_hour=0;}
	time_set();
}
void hour_down()
{
	set_hour--;								 //小时设置减
	if(set_hour<0){set_hour=99;}
	time_set();
}
//********************************
void normal()
{	
	if(_testbit_(SEC5_FLAG))
	{
	temper_set();
	min5=set_min;
	hour5=set_hour;	
	write_eeprom(SEC5_ADDR2,set_min);
	write_eeprom(SEC5_ADDR3,set_hour);
	set_min=set_hour=0;
	}
	
}   							//空操作
void sec_1_temper()							//第一段的  设定温度
{	
	dis_data0=11;
	dis_data1=10;
	dis_data2=10;
	dis_data3=1;
   set_temper=samping_temper/4.0;
	temper_set();
	t0=aver0/10;	
	wipe_eeprom(SEC1_ADDR0);					//擦除eeprom扇区
}
void sec_1_temper_up()						//第一段的  设定温度+
{
	temper_up();
}
void sec_1_temper_down()					//第一段的  设定温度-
{
	temper_down();
}
void sec_1_min()							//第一段的	设定时间min				
{
	dis_data0=10;
	//dis_data1=10;
	dis_data2=11;
	//dis_data3=1;
	time_set();
	temper1=set_temper;
	write_eeprom(SEC1_ADDR0,set_temper>>8);		
	write_eeprom(SEC1_ADDR1,set_temper&0xff);
	min=0;
}
void sec_1_min_up()							//第一段的	设定时间min+
{
	min_up();
}
void sec_1_min_down()						//第一段的	设定时间min-													
{
	min_down();
}
void sec_1_hour()							//第一段的	设定时间hour				
{
	//dis_data0=10;
	dis_data1=11;
	dis_data2=10;
	//dis_data3=1;
}
void sec_1_hour_up()						//第一段的	设定时间hour+
{
	hour_up();
}
void sec_1_hour_down()						//第一段的	设定时间hour-
{
	hour_down();
}

void sec_2_temper()							//第2段的  设定温度
{
	dis_data0=11;
	dis_data1=10;
	//dis_data2=10;
	dis_data3=2;
	temper_set();
	min1=set_min;
	hour1=set_hour;	
	write_eeprom(SEC1_ADDR2,set_min);
	write_eeprom(SEC1_ADDR3,set_hour);
	set_min=set_hour=0;
}
void sec_2_temper_up()						//第2段的  设定温度+
{
	temper_up();
}
void sec_2_temper_down()					//第2段的  设定温度-
{
	temper_down();
}
void sec_2_min()							//第2段的	设定时间min				
{
	dis_data0=10;
	//dis_data1=10;
	dis_data2=11;
	//dis_data3=2;

	time_set();
	temper2=set_temper;
	write_eeprom(SEC2_ADDR0,set_temper>>8);		
	write_eeprom(SEC2_ADDR1,set_temper&0xff);
}
void sec_2_min_up()							//第2段的	设定时间min+
{
	min_up();
}
void sec_2_min_down()						//第2段的	设定时间min-													
{
	min_down();
}
void sec_2_hour()							//第2段的	设定时间hour				
{
	//dis_data0=10;
	dis_data1=11;
	dis_data2=10;
	//dis_data3=2;
}
void sec_2_hour_up()						//第2段的	设定时间hour+
{
	hour_up();
}
void sec_2_hour_down()						//第2段的	设定时间hour-
{
	hour_down();
}
void sec_3_temper()							//第3段的  设定温度
{
	dis_data0=11;
	dis_data1=10;
	//dis_data2=10;
	dis_data3=3;

	temper_set();
	min2=set_min;
	hour2=set_hour;	
	write_eeprom(SEC2_ADDR2,set_min);
	write_eeprom(SEC2_ADDR3,set_hour);
	set_min=set_hour=0;
}
void sec_3_temper_up()						//第3段的  设定温度+
{
	temper_up();
}
void sec_3_temper_down()					//第3段的  设定温度-
{
	temper_down();
}
void sec_3_min()							//第3段的	设定时间min				
{
	dis_data0=10;
	//dis_data1=10;
	dis_data2=11;
	//dis_data3=3;

	time_set();
	temper3=set_temper;

⌨️ 快捷键说明

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