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

📄 main.c

📁 无线红外传感报警系统
💻 C
字号:
#include "Head.h"
 uchar Alarm,PhoneNO[13];//,tempoverflow;//声音、警报、电话号码、
 uchar Sound[11]={15,29,27,0xff,0,0,0,0,0,0xff};
 uchar InputBuff[13],InputLen=6,Funtion,InputBuff2[13],Inputcounter;
 bit data SoundEn=0,InputDone=0,InputErr=0,InputEn=0;
 bit data GetPSW=0,SecondInPut=0,AlarmHappen,Button;//zc1;//HANG=0,
 extern int temp_1820,Button_02;

void delay10ms(uchar tim);
 void main()
{ 
  
  uchar temp[2];
  IniSerial();
  initial_8880();
  MainInitial();
  
 //zc1=0;//补上的可以删
  while(1)
 {  uint m; uchar n;
 if(Alarm)         //报警
	{	RW24XX(InputBuff2,12,0x10,0xa1);  //read phone number
		if(HANDUP==0)  
		  {m=0;
  		   HANDUP=1;   //挂机
		   while(m<60000)m++;
		  }   
         LED0=0;
	    m=0;
		HANDUP=0;  //摘机
		while(m<60000)m++;
		m=0;
		while(SendDTMF(InputBuff2)!=1);
		timer0=1;   //delay begin
        GetPSW=1;   //pass
		InputEn=1;  //enable input
		InputLen=1;

		if(Alarm<5){Sound[0]=16;Sound[1]=16;Sound[2]=20;Sound[3]=Alarm;
		Sound[4]=31;Sound[5]=0xff;}
	    if(Alarm==5) {Sound[0]=16;Sound[1]=16;Sound[2]=42; Sound[3]=0xff;}
		Alarm=0; 
		AlarmHappen=1;
    }
 if(temp_1820>250)    //250检测报警温度的时间间隔
	  {
	  temp_1820=1;
	  m=get_temp();   //get temperature
      RW24XX(temp,2,0x20,0xa1); //read temperature
	  if(m>(temp[0]*100+temp[1]*10)) 
		{LED0=0; 
	   	Alarm=5;
    	 temp_1820=0; 
		 }			   // tempoverflow++;
		  else LED0=1;				   //  else tempoverflow=0;
						 // if(tempoverflow>2)Alarm=1;
	  }
  /*if(Button_02>600)
    {    if(Button2==0)       //有按键2?
        {  Button=LINE;                                            
	      LINE =!Button; //if(LINE==0)LINE=1;
	   	}                    //   else LINE=0;         	
							
	}  */
  if(SoundEn==1)    //sound
	   { musicstate=0;
	     SoundEn=0;
		 InputEn=1;
	     while(music(Sound)!=1);
         
	   }
 if(InputErr==1)   // pass word input error
    {InputErr=0;
	 Inputcounter++;
	 if(Inputcounter>3) {timer0=10000;Inputcounter=0;} // over 3 times then handup
	 Sound[0]=44;Sound[1]=0xff;
	 SoundEn=1;InputEn=1;InputLen=6;
	}
 if(Funtion)
   {uchar j=0;
   switch(Funtion)
     {
	 case 8:SoundEn=1;  //1 chanle control
			Sound[j++]=35;
			Sound[j++]=45;
			Sound[j++]=34;
			Sound[j]=0xff;
			InputLen=2;
			InputEn=1;
			j=0;
	 		if(zc1) Sound[j++]=1;
	 	    if(CH2==0) Sound[j++]=2;
			if(CH3==0) Sound[j++]=3;
			if(CH4==0) Sound[j++]=4;
			if(j==0) break;
			Sound[j++]=19;
			Sound[j++]=17;
			Sound[j++]=45;
			Sound[j]=0xff;
			break;
	 case 2: //4  change phone number//
		   Sound[0]=29;Sound[1]=0xff;  //请输入
	 	   SoundEn=1;
	 	   InputLen=11;
		   InputEn=1;
		   break;
     case 24:  //get phone number
		  if(SecondInPut==1)
			{  for(j=0;j<13;j++) 
			     {if(InputBuff2[j]==3)break;
				      if(InputBuff[j]!=InputBuff2[j]) 
				  		{Sound[0]=44;Sound[1]=0xff;
						 SoundEn=1;
						 InputEn=1;
						 SecondInPut=0;  //input error.
						 j=0xff;
						 break;
						}
				  }
					if(j==0xff || InputBuff[j]!=InputBuff2[j]) 
	 				 {Sound[0]=44;Sound[1]=0xff;
					  SoundEn=1;
					  InputEn=1;
					  SecondInPut=0;
					  break;   //input error.
	  				 }
 				  InputBuff[j++]=0xff;  //input ok!! 	
				  RW24XX(InputBuff,j,0x10,0xa0);	  
				  Sound[0]=30;Sound[1]=0xff;
				  SoundEn=1;
				  InputEn=1;
				  InputLen=1;
				  SecondInPut=0;
				  break;	
		    }
		   else   //first time input 
		   for(j=0;j<13;j++){ InputBuff2[j]=InputBuff[j];if(InputBuff[j]==3)break;}
              Sound[0]=29;Sound[1]=0xff;
			  SoundEn=1;
			  InputLen=11;
			  InputEn=1;
			  SecondInPut=1;
			  break;
	 case 12:  //3
		   Sound[0]=29;Sound[1]=0xff;  //请输入  tempreture
	 	   SoundEn=1;
	 	   InputLen=3;
		   InputEn=1;
		   break;
	 case 26://temprture
		  if(SecondInPut==1)
			{  /*for(j=0;j<4;j++) 
			     {if(InputBuff2[j]==3)break;
				      if(InputBuff[j]!=InputBuff2[j]) 
				  		{Sound[0]=44;Sound[1]=0xff;
						 SoundEn=1;
						 InputLen=3;
						 InputEn=1;
						 SecondInPut=0;
						 j=0xff;
						 break;    //error
						}
				  }
				if(j==0xff || InputBuff[j]!=InputBuff2[j]) break;   //ok?*/
 			//	  InputBuff[j++]=0xff;
			//	  InputBuff[0]=loopdata(InputBuff[0]);
				  InputBuff[1]=loopdata(InputBuff[1]); 
//	InputBuff[0]=0x00;
//	InputBuff[1]=0x01;		

  RW24XX(InputBuff,2,0x20,0xa0);	  //写入温度
				  Sound[0]=30;Sound[1]=34;Sound[2]=0xff;
				  SoundEn=1;
				  InputEn=1;
				  InputLen=1;
				  SecondInPut=0;
				  temp_1820=1;  //timer begin
				  break;	
		    }
		   else
		   for(j=0;j<4;j++){ InputBuff2[j]=InputBuff[j];if(InputBuff[j]==3)break;}
              Sound[0]=29;Sound[1]=0xff;               //copy the first input data
			  SoundEn=1;
			  InputLen=3;
			  InputEn=1;
			  SecondInPut=1;
			  break;	 
	case 4:   //2
	       //m=get_temp();
		   m=get_temp();
		   j=0;
	       Sound[j++]=36;   //current temperature
		   Sound[j++]=m/100;
		   Sound[j++]=11;
		   Sound[j++]=(m-Sound[1]*100)/10;    
		   n=(m-Sound[1]*100-Sound[j-1]*10)/1;
		   if(Sound[j-1]==0) j-=1;
		   if(n>9 || n==0) n=10;
		   Sound[j++]=22;
		   Sound[j++]=n;
		   //if(Sound[j-1]==0) Sound[j-1]=10;
		   Sound[j++]=21;
		   Sound[j++]=34;
		   Sound[j]=0xff;  //temperature
	 	   SoundEn=1;
	 	   InputLen=1;
		   InputEn=1;
			break;

	 case 10:  //5 chPSW
	 	   Sound[0]=29;Sound[1]=0xff;  //请输入
	 	   SoundEn=1;
	 	   InputLen=6;
		   InputEn=1;
		   break;
	 case 20:   // chanle control
	 	   ChanleCTL(InputBuff[0],InputBuff[1]);
	 	   InputLen=2;
		   InputEn=1;
	 	   break;
	 case 3: //#
	 case  21: //ask for  input
		 Sound[0]=38;Sound[1]=1;Sound[2]=41;Sound[3]=2;
         Sound[4]=39;Sound[5]=3;Sound[6]=40;Sound[7]=4;Sound[8]=37;
		 Sound[9]=5;Sound[10]=0xff;SecondInPut=0;
		 SoundEn=1;InputEn=1;GetPSW=1;InputLen=1;break;
	 case  22://psw compare
	 		if(SecondInPut==1)
			  {
				  for(j=0;j<6;j++) 
				     if(InputBuff[j]!=InputBuff2[j]) 
				  		{Sound[0]=44;Sound[1]=0xff;
						 SoundEn=1;
						 InputLen=6;
						 InputEn=1;
						 SecondInPut=0;
						 break;
					    }
				  if(j!=6) break;
				  InputBuff[j++]=0xff;
				  RW24XX(InputBuff,j,0x00,0xa0);
				  InputLen=1;
				  Sound[0]=43;Sound[1]=34;Sound[2]=0xff;
				  SoundEn=1;
				  InputEn=1;
				  SecondInPut=0;
				  break;	
			  }
			else {for(j=0;j<6;j++) InputBuff2[j]=InputBuff[j];
	              Sound[0]=29;Sound[1]=0xff;
				  SoundEn=1;
				  InputLen=6;
				  InputEn=1;
				  SecondInPut=1;
				  break;}
          default:
		  case 23:  //input error
				Sound[0]=44;Sound[1]=0xff;
		        SoundEn=1;InputEn=1;
				break; 		 
	 }
	j=0;
	Funtion=0;
  }
 if(InputDone==1)
    {
	  if(Compare()==1)  //比较
		{Sound[0]=14;Sound[1]=38;Sound[2]=1;Sound[3]=41;Sound[4]=2;
         Sound[5]=39;Sound[6]=3;Sound[7]=40;Sound[8]=4;Sound[9]=37;
		 Sound[10]=5;Sound[11]=0xff;
		 SoundEn=1;InputEn=1;GetPSW=1;InputLen=1;
		 }
	    else
		  {
		  Sound[0]=44;Sound[1]=0xff;
		  SoundEn=1;InputEn=1; 
		  }
	  InputDone=0;
	}
 }
}
//-----------------psw compare-----------------------
bit Compare(void)
{uchar i=0;
 RW24XX(InputBuff2,7,0x00,0xa1);
  for(i=0;i<6;i++)
   {
   if(InputBuff2[i]!=InputBuff[i]) return 0;
   }
   if(InputBuff[i]==0xff)return 1;
   return 0;
}
//-------------------------------------------------------通道选择



