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

📄 mss_spi.lst

📁 KEIL C上的门禁控制器源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 693   5                                      default:
 694   5                                              HandwareErr=ERROR;              // MSS不能正常工作
 695   5                                              break;
 696   5                                      }
 697   4                              }
 698   3                      }
 699   2              }
 700   1      
 701   1              time_out=100;
 702   1              do{}while(time_out!=0);
 703   1              time_out=0;
 704   1              return ERROR;
 705   1      }
 706          
 707          ///////////////////////////////////////////////////////////////////////////////
 708          // 指纹1:1比对SPI命令处理过程
 709          // 发送:VTF+管理分类+应用分类+用户编号+密码+当前时间时分
 710          // 返回:VTFS成功
 711          //       VTFF+X失败
 712          //       VTFM提醒用户抬起手指
 713          ///////////////////////////////////////////////////////////////////////////////
 714          bit Verify()
 715          {
 716   1              idata uchar i;          // 计数器
 717   1      
 718   1              NewMsgNum();            // 信息号
 719   1      
 720   1              SPIbuf[0]='V';          // 1:1匹配VTF
 721   1              SPIbuf[1]='T';
 722   1              SPIbuf[2]='F';
 723   1      
 724   1              SPIbuf[3]=ManageClass;  // 管理员或普通用户
 725   1              SPIbuf[4]=AppClass;             // 指纹或密码用户
 726   1      
 727   1              for(i=0;i<5;i++) SPIbuf[5+i]=User_id[i];
 728   1      
 729   1              if(AppClass=='P')
 730   1              {
 731   2                      for(i=0;i<6;i++)
 732   2                              SPIbuf[10+i]=Password[i];       // 密码用户发送用户输入的密码
 733   2              }
 734   1              else
 735   1              {
 736   2                      for(i=0;i<6;i++)
 737   2                              SPIbuf[10+i]=Password[i];       // 密码用户发送用户输入的密码
C51 COMPILER V7.07   MSS_SPI                                                               09/14/2005 15:20:47 PAGE 13  

 738   2              }
 739   1      
 740   1              read_time();            // 获取当前时间
 741   1              SPIbuf[16]=cur_time[8];                 // 当前用户允许进入时间
 742   1              SPIbuf[17]=cur_time[9];
 743   1              SPIbuf[18]=cur_time[10];
 744   1              SPIbuf[19]=cur_time[11];
 745   1      
 746   1              CommandLen=20;                          // 命令体长度
 747   1      
 748   1              SendMsg();                      // 发送命令
 749   1              Rstwdt();                       // 喂狗
 750   1      
 751   1              if(AppClass == 'F')
 752   1              {
 753   2                      GLCD_ClearScreen ();
 754   2                      GLCD_Locate(16,32);
 755   2                      dprintf(Putf,12);               // 提示用户在传感器上按下手指
 756   2              }
 757   1      
 758   1              if(ACKReceive()!=ACK)   // 收到指纹模块NAK命令,表示命令体错误或命令不能识别或通信错误
 759   1              {
 760   2                      disperr(100);           // 显示错误
 761   2              }       
 762   1              else
 763   1              {
 764   2      liftget_verify:
 765   2                      if(SPIReceive())                // 接收DSP数据
 766   2                      {
 767   3                              Rstwdt();                       // 喂狗
 768   3              
 769   3                              if(SPIbuf[SOHptr+7]=='V' && SPIbuf[SOHptr+8]=='T' && SPIbuf[SOHptr+9]=='F')
 770   3                              {
 771   4                                      switch(SPIbuf[SOHptr+10])
 772   4                                      {
 773   5                                      case 'S':       // 比对成功
 774   5                                              pulse=1;
 775   5                                              if(!managemode)         // 管理操作不需要开门
 776   5                                              {
 777   6                                                      switch(wieformat)
 778   6                                                      {
 779   7                                                      case 1:
 780   7                                                              normal_send();          // 自定义韦根发送
 781   7                                                              break;
 782   7                                                      case 2:
 783   7                                                              send26();                       // 26位韦根
 784   7                                                              break;
 785   7                                                      case 3:
 786   7                                                              send34();                       // 34位韦根
 787   7                                                              break;
 788   7                                                      default:
 789   7                                                              break;
 790   7                                                      }
 791   6      
 792   6                                                      GLCD_ClearScreen ();
 793   6                                                      GLCD_Locate(24,32);
 794   6                                                      dprintf(welcome,4);     // 欢迎                         
 795   6                                                      GLCD_Locate(72,32);
 796   6                                                      dprintf(User_id,5);     // 用户名                               
 797   6                                              }
 798   5      
 799   5                                              return OK;
C51 COMPILER V7.07   MSS_SPI                                                               09/14/2005 15:20:47 PAGE 14  

 800   5                                      case 'M':
 801   5                                              GLCD_Locate(16,32);
 802   5                                              dprintf(Liftf,12);      // 抬手指
 803   5                                              goto liftget_verify;
 804   5                                              break;
 805   5                                      case 'F':               // 错误返回
 806   5                                              pulse=3;
 807   5                                              if(AppClass=='P')
 808   5                                                      GLCD_ClearScreen ();
 809   5      
 810   5                                              disperr(SPIbuf[SOHptr+11]);
 811   5                                              break;
 812   5                                      default:
 813   5                                              HandwareErr=ERROR;              // MSS不能正常工作
 814   5                                              break;
 815   5                                      }       
 816   4                              }
 817   3                      }
 818   2              }
 819   1      
 820   1              time_out=50;
 821   1              do{}while(time_out!=0);
 822   1              time_out=0;
 823   1              return ERROR;
 824   1      }
 825          
 826          ///////////////////////////////////////////////////////////////////////////////
 827          // 指纹1:N比对SPI命令处理过程
 828          // 发送:ITF+当前时间时分
 829          // 返回:ITFS+用户编号,成功
 830          //       ITFF+X失败
 831          //       ITFM提醒用户抬起手指
 832          ///////////////////////////////////////////////////////////////////////////////
 833          bit Identify()
 834          {
 835   1              idata uchar i;
 836   1      
 837   1              for(i=0;i<6;i++)User_id[i]=0;   // 清用户编号
 838   1      
 839   1              NewMsgNum();            // 信息号
 840   1      
 841   1              SPIbuf[0]='I';          // 1:N匹配VTF
 842   1              SPIbuf[1]='T';
 843   1              SPIbuf[2]='F';
 844   1      
 845   1              read_time();            // 获取当前时间
 846   1              SPIbuf[3]=cur_time[8];                          // 当前用户允许进入时间
 847   1              SPIbuf[4]=cur_time[9];
 848   1              SPIbuf[5]=cur_time[10];
 849   1              SPIbuf[6]=cur_time[11];
 850   1              Rstwdt();                       // 喂狗
 851   1      
 852   1              CommandLen=7;                           // 命令体长度
 853   1      
 854   1              SendMsg();                      // 发送命令
 855   1              Rstwdt();                       // 喂狗
 856   1      
 857   1              GLCD_ClearScreen ();
 858   1              GLCD_Locate(16,32);
 859   1              dprintf(Putf,12);               // 提示用户在传感器上按下手指
 860   1      
 861   1              if(ACKReceive()!=ACK)   // 收到指纹模块NAK命令,表示命令体错误或命令不能识别或通信错误
C51 COMPILER V7.07   MSS_SPI                                                               09/14/2005 15:20:47 PAGE 15  

 862   1              {
 863   2                      disperr(100);           // 显示错误
 864   2              }       
 865   1              else
 866   1              {
 867   2      liftget_identify:
 868   2                      if(SPIReceive())                // 接收DSP数据
 869   2                      {
 870   3                              Rstwdt();                       // 喂狗
 871   3              
 872   3                              if(SPIbuf[SOHptr+7]=='I' && SPIbuf[SOHptr+8]=='T' && SPIbuf[SOHptr+9]=='F')
 873   3                              {
 874   4                                      switch(SPIbuf[SOHptr+10])
 875   4                                      {
 876   5                                      case 'S':       // 比对成功
 877   5                                              pulse=1;
 878   5                                              if(!managemode)         // 管理操作不需要开门
 879   5                                              {
 880   6                                                      for(i=0;i<5;i++) User_id[i]=SPIbuf[SOHptr+11+i];
 881   6                                                      switch(wieformat)
 882   6                                                      {
 883   7                                                      case 1:
 884   7                                                              normal_send();          // 自定义韦根发送
 885   7                                                              break;
 886   7                                                      case 2:
 887   7                                                              send26();                       // 26位韦根
 888   7                                                              break;
 889   7                                                      case 3:
 890   7                                                              send34();                       // 34位韦根
 891   7                                                              break;
 892   7                                                      default:
 893   7                                                              break;
 894   7                                                      }
 895   6      
 896   6                                                      GLCD_ClearScreen ();
 897   6                                                      GLCD_Locate(24,32);
 898   6                                                      dprintf(welcome,4);     // 欢迎                         
 899   6                                                      GLCD_Locate(72,32);
 900   6                                                      dprintf(User_id,5);     // 用户名                               
 901   6                                              }
 902   5      
 903   5                                              return OK;
 904   5                                      case 'M':
 905   5                                              GLCD_Locate(16,32);
 906   5                                              dprintf(Liftf,5);// 抬手指
 907   5                                              goto liftget_identify;
 908   5                                              break;
 909   5                                      case 'F':               // 错误返回
 910   5                                              pulse=3;
 911   5                                              disperr(SPIbuf[SOHptr+11]);
 912   5                                              break;
 913   5                                      default:
 914   5                                              HandwareErr=ERROR;              // MSS不能正常工作
 915   5                                              break;
 916   5                                      }               
 917   4                              }
 918   3                      }
 919   2              }
 920   1      
 921   1              time_out=50;
 922   1              do{}while(time_out!=0);
 923   1              return ERROR;
C51 COMPILER V7.07   MSS_SPI                                                               09/14/2005 15:20:47 PAGE 16  

 924   1      }
 925          

⌨️ 快捷键说明

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