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

📄 sms.c

📁 用C语言编写的GSM-SIM驱动程序包
💻 C
字号:
/*************************************************
文件名:SMS.C
功 能:与短信相关的代码
*************************************************/
#include <W77C32.h>
#include "hal.h"
#include "SMS.h"

//发送AT命令
void SENDCMD(uchar cmdlen,uchar *cmd)
{uchar i=0;
 for(;cmdlen>0;cmdlen--)
     {SBUF=cmd[i++];
	  while(TI==0);
	  TI=0;
	  }
 }

//发送一个字符
void SENDCHAR(uchar c)
{ SBUF=c;
  while(TI==0);
  TI=0;
  }

//获得发送手机的号码和数据
void GETNUMBER_DATA(void)
{uint i;
 for(;rcount>0;rcount--)
   {if((rbuff[rcount]==0x38)&&(rbuff[rcount-1]==0x30)&&(rbuff[rcount-2]==0x0A)&&(rbuff[rcount-3]==0x0D))
    for(i=0;i<14;i++)
	  {number_buff[i]=rbuff[rcount+23+i];
	   }
	datalen=(DoubleAscii2Byte(rbuff[rcount+55],rbuff[rcount+56]))*2;
	for(i=0;i<datalen;i++)
	  {databuff[i]=rbuff[rcount+57+i];
	   }
	break;
	}
 }


//向指定的号码发送短消息(内容为:短信已收到!)
void SENDSMS(void)
{ulong i=0xfffff;
 rcount=0;//数据缓冲区指针回0
 SENDCMD(10,&cmgs);
 SENDCHAR(0x0D);
 while(rbuff[rcount-1]!=">")
   {i--;		   //超时返回
	if(i==0)
	 {return;}
    }
 SENDCMD(10,&smsdata0);
 SENDCMD(14,&number_buff);  //发送号码
 SENDCMD(20,&smsdata1);
 SENDCHAR(0x1A);  //Ctrl+z发送短信
 i=0xffffff;    //发送短消息超时处理
  while(receive_ok==0)
    {i--;
	 if(i==0)		 //超时还未响应则返回
	   {rcount=0;
        receive_ok=0;
	    return;} 
	  }
 receive_ok=0;
 rcount=0;
 }

//读取指定索引号的短信内容
void READSMS(void)
{ulong i=0xfffff;
 rcount=0;
 SENDCMD(8,&cmgr);
 SENDCHAR(index_buff[0]);
 if(index_len==2)
   {SENDCHAR(index_buff[1]);}
 SENDCHAR(0x0D);
 while(receive_ok==0)
   {i--;
    if(i==0)		 //超时还未响应则返回
	  {rcount=0;
       receive_ok=0;
       return;} 
       }
 receive_ok=0;
 }

//删除指定索引号的短信内容
void DELSMS(void)
{ulong i=0xffff;  
 rcount=0;
 SENDCMD(8,&cmgd);
 SENDCHAR(index_buff[0]);
 if(index_len==2)
   {SENDCHAR(index_buff[1]);}
 SENDCHAR(0x0D);
  while(receive_ok==0)
    {i--;
	 if(i==0)		 //超时还未响应则返回
	   {rcount=0;
        receive_ok=0;
	    return;} 
	  }
 receive_ok=0;
 rcount=0; 
 }

//计算短信索引号
void GET_INDEX(void)
{for(;rcount>0;--rcount)
 if(rbuff[rcount]==0x2C)   //用逗号来定位
    {if((rbuff[rcount+2]>=0x30)&&(rbuff[rcount+2]<=0x39))
	    {index_len=2;
		 index_buff[0]=rbuff[rcount+1];
		 index_buff[1]=rbuff[rcount+2];
		 break;
		 }
	 else 
	    {index_len=1;
		 index_buff[0]=rbuff[rcount+1];
		 break;
		 }
	   }

 }

⌨️ 快捷键说明

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