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

📄 w77e58.c

📁 GPS定位程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    for(i=3;i<2;i++)
	{
	send_char_com0(JD[i]);//经度
	}
	send_char_com0('"');//经度

    send_char_com0('#');
    send_char_com0(WD_a);//纬度方向
    for(i=0;i<9;i++)
	{
	send_char_com0(WD[i]);//纬度
	}
    send_char_com0('#');
    send_char_com0('#');
    send_char_com0('#');
    send_char_com0('M');
    send_char_com0('i');
    send_char_com0('o');
    send_char_com0('S');
    send_char_com0('M');
    send_char_com0('S');
    send_char_com0('#');
   
    /**/
	SBUF=0x1A;
    while(TI==0);
    TI=0;

}

void sz(void)
{
   //绑定手机号码
   int i;
   for(i=0;i<10;i++)
   {
    P0_4=~P0_4;
	P0_5=~P0_5;
	P0_6=~P0_6;
	P0_7=~P0_7;
	Delay400Ms();
	Delay400Ms();
	//---	
	smsPWD[0]=sms[3];
	smsPWD[1]=sms[4];
	smsPWD[2]=sms[5];
	smsPWD[3]=sms[6];
	smsPWD[4]=sms[7];
	smsPWD[5]=sms[8];
	smsPWD[6]=sms[9];
	smsPWD[7]=sms[10];
	//--
    PhoneNum[0]=sms[12];  //1
	PhoneNum[1]=sms[13];  //3
	PhoneNum[2]=sms[14];  //5
	PhoneNum[3]=sms[15];  //7
	PhoneNum[4]=sms[16];  //7
	PhoneNum[5]=sms[17];  //0
	PhoneNum[6]=sms[18];  //6
	PhoneNum[7]=sms[19];  //2
	PhoneNum[8]=sms[20];  //6
	PhoneNum[9]=sms[21];  //7
	PhoneNum[10]=sms[22]; //9
    //--
    }

    //SendSM("AT+CMGS=\"+8613577062697\"\r\n$");
		SendSM("AT+CMGS=\"+86$");
	for(i=0;i<11;i++)
	{
	 send_char_com0(PhoneNum[i]);
	}
	SendSM("\"\r\n$");
    Delay400Ms();
	Delay400Ms();
    
	send_char_com0('B');
	send_char_com0('D');
	for(i=0;i<12;i++)
	{
	 send_char_com0(PhoneNum[i]);
	}
	send_char_com0('#');
    for(i=0;i<8;i++)
	{
	 send_char_com0(smsPWD[i]);
	}
    send_char_com0('#');
	//SendSM("SYSTEM$");

	SBUF=0x1A;
    while(TI==0);
    TI=0;
    // sms_mode=-1;
   // init_GSM();//复位GSM MODEM
}
void serial_0(void)interrupt 4
{
   // GSM 短信猫
   unsigned char tmp;
   if(RI)
   {
      tmp=SBUF; 
      switch(tmp)
      {
	      //忽略 +CMT: "+8613577062697",,"08/07/04,21:26:44+32"
		  case '+':
		     sms_count=0;
			 sms_mode=0;
			 break;
		  case '"':
		     sms_count=0;
			 sms_mode=0;
			 break;
		  case '>':  //短信发送模式
             sms_count=0;
			 sms_mode=-1;
			 break;
          case '*':
		     sms_count=0;  //接收位清空
			 sms_mode=1;
			 break;
		  case 'O':  //OK
		    {
			 if(sms_mode==-1)
			 {
			    //段信发送成功
				sms_mode=0;
				sms_count=0;
			 }
			break;
			}    	  
		  default:
		    if(sms_mode==1)
			{
			  sms[sms_count++]=tmp;
			  if(tmp=='%')
			  {
			     sms_mode=2; //命令语句接收完毕
				 //开始处理
				 switch(sms[0])
				 {
				   case 'D':  //DW  进行GPS定位
				       sms_mode=-1;  
				       dw();
                       break;
				   case 'S':  //SZ  进行手机号码绑定
				       sms_mode=-1;  
				       sz();
				       break;
				   default:
				       fw();  //复位GSM
				       break;
				 }
			  }

			}
			break;		      
      }
	   RI=0;
   }
  // if(TI)
  // {
  //   TI=0;
  // }
}             

