GSM的电话本是放到SIM卡中,分别是存储和读取,使用指令为 AT+CPBR=1和AT+CPBW=1,"XXXXXX" 程序流程,
1,初始化模块
2,读取SIM卡的短信, 这里只有 存电话本指令,和读电话本指令可以使用
3, 如果是存电话本,格式是 TEL:1.XXXXXX, 把后面的XXXX存入第一个电话本位置,
4,如果是读取电话本,格式是 TEL?, 这里连读到取9个电话本,并把内容以短信格式回发/*
针对短信内容进行处理
*/
INT8U sms_event_deal(INT8U *str,INT8U *str_tel,INT8U *str_code)
{ INT32U i;
INT8U j,t;
INT8U tmp_buf[25];
INT8U tmp_buf2[4];
/*
格式:TEL:1,15000298662
功能:向SIM卡里的电话本内存一个号码,号码为150XXXX
*/
i= strsearch("TEL:",str_code);
if(i)//i为当前内容所在位置+1
{ i=i+3;j=0;
if(str_code[i]>'0'&&str_code[i]<'9')
{ j=str_code[i]-'0';i++;
}
if(str_code[i]==','||str_code[i]<'.')
{i=i+1;}
else return (0);
//向 tmp_buf里放入电话号码,这里一定要是数字,否可能失败
for(t=0;t<20;t++)
{ if(str_code[i]==0) break;
tmp_buf[t]=str_code[i++];
}
tmp_buf[t]=0;
/* SIM卡内的电话本存入方式
AT+CPBW=1,"15000298662"
*/
i=0;tmp_buf2[i++]=(j/10)+'0';tmp_buf2[i++]=(j%10)+'0';
tmp_buf2[i++]= ',';
tmp_buf2[i++]=0;
//进行AT指令组织及发送
strcpya(str,"AT+CPBW=");strcata(str,tmp_buf2);
strcata(str,"\"");
strcata(str,tmp_buf); strcata(str,"\"");
strcata(str,"\x0d");com1_send(str);
myDelay(500);
//---------------------------
//存完内容后回一条短信,表示已经存上子
gms_sms_send(str,str_tel,"TEL OK!");
return (1);
}
/*
格式:TEL?
功能:向SIM卡里的电话本内1-9的所有号码,
*/
i= strsearch("TEL?",str_code);
if(i)//i为当前内容所在位置+1
{ //这里直接进行内容处理
/*
电话本读取格式是,
AT+CPBR=1
AT+CPBR=2
AT+CPBR=3
回复格式:
AT+CPBR=1
+CPBR: 1,"13818120592",129,""
OK
*/
str_code[0]=0;
for(t=1;t<10;t++)
{ if(t!=1) //内容回复格式之1
{ strcata(str_code," \x0a");
}
i=0;tmp_buf2[i++]=(t/10)+'0';tmp_buf2[i++]=(t%10)+'0';tmp_buf2[i++]= 0;
//进行AT指令组织及发送
strcpya(str,"AT+CPBR=");strcata(str,tmp_buf2);
strcata(str,"\x0d");
//因为要读取电话本,所以这里要进行等待并查询接收区内容
i=com1_send(tmp_buff);
for(j=0;j<20;j++)
{ myDelay(2);
if(at_cont2)
{ myDelay(30);
i= strsearch("+CPBR: ",at_buff2);
{break; }
}
}
|