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

📄 gsmv100.c

📁 GSM短消息收发程序
💻 C
📖 第 1 页 / 共 3 页
字号:
      }
    }while(strstr(rcv_buf,"OK")==NULL);
  }
  PortSendString(GSM,"AT+CMGS=");
  msg_len = 14+strlen(MessageData)/2;
  temph = msg_len/10 + 0x30;
  PortSendChar(GSM,temph);
  templ = msg_len%10 + 0x30;
  PortSendChar(GSM,templ);
  PortSendChar(GSM,'\r');
  do
  {
    i++;
    disp_str(3,4,"step3");
    if((strstr(rcv_buf,"ERROR")!=NULL)||(i>3000))
    {
      disp_str(3,18,"Send failure!");
      EX0 = bit_temp;
      return(1);
    }
  }while(strrchr(rcv_buf,'>') == NULL);
  PortSendString(GSM,"0891683108200805F011000D91");
  PortSendString(GSM,PhoneNo);
  PortSendString(GSM,"0008AA");
  PortSendString(GSM,MessageData);
  delay(1);
  PortSendChar(GSM,0x1A);
  do
  {
    i++;
    //PortSendChar(GSM,0x1A);
    disp_str(3,4,"step4");
    if((strstr(rcv_buf,"ERROR")!=NULL)||(i>0x7fff))
    {
      disp_str(3,18,"Send failure!");
      EX0 = bit_temp;
      return(1);
    }
  }while(strstr(rcv_buf,"+CMGS:")==NULL);
  memset(rcv_buf,0,100);
  rcv_buf_len = 0;                  //清空接收缓冲区
  EX0 = bit_temp;
  return(0);
}
*/

/*
函数名:  uchar SendSMSTxtData(uchar *PhoneNo,uchar  *MessageData)
功能:    发送文本模式的短信息到指定的接受方
          参数:		*PhoneNo :电话号码指针  
	 		              MessageData :短信息数据指针。
          返回值:		0 - 成功
                      1 - 数据发送失败
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   SunnyZ
创建日期: 2003-8-29
-----------------------------------------------------------------------------
修改日期:
描述:*/
void udelay(int us)
{
  uint i,j;
  for(i=0; i<100; i++)
  {
    for(j=0; j<us; j++)
    {
    
    }
  }
}

uchar SendSmsTxtData(uchar *PhoneNo, uchar *MessageData)
{
  uint idata i=0;
  uchar * temp_p;
  char Msg_buf[200];      
  char Msg_buf1[200];
  char PhoneNo_buf[30];
 /* bit bit_temp;
  
  bit_temp = EX0;
  EX0 = 0;*/
  //memset(rcv_buf,0,100);
 /* rcv_buf_len = 0;
  memset(rcv_buf,0,INBUF_LEN);                  //清空接收缓冲区
  PortSendString(GSM,"ATE0\r");
  do
  {
    i++;
    //disp_str(3,4,"step1");
    if(i>3000)
    {
      EX0 = bit_temp;
      putsLcd("ERROR0:ATE0!");
      return(1);
    }
  }while(strstr(rcv_buf,"OK")==NULL);*/
  rcv_buf_len = 0;
  memset(rcv_buf,0,INBUF_LEN);                   //清空接收缓冲区
  PortSendString(GSM,"AT+CSCS=\"UCS2\"\r");
  do
  {
    i++;
    //disp_str(3,4,"step1");
    if(i>3000)
    {
      //EX0 = bit_temp;
      //putsLcd("ERROR1:AT+CSCS!");
      return(1);
    }
  }while(strstr(rcv_buf,"OK")==NULL);
  rcv_buf_len = 0;
  memset(rcv_buf,0,INBUF_LEN);                   //清空接收缓冲区
  PortSendString(GSM,"AT+CSMP=17,167,0,25\r");
  do
  {
    i++;
    //disp_str(3,4,"step2");
    if(i>3000)
    {
      //EX0 = bit_temp;
      //putsLcd("ERROR2:AT+CSMP!");
      return(1);
    }
  }while(strstr(rcv_buf,"OK")==NULL);
  rcv_buf_len = 0;
  memset(rcv_buf,0,INBUF_LEN);                   //清空接收缓冲区
  PortSendString(GSM,"AT+CMGF?\r");
  do
  {
    i++;
    //disp_str(3,4,"step3");
    if(i>3000)
    {
      //EX0 = bit_temp;
      //putsLcd("ERROR3:AT+CMGF?!");
      return(1);
    }
  }while(strstr(rcv_buf,"OK")==NULL);
  i=0;
  if (strstr(rcv_buf,"+CMGF:1")==NULL)
  {
    rcv_buf_len = 0;
    memset(rcv_buf,0,INBUF_LEN);                   //清空接收缓冲区
    PortSendString(GSM,"AT+CMGF=1\r");
    do
    {
      i++;
      //disp_str(3,4,"step4");
      if(i>3000)
      {
        //EX0 = bit_temp;
        //putsLcd("ERROR4:AT+CMGF=1");
        return(1);
      }
    }while(strstr(rcv_buf,"OK")==NULL);
  }
  rcv_buf_len = 0;
  memset(rcv_buf,0,INBUF_LEN); 
  PortSendString(GSM,"AT+CMGS=\"");
  EncodePhoneNo(PhoneNo_buf,PhoneNo);
  PortSendString(GSM,PhoneNo_buf);
  PortSendString(GSM,"\"\r");
  i = 0;
  do
  {
    i++;
    //disp_str(3,4,"step5");
    if(i>3000)
    {
      //EX0 = bit_temp;
      //putsLcd("ERROR5:AT+CMGS!");
      return(1);
    }
  }while(strrchr(rcv_buf,'>') == NULL);
  delay(1);
  memset(Msg_buf,0,200); 
  memset(Msg_buf1,0,200);
  format_nm(Msg_buf1,MessageData);
  Nms_Unicode(Msg_buf,Msg_buf1);
  //disp_str(3,4,"step6");
  PortSendString(GSM,Msg_buf);
  ScrGotoxy(0,10);
  //putsLcd(Msg_buf);
  //PortSendChar(GSM,0x0D);
  
 /* delay(1);
  memset(rcv_buf,0,100);
  rcv_buf_len = 0;                  //清空接收缓冲区*/
  //PortSendChar(GSM,0x1A);
  i=0;
  do
  {
    PortSendChar(GSM,0x1A);
	  udelay(500);	
	  ++i;
    //disp_str(3,4,"step7");
    if(i>10)
    {
      
      //EX0 = bit_temp;
      //putsLcd("ERROR6:TIMEOUT!");
      return(1);
    }
  }while(strstr(rcv_buf,"+CMGS:")==NULL);
  memset(rcv_buf,0,INBUF_LEN);
  rcv_buf_len = 0;                  //清空接收缓冲区
  //EX0 = bit_temp;
  return(0);
}



