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

📄 gsm_gps1.c

📁 具有远程定位监控功能,监控汽车的具体位置和工作情况
💻 C
📖 第 1 页 / 共 3 页
字号:
           counter=0;
        }
}
void Key_ReadSMS(void)
{
        uchar ReadFlg;
        uchar i;
        //ES=1;
        for(i=20;i<=30;i++)
        {
         uchar j,k;
         j=0x30+(i/10);
         k=0x30+(i%10);
         chn_disp2("读取第",0,6,0x80);
         Char_Display2(i);
         chn_disp2("条信息..",0,8,0x84);
         ReadFlg=ReadMsg(j,k);
        //clrram();
         switch(ReadFlg)
         {

            case 1:
                   chn_disp2("无信息",0,8,0x92);
                   break;
            case 2:
                   AlarmMode=1;
                   SetMode=1;
                   chn_disp2("短信报警",0,8,0x92);
                   break;
            case 3:
                   AlarmMode=2;
                   SetMode=2;
                   chn_disp2("拨号报警",0,8,0x92);
                   break;
            case 4:
                   AlarmMode=0;
                   SetMode=3;
                   chn_disp2("报警关闭",0,8,0x92);
                   break;
            case 5:
                   Start_GSM();
                   chn_disp2("初始化GSM",0,9,0x92);
                   break;
            case 6:
                   //Key_DeleteSMS();
                   chn_disp2("删除信息",0,8,0x92);
                   SetMode=4;
                   break;
            case 7:
                   chn_disp2("设置号码",0,8,0x92);
                   SetMode=5;
                   break;
            case 8:
                   chn_disp2("ERROR",0,5,0x92);
                   //SetMode=0;
                   break;
            default:
                   chn_disp2("读取错误",0,8,0x92);
                   //SetMode=0;
                   break;
         }
         delay1(600);
         clrram();
        }
}
void Key_DeleteSMS(void)
{
        uchar i;
        ES=0;
        for(i=21;i<=40;i++)
        {
         uchar j,k;
         j=0x30+(i/10);
         k=0x30+(i%10);
         EraseMsg(j,k);
         chn_disp2("删除第",0,6,0x80);
         Char_Display2(i);
         chn_disp2("条信息..",0,8,0x84);
         delay1(500);
        }
        chn_disp2("短信删除成功",0,12,0x90);
        delay1(500);
        clrram();
        ES=1;
}

void Start_System(void)
{

        Init_lcd();
        chn_disp2("GSM 智能监控系统",0,16,0x80);
        chn_disp2("初始化",0,6,0x92);
        delay1(400);
        int_disp1(0x07,0x95);
        delay1(400);
        int_disp2(0x07);
        delay1(400);
        int_disp2(0x07);
        delay1(400);
        clrram();

}
//..............延时子程序............................................
/*void delay (uint us)                    //delay((us+1)*5) us
{
        while(us--);
} */

void delay1 (uint ms)                   //delay ms
{
        uint i,j;
        for(i=0;i<ms;i++)
        for(j=0;j<15;j++)
        delay2(5);
}
void delay2(uint us)                   //delay2us
{
        while(--us);
}

//*****************GPS*******************************

