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

📄 gsm_co.c

📁 刚做一个短信报警器的
💻 C
📖 第 1 页 / 共 3 页
字号:
	//---------------------------------------
    send_count=0xffff;  AT_Command_Status=COMMAND_WAIT;
      if(!io_p00_on )
          { io_p00_on=1;system_server=SYS_START; return(0); }
      else if(!io_p02_on) { io_p02_on=1; system_server=SYS_SBC;return(0); }
     if(ring_bit) { ring_auto(); return(0);  }


      if(!io_p03_on )
       {   io_p03_on=1;
           BELL=0;
     	  for(tmp_j=0;tmp_j<8;tmp_j++)    //灯闪三下
     	 {  timercount=0;  while(timercount<10) watch_dog_clear; }
     	 BELL=1;
         system_server=SYS_DIAL;
         return(0);
       }
     //---------------------------------------------------
      return(1);
}
void LED_1()
{
	LED_P0++;
	if(LED_P0>=16) LED_P0=0;
   if((PT2272_TMP>0))      //513M中断后处理。这里只是让灯亮几秒钟
       {  P0=0;
       	  if(PT2272_D0==1)  //A键      D1灯亮
          { P0_7=1;
            timercount=0; while(timercount<215) watch_dog_clear;
            P0_7=0;PT2272_D0=0;
          }
          if(PT2272_D1==1) //B键       D6灯亮
          { P0_6=1;
            timercount=0; while(timercount<215) watch_dog_clear;
            P0_6=0; PT2272_D1=0;
          }
          if(PT2272_D2==1) ////C键    D8灯亮
          { P0_5=1;
            timercount=0; while(timercount<215) watch_dog_clear;
            P0_5=0; PT2272_D2=0;
          }
          if(PT2272_D3==1)  // //D键  D9灯亮
          { P0_4=1;
            timercount=0; while(timercount<215) watch_dog_clear;
            P0_4=0; PT2272_D3=0;
          }

       	}
       else
       {
        if(LED_P0<=7)     //流水灯
       	 {
       		P0=(0x80>>LED_P0);
       	 }
       	 else
       	 {P0=(0x80>>LED_P0-8);}
       }







}



