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

📄 tc35i.c

📁 基于GSM的手机短信监控系统 实现的功能有:发短信控制3台远程终端设备(门窗、空调、冰箱等)的开关;监测终端环境的温度;监测远程终端设备的电压;两个红外防盗报警器随时监控等
💻 C
📖 第 1 页 / 共 2 页
字号:
	SendCmdToTc35i("AT+CSCA=+8613800769500");	//信息中心号码
	SBUF = 0x0d; longdelay(20);
	SBUF = 0x0a; longdelay(20);
	SendCmdToTc35i("AT+CMGS=15999741627");//("AT+CMGS=\r");13728247589

	SBUF = 0x0d; longdelay(20);
	SBUF = 0x0a; longdelay(20);
	TH0=0x4C;						
	TL0=0;
	time=0;
	TR0=1;
	while(1)
	{   
		tmp=SBUF;
		RI=0;
		if(tmp==0x3e||tmp==0x41)  //">||A";"||"逻辑或,当tmp==0x3e和tmp==0x41都为假时,表达式为假,否则为真。
								   //">" 表示可以接收数据
		{
		break;
		}		
  
		if(time>100)
		{
			time=0;
			TR0=0;
			break;
		}
	}
   SendCmdToTc35i(h);// //发送内容  
   SendASC(0X1A);	   //发送结束标志,一定要十六进制大写,不是ASIC码

   ES=1;
}

 void initGSM(void)
	{
     TC35iOpen =1; //P0_7脚
     longdelay(20);//延时100m秒
     TC35iOpen=0;
     longdelay(200);//延时100m秒
     TC35iOpen =1;
     longdelay(100);//开机延时,等候登录GSM网	
	}

 /****************************************************************************/
void T0_intsvr(void)  interrupt 1
{
	TH0=0x4C;		//Timer0产生50ms的中断
	TL0=0;
	time++;
}
/////////////////////////////////////////////////////////////////////////////////
static void TransmitInterrupt (void)
{
TI=0;
}

 static void ReceiveInterrupt (void)		   //接收处理
{     
    RI=0; 
   // flag=0;
   
    if(havemess==0 )   // 当前没有处理新消息
         { 	
            datesbuf=SBUF;  // DATA4变化:串口在接收一般字符
            switch(num2)    // 握手信号 连续收到字符:+CMTI: 就认为有新到消息
            {
               case 1:
                  num2 = datesbuf=='+' ? ++num2 : 1;
				 
                  break;
               case 2:
                  num2 = datesbuf=='C' ? ++num2 : 1;
                  break;
               case 3:
                  num2 = datesbuf=='M' ? ++num2 : 1;
                  break;
               case 4:
                  num2 = datesbuf=='T' ? ++num2 : 1;
                  break;
               case 5:
                  num2 = datesbuf=='I' ? ++num2 : 1;
                  break;
			   case 6:
                  num2 = datesbuf==':' ? ++num2 : 1;
				  break;
               case 7:
                  num2 = datesbuf==32 ? ++num2 : 1;	 ///空格
                  break;
			   case 8:
                  num2 = datesbuf=='\"' ? ++num2 : 1;
                  break;
			   case 9:
                  num2 = datesbuf=='S' ? ++num2 : 1;
                  break;
			   case 10:
                  num2 = datesbuf=='M' ? ++num2 : 1;
                  break;
			   case 11:
                  num2 = datesbuf=='\"' ? ++num2 : 1;
                  break;
			   case 12:
                  num2 = datesbuf==',' ? ++num2 : 1;
                  break;

			   case 13:
                  if (1 != num2)  // :
                  {
				      zone=datesbuf;// 信息所在的内存区间代码
	
                      havemess = 1; // 新到消息标志置1
					  
                      num2=1;//  num2复位,重新接收"+".....
					  i=0;
					  delchar=0;

                      for(k=0;k<40;k++)
                      { 
                         redata[k]=0;  //为 redata[k]留40空间
                       }	 
                   }
                  break;
                default:
                  num2=1;
                  break;
           }

	   }
	    else
		 {
		  delchar++;
			if(delchar>28)//28//65	////忽略点前面65个字节//28电话号码//65信息内容
		   {
		    redata[i]=SBUF;		////接收信息的内容数据
			i++;

        /* Telnum[0]=redata[0];
         Telnum[1]=redata[1];		  
         Telnum[2]=redata[2];		  
         Telnum[3]=redata[3];		  
         Telnum[4]=redata[4];		  
         Telnum[5]=redata[5];		  
         Telnum[6]=redata[6];		  
         Telnum[7]=redata[7];		  
         Telnum[8]=redata[8];		  
         Telnum[9]=redata[9];		  
         Telnum[10]=redata[10];
		 Telnum[11]=0;	 */
			
			}
		
		 

		        
		}	
			
				
		   
 }
 	
 	   									  //接收数}


