打印
[Kinetis]

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

[复制链接]
672|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个电话本,并把内容以短信格式回发
/*
针对短信内容进行处理

*/
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;    }        
                                                                }      
                                            }
                                                

相关帖子

沙发
orangebanana|  楼主 | 2016-1-18 20:41 | 只看该作者
 if(i)
                                                 {  i= strsearch("+CPBR: ",at_buff2);
                                              if(i)
                                              {          strcata(str_code,tmp_buf2); //内容回复格式之1
                                                          strcata(str_code,",");           
                                                                        j=i+9;i=0;
                                                                                do
                                                                                { tmp_buf[i++]= at_buff2[j++];
                                                                                if( at_buff2[j]=='"')
                                                                                 { tmp_buf[i++]=0;
                                                                                        break;  }   
                                                                                }while(i<20);   
                                                             strcata(str_code,tmp_buf);
                                                                }
                                       }
                                                      
                                                        myDelay(10);
                                                        //---------------
                                                }//for
            //查完后进行回复
                                                        gms_sms_send(str,str_tel,str_code);
                                                  return (1);
                                }

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

硬件连接图 :



使用特权

评论回复
板凳
Bermanrep| | 2016-1-19 20:52 | 只看该作者
GSM是不是得要求高速啊,这个不是太懂

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

113

帖子

3

粉丝