/*****************************************************************************
函数名:  void EncodePhoneNo(uchar *PhoneNoDes, uchar *PhoneNoSrc)
功能:    将电话号码转换为UNICODE格式
          参数:		*PhoneNoDes :目标电话号码指针 
                    *PhoneNoSrc :源电话号码指针
          
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   SunnyZ
创建日期: 2003-12-17
-----------------------------------------------------------------------------
修改日期:
描述:*/
void EncodePhoneNo(uchar *PhoneNoDes, uchar *PhoneNoSrc)
{
  uchar idata i,j;
  //uchar xdata *temp_p1;
 // uchar xdata *temp_p2;
 // temp_p2 = PhoneNoSrc;
  memset(PhoneNoDes,0,30);
  i = strlen(PhoneNoSrc);
  for(j=0; j<i; j++)
  {
    strncat(PhoneNoDes,"003",3);
    strncat(PhoneNoDes,PhoneNoSrc,1);
    PhoneNoSrc++;
  }
  
}
/*****************************************************************************
函数名:  void DecodePhoneNo(uchar *PhoneNoDes, uchar *PhoneNoSrc)
功能:    将UNICODE格式电话号码转换为字符串
          参数:		*PhoneNoDes :目标电话号码指针 
                    *PhoneNoSrc :源电话号码指针
          
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   SunnyZ
创建日期: 2003-12-17
-----------------------------------------------------------------------------
修改日期:
描述:*/
void DecodePhoneNo(uchar *PhoneNoDes, uchar *PhoneNoSrc)
{
  uchar idata i,j;
  //uchar xdata *temp_p1;
 // uchar xdata *temp_p2;
 // temp_p2 = PhoneNoSrc;
  memset(PhoneNoDes,0,30);
  i = strlen(PhoneNoSrc);
  for(j=0; j<i; j++)
  {
    strncat(PhoneNoDes,"003",3);
    strncat(PhoneNoDes,PhoneNoSrc,1);
    PhoneNoSrc++;
  }
  
}
/*****************************************************************************
函数名:  void ConvertPhoneNo(uchar *PhoneNoDes, uchar *PhoneNoSrc)
功能:    将电话号码转换为PDU格式
          参数:		*PhoneNoDes :目标电话号码指针 
                    *PhoneNoSrc :源电话号码指针
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   SunnyZ
创建日期: 2003-8-30
-----------------------------------------------------------------------------
修改日期:
描述:*/
void ConvertPhoneNo(uchar *PhoneNoDes, uchar *PhoneNoSrc)
{}
  
