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

📄 gsmv100.c

📁 GSM短消息收发程序
💻 C
📖 第 1 页 / 共 3 页
字号:
调用函数: 无
创建人:   SunnyZ
创建日期: 2003-9-23
----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
void Nms_Unicode(char *dent_buf, char *src_buf)
{
  uint i,temp;
  uint temp1;
  char *temp2;
  
  temp = strlen(src_buf)/2;
  for(i=0; i<temp; i++)
  {
    temp1 = *(uint *)src_buf;
    src_buf++;
    src_buf++;
    temp2 = Nm_Unicode(temp1);
    strcat(dent_buf,temp2);
  }
}


/*
函数名:   Unicode_Nms(char *dent_buf, char *src_buf)
功能:     将一串unicode码转换为相应的机内码;
输入:     源串src_buf
输出:     目标串dent_buf
全局变量: GB_UnicodeData[],GB_UnicodeDataZF[][2];
调用函数: 无
创建人:   SunnyZ
创建日期: 2003-9-23
----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
void Unicode_Nms(char *dent_buf, char *src_buf)
{
  uint i,temp;
  uint temp1,temp2;
  char templ,temph;
  temp = strlen(src_buf)/2;
  for(i=0; i<temp; i++)
  {
    temph = *src_buf;
    src_buf++;
    templ = *src_buf;
    temp1 = templ+ temph*0x100; 
    temp2 = Unicode_Nm(temp1);
    *dent_buf = temp2>>8;
    dent_buf++;
    *dent_buf = temp2;
    dent_buf++;
    src_buf++;
  }
}

/*==========================================================================         
函数名:  uint half2full( char half_buf)    
功能:    将半角的ASCII字符串转换为全角的机内码字符串,它们之间的关系为:机内码=0xA380+ASCII码 
输入:    ASCII码
输出:    机内码
全局变量:无 
调用函数:无
创建人:  SunnyZ  
创建日期:2003-9-23
----------------------------------------------------------------------------
修改人:   
修改日期: 
描述:     
*/         
void half2full(char * full_buf, char * half_buf)
{
  uint i,temp;
  temp = strlen(half_buf);
  for(i=0; i<temp; i++)
  {
    *full_buf = 0xa3;
    full_buf++;
    *full_buf = 0x80+(*half_buf);
    full_buf++;
    half_buf++;
  }
}

/*==========================================================================         
函数名:  uint full2half( char *half_buf, char *full_buf)    
功能:    将半角的ASCII字符串转换为全角的机内码字符串,它们之间的关系为:机内码=0xA380+ASCII码 
输入:    ASCII码
输出:    机内码
全局变量:无 
调用函数:无
创建人:  SunnyZ  
创建日期:2003-9-23
----------------------------------------------------------------------------
修改人:   
修改日期: 
描述:     
*/         
void full2half(char * half_buf, char * full_buf)
{
  uint i,temp;
  temp = strlen(full_buf)/2;
  for(i=0; i<temp; i++)
  {
    full_buf++;
    *half_buf = *full_buf-0x80;
    full_buf++;
    half_buf++;
  }
}

