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

📄 sms.h

📁 用AVR控制GPRM模块。用于远程通讯等等
💻 H
📖 第 1 页 / 共 2 页
字号:
//+CPBR: 1,"13503332739",129,"8059D0592BFFFF"\CR\LF\CR\LFOK\CR\LF 
uchar gsmReadphonebook(SM_PHON *phon)
{
    int nLength;          // 串口收到的数据长度
    char cmd[16]={0};         // 命令串
    char ans[128]={0};        // 应答串
    char *p;
	char *q;
    strcpy_P(cmd,AT_CPBR);
	sprintf(cmd+8, "%d", phon->index);//植入电话号码位置
	strcat_P(cmd,_r);
    // 输出命令串
    WriteComm(cmd, strlen(cmd));
    // 读应答数据
    nLength = ReadComm(ans);
    
    // 根据能否找到"+CMS ERROR"决定成功与否
    if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
    {
        p=strchr(ans,'\"');//寻找第一个“
		q=strchr(p+1,'\"');//寻找第二个“
		memcpy(phon->NUM,p+1,q-p-1);//将电话号码拷贝进去
		p=strchr(q+1,'\"');//寻找第三个“
		q=strchr(p+1,'\"');//寻找第四个“
		memcpy(phon->NAME,p+1,q-p-1);//将电话号码拷贝进去
		return 0;
    } 
    return 0xff;
}
/**************************************************************   
功能:向电话本中写内容
参数:phon:电话号码指针
返回: 是否成功
编写人:王志辉
时间:2007年8月10日
是否测试:是
****************************************************************/  
//AT+CPBW=1,"13503332739",129,"8059D0592BFFFF"\CR  
uchar gsmWritephonebook(SM_PHON *phon)
{	
    int nLength;
    char cmd[64]={0};// 命令串
    char ans[16]={0};// 应答串
	//生成命令串
	strcpy_P(cmd,AT_CPBW);
	sprintf(cmd+8, "%d", phon->index);//植入电话号码位置
    strcat_P(cmd,d_y);
	strcat(cmd,phon->NUM);//植入电话号码
	strcat_P(cmd,y_d_129_d_y);
	strcat(cmd,phon->NAME);//植入电话姓名
	strcat_P(cmd,y_r);
	//发送命令串
	WriteComm(cmd, strlen(cmd));
	nLength = ReadComm(ans);
    // 根据能否找到"+CMS ERROR"决定成功与否
    if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
    {
        return 0;
    }
    return 0xff;

}

