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

📄 sms.lst

📁 用51单片机收发短消息的源程序,有祥细的注释说明.
💻 LST
📖 第 1 页 / 共 3 页
字号:
 228   4                      if(idx >= 0 && idx < INBUFF_SIZE)
 229   4                      {
 230   5                          inbuf[idx++] = date1;
 231   5                      }
 232   4                      break;
 233   4                 }
 234   3              }
 235   2      
 236   2           }
 237   1               
 238   1           // 允许串口中断
 239   1           ES=1;
 240   1      }
 241          
C51 COMPILER V7.07   SMS                                                                   03/17/2004 17:22:20 PAGE 5   

 242          // 在数码管上显示一个字节
 243          void  max7219(dat)
 244          {
 245   1          unsigned char i = 0;
 246   1      
 247   1         //CS7219=1;
 248   1         _nop_();
 249   1         //CS7219=0;
 250   1         _nop_();
 251   1         for(i=0;i<8;i++)
 252   1         {      CLK7219=0;
 253   2            DIN7219=(dat>>(7-i))&0x1;
 254   2            _nop_();
 255   2            CLK7219=1;
 256   2            _nop_();
 257   2            CLK7219=0;
 258   2         }
 259   1         //CS7219=0;
 260   1          _nop_();
 261   1         //CS7219=1;
 262   1      }
 263          
 264          // 在数码管上显示data1,data2,data3,data4
 265          void show(void)
 266          {
 267   1          max7219(date1);
 268   1          max7219(date2);
 269   1          max7219(date3);
 270   1          max7219(date4);
 271   1      }
 272          
 273          // 设置wavcom为接收/发送使用文本格式
 274          // AT指令:AT+CMGF=1<CR>
 275          void setcmgftxt()
 276          {
 277   1          SBUF='A';delay(1);
 278   1          SBUF='T';delay(1);
 279   1          SBUF='+';delay(1);
 280   1          SBUF='C';delay(1);
 281   1          SBUF='M';delay(1);
 282   1          SBUF='G';delay(1);
 283   1          SBUF='F';delay(1);
 284   1          SBUF='=';delay(1);
 285   1          SBUF='1';delay(1);
 286   1          SBUF=0x0d;delay(1);
 287   1      }
 288          
 289          // 从SIM卡中读取一条短消息
 290          // AT指令:AT+CMGR=1<CR>
 291          void read_msg(unsigned char imsg)
 292          {
 293   1          buffzero(inbuf, 0, INBUFF_SIZE);
 294   1          idx = -31;
 295   1          offset = 0;
 296   1          type = 5;
 297   1      
 298   1          SBUF='A';delay(1);
 299   1          SBUF='T';delay(1);
 300   1          SBUF='+';delay(1);
 301   1          SBUF='C';delay(1);
 302   1          SBUF='M';delay(1);
 303   1          SBUF='G';delay(1);
C51 COMPILER V7.07   SMS                                                                   03/17/2004 17:22:20 PAGE 6   

 304   1          SBUF='R';delay(1);
 305   1          SBUF='=';delay(1);
 306   1          SBUF=imsg;delay(1);
 307   1          SBUF = 0x0d;delay(1);
 308   1      }
 309          
 310          // 从SIM卡中删除一条短消息
 311          // AT指令:AT+CMGD=1<CR>
 312          void delete_msg(unsigned char imsg) // delete read msg from sim kard
 313          {
 314   1          type = 6;
 315   1      
 316   1          SBUF='A';delay(1);
 317   1          SBUF='T';delay(1);
 318   1          SBUF='+';delay(1);
 319   1          SBUF='C';delay(1);
 320   1          SBUF='M';delay(1);
 321   1          SBUF='G';delay(1);
 322   1          SBUF='D';delay(1);
 323   1          SBUF='=';delay(1);
 324   1          SBUF=imsg;delay(1);
 325   1          SBUF = 0x0d;delay(1);
 326   1      }
 327          
 328          
 329          // 修改保存在SIM卡地址本位置1中的密码
 330          // AT指令:AT+CPBW=1,"123456",129,"PASS"<CR>
 331          void change_pass()
 332          {    
 333   1          SBUF='A';delay(1);
 334   1          SBUF='T';delay(1);
 335   1          SBUF='+';delay(1);
 336   1          SBUF='C';delay(1);
 337   1          SBUF='P';delay(1);
 338   1          SBUF='B';delay(1);
 339   1          SBUF='W';delay(1);
 340   1          SBUF='=';delay(1);
 341   1          SBUF='1';delay(1);
 342   1          SBUF=',';delay(1);
 343   1          SBUF='\"';delay(1);
 344   1          // 新密码从INBUF中获取
 345   1          SBUF=inbuf[19];delay(1);
 346   1          SBUF=inbuf[20];delay(1);
 347   1          SBUF=inbuf[21];delay(1);
 348   1          SBUF=inbuf[22];delay(1);
 349   1          SBUF=inbuf[23];delay(1);
 350   1          SBUF=inbuf[24];delay(1);
 351   1          SBUF='\"';delay(1);
 352   1          SBUF=',';delay(1);
 353   1          SBUF='1';delay(1);
 354   1          SBUF='2';delay(1);
 355   1          SBUF='9';delay(1);
 356   1          SBUF=',';delay(1);
 357   1          SBUF='\"';delay(1);
 358   1          SBUF='P';delay(1);
 359   1          SBUF='A';delay(1);
 360   1          SBUF='S';delay(1);
 361   1          SBUF='S';delay(1);
 362   1          SBUF='\"';delay(1);
 363   1          SBUF = 0x0d;delay(2);
 364   1      
 365   1          type = 4;
C51 COMPILER V7.07   SMS                                                                   03/17/2004 17:22:20 PAGE 7   

 366   1          inbuf[25]=0;
 367   1      
 368   1      }
 369          
 370          // 修改短消息服务中心号码
 371          // AT指令:AT+CSCA="+8613000000000"<CR>
 372          void change_sca()
 373          {
 374   1          SBUF='A';delay(1);
 375   1          SBUF='T';delay(1);
 376   1          SBUF='+';delay(1);
 377   1          SBUF='C';delay(1);
 378   1          SBUF='S';delay(1);
 379   1          SBUF='C';delay(1);
 380   1          SBUF='A';delay(1);
 381   1          SBUF='=';delay(1);
 382   1          SBUF='\"';delay(1);
 383   1          SBUF='+';delay(1);
 384   1          SBUF='8';delay(1);
 385   1          SBUF='6';delay(1);
 386   1          // 新的短消息服务中心号码从INBUF中获取
 387   1          SBUF=inbuf[19];delay(1);
 388   1          SBUF=inbuf[20];delay(1);
 389   1          SBUF=inbuf[21];delay(1);
 390   1          SBUF=inbuf[22];delay(1);
 391   1          SBUF=inbuf[23];delay(1);
 392   1          SBUF=inbuf[24];delay(1);
 393   1          SBUF=inbuf[25];delay(1);
 394   1          SBUF=inbuf[26];delay(1);
 395   1          SBUF=inbuf[27];delay(1);
 396   1          SBUF=inbuf[28];delay(1);
 397   1          SBUF=inbuf[29];delay(1);
 398   1          SBUF='\"';delay(1);
 399   1          SBUF = 0x0d;delay(2);
 400   1      
 401   1          type = 4;
 402   1          inbuf[30]=0;
 403   1      }
 404          
 405          
 406          // 处理短消息内容中的操作指令
 407          // AA:修改SIM卡地址本1中的密码
 408          // AB:修改短消息服务中心号码
 409          void process_cmd()
 410          {
 411   1          // AA:修改SIM卡地址本1中的密码
 412   1          if(inbuf[17] == 'A'
 413   1              && inbuf[18] == 'A')
 414   1          {
 415   2              change_pass(); 
 416   2          }else
 417   1          // AB:修改短消息服务中心号码
 418   1          if(inbuf[17] == 'A'
 419   1              && inbuf[18] == 'B')
 420   1          {
 421   2              change_sca(); 
 422   2          }
 423   1      }
 424          
 425          // 判断短消息内容是否合法
 426          // 即内容的前6位为密码,核对其与地址本中保存的密码是否匹配
 427          void is_legal_msg(void)
