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

📄 gsm_gps1.c

📁 具有远程定位监控功能,监控汽车的具体位置和工作情况
💻 C
📖 第 1 页 / 共 3 页
字号:
    for(i=0;i<4;i++)
    {
      sclk=1;
      sclk=0;
    }
  }
}

void Sleep_ON(void)                     //睡眠模式开
{
        wr_lcd(comm,0x34);              //扩充指令动作
        wr_lcd(comm,0x08);
        delay2(40);
}
void Sleep_OFF(void)                    //睡眠模式关
{
        wr_lcd(comm,0x34);
        wr_lcd(comm,0x0c);
        delay2(40);
}
/*
//---------------显示汉字或字符----------------
void chn_disp(uchar code *chn)
{
  uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  j=0;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
  wr_lcd (comm,0x90);
  j=1;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
}
*/
//--------------显示中文字符:h-行,l-列(字符数),p-位置------------
void chn_disp1(uchar *chn,uchar h,uchar l,uchar p)   //显示数组
{
        uchar i,j;
        wr_lcd(comm,0x30);
        wr_lcd(comm,p);
        j=h;
        for(i=0;i<l;i++)
        wr_lcd(dat,chn[j*16+i]);
}
void chn_disp2(uchar code *chn,uchar h,uchar l,uchar p)  //显示代码,汉字
{
        uchar i,j;
        wr_lcd(comm,0x30);
        wr_lcd(comm,p);
        j=h;
        for(i=0;i<l;i++)
        wr_lcd(dat,chn[j*16+i]);
}

//--------------显示数据----------------

void int_disp1(uchar datah ,uchar p)    //指定位置显示半宽数据
{
        wr_lcd(comm,0x30);
        wr_lcd(comm,p);
        wr_lcd(dat,datah);

}
void int_disp2(uchar datah)             //地址自增显示半宽数据
{
        wr_lcd(comm,0x30);
        wr_lcd(dat,datah);

}

void int_disp3(uchar datah,uchar datal, uchar p)
{
        wr_lcd(comm,0x30);
        wr_lcd(comm,p);
        wr_lcd(dat,datah);
        wr_lcd(dat,datal);
}
void int_disp4(uchar datah,uchar datal)
{
        wr_lcd(comm,0x30);
        wr_lcd(dat,datah);
        wr_lcd(dat,datal);
}


/*------------------显示子程序--------------------*/
//--------------数据显示处理程序--------------------
void Char_Display(uchar disdata,uchar p)            //指定显示地址,显示数字
{

        if((disdata>=0)&(disdata<100))
        {      uchar sw,gw;
               sw=disdata/10;
               gw=disdata%10;
               //int_disp1(0x20,p);
               int_disp1(tab1[sw],p);
               int_disp2(tab1[gw]);

         }
         else if(disdata>=100)
         {
                uchar bw,sw,gw;
                bw=disdata/100;
                sw=(disdata%100)/10;
                gw=disdata%10;
                int_disp1(tab1[bw],p);
                int_disp2(tab1[sw]);
                int_disp2(tab1[gw]);
         }

}
void Char_Display2(uchar disdata)               //地址自增显示数字
{

        if((disdata>=0)&(disdata<100))
        {      uchar sw,gw;
               sw=disdata/10;
               gw=disdata%10;
               int_disp2(tab1[sw]);
               int_disp2(tab1[gw]);

         }
         else if(disdata>=100)
         {
                uchar bw,sw,gw;
                bw=disdata/100;
                sw=(disdata%100)/10;
                gw=disdata%10;
                int_disp2(tab1[bw]);
                int_disp2(tab1[sw]);
                int_disp2(tab1[gw]);
         }
}

//*****************GSM********************************

