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

📄 m32.lst

📁 这是用W77E58编写的控制GSM模块
💻 LST
📖 第 1 页 / 共 5 页
字号:
 509   2                  pDst++;  
 510   2      
 511   2                }          
 512   1                 
 513   1                
 514   1      #if 0   
                        for(i=0; i<nSrcLength; i+=2)     
                        {         
                              // 输出高4位         
                              if((*pSrc>='0') && (*pSrc<='9'))         
                              {             
                                      *pDst = (*pSrc - '0') << 4;         
                                  
                              
                              }         
                          else         
                          {             
                                      *pDst = (*pSrc - 'A' + 10) << 4;         
                          }              
                          
                              
                              
                              
                              pSrc++;              
                          // 输出低4位        
                          if(*pSrc>='0' && *pSrc<='9')         
                          {             
                                      *pDst  = *pSrc - '0';         
                          }         
                          else         
                          {             
                                      *pDst  = *pSrc - 'A' + 10;         
C51 COMPILER V7.50   M32                                                                   04/04/2007 15:01:44 PAGE 10  

                          }         
                      pSrc++;         
                          pDst++;  
              
                        }          
              #endif
 547   1                // 返回目标数据长度     
 548   1                return nSrcLength / 2; 
 549   1       }      
 550          
 551          
 552           
 553          /**************************************************************************************************
 554          //PDU串中的号码和时间,都是两两颠倒的字符串。利用下面两个函数可进行正反变换:
 555          // 正常顺序的字符串转换为两两颠倒的字符串,若长度为奇数,补''F''凑成偶数 // 如:"8613851872468" --> "6831588
             -12764F8" 
 556          // pSrc: 源字符串指针 
 557          // pDst: 目标字符串指针 
 558          // nSrcLength: 源字符串长度 
 559          // 返回: 目标字符串长度 
 560          ****************************************************************************************************/
 561          //int gsmInvertNumbers(const char* pSrc, char* pDst, int nSrcLength) 
 562          int gsmInvertNumbers(char xdata* pSrc, char xdata* pDst, int nSrcLength) 
 563          {     
 564   1      
 565   1      
 566   1          int nDstLength;   // 目标字符串长度     
 567   1              char ch;          // 用于保存一个字符          
 568   1              int i;
 569   1      
 570   1              // 复制串长度     
 571   1              nDstLength = nSrcLength;          
 572   1              // 两两颠倒     
 573   1              for(i=0; i<nSrcLength;i+=2)     
 574   1              {         
 575   2                  ch = *pSrc++;        // 保存先出现的字符         
 576   2                  *pDst++ = *pSrc++;   // 复制后出现的字符         
 577   2                  *pDst++ = ch;        // 复制先出现的字符     
 578   2          }          
 579   1          // 源串长度是奇数吗?     
 580   1          if(nSrcLength & 1)     
 581   1          {         
 582   2                  *(pDst-2) = 'F';     // 补''F'' 
 583   2                  nDstLength++;        // 目标串长度加1     
 584   2          }          
 585   1          // 输出字符串加个结束符     
 586   1          *pDst = '\0';          
 587   1          // 返回目标字符串长度     
 588   1          return nDstLength; 
 589   1      }      
 590          
 591          
 592          // 两两颠倒的字符串转换为正常顺序的字符串
 593          // 如:"683158812764F8" --> "8613851872468"
 594          // pSrc: 源字符串指针
 595          // pDst: 目标字符串指针
 596          // nSrcLength: 源字符串长度
 597          // 返回: 目标字符串长度
 598          int gsmSerializeNumbers(char* pSrc, char* pDst, int nSrcLength)
 599          {
 600   1          int i,nDstLength;   // 目标字符串长度
 601   1          char ch;          // 用于保存一个字符
C51 COMPILER V7.50   M32                                                                   04/04/2007 15:01:44 PAGE 11  

 602   1          
 603   1          // 复制串长度
 604   1          nDstLength = nSrcLength;
 605   1          
 606   1          // 两两颠倒
 607   1          for(i=0; i<nSrcLength;i+=2)
 608   1          {
 609   2              ch = *pSrc++;        // 保存先出现的字符
 610   2              *pDst++ = *pSrc++;   // 复制后出现的字符
 611   2              *pDst++ = ch;        // 复制先出现的字符
 612   2          }
 613   1          
 614   1          // 最后的字符是'F'吗?
 615   1          if(*(pDst-1) == 'F')
 616   1          {
 617   2              pDst--;
 618   2              nDstLength--;        // 目标字符串长度减1
 619   2          }
 620   1          
 621   1          // 输出字符串加个结束符
 622   1          *pDst = '\0';
 623   1          
 624   1          // 返回目标字符串长度
 625   1          return nDstLength;
 626   1      }
 627          
 628          
 629          
 630          
 631          
 632          
 633          uchar gsmDoUserTask(uchar* task)
 634          {
 635   1       
 636   1              uchar xdata* ptr;
 637   1              if(task[0]!='M' && task[0] != 'A' && task[0] != 'B' && task[0] != 'C' && task[0]!='D'&& task[0]!='
             -T')
 638   1                      {  //如果你编辑了错误短信:check ok
 639   2                         sprintf(TP_UD,"Fail");   //gsmSendMessage("Fail");   
 640   2                             return 0;
 641   2              }
 642   1                      if(strncmp(task,"TM30S",5)==0)
 643   1                      {//定时跟踪:设置追踪器每隔30 S回复一条地理位置信息
 644   2                  if(gsmCheckRightNumber("M",0)==NULL && gsmCheckRightNumber("A",0)==NULL \ 
 645   2                         && gsmCheckRightNumber("B",0)==NULL && gsmCheckRightNumber("C",0)==NULL \
 646   2                         && gsmCheckRightNumber("D",0)==NULL)
 647   2                          {
 648   3                      //如果不是已授权号码,追踪器不会回应
 649   3                       return 2;
 650   3                              }
 651   2                              
 652   2                              GPSTimerReq=1;
 653   2                              GPSTimer30=0;
 654   2                  sprintf(TP_UD,"Timer 30 s!");
 655   2                  return 1;
 656   2                      }
 657   1                      else
 658   1                      if(strncmp(task,"TM",2)==0)
 659   1                      {//取消自动回复功能方法:发送一条短信"TM"到追踪器,就可以完成删除。
 660   2      
 661   2                  if(gsmCheckRightNumber("M",0)==NULL && gsmCheckRightNumber("A",0)==NULL \ 
 662   2                         && gsmCheckRightNumber("B",0)==NULL && gsmCheckRightNumber("C",0)==NULL \
C51 COMPILER V7.50   M32                                                                   04/04/2007 15:01:44 PAGE 12  

 663   2                         && gsmCheckRightNumber("D",0)==NULL)
 664   2                          {
 665   3                      //如果不是已授权号码,追踪器不会回应
 666   3                       return 2;
 667   3                              }
 668   2      
 669   2                          GPSTimerReq=0;
 670   2                  GPSTimer30=0;
 671   2                              sprintf(TP_UD,"Cancel Timer 30 s!");
 672   2                  return 1;
 673   2                      }
 674   1      
 675   1              
 676   1                      putstring1("Del Right Number:"); 
 677   1              
 678   1                      if(task[1] == '\0')
 679   1              {
 680   2                 //delete: 
 681   2                 if(gsmSearchPhone(task)==0)
 682   2                         {      //非授权号码,不能删除
 683   3                        sprintf(TP_UD,"You are not master!");   
 684   3                        return 0;
 685   3                         }
 686   2                     
 687   2                         if(gsmDeletePhone(gsmSearchPhone(task)))
 688   2                         {
 689   3                                sprintf(TP_UD,"OK");
 690   3                        return 1;
 691   3                 }
 692   2                         else 
 693   2                         {
 694   3                                sprintf(TP_UD,"Fail");   //gsmSendMessage("Fail");   
 695   3                                return 0;  
 696   3                 }   
 697   2              } 
 698   1              
 699   1              
 700   1              putstring1("Set Right Number:"); 
 701   1      
 702   1              if((ptr=strstr(task,"M")) != NULL)    //设置主授权号码
 703   1                      {    //设置授权:Master
 704   2                   ptr++;
 705   2                           putstring1("Phone Number to Save:\r\n");
 706   2                   putstring1(ptr);
 707   2                               putstring1("\r\n");
 708   2                      
 709   2                       if(gsmSavePhone(ptr,"M")==TRUE)     //起名为:M
 710   2                           //if(gsmPhoneBookTask(GSM_SAVE_PHONE,ptr,"M",PhoneNumber))
 711   2                               {
 712   3                             
 713   3                                        putstring1("Save Phone Ok,Number is:\r\n");
 714   3                                    sprintf(TPA,"++");
 715   3                                        strcat(TPA, ptr);
 716   3                                        putstring1(TPA);
 717   3                                    putstring1("\r\n");
 718   3                                    
 719   3                                        sprintf(TP_UD,"OK");
 720   3      
 721   3                                        return 1;    //gsmSendMessage("OK"); 
 722   3                                            
 723   3                               }
 724   2                               else
C51 COMPILER V7.50   M32                                                                   04/04/2007 15:01:44 PAGE 13  

 725   2                   {      
 726   3                                        putstring1("Save Phone Fail!");
 727   3                                    sprintf(TP_UD,"Fail");   //gsmSendMessage("Fail"); 
 728   3                            return 0; 
 729   3                                        
 730   3                           }
 731   2      
 732   2                      }
 733   1              
 734   1              if(task[0] == 'A')                 //设置第一个受权号码
 735   1              {
 736   2                //if(gsmPhoneBookTask(GSM_SEARCH_PHONE,NULL,"M",0))
 737   2                        if(gsmSearchPhone("M"))          //是否有主授权号码?
 738   2                {
 739   3                          if((ptr=strstr(task,"A")) != NULL)
 740   3                          {   
 741   4                      //增加授权:
 742   4                   
 743   4                      ptr++;
 744   4                              putstring1("Phone Number to Save:\r\n");
 745   4                      putstring1(ptr);
 746   4                                  putstring1("\r\n");
 747   4                              PhoneNumber=2;
 748   4                                      //if(gsmPhoneBookTask(GSM_SAVE_PHONE,ptr,"A",PhoneNumber))
 749   4                          if(gsmSavePhone(ptr,"A")==TRUE)  //第一个授权,起名为:A
 750   4                              {
 751   5                             
 752   5                                        putstring1("Save Phone Ok,Number is:\r\n");
 753   5                                    sprintf(TPA,"++");
 754   5                                        strcat(TPA, ptr);
 755   5                                        putstring1(TPA);
 756   5                                    putstring1("\r\n");
 757   5                                    
 758   5                                        sprintf(TP_UD,"OK");
 759   5      
 760   5                                        return 1;                //gsmSendMessage("OK"); 
 761   5                                            
 762   5                                  }
 763   4                                  else
 764   4                      {      
 765   5                                        putstring1("Save Phone Fail!");
 766   5                                    sprintf(TP_UD,"Fail");   //gsmSendMessage("Fail"); 
 767   5                            return 0; 
 768   5                                        
 769   5                              }
 770   4      

⌨️ 快捷键说明

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