/*
函数名:   uchar RecvGsmMsg(void)
功能:     接收来自GSM模块的数据
           参数:		无	
           返回值:	99 - 失败或者无信号
                    其他值为信号强度。
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   ldq
创建日期: 2003-8-21
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
uchar RecvGsmMsg(void)
{
  uchar *temp;
  //uchar xdata recv_buf[100];
  //uchar idata i;
  for(;;)
  {
    if(PortRecv(GSM,temp,10)==0x00)
    {
      PortSendChar(GSM, temp);
    }
  }
}

/*
函数名:   uchar InquierGSMSignal(void)
功能:     查询GSM信号强度
           参数:		无	
           返回值:	99 - 失败或者无信号
                    其他值为信号强度。
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   ldq
创建日期: 2003-8-21
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/

/*uchar InquierGSMSignal(void)
  {
    bit  signal_OK = 0;	
    unsigned char * temp_point;
    unsigned int i;
    PortSendString(GSM,"AT+CSQ\n");
    
    if(rcvend_flag)
    {
      rcvend_flag = 0;
      temp_point = rcv_buf;
      if(memcmp(temp_point,"\r\n+CME ERROR\r\n",14)!=0)
      { 
       signal_OK = 1;
       for(i=0;i<2;i++)
        {
          beep_switch(1);
          delay(50);
          beep_switch(0);
          delay(100);
        }
      }
    }
 }

/*
函数名:   uchar SetDestinationNo(uchar  *DestinationNo)
功能:     设置目标号码
           参数:		DestinationNo :ASC码的数字字符串参数指针
                    返回值:		0 - 成功
                                1 - 数据格式错
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   ldq
创建日期: 2003-8-23
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
/*uchar SetDestinationNo(void)
{
   char ch;
   unsigned int i;
   if(nDstLength==13)
    {  
     for(i=0;i<nDstLength;i+=2)                 
       {                                           
	         ch = *(DestinationNo++);        // 保存先出现的字符
        *(Changed_No++) = *(DestinationNo++);   // 复制后出现的字符
           *(Changed_No++) = ch;        // 复制先出现的字符
       }                              
     *(Changed_No-2) = 'F';     // 补'F'        
     *Changed_No = '\0';        // 输出字符串加个结束符  
     return(0);
    }  
   else 
   return(1);
} 
*/

/*
函数名:   uint Nm_Qm(*s)
功能:     将内码转化成区位码
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   ldq
创建日期: 2003-8-23
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
/*uint Nm_Qm(unsigned char *s)
{
	unsigned char qh,wh;
	
	unsigned int i=0;
	while(i<=Length)
	{
		qh = *(s) - 0xa0;
		wh = *(s+1)- 0Xa0;
		*qw = qh*0xff + wh;
		*qw++;
		 i++;
  }
}*/

/*
函数名:   Qw_Unicode(uint Qw_Number)
功能:     将区位码转换为unicode码;
输入:     区位码(十六进制)
输出:     unicode码(十六进制)
全局变量: GB_UnicodeData[],GB_UnicodeDataZF[][2];
调用函数: 无
创建人:   Qianang
创建日期: 2003-6-16
----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/

/*uint Qw_Unicode(uint Qw_Number)
{
 
  uint idata gbm;
  uint i = 0;
 
  gbm = Qw_Number + 0x2020;                  //区位码转换为国标码

//查询法得到unicode码值
 while(1)
  {
    
  	if(GB_UnicodeData[i][0] == gbm)
     {
        unicode = GB_UnicodeData[i][1];
        break;
    }
    i++;
   }  
  
/*
//查询法得到unicode码值(仅非汉字字符)
  if((gbm >= 0x2121) && (gbm <= 0x296f)
  {
  	for(i = 0x0 ; GB_UnicodeDataZF[i][1] != 0x0 ; i++)
  	{
  	    if(GB_UnicodeDataZF[i][0] == gbm)
  	    {
  	    	break;
  	    }
  	} 
       unicode =GB_UnicodeDataZF[i][1];
  }
//直接根据数组标号得到unicode码值(汉字字符)
  else
  {
       unicode = GB_UnicodeData[gbm - 0x3021];    //根据码表转换为unicode码(仅汉字)
  }
*/  
/*  return(unicode);
}*/
	
