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

📄 gsm-

📁 GSM室温监控系统
💻
字号:
#include "common.h"

char RxBuf[RxBuf_N]={0};					//定义串口接收数据缓冲区
uchar RxPoint;								//Rx缓冲区指针
bit flag=0;									//用来等待发送信息结束后,接收TC35响应的标志
uchar PhoneNum[15]="+8613760602242";		//手机号码
const uchar *MsContent="I Love You !";		//短信内容


//查找字符串,在s中查找t
//返 回 值: s_temp(t在s中的位置)成功 0失败
char *LookFor_Str(uchar *s, uchar *t)
{
	uchar    *s_temp;       
	uchar    *m_temp;       
	uchar    *t_temp;     
	if (s == 0 ||t == 0) return 0;
	for (s_temp = s; *s_temp != '\0'; s_temp++)
	{
		m_temp = s_temp;
		for (t_temp = t; *t_temp == *m_temp; t_temp++, m_temp++);
		if (*t_temp == '\0') return s_temp;
	}
	return 0;
}


//发送"AT"联机指令,测试是否连接正确
void Send_AT(void)
{
 	uchar *p;
	uchar i=10;
 	while(i--)								//测试10次,在某一次成功就退出
	{
		RxPoint=0;							//buffer指针清0
		SendString("AT\r");					//发送AT回车
    	ES=1;    							//必须中断 串口中断应许 等待应答"OK"
    	//delay_ms(100);						//等待接受数据完成
		while(flag==0);
		flag=0;
		delay_ms(300);
    	p=LookFor_Str(RxBuf,"OK");   		//接收到的数据存在RsBuf
    	if(p!=0)	 						//接收到"OK"
		{
			PutStr(0,0,"GSM 模块正常  ");
			delay_ms(1000);
			break;
		}
		PutStr(0,0,"没检测到GSM 模块");
		delay_ms(500);
	}
}

//设置短信模式 1:text模式 0:PDU模式
//串口发送数组命令到TC35,AT+CMGF=1
void Set_Mode(uchar mode)
{
  	uchar *p,i=10;
	while(i--)								//测试10次,在某一次成功就退出
	{
		RxPoint=0;							//buffer指针清0
		if(mode) SendString("AT+CMGF=1\r");	//设置短消息模式  1 TEXT
		else  	 SendString("AT+CMGF=0\r");	//设置短消息模式  PDU模式		
    	ES=1;    							//必须中断 串口中断应许 等待应答"OK" 
    	//delay_ms(300);						//等待接受数据完成
		while(flag==0);
		flag=0;
		delay_ms(300);
    	p=LookFor_Str(RxBuf,"OK");   		//接收到的数据存在RsBuf
    	if(p!=0)	 						//接收到"OK"
		{
			PutStr(1,0,"短信模式:text");
			delay_ms(1000);
			break;
		}
		PutStr(1,0,"短信模式设置失败");
		delay_ms(500);
	}
}

//发送号码
void Send_PhoneNum(uchar *str)	
{
	uchar i=0;
	while(*str)								
	{
		SendASC(*str) ;
		str++;
		i++;
		if(i==14) break;					//只发送14个
	}
}

//发送TEXT短信 AT+CMGS="+8613760602242"
//*dialnum 目的号码    *text短信内容
//返回:1 发送成功  0 发送失败                
uchar TransmitText(uchar *dialnum,uchar *text)  
{
	uchar i=10,j=10;
	uchar *p;
	while(i--)
	{
		RxPoint=0;	  							//buffer指针清0
		SendString("AT+CMGS=");					//信息发送指令 AT+CMGS="+8613760602242"
		SendASC('"');
		Send_PhoneNum(dialnum); 				//号码
		SendASC('"');
		SendASC('\r');							//回车
		while(flag==0);
		flag=0;
		delay_ms(300);
		p=LookFor_Str(RxBuf,">");				//">"
		if(p!=0)									//如果接受到 >  发送text
		{	
			RxPoint=0;	  							//清空接收缓冲区
			SendString(text);						//发送短信内容
			SendString("\x1a\r");					//'\x1a'结束符(相当CTRL+Z) '\r'回车符					
			while(flag==0);
			flag=0;
			delay_ms(5000);						//这里要延时足够长时间,否则会读取错误
			p=LookFor_Str(RxBuf,"OK");			//查找OK
			if(p!=0)							//发送成功
			{
				PutStr(2,0,"To: ");
				PutStr(2,2,dialnum+3);
				PutStr(3,0,"发送成功 ^_^");
				return 1;
			}
			else 
			{
				PutStr(2,0,"发送失败");
				delay_ms(1000);
				PutStr(2,0,"正在重发");
			}
		}
	}
	PutStr(2,0,"多次重发失败");
	return 0;
}

//完整的短信发送函数	
//dialnum:手机号码 text:短信内容
void Send_Message(uchar *dialnum,uchar *text)
{
	Send_AT();							//发送AT
	Set_Mode(1);						//设置短信模式:text
	TransmitText(dialnum,text);	//设置
}


⌨️ 快捷键说明

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