[Kinetis] YL-LK26Z板之 GSM模块的电话本操作

[复制链接]
942|9
 楼主| 芙蓉洞 发表于 2015-12-27 19:51 | 显示全部楼层 |阅读模式
GSM的电话本是放到SIM卡中,分别是存储和读取,使用指令为 AT+CPBR=1和AT+CPBW=1,"XXXXXX" 程序流程,
1,初始化模块
2,读取SIM卡的短信, 这里只有 存电话本指令,和读电话本指令可以使用
3, 如果是存电话本,格式是 TEL:1.XXXXXX, 把后面的XXXX存入第一个电话本位置,
4,如果是读取电话本,格式是 TEL?, 这里连读到取9个电话本,并把内容以短信格式回发
 楼主| 芙蓉洞 发表于 2015-12-27 19:52 | 显示全部楼层
  1. /*
  2. 针对短信内容进行处理

  3. */
  4. INT8U sms_event_deal(INT8U *str,INT8U *str_tel,INT8U *str_code)
  5. {   INT32U i;
  6.           INT8U j,t;
  7.           INT8U tmp_buf[25];
  8.           INT8U tmp_buf2[4];  
  9.            /*
  10.              格式:TEL:1,15000298662
  11.              功能:向SIM卡里的电话本内存一个号码,号码为150XXXX
  12.             */
  13.               i= strsearch("TEL:",str_code);
  14.                           if(i)//i为当前内容所在位置+1
 楼主| 芙蓉洞 发表于 2015-12-27 19:52 | 显示全部楼层
  1.    {  i=i+3;j=0;
  2.                                          if(str_code[i]>'0'&&str_code[i]<'9')
  3.                                          {    j=str_code[i]-'0';i++;
  4.                                          }
  5.                                          if(str_code[i]==','||str_code[i]<'.')
  6.                                          {i=i+1;}
  7.                                          else  return (0);
  8.                                         //向 tmp_buf里放入电话号码,这里一定要是数字,否可能失败
  9.                                          for(t=0;t<20;t++)
  10.                                           {   if(str_code[i]==0)  break;
  11.                                                         tmp_buf[t]=str_code[i++];
  12.                                                 }
  13.                                           tmp_buf[t]=0;
  14.                                         /* SIM卡内的电话本存入方式
  15.                                                  AT+CPBW=1,"15000298662"
 楼主| 芙蓉洞 发表于 2015-12-27 19:53 | 显示全部楼层
  1.                                                */
  2.                                                 i=0;tmp_buf2[i++]=(j/10)+'0';tmp_buf2[i++]=(j%10)+'0';
  3.                                                 tmp_buf2[i++]= ',';
  4.                                                 tmp_buf2[i++]=0;
  5.                                                 //进行AT指令组织及发送
  6.                                                  strcpya(str,"AT+CPBW=");strcata(str,tmp_buf2);  
  7.                                                  strcata(str,""");  
  8.                                                  strcata(str,tmp_buf); strcata(str,""");   
  9.                          strcata(str,"\x0d");com1_send(str);
  10.                                                         myDelay(500);
  11.                                                 //---------------------------
  12.                                                 //存完内容后回一条短信,表示已经存上子
  13.                                                 gms_sms_send(str,str_tel,"TEL OK!");
  14.                                                   return (1);
  15.                                 }                     
 楼主| 芙蓉洞 发表于 2015-12-27 19:54 | 显示全部楼层
  1.       /*
  2.              格式:TEL?
  3.              功能:向SIM卡里的电话本内1-9的所有号码,
  4.             */
  5.                                 i= strsearch("TEL?",str_code);
  6.                           if(i)//i为当前内容所在位置+1
  7.                                 {  //这里直接进行内容处理
  8.                                          /*
  9.                                           电话本读取格式是,
  10.                                            AT+CPBR=1
  11.                                            AT+CPBR=2
  12.                                            AT+CPBR=3
  13.                                          回复格式:
  14.                                         AT+CPBR=1
  15.           +CPBR: 1,"13818120592",129,""
  16.            OK
 楼主| 芙蓉洞 发表于 2015-12-27 19:54 | 显示全部楼层
  1.                                         */
  2.                                          str_code[0]=0;
  3.                                          for(t=1;t<10;t++)
  4.                                           {  if(t!=1) //内容回复格式之1  
  5.                                                          {  strcata(str_code," \x0a");
  6.                                                          }
  7.                                                       
  8.                                                          i=0;tmp_buf2[i++]=(t/10)+'0';tmp_buf2[i++]=(t%10)+'0';tmp_buf2[i++]= 0;  
  9.                                                 
  10.                                                          //进行AT指令组织及发送
  11.                                                    strcpya(str,"AT+CPBR=");strcata(str,tmp_buf2);   
  12.                            strcata(str,"\x0d");
  13.                                                 //因为要读取电话本,所以这里要进行等待并查询接收区内容
  14.                                                         i=com1_send(tmp_buff);
 楼主| 芙蓉洞 发表于 2015-12-27 19:55 | 显示全部楼层
  1.                                                  for(j=0;j<20;j++)
  2.                                            {          myDelay(2);
  3.                                                if(at_cont2)
  4.                                                                  {        myDelay(30);
  5.                                                                          i= strsearch("+CPBR: ",at_buff2);
  6.                                                   {break;    }        
  7.                                                                 }      
  8.                                             }
  9.                                                 
  10.                                                  if(i)
  11.                                                  {  i= strsearch("+CPBR: ",at_buff2);
  12.                                               if(i)
  13.                                               {          strcata(str_code,tmp_buf2); //内容回复格式之1
  14.                                                           strcata(str_code,",");           
  15.                                                                         j=i+9;i=0;
  16.                                                                                 do
  17.                                                                                 { tmp_buf[i++]= at_buff2[j++];
 楼主| 芙蓉洞 发表于 2015-12-27 19:55 | 显示全部楼层
  1. if( at_buff2[j]=='"')
  2.                                                                                  { tmp_buf[i++]=0;
  3.                                                                                         break;  }   
  4.                                                                                 }while(i<20);   
  5.                                                              strcata(str_code,tmp_buf);
  6.                                                                 }
  7.                                        }
  8.                                                       
  9.                                                         myDelay(10);
  10.                                                         //---------------
  11.                                                 }//for
  12.             //查完后进行回复
  13.                                                         gms_sms_send(str,str_tel,str_code);
  14.                                                   return (1);
  15.                                 }

  16.                               
  17.    return (0);
  18. }
 楼主| 芙蓉洞 发表于 2015-12-27 19:57 | 显示全部楼层
调试效果,串口监听到的数据

硬件连接图 :



 楼主| 芙蓉洞 发表于 2015-12-27 19:58 | 显示全部楼层
附件:

GSM-phone-book.zip

963.8 KB, 下载次数: 0

您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

398

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部