📄 sms.lst
字号:
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 + -