//==========================================================================


/*
函数名:   uchar DeleteSMSData(int	Index)
功能:     删除指定索引号的短信息。
           参数:		Index  : 短信息的索引号。
           返回值:		0 - 信息删除
                      1 - 错误
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   ldq
创建日期: 2003-8-26
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
uchar DeleteSMSData(int	Index)
{
  bit bit_temp;
  uint idata i=0;
  bit_temp = EX0;
  EX0 = 0;
  memset(rcv_buf,0,100);
  rcv_buf_len = 0;                //清空接收缓冲区   
	PortSendString(1,"AT+CMGD=Index/n");
	do
  {
    i++;
    if(i>3000)
    {
      EX0 = bit_temp;
      return(1);
    }
  }while(strstr(rcv_buf,"OK")==NULL);
  memset(rcv_buf,0,100);
  rcv_buf_len = 0;                  //清空接收缓冲区
  EX0 = bit_temp;
  return(0);  
 }

/*
函数名:   uchar PowerOnGsm(void)
功能:     上电GSM模块,复位
           返回值:		0 - 成功
                      1 - 失败
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   SunnyZ
创建日期: 2003-9-3
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
bit PowerOnGsm(void)
{
  uint i;
  uchar *temp;
  bit flag_temp;
  flag_temp = EX0;
  EX0 = 0;
  PortOpen(GSM,"9600,n,1");
  PortSendChar(GSM,0x0d);
  PortSendChar(GSM,0x0d);
  do
  {
    i++;
    //temp = strstr(rcv_buf,"OK");

	PortSendString(GSM,"AT\r");
	udelay(30);
	temp = strstr(rcv_buf, "OK");
	if(!temp)
		temp = strstr(rcv_buf, "ok");

    /*if (i>3000)
    {
      EX0 = flag_temp;
      return(1);
    }*/
  }while(temp == NULL);
  if(InquierGSMSignal()==99)
  {
    EX0 = flag_temp;
    return(1);
  }
  EX0 = flag_temp;
  return(0);
}


void GsmDemo( void )
{
  unsigned char xdata* temp_point;
  unsigned int i=0;
  bit com_OK;
  
  clrScreenLcd();
  PortOpen(GSM, "4800,n,1");
  ES = 1;
  if(!PowerOnGsm())
  {
    putsLcd("success!!!!");
  }
  else
  {
    putsLcd("error ocurr!!"); 
	  while(!TP_TOUCHED);
  }  
  
    /*while(1)
  {
    clr_screen();
    PortSendChar(GSM,"\r");
    PortSendChar(GSM,"\r");
    PortSendString(GSM,"AT\r");
    receive_string(temp_point,6);
    disp_str(i,1,temp_point);
    i= i+6;
    //disp_str(3,3,"Send OK!");
    while(!TP_TOUCHED);
    TP_TOUCHED = 0;
   
    delay(1);
  }*/
  com_OK = 0;
  ScrGotoxy(0, 1);
  putsLcd("begin GSM!");
  for(;;)
  {
    
    if(SendSmsTxtData("13708005393","中文短信试验")==0)
	  {
	    putsLcd("send ok!!!!!");
	    break;
	  }
    else
		  putsLcd("send error!!!!!!");
    memcpy(rcv_buf,'0',strlen(rcv_buf));    //缓冲区清零
    while(!TP_TOUCHED);
    TP_TOUCHED = 0;
    delay(1);
  }       
  ES = 0;
  GSM_switch(OFF);
  while(!TP_TOUCHED);
}

uchar SendPwd(char * szInpBuf, char *pwd)
{
	char ret;
	char dbgmsg[40];

	ScrGotoxy(1, 1);
	printfLcd("正在发送,请稍侯.....");
	//putsLcd(szInpBuf);
	PortOpen(GSM, "4800,n,1");
	//putsLcd(pwd);
	ES = 1;
	if(PowerOnGsm())
	{
		putsLcd("error ocurr!!"); 
		return 0;
	}

	//putsLcd(szInpBuf);
	ret = 0;
	while(1)
	{
		if(!SendSmsTxtData(szInpBuf, pwd))
		{
			ret = 1;
		 	break;
		}
		else
			putsLcd("send error!!!!!!");
		delay(20);
	}       
	delay(30);
	ES = 0;
	GSM_switch(OFF);
	return ret;
}

⌨️ 快捷键说明

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