/*
函数名:  uchar SendSMSData(int  Length,uchar  *MessageData)
功能:    发送短信息到指定的接受方,接受方号码由"设置目标号码"函数设定。
          参数:		Length :短信息的数据字节数。  
	 		              MessageData :短信息数据指针。
          返回值:		0 - 成功
                      1 - 数据发送失败
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   ldq
创建日期: 2003-8-22
-----------------------------------------------------------------------------
修改日期:
描述:
*/    
/*uchar SendSMSData(void)
 {
  	unsigned char * temp_point;
  	unsigned char * ans_str0;
	unsigned char Qw_Number;
  	unsigned char * s;
  	unsigned int i=0;
  	PortSendString(1,"AT+CMGF=0/n");
  	if(rcvend_flag)
    {
      rcvend_flag = 0;
      temp_point = rcv_buf;
      if(memcmp(temp_point,"\r\nOK\r\n",6)==0)
      {
        PortSendString(1,"AT+CMGS=Length");//输入UNICODE码的长度
        PortSendString(1,"0891683108200805FO11000D9168"); //输入短消息内容PDU模
        SetDestinationNo();
        PortSendString(1,Changed_No);//输入对方的号码
        Nm_Qm(MessageData);
        while(i<=Length)
         {
          *s = *qw;
          Qw_Number = *s;
          Qw_Unicode(Qw_Number);
          *s++;
           i++;
         }
        ans_str0 = GB_UnicodeData;
        PortSendString(1,"* ans_str0");          //输入短消息的内容
      	PortSendChar(1,"\x01a"); //输入结束字符
      	if(rcvend_flag)
          {
             rcvend_flag = 0;
             temp_point = rcv_buf;
      		   if(memcmp(temp_point,"\r\n+CME ERROR\r\n",14)!=0)
      		     return(0);
      		    else 
      		     return(1); 
           }
  	    }
 	    }
     
	 	}

*/

/*
函数名:   uchar InquierGSMSignal(void)
功能:     查询GSM信号强度
           参数:		无	
           返回值:	99 - 失败或者无信号
                    其他值为信号强度。
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   ldq
创建日期: 2003-8-21
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
uchar InquierGSMSignal(void)
  {
  bit bit_temp;
  uchar *p;
  uint idata a[2];
  uint idata n;
  uint idata i=0;
  bit_temp = EX0;
  EX0 = 0;
  memset(rcv_buf,0,INBUF_LEN);	//changed by lwd
  rcv_buf_len = 0;                //清空接收缓冲区   
	PortSendString(1,"AT+CSQ\r");
	do
  {
    i++;
    /*if(i>3000)
    {
      EX0 = bit_temp;
      return(99);
    }*/
	p = strstr(rcv_buf, "+CSQ:");
	if(!p)
		p = strstr(rcv_buf, "+csq:");

  }while( p == NULL);
  //disp_str(3,14,p);
  p++;
  p++;
  a[0] = *p;
  p++;
  a[1] = *p;
  n = (a[0]-0x30)*10 + (a[1]-0x30);
  memset(rcv_buf,0,INBUF_LEN);
  rcv_buf_len = 0;                  //清空接收缓冲区
  EX0 = bit_temp;
  return(n);      
 } 
 
 /*
函数名:  uchar SendSMSPduData(uchar *PhoneNo,uchar  *MessageData)
功能:    发送PDU模式的短信息到指定的接受方
          参数:		*PhoneNo :电话号码指针  
	 		              MessageData :短信息数据指针。
          返回值:		0 - 成功
                      1 - 数据发送失败
输入:     无
输出:     无
全局变量:
调用函数:
创建人:   SunnyZ
创建日期: 2003-8-30
-----------------------------------------------------------------------------
修改日期:
描述:*/
/*uchar SendSmsPduData(uchar *PhoneNo, uchar *MessageData)
{
  uint idata i=0;
  uchar msg_len;
  uchar * temp_p;
  bit bit_temp;
  uchar temph,templ;

  bit_temp = EX0;
  EX0 = 0;
  memset(rcv_buf,0,100);
  rcv_buf_len = 0;                  //清空接收缓冲区
  PortSendString(GSM,"AT+CMGF?\r");
  do
  {
    i++;
    disp_str(3,4,"step1");
    if(i>3000)
    {
      EX0 = bit_temp;
      return(1);
    }
  }while(strstr(rcv_buf,"OK")==NULL);
  i=0;
  if (strstr(rcv_buf,"+CMGF:0")==NULL)
  {
    memset(rcv_buf,0,100);
    rcv_buf_len = 0;   
    PortSendString(GSM,"AT+CMGF=0\r");
    do
    {
      i++;
      disp_str(3,4,"step2");
      
      if(i>3000)
      {
        EX0 = bit_temp;
        return(1);

⌨️ 快捷键说明

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