//---------发送一个ASCII码-------------------------
void SendASC(uchar ASC)
{
        bit es;
        es=ES;
        ES=0;           //关闭中断
        TI=0;
        SBUF=ASC;
        while(!TI);
        TI=0;
        ES=es;
}
void Clr_Str(uchar *p)   //清除接收缓冲区
{
        uchar len,i=130;
        //len=strlen(p);
        while(i--)
        {
            *p++=0;
        }

}
//------------发送AT命令到TC35I--------------------------
void SendCmdToTc35i(uchar *p)
{
	uchar len;
	len=strlen(p);
	while(len--)
	{
		SendASC(*p++);
	}
}
void Start_GSM(void)            //由单片机控制GSM启动
{
    StartGSM=0;
    delay1(150);
    StartGSM=1;
    //delay1(500);
}
void Init_GSM(uchar mode)         //初始化TC35I:mode=0,PDU模式;mode=1,TEXT模式
{                                 //ipr=9600
        //bit AtFlag;
        Start_GSM();
        delay1(500);
        SendCmdToTc35i("AT+IPR=9600\r");
        delay1(300);
        SendCmdToTc35i("AT+CNMI=2,1\r");
        delay1(100);
        switch(mode)
        {
          case 0:
               SendCmdToTc35i("AT+CMGF=0\r");
               break;
          case 1:
               SendCmdToTc35i("AT+CMGF=1\r");
               break;
          default:
               chn_disp2("TC35初始化失败",0,14,0x90);
               break;
        }
       // delay1(100);


}
//------GSM模块监控程序----------------
void GSM_WTD(void)
{
        uchar *p;
        bit Sig_Flag;
        //rsPoint=0;
        Clr_Str(sms_rec);
        SendCmdToTc35i("AT+CNMI=2,1\r");
        delay1(20);
        if(!(p=strstr(sms_rec,"OK")))
        {
            Start_GSM();
        }
}
//-------------Call and Cancel-------------------------------------
void Call(void)
{
       //EA=0;
        uchar i;
        SendCmdToTc35i("ATD");
        SendCmdToTc35i(Phone);
        SendCmdToTc35i(";\r");
        for(i=0;i<2;i++)
        {
           clrram();
           chn_disp2("拨号",0,4,0x82);
           delay1(400);                  //拨号界面显示
           int_disp1(0x07,0x84);
           delay1(400);
           int_disp2(0x07);
           delay1(400);
           int_disp2(0x07);
           delay1(400);
        }
        clrram();
       //EA=1;
}
void Cancel(void)
{
      //  EA=0;
        SendCmdToTc35i("ATH\r");
        chn_disp2("ESC",0,3,0x93);
      //  EA=1;
        delay1(500);
        clrram();
}
//-------------删除sim卡内短信息------------------------
void  EraseMsg(uchar index1,uchar index2)
{
        SendCmdToTc35i("AT+CMGD=");
        SendASC(index1);                //指出删除第几条信息:index1=十位,index2=个位
        SendASC(index2);
        SendASC(0x0d);
        ES=0;
}
//-------------读取短信内容,查找控制指令----------------
uchar ReadMsg(uchar index1,uchar index2)
{
        uchar *p;
        SendCmdToTc35i("AT+CMGF=1\r");
        delay1(100);
        rsPoint=0;
        //Clr_Str(sms_rec);
        SendCmdToTc35i("AT+CMGR=");
        SendASC(index1);                //指出读出第几条信息:index1=十位,index2=个位
        SendASC(index2);
        SendASC(0x0d);
        delay1(600);
        //------------------------------
        if(p=strstr(sms_rec,"0,,0"))
        {
         return 1;                  //无信息
        }
        //-----------------------------
        else if(p=strstr(sms_rec,"cmd"))
        {

                if(p=strstr(sms_rec,"on"))
                {
                     if(p=strstr(sms_rec,"sms"))
                     {
                        return 2;       //短信报警

                     }
                     else if(p=strstr(sms_rec,"call"))
                     {
                        return 3;       //拨号报警
                     }

                }
                else if(p=strstr(sms_rec,"off"))
                {
                        return 4;       //报警关闭
                }
                else if(p=strstr(sms_rec,"rstgsm"))
                {
                        return 5;       //初始化GSM
                }
                else if(p=strstr(sms_rec,"delsms"))
                {
                        return 6;       //删除短信
                }
                else if(p=strstr(sms_rec,"set"))
                {
                        return 7;       //设置报警号码
                }
                else
                {
                        return 0;
                }
        }

        else if( p=strstr(sms_rec,"ERROR"))
        {
                return 8;
        }
        else
        return 0;

}
//------------------新信息自动读取程序--------------
void NewSMS_Read(void)
{
        uchar *s;
      //  EA=0;
        rsPoint=0;
        if(s=strstr(sms_rec,"SM"))
        {
            NewSMS_Flag=1;
        }
      //  EA=1;
}
//-------------------来电显示-----------------------
void Ring_Display(void)
{
        uchar *q;
        static uchar i;
       // EA=0;
        rsPoint=0;
        if(q=strstr(sms_rec,"RING"))
        {
            clrram();
            chn_disp2("来电提示",0,8,0x92);
            i++;
            if(i>2)
            {
               SendCmdToTc35i("ATH\r");   //自动挂机
            }
            delay1(800);

        }
        clrram();
      //  EA=1;
}