C51 COMPILER V7.07   SMS                                                                   03/17/2004 17:22:20 PAGE 8   

 428          {
 429   1          unsigned char data k = 0;
 430   1      
 431   1          // 从sim卡地址本1的位置中读取密码,并放在BUFF缓冲区中
 432   1          // AT指令:AT+CPBR=1<CR>
 433   1          type = 7;     // 读取密码操作
 434   1          buffzero(buff, 0, BUFF_SIZE);
 435   1          
 436   1          // 忽略掉读取密码返回的前29字符,
 437   1          idx2 = -29;   
 438   1          
 439   1          SBUF='A';delay(1);
 440   1          SBUF='T';delay(1);
 441   1          SBUF='+';delay(1);
 442   1          SBUF='C';delay(1);
 443   1          SBUF='P';delay(1);
 444   1          SBUF='B';delay(1);
 445   1          SBUF='R';delay(1);
 446   1          SBUF='=';delay(1);
 447   1          SBUF='1';delay(1);
 448   1          SBUF = 0x0d;delay(1);
 449   1      
 450   1         ///////////////////////////////////////////////////////////////////////
 451   1         // 判断BUFF中的6位密码和INBUF中消息内容前6位密码是否相同
 452   1         // INBUF的内容为 手机号码+新消息内容
 453   1         
 454   1         // 手机号码有+86的情况下,INBUF第14为开始为消息内容
 455   1         if(buff[0] == inbuf[14]  // +86
 456   1            && buff[1] == inbuf[15]
 457   1            && buff[2] == inbuf[16]
 458   1            && buff[3] == inbuf[17]
 459   1            && buff[4] == inbuf[18]
 460   1            && buff[5] == inbuf[19]) 
 461   1          {

⌨️ 快捷键说明

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