void ChanleCTL(uchar Value,uchar Status) 
{

bit data flag;

switch(Value)
 {case 8://zc1=0;
    if(Status==13) {if(zc1!=1){CH1=0;delay10ms(200);CH1=1;Sound[3]=17;zc1=1; }else {Sound[3]=17;}}//if(zc1==1){if(Status==13){CH1=0;delay10ms(500);CH1=1;Sound[3]=17; zc1=0;}}//if(Status==13) {if(zc1==0){CH1=0;delay10ms(500);CH1=1;Sound[3]=17; }else { zc1=1; Sound[3]=17;}}//{if(zc1=1)  { CH1=0;delay10ms(10);CH1=1;Sound[3]=17;}else{ zc1=0; Sound[3]=17;}}
    if(Status==3 ) {if(zc1!=0){CH1=0;delay10ms(200);CH1=1;Sound[3]=18;zc1=0;}else {Sound[3]=18;}}//if(zc1==0){if(Status==3 ) {CH1=0;delay10ms(500);CH1=1;Sound[3]=18;zc1=1;}}//if(Status==3 ) {if(zc1==1){CH1=0;delay10ms(500);CH1=1;Sound[3]=18;}else {zc1=0;Sound[3]=18;}}//{if(zc1=0)   {CH1=0;delay10ms(10);CH1=1;Sound[3]=18;}else {zc1=1;Sound[3]=18;}}
	Sound[1]=1;
	flag=1;
	break;
  case 4:
   if(Status==13) {CH2=0;Sound[3]=17;}
   if(Status==3)  {CH2=1;Sound[3]=18;}
   Sound[1]=2;
   flag=1;
   break;
  case 12:
   if(Status==13){CH3=0;Sound[3]=17;}
   if(Status==3) {CH3=1; Sound[3]=18;}
   Sound[1]=3;
   flag=1;
   break;
  case 2:    
   if(Status==13){CH4=0;Sound[3]=17;}
   if(Status==3){CH4=1;Sound[3]=18;}
   Sound[1]=4;
   flag=1;
   break;
 }
 if(flag!=0){flag=0;Sound[0]=20;Sound[2]=19; Sound[4]=0xff;SoundEn=1;return;}
    else 
   Sound[0]=45;
   Sound[1]=0xff;
   SoundEn=1;
   return;
}
uchar loopdata(uchar dd)
{uchar i,mask=8,result=0,temp[4]={0x01,0x02,0x04,0x08};
 for(i=0;i<4;i++)
  {if(dd & mask)result+=temp[i];
   mask>>=1;
  }
 return result;
}
void delay10ms(uchar tim)
{
 unsigned int i,j,k;
for(i=0;i<tim;i++);
for(j=0;j<20000;j++);
for(k=0;k<20000;k++);
}

⌨️ 快捷键说明

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