/**************************************************************   
功能:判断密码是否正确
参数:无    
返回: 正确:0 错误:0xff
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/     
uchar judje_mima(SM_PARAM* pMsg)
{   
    char a[mima_weishu];
	eeprom_read_block (&a[0],&mima[0], mima_weishu);//取密码到a
    if(memcmp(pMsg->TP_UD,a,3)==0)
	return 0;//密码正确返回零
	else
	return 0xff;//密码错误返回0xff
}
/**************************************************************   
功能:将从机发来的信息通过短信发给主机
参数:无    
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/     
void cfsebei_to_sms(void)
{   
	if(system_state==cf_shebei)//判断系统状态
	   {    
			SM_PARAM scs_one;//申请一条短信空间并初始化编码方式协议标识
			scs_one.TP_PID=0;        // 用户信息协议标识(TP-PID)
            scs_one.TP_DCS=0;        // 用户信息编码方式(TP-DCS)
			scs_one.index=1;
			eeprom_read_block (&scs_one.SCA,&center_number[0],phone_number_weishu);//取短信中心号码
			eeprom_read_block (&scs_one.TPA,&phone_number[0],phone_number_weishu);//取对方号码
			gsmBytes2String(equsinput_buf, &scs_one.TP_UD, equsinput_Length);//将设备发来的信息转换后存入要发送的短信中
			equsinput_Length=0;
		    gsmSendMessage(&scs_one);

			system_state=0;//系统恢复空闲状态
	   }
	   
}
/**************************************************************   
功能:将主机发来的信息通过串口发给从机
参数:无    
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void cfsms_to_sebei(void)
{
    uchar a ;
	if(system_state==cf_msm)//测试接受短消息
	   {    
			SM_PARAM scs_one;
		    gsmReadMessage(&scs_one);
			if(judje_mima(&scs_one)==0)//如果密码正确
			 {
			 	//WriteTextRom(sdzqdx);//测试用显示“收到正确短信”
				//转换密码以后的短信内容
				a=gsmString2Bytes(&scs_one.TP_UD[mima_weishu],equsinput_buf,strlen(&scs_one.TP_UD)-mima_weishu);
                WriteEqu(equsinput_buf,a);//向从设备发送命令内容
			 }
            //else
			//WriteTextRom(sdljdx);//测试用显示“收到垃圾短信”

			system_state=0;//系统恢复空闲状态
			gsmDeleteMessage(scs_one.index);//删除处理完的短消息
	   }
}

/**************************************************************   
功能:读取电话卡上的固定信息并存入单片机eeprom
参数:无    
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void read_bois(void)
{
	SM_PHON phon1;
	phon1.index=1;//准备读电话本位置1中的密码
	gsmReadphonebook(&phon1);
    eeprom_write_block (&phon1.NAME, &mima[0],mima_weishu);//将读到的密码内容存入EEPROM
    phon1.index=2;//准备读电话本位置2的波特率设置
    gsmReadphonebook(&phon1);
	eeprom_write_block (&phon1.NUM, &baud_rate[0],baud_rate_weishu);//将读到的波特率内容存入EEPROM
	usart0_baud_set(phon1.NUM[0]);//修改波特率设置
	phon1.index=3;//准备读电话本位置3的对方号码
    gsmReadphonebook(&phon1);
	eeprom_write_block (&phon1.NUM, &phone_number[0],phone_number_weishu);//将读到的短信中心号码存入EEPROM
	phon1.index=4;//准备读电话本位置4的短信中心号码
    gsmReadphonebook(&phon1);
	eeprom_write_block (&phon1.NUM, &center_number[0],phone_number_weishu);//将读到的短信中心号码存入EEPROM
}
/**************************************************************   
功能:向电话卡中写信息
参数:无    
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void reset_bois(void)
{
	SM_PHON phon1;
	phon1.index=1;//准备向电话本位置1中写密码
	eeprom_read_block (&phon1.NAME,&mima[0],mima_weishu);//读密码存入phon1
	phon1.NAME[mima_weishu]='\0';
	strcpy_P(&phon1.NUM,shouwei_mima);
	gsmWritephonebook(&phon1);
	phon1.index=2;//准备向电话本位置2中写波特率
	eeprom_read_block (&phon1.NUM,&baud_rate[0],baud_rate_weishu);//读密码存入phon1
	strcpy_P(&phon1.NAME,botelv);
	gsmWritephonebook(&phon1);
	usart0_baud_set(phon1.NUM[0]);//修改波特率设置
	phon1.index=3;//准备向电话本位置1中写对方号码
	eeprom_read_block (&phon1.NUM,&phone_number[0],phone_number_weishu);//读密码存入phon1
	strcpy_P(&phon1.NAME,zhujihaoma);
	gsmWritephonebook(&phon1);
	phon1.index=4;//准备向电话本位置1中写中心号码
	eeprom_read_block (&phon1.NUM,&center_number[0],phone_number_weishu);//读密码存入phon1
	strcpy_P(&phon1.NAME,duanxinzhongxin);
	gsmWritephonebook(&phon1);
}
//手动读取电话卡上存储的固定信息
/*void key2(void)
{   
	if(judge_k2)//测试读取电话号码
	   {
			while(judge_k2)
            NOP;
			read_bois();
			
	   }
}
void key3(void)
{
	if(judje_k3)//测试写电话号码
	   {
			while(judje_k3)
            NOP;
		    SM_PHON phon1={"1234567890","wanghaili",1};
	        if(gsmWritephonebook(&phon1)!=0xff)
	        WriteTextRom(xdhhmcg);
			else
			WriteTextRom(xdhhmsb);

	   }
}
*/

⌨️ 快捷键说明

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