module.lst
来自「程序是智能指纹锁的」· LST 代码 · 共 617 行 · 第 1/3 页
LST
617 行
392 3 return;}}
393 1 //接收第二次按手指
394 1 if(Add_Deal3&&ReceiveOK)
395 1 { Add_Deal3 = 0;
396 2 Add_Deal = 0;
397 2 Clear_Uart_Variable();
398 2 if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
399 2 { if((C_ANSWER == CommBuf[2])&&(0x02 == CommBuf[3])&&(C_ADD_FINGER == CommBuf[4]))
400 3 {//接收正确
401 4 switch(CommBuf[5])
402 4 { case ANSWER_OK:
403 5 DisplayOK();
404 5 //4 更改指纹记录
405 5 for(i = 0;i<MAX_FINGER;i++)
406 5 { AH = i/8;AL = i%8;
407 6 t = FingerRecord[AH]<<(7-AL);
408 6 t = t>>7;
409 6 if(0 == t)break;}//找到空位
410 5 FingerRecord[AH] |= 1<<AL;
411 5 t = WriteFingerFlash(FingerRecord,sizeof(FingerRecord),0,0);
412 5 UARTSendByte(t);
413 5 if(OK == t);else DisplayErr();
414 5 break;
415 5 case ANSWER_OUT_TIME:
416 5 DisplayOutTime();
417 5 break;
418 5 case ANSWER_FAIL:
419 5 case ANSWER_NUMBER_E:
420 5 DisplayFail();//增加失败
421 5 break;}}
422 3 else DisplayErr();}
423 2 else DisplayErr();
424 2 FingerOff();
425 2 NowKey = NO_KEY;}}
426 void AddFingerModule(void)
427 { static uchar i;
C51 COMPILER V8.02 MODULE 12/04/2008 06:31:13 PAGE 8
428 1 static uchar AH;//字节号
429 1 static uchar AL;//位号
430 1 uchar t = 0;
431 1 if(!Add_Deal)
432 1 {FingerOn();
433 2 BellOn();
434 2 DelayNmS(200);
435 2 BellOff();
436 2 //1 读取模块Flash
437 2 if(ReadFingerFlash(FingerRecord,sizeof(FingerRecord),0,0) != OK)
438 2 { DisplayErr();
439 3 FingerOff();
440 3 NowKey = NO_KEY;
441 3 return;}
442 2 //2 寻找下一个空位
443 2 for(i = 0;i<MAX_FINGER;i++)
444 2 { AH = i/8;
445 3 AL = i%8;
446 3 t = FingerRecord[AH]<<(7-AL);
447 3 t = t>>7;
448 3 if(0 == t)break;}//找到空位
449 2 if(i == MAX_FINGER)
450 2 { //记录已满
451 3 DisplayErr();
452 3 FingerOff();
453 3 NowKey = NO_KEY;
454 3 return;}
455 2 //发送ADD指令
456 2 CommBuf[0] = C_ADD_FINGER;
457 2 CommBuf[1] = 0;
458 2 CommBuf[2] = i;
459 2 Clear_Uart_Variable();
460 2 SendCommand(C_COMMAND,3,CommBuf);//发送增加指纹命令
461 2 //等待正确返回
462 2 Tc = 2;
463 2 while(!ReceiveOK&&Tc);
464 2 Clear_Uart_Variable();
465 2
466 2 if((SCC==CommBuf[CommBuf[3]+4])&&Tc) //数据包和校验判断 和 接收超时判断
467 2 { if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
468 3 { //返回正确
469 4 //UARTSendByte(0xFF);
470 4 Add_Deal = 1;
471 4 Add_Deal2 = 1;}
472 3 else{
473 4 Add_Deal = 0;
474 4 Add_Deal2 = 0;
475 4 DisplayErr();
476 4 FingerOff();
477 4 NowKey = NO_KEY;
478 4 return;}}
479 2 else{
480 3 Add_Deal = 0;
481 3 Add_Deal2 = 0;
482 3 DisplayErr();
483 3 FingerOff();
484 3 NowKey = NO_KEY;
485 3 return;}}
486 1 //接收第一次按手指指令
487 1 if(Add_Deal2&&ReceiveOK)
488 1 { Clear_Uart_Variable();
489 2 if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
C51 COMPILER V8.02 MODULE 12/04/2008 06:31:13 PAGE 9
490 2 { if((C_ANSWER == CommBuf[2])&&(0x02 == CommBuf[3])&&(C_ADD_FINGER == CommBuf[4]))
491 3 { //接收正确
492 4 //UARTSendByte(0xFC);
493 4 switch(CommBuf[5])
494 4 { case ANSWER_OK:
495 5 BellOn();
496 5 BellTimer = 6;//中断中关闭Bell
497 5 Add_Deal2 = 0;
498 5 Add_Deal3 = 1;
499 5 break;
500 5 case ANSWER_OUT_TIME:
501 5 DisplayOutTime();
502 5 break;
503 5 case ANSWER_NUMBER_E:
504 5 DisplayFail();//增加失败
505 5 break;}
506 4 if(Add_Deal2)
507 4 { Add_Deal = 0;
508 5 Add_Deal2 = 0;
509 5 FingerOff();
510 5 NowKey = NO_KEY;
511 5 return;}}
512 3 else{
513 4 Add_Deal = 0;
514 4 Add_Deal2 = 0;
515 4 DisplayErr();
516 4 FingerOff();
517 4 NowKey = NO_KEY;
518 4 return;}}
519 2 else{
520 3 Add_Deal = 0;
521 3 Add_Deal2 = 0;
522 3 DisplayErr();
523 3 FingerOff();
524 3 NowKey = NO_KEY;
525 3 return;}}
526 1 //接收第二次按手指
527 1 if(Add_Deal3&&ReceiveOK)
528 1 { Add_Deal3 = 0;
529 2 Add_Deal = 0;
530 2 Clear_Uart_Variable();
531 2 if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
532 2 { if((C_ANSWER == CommBuf[2])&&(0x02 == CommBuf[3])&&(C_ADD_FINGER == CommBuf[4]))
533 3 { //接收正确
534 4 switch(CommBuf[5])
535 4 { case ANSWER_OK:
536 5 DisplayOK();
537 5 //4 更改指纹记录
538 5 for(i = 0;i<MAX_FINGER;i++)
539 5 { AH = i/8;
540 6 AL = i%8;
541 6 t = FingerRecord[AH]<<(7-AL);
542 6 t = t>>7;
543 6 if(0 == t) break;}//找到空位
544 5 FingerRecord[AH] |= 1<<AL;
545 5 t = WriteFingerFlash(FingerRecord,sizeof(FingerRecord),0,0);
546 5 UARTSendByte(t);
547 5 if(OK == t);else DisplayErr();
548 5 break;
549 5 case ANSWER_OUT_TIME:
550 5 DisplayOutTime();
551 5 break;
C51 COMPILER V8.02 MODULE 12/04/2008 06:31:13 PAGE 10
552 5 case ANSWER_FAIL:
553 5 case ANSWER_NUMBER_E:
554 5 DisplayFail();//增加失败
555 5 break;}}
556 3 else DisplayErr();}
557 2 else DisplayErr();
558 2 FingerOff();
559 2 NowKey = NO_KEY;}}
560 void EmptyFingerModule(void)
561 { //1 指纹标识全部清零
562 1 memset(FingerRecord,0,sizeof(FingerRecord));
563 1 FingerOn();
564 1 BellOn();
565 1 DelayNmS(200);
566 1 BellOff();
567 1 //2 写入模块Flash中
568 1 if(OK == WriteFingerFlash(FingerRecord,sizeof(FingerRecord),0,0));
569 1 else{ DisplayErr();
570 2 FingerOff();
571 2 return;}
572 1 //3 清空指纹库
573 1 if(OK == EmptyFinger())DisplayOK();
574 1 else DisplayErr();
575 1 FingerOff();}
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2113 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 6
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?