//============================================
//==========       读写短信程序
//====================================================
void read_sms()
{    uchar  i,r,j ;

      Send_AT_Command(AT_CPMS);
		i=strsearch( "+CPMS:");
         if(i)
		      {  i=i+5;
			     txd_rxd_bit=0;
			     if((uart_buff[i]==' ')&&(uart_buff[i+1]=='0')&&(uart_buff[i+2]==','))
		         {  receive_count=0; timer_S_cnt=0; while(timer_S_cnt<2){ P2_INIT();}
					LED_1(); return;
		          }
                else if((uart_buff[i]==' ')&&(uart_buff[i+1]>='1')&&(uart_buff[i+2]==','))
		         {  r=(uart_buff[i+1]-0x30)+2;

		          }
				else if((uart_buff[i]==' ')&&((uart_buff[i+1]>'0')&&(uart_buff[i+2]>='0'))&&(uart_buff[i+3]==','))
		         { r=  (uart_buff[i+1]-0x30)*10;
				   r=r+(uart_buff[i+2]-0x30)+1;
		          }
				  else{      return;   }
              }



      for(r=1;r<21;r++)
       {
          num_tmp1=r;
		  READ_TEL(r);
		  if(receive_count>=10)
	 		{    P0_4=1;
	  			if(i=strsearch("READ\x22,\x22"))
      			{ 	i=i+6;
        			if(uart_buff[i]=='+')  i=i+3 ;
           		for(j=0;j<20;j++)
				{
					TEL_temp[j]=uart_buff[i++];
					if(uart_buff[i]==0x22)   break;
				}
            	TEL_temp[j+1]=0x0d;     TEL_temp[j+2]=0x00;
      			}
	  		    P0_4=0;
	  		}
			else
			{   P0_6=1;
				 timercount=0; while(timercount<10) {  if((i=P2_INIT())==0) return ;}
				  P0_6=0;
				continue;
			}
           if((i=P2_INIT())==0) return ;
      //---------------手机号码设置-------------

	 if((i=strsearch("START")))   //  发英文
	  {
                
	           
	                  P0=0;   P0_1=1;
                   timercount=0; while(timercount<200) watch_dog_clear;
                      //有些比较重要的东西你可以存到卡就,重新开机也没有问题
		     	 	IO_OUT=0;
		     	system_server=SYS_TEL;   return;

        

		}


		else if((i=strsearch("END")))   // 发中文
			 {
                    P0=0;   P0_2=1;
                   timercount=0; while(timercount<150) watch_dog_clear;
		     		 IO_OUT=1;
		     		   system_server=SYS_ALARM;   return;

		    }

          else     if((i=strsearch("start")))   //  发英文
			 {
                    P0=0;   P0_1=1;
                   timercount=0; while(timercount<2000) watch_dog_clear;
                      //有些比较重要的东西你可以存到卡就,重新开机也没有问题
		     		 IO_OUT=0;
		     		 system_server=SYS_TEL;   return;

		   }
		else if((i=strsearch("end")))   // 发中文
			 {
                    P0=0;   P0_2=1;
                   timercount=0; while(timercount<150) watch_dog_clear;
		     		 IO_OUT=1;
		     		  system_server=SYS_ALARM;   return;

		   }
       else if((i=strsearch("TEL:")))   // 发中文
			 { j=0;	para_temp[j++]=0x31;para_temp[j++]=','; para_temp[j++]='"';
			  for(i=0;i<=20;i++)
			  {     if(TEL_temp[i]==0x0d||TEL_temp[i]==0x00)
                        {para_temp[j++]='"';para_temp[j++]=0;break;}
			  	    para_temp[j++]=TEL_temp[i] ;
			  }

                      Send_AT_Command(PHONE_WRITE);
                     P0=0;   P0_3=0;
                   timercount=0; while(timercount<200) watch_dog_clear;

		     		  system_server=SYS_ALARM;   return;

		}
			else {

					para_temp[0]=(num_tmp1/10)+0x30;para_temp[1]=(num_tmp1%10)+0x30; para_temp[2]=0x0d;para_temp[3]=0x00;
					Send_AT_Command(SMS_CMGD);
					timer_S_cnt=0; while(timer_S_cnt<10&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
					for(i=10;i<=MAX_TM-3;i++)
         			{    uart_buff[i]=0;
         		  }
         		   Send_AT_Command(SIM_ID);
					// return;

				 }



   }





}


void send_sms() //发送短信
{  	uchar  j=1,i=1;

       Send_AT_Command(SIM_ID);
		switch(sms_tmp)

		{
		    case	smss_tel:  //  发送英文

                     TMP_BUF=0;para_temp[TMP_BUF++]='"';  j=0;
   	  				do{
   	       					para_temp[TMP_BUF++]=TEL_temp[j++];

                           if(TEL_temp[j]==0x0d)
                             {para_temp[TMP_BUF++]='"';  para_temp[TMP_BUF++]=0;   }

   	   				 }while( TMP_BUF<=18);

					 Send_AT_Command(SMS_CMGS);
                                 j=0;

		    	           	para_temp[j++]='S';
	    					para_temp[j++]='E';
	    					para_temp[j++]='N';
	    					para_temp[j++]='D';
	    					para_temp[j++]=':';
	    					para_temp[j++]=0x20;
		    	            para_temp[j++]='O';
	    					para_temp[j++]='K';
                         	para_temp[j++]=0x1a;
	    					para_temp[j++]=0x0d;
	    					para_temp[j++]=0x00;
	    					para_temp[j]=0x00;

		    	Send_AT_Command(CMGS_MUB);
                break;

          case smss_para:         //发送中文
               //0011000D91683118180295F20008A70A8F66670953719669FF01
               Send_AT_Command(SMS_CMGF);
               TMP_BUF=0;
				para_temp[TMP_BUF++]='2';   //短信号码长度,如果每加一个中文,长度加2
				para_temp[TMP_BUF++]='5';
				para_temp[TMP_BUF++]=0x0d;
				para_temp[TMP_BUF++]=0x00;
				para_temp[TMP_BUF++]=0x00;
                Send_AT_Command(SMS_CMGS);

                TMP_BUF=0;
				para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';
				para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='1';
				para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';
				para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='D';
                para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='1';
				para_temp[TMP_BUF++]='6';para_temp[TMP_BUF++]='8';
					//3118180295F2

				j=0;       //发送对方号码
					do       //动态电话号码
					{
				      para_temp[TMP_BUF++]=TEL_temp[j+1];
				      para_temp[TMP_BUF++]=TEL_temp[j];
				      j=j+2;
				      if(TEL_temp[j+1]==0x0d)
				      { para_temp[TMP_BUF++]='F';
				      	para_temp[TMP_BUF++]=TEL_temp[j];
				      	break;
				      }
				   } while(j<=18);
               //短信格式设备
				para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';
                para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='8';
				para_temp[TMP_BUF++]='A';para_temp[TMP_BUF++]='0';
			   //短信长度、 5个字,10个英文
				para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='A';
				 //短信内容
				//53D1 9001 6210 529F FF01 发送成功
				para_temp[TMP_BUF++]='5';para_temp[TMP_BUF++]='3';
				para_temp[TMP_BUF++]='D';para_temp[TMP_BUF++]='1';

				para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='0';
				para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';

				para_temp[TMP_BUF++]='6';para_temp[TMP_BUF++]='2';
				para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='0';

				para_temp[TMP_BUF++]='5';para_temp[TMP_BUF++]='2';
				para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='F';

				para_temp[TMP_BUF++]='F';para_temp[TMP_BUF++]='F';
                para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';
                //短信结束符
                para_temp[TMP_BUF++]=0X1A;para_temp[TMP_BUF++]=0X0D;
                para_temp[TMP_BUF++]=0X00;
                Send_AT_Command(CMGS_MUB);

          break;



		//======================发送收到设备开启指令================================================






		  default:
			//system_server=SYS_SMSR;
			break;

    }
    	system_server=SYS_SMSR;
    	receive_count=0;
		AT_Command_Status=COMMAND_WAIT;	//设置接收成功标志
      	send_count=0xff;timer_S_cnt=0;
      	while(timer_S_cnt<15&&(AT_Command_Status==COMMAND_WAIT))
       		{   if(strsearch("+CMGS:"))   break;
       		    else if(txd_rxd_bit) break;
       			watch_dog_clear;
       		}


 		para_temp[0]=(num_tmp1/10)+0x30;para_temp[1]=(num_tmp1%10)+0x30; para_temp[2]=0x0d;para_temp[3]=0x00;

			Send_AT_Command(SMS_CMGD);
			timer_S_cnt=0; while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
            Send_AT_Command(SIM_ID);
          //   IO_OUT=1;
              for(i=0;i<=MAX_TM-2;i++)
      		{      uart_buff[i]=0;
      			}
}
//======================================================================
//================进行SIM卡的电话本读======================================================
//======================================================================
uchar PHONE_RD( )      //read_tmp=0x30+i;  要读的电话号码
{       uchar j;

     	Send_AT_Command(PHONE_READ);
     	send_count=0;
     	timer_S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;

     	if(j=strsearch("+CPBR:"))    //+CPBW: 1,"13818120592",129,"chia"
     	{ 	j=j+9;

       		 do
        	{
   			 	para_temp[TMP_BUF++]= uart_buff[j++];
   				if( uart_buff[j]=='"')
   				{  	//para_temp[t++]=';';para_temp[t++]=0x0d;para_temp[t++]=0x00;
   				   return(TMP_BUF);
   			   	}


   	    	}while(j<=24);


       }
       else if(uart_buff[1]==0x0d&&uart_buff[0]==0x34)
           {           return(FALSE);
           	}
        else return(FALSE);
}

//======================================================================
//========================进行SIM卡中的1到20条短信号码的读==============================================
//======================================================================
uchar   READ_TEL(uchar r)                //读短信号码1-20个
{     uchar i;
	  for(i=0;i<=10;i++)  uart_buff[i]=0;
	  para_temp[0]=(r/10)+0x30;para_temp[1]=(r%10)+0x30; para_temp[2]=0; para_temp[3]=0;
      Send_AT_Command(SMS_CMGR);
      timercount=0; while(timercount<2) ;
       return(0);

}




void Initialize_Model(void)    //初始化 PIN检测
{
	uchar i;
    Sys_Init();

	P0=0;//IO_IGT=1;
    PT2272_BIT=0;PT2272_TMP=0;//
	io_p01_on=1; io_p00_on=1;
	io_p02_on=1;io_p01_bit=0;
	io_p03_on=1;	io_p02_bit =0;
		for(i=0;i<12;i++)
	{//进行初始化,并显示
		Send_AT_Command(TC35_INIT);
		if(uart_buff[1]==0x0d&&uart_buff[0]==0x30)
		{  break;}

		if((i%4)==0)
		{
			IO_IGT=1;
		}
		else if((i%2)==0)
		{
			IO_IGT=0;
		}
   		timer_S_cnt=0; while(timer_S_cnt<5&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;

    }
    if(i>=11)   goto at_eer;


	for(i=0;i<12;i++)
    	{
    		if(Send_AT_Command(CHECK_PIN))
    		{//如有收到回应进行分析收到的信息,
				uart_buff[receive_count]=0;
				if(strsearch("READY")!=0)
        			break;

⌨️ 快捷键说明

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