//------------------GSM连接测试---------------------
void Signal_Test(void)
{
        uchar i,j,k;
        uchar *p;
        bit Sig_Flag=0;
        rsPoint=0;
        SendCmdToTc35i("AT\r");
        //delay1(100);
        chn_disp2("检测信号...",0,11,0x82);
        delay1(500);
        if(p=strstr(sms_rec,"AT"))
        {
                chn_disp2("  有信号",0,8,0x82);
        }
        else
        {
                chn_disp2("  无信号",0,8,0x82);
        }
        delay1(500);
        //Clr_Str(sms_rec);
        clrram();
}
//---------------发送英文短信息------------------
void Send_SMS2(uchar *p)
{
        bit SmsFlag1=0,SmsFlag2=0;
        uchar *q,i;
        EA=0;
        //ES=0;
        clrram();
        chn_disp2("发送信息",0,8,0x82);
      //----------界面显示---------------
        delay1(400);
        int_disp1(0x07,0x86);
        delay1(400);
        int_disp2(0x07);
        delay1(400);
        int_disp2(0x07);
        delay1(400);
     //--------------------------------
             SendCmdToTc35i("AT+CMGF=1\r");
             delay1(100);
             ES=1;
             rsPoint=0;
             SendCmdToTc35i("AT+CMGS=");
             SendCmdToTc35i(Phone);
             SendASC(0x0d);
             delay1(1800);
             SendCmdToTc35i(p);
             delay1(100);
             SendASC(0x1a);
             delay1(700);
             for(i=0;i<10;i++)
             {
                      if(q=strstr(sms_rec,"OK"))
                      {
                            SmsFlag2=1;
                            break;
                      }
             }
         clrram();
         if(SmsFlag2)
         {
              chn_disp2("发送成功",0,8,0x82);
         }
         else
         {
             chn_disp2("发送失败",0,8,0x82);
         }
          EA=1;
          delay1(700);
          clrram();
}
//---------------发送短消息结束------------------

//--------------Key Function----------------------------------------
void Key_SetAlarmMode(void)
{
        static uchar counter=0;
        if(counter==0)
        {
         AlarmMode=1;
         chn_disp2("短信报警",0,8,0x92);
         //delay1(500);
        }
        if(counter==1)
        {
         AlarmMode=2;
         chn_disp2("拨号报警",0,8,0x92);
         //delay1(500);
        }
        if(counter==2)
        {
         AlarmMode=0;
         chn_disp2("报警关闭",0,8,0x92);
        }
        counter++;
        if(counter>2)
        {
         counter=0;
        }
}
void Key_DispCH(void)      //时间显示和经纬度显示切换
{
        static uchar counter=0;
        if(counter=0)
        {
           Disp_Mode=1;
        }
        if(counter=1)
        {
           Disp_Mode=0;

        }
        counter++;
        if(counter>1)
        {

⌨️ 快捷键说明

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