//*********************************************************************************
void GPS_Handle(void)
{
    //---------------------------------------------
    //----------------------------------------------
    uchar tmp;
    if(RI)
   // if(StartBitOn())
    	{
        tmp=SBUF;
        //tmp=GPS_GetChar();
        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:
          
                                        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;
                              
                                    if(byte_count<1)
                                    	{
                                        JD_a=tmp;
                                    	}
                                    break;
                               
                                        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=0;

}

//-----------------系统显示界面--------------------
void Time_Disp(void)
{
        static uchar m;
        uchar i=0,j,t1,t2;
        if(m==0)
        {
                delay1(300);
                m=1;
        }
        chn_disp2("时间:",0,6,0x80);
        t1=(time[0]-0x30);
        t2=(time[1]-0x30);
        i=(t1*10)+t2;
        i+=8;
        i%=24;
        int_disp2(0x30+i/10);       //显示数据的ASCII值
        int_disp2(0x30+i%10);
        for(j=2;j<6;j++)
        {
                     i=time[j];
                     if((j==2)||(j==4))
                     {

                           int_disp2(0x3a);   //插入":"
                     }
                     int_disp2(i);
        }
        int_disp2(0x20);
        int_disp2(0x20);
        chn_disp2("卫星信号:",0,10,0x90);
        chn_disp1(use_sat,0,2,0x95);
        int_disp2(0x20);               //空格符号显示
        int_disp2(0x20);
        int_disp2(0x20);
        int_disp2(0x20);
        //delay1(100);
        //clrram();

}

//-------------------------------------------------------------
void JDWD_Disp(void)
{
      static uchar m;
      if(m==0)
      {
        delay1(500);
        m=1;
      }
      if((use_sat[1]==0x30)&&(use_sat[2]==0x30))
      {
           clrram();
           chn_disp2("无定位信号!",0,12,0x81);
           delay1(100);
      }
      else
      {
        chn_disp2("纬度:",0,6,0x80);
        chn_disp1(WD,0,9,0x83);
        int_disp2(0x20);               //空格符号显示
        chn_disp2("经度:",0,6,0x90);
        chn_disp1(JD,0,10,0x93);
      }
      //delay1(500);
      //clrram();
}

//************************主程序*****************************************************
void main(void)
{
        Start_System();
        //Init_lcd();
  //-----------------------------
        RELAY1=1;                       //继电器........
        RELAY2=1;
        //Infrared=0;
        Init_Serial();
        TMOD=0x12;
        EA=1;
        ES=0;
        IP=0x10;                          //设置串口中断优先级
        ET0=1;
        ET1=1;
        TR0=0;

        TH0=(256-192);  //4800 就是1000000/4800=208.33微秒,执行的时间是208.33*11.0592/12=192
        TL0=TH0;
        TH1=0X8a;
        TL1=0Xd0;
        //TR0=1;                          //启动定时器0,1
        //TR1=1;
        //EX0=1;                        //开外部中断0,低电平触发
        //IT0=1;
        Init_GSM(1);
        ES=1;
        while(1)
        {
                static uchar WTD_Timer;
                static uchar ReadSMS_Timer;
                static uint Sleep_Timer;


              //------------------------------

                  //GPS_Handle();

                if(Sleep_Timer>300)
                {
                   JDWD_Disp();
                   if(Sleep_Timer>400)
                   {
                    Sleep_Timer=0;
                   }
                }
                else
                {
                 Time_Disp();
                }
              //-------------------------------------------------------
                if(RT_SK_Flag)
                {
                        TR1=0;
                        ES=0;
                        RT_SK_Flag=0;
                        keyPtr=KeyJudge();                      //键盘扫描判断
                        if(keyPtr!=0x55)                        //如果有键按下则处理
                        {
                          //Init_lcd ();
                          clrram();
                          KeyHandle(keyPtr);
                          delay1(1000);
                        }
                        if(NewSMS_Flag)                       //有新信息则自动读取
                        {
                          clrram();
                          NewSMS_Flag=0;
                          Key_ReadSMS();
                        }
                        //Infrared_Monitor();               //调试程序可以时暂时关闭
                        //---远程设置报警方式,成功则发信息提示--------
                        if(SetMode)
                        {
                               // uchar i,j;
                          switch(SetMode)
                          {
                              case 1:
                                     Send_SMS2("AlarmMode SMS!");
                                     break;
                              case 2:
                                     Send_SMS2("AlarmMode Call!");
                                     break;
                              case 3:
                                     Send_SMS2("AlarmMode OFF!");
                                     break;
                              case 4:
                                    Key_DeleteSMS();
                                    Send_SMS2("Delete SMS Succeed!");
                                    break;
                              case 5:
                                    AlarmPhone_Set();
                                    Send_SMS2(Phone);
                                    break;
                              default:
                              break;
                         }
                         SetMode=0;
                       }


                        WTD_Timer++;
                        ReadSMS_Timer++;
                       Sleep_Timer++;
                        TR1=1;
                        ES=1;

                }  //if
             //-----------------------------------------------------
                if(GPS_RF)
                {
                    GPS_Handle();
                    GPS_RF=0;
                }
                if(WTD_Timer>100)
                {
                        GSM_WTD();
                        WTD_Timer=0;
                }

                if(URAT_Flag)
                {
                       NewSMS_Read();
                       Ring_Display();
                       URAT_Flag=0;
                }
                 Sleep_Timer++;

        } //while
} //main

⌨️ 快捷键说明

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