static void com_isr(void) interrupt 4 using 1		  //串口中断
{
EA=0;
if (RI) ReceiveInterrupt ();
if (TI) TransmitInterrupt ();
EA=1;
}

 
/*************************************************************************************/
void main(void)
{	
    float vtemp; 
 	int redtime;
  

	P3_6 = 0; 
    P3_7 = 0;

	Bell=0;

	RedwornOne=0;
	RedwornTwo=0;

	EquipOne=0;
    EquipTwo=0;
	EquipThree=0;

	num2=1;//  num2复位,重新接收"+".....

    ST=0; 
    OE=0; 

     TMOD=0x20;	  //定时器1方式2
	 TL1=0xfd;	  //fd为9600,fa为4800,f4为2400,e8为1200 ,D0为600
	 TH1=0xfd;	  //
	 SCON=0x50;	  //串口工作方式3
	 PCON=0x00;
	 IE=0x90;	  //开串口中断
	 TR1=1; 	  //启动定时器
	 EA=1;							 
	 //IT0=1;	      // 外部中断边沿触发,0电平触发
	// EX0=1;	      // 开外部0中断
	 
	 initGSM();
	 initlcm();	
	 delays(200);
     SendCmdToTc35i("AT\r\n");	//开机发送AT握手指令!
     delays(50);
	 SendCmdToTc35i("ATE\r\n");	//开机发送ATE不回显指令!
	 delays(50);
	 sendCNMI();	                //发送(AT+CNMI=1,1,0,0,1),短信到达TE; //( 设置短消息到达自动提示)
	 delays(50);
   	 SendCmdToTc35i("AT+CMGF=1\r\n"); //设置为0,PDU模式           1,文本格式发送
	 delays(50);
     EraseMsgAll();  //删除sim卡内全部短信息 
	
	
	      display(0x80,0xa1,0xe6);//`C
	      display(0x84,0xa3,0xd6);//V
	      //----------第二行---------------------//
		  display(0x90,0xc9,0xe8);//设
          display(0x91,0xb1,0xb8);//备
		  display(0x92,0xa3,0xb1);//1
		  SendDat(0x3a);//:
                  
		 //----------第三行---------------------//
		  display(0x88,0xc9,0xe8);//设
          display(0x89,0xb1,0xb8);//备
		  display(0x8a,0xa3,0xb2);//2
		  SendDat(0x3a);//:		

		 //----------第四行---------------------//
		 display(0x98,0xc9,0xe8);//设																	   
         display(0x99,0xb1,0xb8);//备
	     display(0x9a,0xa3,0xb3);//3
	     SendDat(0x3a);//
		 
		 RedwornOne=0;
	     RedwornTwo=0;




	 while(1)
	{ 


		 if(havemess==1)
		 {		 
		  longdelay(20);
		  read_msg(zone);
		  longdelay(300);	//30000
	      delete_msg(zone);
		  longdelay(300);	//30000 
		  havemess=0;
		  }


	   tempdate=ReadTemperature()*10; // 显示当前的温度	
			  		
         //----------第一行---------------------//

		 Tem[0]=0x30+(int)tempdate/100;
		 Tem[1]=0x30+(int)tempdate%100/10;
		 Tem[2]=0x2e;	  //.
		 Tem[3]=0x30+(int)tempdate%100%10;
		  SendCMD(0x81);
		  SendDat(0x3a);//:	 
          SendDat(0x30+(int)tempdate/100);
	      SendDat(0x30+(int)tempdate%100/10);
		  SendDat(0x2e);//.
	      SendDat(0x30+(int)tempdate%100%10);
		 	


	   //---------------------------------------------------------------
		 if(EOC==1) 
        { 
          OE=1; 
          getdata=P0; 
          OE=0; 
          vtemp=(getdata/51.4)*100; 
		  
		  Volt[0]=0x30+(int)vtemp/100;  
		  Volt[1]=0x2e;	  //.
		  Volt[2]=0x30+(int)vtemp%100/10;		  
		  Volt[3]=0x30+(int)vtemp%100%10;
		  //----------第一行---------------------// 
		  SendCMD(0x85);
		  SendDat(0x3a);//
		  SendDat(0x30+(int) vtemp/100);
		  SendDat(0x2e);//.
		  SendDat(0x30+(int) vtemp%100/10);
		  SendDat(0x30+(int) vtemp%100%10);
	   
          ST=1; 
          ST=0; 
        }
		 
/////////////////////////////////////////////////////////////////////////////////////////////////////		
		  
	/*/--------------------后门报警---------------------------------------				 ////////	
	   if( RedwornOne==1|| RedwornTwo==1)//  P3_4 || RedwornTwo==P3.5		 ////////	
	   {																					 ////////	
	     longdelay(40);																		 ////////	
	  	 if(RedwornOne==1)																	 ////////	
		 {  longdelay(40);	
	       SendText_SMS(Homeworn);													 ////////	
	   	   for(  redtime=20;redtime>0;redtime--)											 ////////	
			 { Bell=~Bell;					 																 ////////	
	          P3_6 =~ P3_6;																	 ////////	
			  longdelay(200);																 ////////	
			  																				 ////////	
			   } 																			 ////////	
	     }	


	   }																					 ////////	
		

																															 ////////	
		//--------------------------煤气检测报警--------------------------------------		 ////////	
	  if( P2_0==1 )//	RedwornOne==1|| RedwornTwo==1
	   {																					 ////////	
	     longdelay(80);																		 ////////	
	  	 if(P2_0==1 )		// RedwornOne==1|| RedwornTwo==1 								 ////////	
		 { longdelay(40);	
		SendText_SMS(Meiqiworn);												////////	
		  for(redtime=20;redtime>0;redtime--)												 ////////	
			 {				 																 ////////	
	          P3_7 =~ P3_7;	
			  Bell =~ Bell;	
			  															                      ////////	
			  longdelay(200);																 ////////	
			  																				 ////////	
			   } 																			////////	
	     }
		 
		 longdelay(5000);	
																					////////	
	   }*/																					////////	
		 																					////////	
/////////////////////////////////////////////////////////////////////////////////////////////////////		
		 
	 

	   //********00(4848)设备1关*********//
	 
	if(redata[38]/10==4&redata[38]%10==8&redata[39]/10==4&redata[39]%10==8)
	    {	
		 redata[38]=0x20;
	     EquipOne=0;
	     display(0x94,0xb9,0xd8);	 //关 
		 longdelay(2000);
		 SendText_SMS(mgsOK);	
	 //SendTextT_SMS(Telnum,mgsOK);		
	    }
		 
		//********01(4849)设备1开*********//
 	if(redata[38]/10==4&redata[38]%10==8&redata[39]/10==4&redata[39]%10==9)
		{
		redata[38]=0x20;
		EquipOne=1;   //开 
     	display(0x94,0xbf,0xaa);
		longdelay(1800);
		SendText_SMS(mgsOK);	
 //SendTextT_SMS(Telnum,mgsOK);		
		}


		 //********10(4948)设备2关*********//	
 	if(redata[38]/10==4&redata[38]%10==9&redata[39]/10==4&redata[39]%10==8)
	   {
		redata[38]=0x20;
	    EquipTwo=0; //关
	    display(0x8c,0xb9,0xd8);
		longdelay(2000);
		SendText_SMS(mgsOK);	
//	 SendTextT_SMS(Telnum,mgsOK);		
	   }

		 //********11(4949)设备2开*********//
 	if(redata[38]/10==4&redata[38]%10==9&redata[39]/10==4&redata[39]%10==9)
      {
		redata[38]=0x20;
		EquipTwo=1;	 //开 
		display(0x8c,0xbf,0xaa);
		longdelay(2000);
		SendText_SMS(mgsOK);	
//	 SendTextT_SMS(Telnum,mgsOK);		
	  } 

			 //********20(5048)设备3关*********//	
 	if(redata[38]/10==5&redata[38]%10==0&redata[39]/10==4&redata[39]%10==8)
	  {
		redata[38]=0x20;
		EquipThree=0; //关 
		display(0x9c,0xb9,0xd8);
		longdelay(2000);
		SendText_SMS(mgsOK);	
 //SendTextT_SMS(Telnum,mgsOK);		
	  }
		 //********21(5049)设备3开*********//
 	if(redata[38]/10==5&redata[38]%10==0&redata[39]/10==4&redata[39]%10==9)
      {	
	    redata[38]=0x20;
		EquipThree=1;//开
		display(0x9c,0xbf,0xaa);
		longdelay(2000);
		SendText_SMS(mgsOK);	
	//   SendTextT_SMS(Telnum,mgsOK);	
      }
	 	 //********查温度*********//接收到"TP"时
 	if(redata[38]/10==8&redata[38]%10==4&redata[39]/10==8&redata[39]%10==0)
      { 	
	    redata[38]=0x20;

		longdelay(2000);
		SendText_SMS(Tem);			 
		//SendTextT_SMS(Telnum,Tem);
	   
		
	  }
	  
	     //********查电压*********//接收到"VO"时
	if(redata[38]/10==8&redata[38]%10==6&redata[39]/10==7&redata[39]%10==9)
      {	
	     redata[38]=9;
	    
	     longdelay(2000);
		 SendText_SMS(Volt);	
	     //SendTextT_SMS(Telnum,Volt);	
	     
		
		 
	  }
		
    }


}
 

⌨️ 快捷键说明

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