void serial_1(void)interrupt 7
{    
    unsigned char tmp;
    
    if(RI_1)
    	{
		P0_7=~P0_7;
        tmp=SBUF1;
        switch(tmp)
        {
            case '$':
                cmd_number=0;        //命令类型清空
                mode=1;                //接收命令模式
                byte_count=0;        //接收位数清空
                break;
            case ',':
                seg_count++;        //逗号计数加1
                byte_count=0;
                break;
            case '*':
                switch(cmd_number)
                {
                    case 1:
                        buf_full|=0x01;
                        break;
                    case 2:
                        buf_full|=0x02;
                        break;
                    case 3:
                        buf_full|=0x04;
                        break;
                }
                mode=0;
                break;
            default:
                if(mode==1)
                	{
                    //命令种类判断
                    cmd[byte_count]=tmp;            //接收字符放入类型缓存
                    if(byte_count>=4)
                    	{                //如果类型数据接收完毕,判断类型
                        if(cmd[0]=='G')
                        	{
                            if(cmd[1]=='P')
                            	{
                                if(cmd[2]=='G')
                                	{
                                    if(cmd[3]=='G')
                                    	{
                                        if(cmd[4]=='A')
                                        	{
                                            cmd_number=1;
                                            mode=2;
                                            seg_count=0;
                                            byte_count=0;
                                        	}
                                    	}
                                    else if(cmd[3]=='S')
                                    	{
                                        if(cmd[4]=='V')
                                        	{
                                            cmd_number=2;
                                            mode=2;
                                            seg_count=0;
                                            byte_count=0;
                                        	}
                                    	}
                                	}
                                else if(cmd[2]=='R')
                                	{
                                    if(cmd[3]=='M')
                                    	{
                                        if(cmd[4]=='C')
                                        	{
                                            cmd_number=3;
                                            mode=2;
                                            seg_count=0;
                                            byte_count=0;
                                        	}
                                    	}
                                	}
                            }
                        }
                    }
                }
                else if(mode==2)
                	{
                    //接收数据处理
                    switch (cmd_number)
                    {
                        case 1:                //类型1数据接收。GPGGA
                            switch(seg_count)
                            {
                                case 2:                                //纬度处理
                                    if(byte_count<9)
                                    	{
                                        WD[byte_count]=tmp;
                                    	}
                                    break;
                                case 3:                                //纬度方向处理
                                    if(byte_count<1)
                                    	{
                                        WD_a=tmp;
                                    	}
                                    break;
                                case 4:                                //经度处理
                                    if(byte_count<10)
                                    	{
                                        JD[byte_count]=tmp;
                                    	}
                                    break;
                                case 5:                                //经度方向处理
                                    if(byte_count<1)
                                    	{
                                        JD_a=tmp;
                                    	}
                                    break;
                                case 6:                                //定位判断
                                    if(byte_count<1)
                                    	{
                                        lock=tmp;
                                    	}
                                    break;
                                case 7:                                //定位使用的卫星数
                                    if(byte_count<2)
                                    	{
                                        use_sat[byte_count]=tmp;
                                    	}
                                    break;
                                case 9:                                //高度处理
                                    if(byte_count<6)
                                    	{
                                        high[byte_count]=tmp;
                                    	}
                                    break;
                            }
                            break;
                        case 2:                //类型2数据接收。GPGSV
                            switch(seg_count)
                            {
                                case 3:                                //天空中的卫星总数
                                    if(byte_count<2)
                                    	{
                                        total_sat[byte_count]=tmp;
                                    	}
                                    break;
                            }
                            break;
                        case 3:                //类型3数据接收。GPRMC
                            switch(seg_count)
                            {
                                case 1:
                                    if(byte_count<6)
                                    	{                //时间处理
                                        time[byte_count]=tmp;    
                                    	}
                                    break;
                                case 7:                                //速度处理
                                    if(byte_count<5)
                                    	{
                                        speed[byte_count]=tmp;
                                    	}
                                    break;
                                case 8:                                //方位角处理
                                    if(byte_count<5)
                                    	{
                                        angle[byte_count]=tmp;
                                    	}
                                    break;
                            }
                            break;
                    }
                }
                byte_count++;        //接收数位加1
                break;
        }
    }
    RI_1=0;
} 

⌨️ 快捷键说明

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