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

[复制链接]
851|2
 楼主| orangebanana 发表于 2016-1-18 20:41 | 显示全部楼层 |阅读模式
GSM的电话本是放到SIM卡中,分别是存储和读取,使用指令为 AT+CPBR=1和AT+CPBW=1,"XXXXXX" 程序流程,
1,初始化模块
2,读取SIM卡的短信, 这里只有 存电话本指令,和读电话本指令可以使用
3, 如果是存电话本,格式是 TEL:1.XXXXXX, 把后面的XXXX存入第一个电话本位置,
4,如果是读取电话本,格式是 TEL?, 这里连读到取9个电话本,并把内容以短信格式回发
  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
  15.         {  i=i+3;j=0;
  16.                                          if(str_code[i]>'0'&&str_code[i]<'9')
  17.                                          {    j=str_code[i]-'0';i++;
  18.                                          }
  19.                                          if(str_code[i]==','||str_code[i]<'.')
  20.                                          {i=i+1;}
  21.                                          else  return (0);
  22.                                         //向 tmp_buf里放入电话号码,这里一定要是数字,否可能失败
  23.                                          for(t=0;t<20;t++)
  24.                                           {   if(str_code[i]==0)  break;
  25.                                                         tmp_buf[t]=str_code[i++];
  26.                                                 }
  27.                                           tmp_buf[t]=0;
  28.                                         /* SIM卡内的电话本存入方式
  29.                                                  AT+CPBW=1,"15000298662"
  30.                                                
  31.                                                 */
  32.                                                 i=0;tmp_buf2[i++]=(j/10)+'0';tmp_buf2[i++]=(j%10)+'0';
  33.                                                 tmp_buf2[i++]= ',';
  34.                                                 tmp_buf2[i++]=0;
  35.                                                 //进行AT指令组织及发送
  36.                                                  strcpya(str,"AT+CPBW=");strcata(str,tmp_buf2);  
  37.                                                  strcata(str,""");  
  38.                                                  strcata(str,tmp_buf); strcata(str,""");   
  39.                          strcata(str,"\x0d");com1_send(str);
  40.                                                         myDelay(500);
  41.                                                 //---------------------------
  42.                                                 //存完内容后回一条短信,表示已经存上子
  43.                                                 gms_sms_send(str,str_tel,"TEL OK!");
  44.                                                   return (1);
  45.                                 }                                
  46.       /*
  47.              格式:TEL?
  48.              功能:向SIM卡里的电话本内1-9的所有号码,
  49.             */
  50.                                 i= strsearch("TEL?",str_code);
  51.                           if(i)//i为当前内容所在位置+1
  52.                                 {  //这里直接进行内容处理
  53.                                          /*
  54.                                           电话本读取格式是,
  55.                                            AT+CPBR=1
  56.                                            AT+CPBR=2
  57.                                            AT+CPBR=3
  58.                                          回复格式:
  59.                                         AT+CPBR=1
  60.           +CPBR: 1,"13818120592",129,""
  61.            OK
  62.                                         */
  63.                                          str_code[0]=0;
  64.                                          for(t=1;t<10;t++)
  65.                                           {  if(t!=1) //内容回复格式之1  
  66.                                                          {  strcata(str_code," \x0a");
  67.                                                          }
  68.                                                       
  69.                                                          i=0;tmp_buf2[i++]=(t/10)+'0';tmp_buf2[i++]=(t%10)+'0';tmp_buf2[i++]= 0;  
  70.                                                 
  71.                                                          //进行AT指令组织及发送
  72.                                                    strcpya(str,"AT+CPBR=");strcata(str,tmp_buf2);   
  73.                            strcata(str,"\x0d");
  74.                                                 //因为要读取电话本,所以这里要进行等待并查询接收区内容
  75.                                                         i=com1_send(tmp_buff);
  76.                                                   for(j=0;j<20;j++)
  77.                                            {          myDelay(2);
  78.                                                if(at_cont2)
  79.                                                                  {        myDelay(30);
  80.                                                                          i= strsearch("+CPBR: ",at_buff2);
  81.                                                   {break;    }        
  82.                                                                 }      
  83.                                             }
  84.                                                 
 楼主| orangebanana 发表于 2016-1-18 20:41 | 显示全部楼层
  1. if(i)
  2.                                                  {  i= strsearch("+CPBR: ",at_buff2);
  3.                                               if(i)
  4.                                               {          strcata(str_code,tmp_buf2); //内容回复格式之1
  5.                                                           strcata(str_code,",");           
  6.                                                                         j=i+9;i=0;
  7.                                                                                 do
  8.                                                                                 { tmp_buf[i++]= at_buff2[j++];
  9.                                                                                 if( at_buff2[j]=='"')
  10.                                                                                  { tmp_buf[i++]=0;
  11.                                                                                         break;  }   
  12.                                                                                 }while(i<20);   
  13.                                                              strcata(str_code,tmp_buf);
  14.                                                                 }
  15.                                        }
  16.                                                       
  17.                                                         myDelay(10);
  18.                                                         //---------------
  19.                                                 }//for
  20.             //查完后进行回复
  21.                                                         gms_sms_send(str,str_tel,str_code);
  22.                                                   return (1);
  23.                                 }

  24.                               
  25.    return (0);
  26. }
调试效果,串口监听到的数据

硬件连接图 :



Bermanrep 发表于 2016-1-19 20:52 | 显示全部楼层
GSM是不是得要求高速啊,这个不是太懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

113

帖子

3

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