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

📄 mss_spi.lst

📁 KEIL C上的门禁控制器源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 926          ///////////////////////////////////////////////////////////////////////////////
 927          // 指纹1:G比对SPI命令处理过程
 928          // 发送:GTF+分组信息+当前时间时分
 929          // 返回:GTFS+用户编号,成功
 930          //       GTFF+X失败
 931          //       GTFM提醒用户抬起手指
 932          ///////////////////////////////////////////////////////////////////////////////
 933          bit GroupIdentify()
 934          {
 935   1              idata uchar i;
 936   1      
 937   1              for(i=0;i<6;i++)User_id[i]=0;   // 清用户编号
 938   1      
 939   1              NewMsgNum();            // 信息号
 940   1      
 941   1              SPIbuf[0]='G';          // 1:G匹配GTF
 942   1              SPIbuf[1]='T';
 943   1              SPIbuf[2]='F';
 944   1      
 945   1              SPIbuf[3]=groupclass;   // 分组信息
 946   1      
 947   1              read_time();            // 获取当前时间
 948   1              SPIbuf[4]=cur_time[8];                          // 当前用户允许进入时间
 949   1              SPIbuf[5]=cur_time[9];
 950   1              SPIbuf[6]=cur_time[10];
 951   1              SPIbuf[7]=cur_time[11];
 952   1              Rstwdt();                       // 喂狗
 953   1      
 954   1              CommandLen=8;                           // 命令体长度
 955   1      
 956   1              SendMsg();                      // 发送命令
 957   1              Rstwdt();                       // 喂狗
 958   1      
 959   1              GLCD_ClearScreen ();
 960   1              GLCD_Locate(16,32);
 961   1              dprintf(Putf,12);               // 提示用户在传感器上按下手指
 962   1      
 963   1              if(ACKReceive()!=ACK)   // 收到指纹模块NAK命令,表示命令体错误或命令不能识别或通信错误
 964   1              {
 965   2                      disperr(100);           // 显示错误
 966   2              }       
 967   1              else
 968   1              {
 969   2      liftget_identify:
 970   2                      if(SPIReceive())                // 接收DSP数据
 971   2                      {
 972   3                              Rstwdt();                       // 喂狗
 973   3              
 974   3                              if(SPIbuf[SOHptr+7]=='G' && SPIbuf[SOHptr+8]=='T' && SPIbuf[SOHptr+9]=='F')
 975   3                              {
 976   4                                      switch(SPIbuf[SOHptr+10])
 977   4                                      {
 978   5                                      case 'S':       // 比对成功
 979   5                                              pulse=1;
 980   5                                              if(!managemode)         // 管理操作不需要开门
 981   5                                              {
 982   6                                                      for(i=0;i<5;i++) User_id[i]=SPIbuf[SOHptr+11+i];
 983   6                                                      switch(wieformat)
 984   6                                                      {
 985   7                                                      case 1:
C51 COMPILER V7.07   MSS_SPI                                                               09/14/2005 15:20:47 PAGE 17  

 986   7                                                              normal_send();          // 自定义韦根发送
 987   7                                                              break;
 988   7                                                      case 2:
 989   7                                                              send26();                       // 26位韦根
 990   7                                                              break;
 991   7                                                      case 3:
 992   7                                                              send34();                       // 34位韦根
 993   7                                                              break;
 994   7                                                      default:
 995   7                                                              break;
 996   7                                                      }
 997   6      
 998   6                                                      GLCD_ClearScreen ();
 999   6                                                      GLCD_Locate(24,32);
1000   6                                                      dprintf(welcome,4);     // 欢迎                         
1001   6                                                      GLCD_Locate(72,32);
1002   6                                                      dprintf(User_id,5);     // 用户名                               
1003   6                                              }
1004   5      
1005   5                                              return OK;
1006   5                                      case 'M':
1007   5                                              GLCD_Locate(16,32);
1008   5                                              dprintf(Liftf,5);// 抬手指
1009   5                                              goto liftget_identify;
1010   5                                              break;
1011   5                                      case 'F':               // 错误返回
1012   5                                              pulse=3;
1013   5                                              disperr(SPIbuf[SOHptr+11]);
1014   5                                              break;
1015   5                                      default:
1016   5                                              HandwareErr=ERROR;              // MSS不能正常工作
1017   5                                              break;
1018   5                                      }               
1019   4                              }
1020   3                      }
1021   2              }
1022   1      
1023   1              time_out=50;
1024   1              do{}while(time_out!=0);
1025   1              return ERROR;
1026   1      }
1027          
1028          ///////////////////////////////////////////////////////////////////////////////
1029          // 校正传感器SPI命令处理过程
1030          // 发送:CSS
1031          // 返回:CSSS成功
1032          //       CSSF+X失败
1033          ///////////////////////////////////////////////////////////////////////////////
1034          bit Cal_sensor()
1035          {
1036   1              NewMsgNum();            // 命令号
1037   1              SPIbuf[0]='C';          // 校正传感器
1038   1              SPIbuf[1]='S';
1039   1              SPIbuf[2]='S';
1040   1              CommandLen=3;           // 命令体长度
1041   1      
1042   1              SendMsg();                      // 发送命令
1043   1              Rstwdt();                       // 喂狗
1044   1      
1045   1              if(ACKReceive()!=ACK)   // 收到指纹模块NAK命令,表示命令体错误或命令不能识别或通信错误
1046   1              {
1047   2              }       
C51 COMPILER V7.07   MSS_SPI                                                               09/14/2005 15:20:47 PAGE 18  

1048   1              else
1049   1              {
1050   2                      if(SPIReceive())                // 接收DSP数据
1051   2                      {
1052   3                              Rstwdt();                       // 喂狗
1053   3              
1054   3                              if(SPIbuf[SOHptr+7]=='C' && SPIbuf[SOHptr+8]=='S' && SPIbuf[SOHptr+9]=='S'
1055   3                                      && SPIbuf[SOHptr+10]=='S')
1056   3                              {
1057   4                                      return OK;
1058   4                              }
1059   3                      }
1060   2              }       
1061   1      
1062   1              if(SPIbuf[SOHptr+11]>'9')
1063   1              {       
1064   2                      pulse=3;                                                // 蜂鸣三次
1065   2                      disperr(SPIbuf[SOHptr+11]);
1066   2                      time_out=100;
1067   2                      do{}while(time_out!=0);                 // 显示延迟
1068   2              }
1069   1      
1070   1              Rstwdt();                       // 喂狗
1071   1              return ERROR;
1072   1      }
1073          
1074          ///////////////////////////////////////////////////////////////////////////////
1075          // 设置安全等级SPI命令处理过程
1076          // 发送:SSS+安全等级
1077          // 返回:SSSS成功
1078          //       SSSF+X失败
1079          ///////////////////////////////////////////////////////////////////////////////
1080          bit Set_class()
1081          {
1082   1              NewMsgNum();            // 命令号
1083   1              SPIbuf[0]='S';          // 设置安全等级SSS
1084   1              SPIbuf[1]='S';
1085   1              SPIbuf[2]='S';
1086   1              SPIbuf[3]=Security_level+0x30;  // 安全等级
1087   1              CommandLen=4;                           // 命令体长度
1088   1      
1089   1              SendMsg();                      // 发送命令
1090   1              Rstwdt();                       // 喂狗
1091   1      
1092   1              if(ACKReceive()!=ACK)   // 收到指纹模块NAK命令,表示命令体错误或命令不能识别或通信错误
1093   1              {
1094   2                      disperr(100);           // 显示错误
1095   2              }       
1096   1              else
1097   1              {
1098   2                      if(SPIReceive())                // 接收DSP数据
1099   2                      {
1100   3                              Rstwdt();                       // 喂狗
1101   3              
1102   3                              if(SPIbuf[SOHptr+7]=='S' && SPIbuf[SOHptr+8]=='S' && SPIbuf[SOHptr+9]=='S'
1103   3                                      && SPIbuf[SOHptr+10]=='S')
1104   3                              {
1105   4                                      return OK;
1106   4                              }
1107   3                      }
1108   2              }
1109   1              
C51 COMPILER V7.07   MSS_SPI                                                               09/14/2005 15:20:47 PAGE 19  

1110   1              if(SPIbuf[SOHptr+11]>'9')
1111   1              {       
1112   2                      pulse=3;                                                // 蜂鸣三次
1113   2                      disperr(SPIbuf[SOHptr+11]);
1114   2                      time_out=100;
1115   2                      do{}while(time_out!=0);                 // 显示延迟
1116   2              }
1117   1      
1118   1              return ERROR;
1119   1      }
1120          
1121          ///////////////////////////////////////////////////////////////////////////////
1122          // 删除单个用户信息SPI命令处理过程
1123          // 发送:DSU+用户编号
1124          // 返回:DSUS成功
1125          //       DSUF+X失败
1126          ///////////////////////////////////////////////////////////////////////////////
1127          bit Delete_one()
1128          {
1129   1              idata uchar i;
1130   1      
1131   1              NewMsgNum();            // 命令号
1132   1      
1133   1              SPIbuf[0]='D';          // 删除单个用户DSU
1134   1              SPIbuf[1]='S';
1135   1              SPIbuf[2]='U';
1136   1      
1137   1              for(i=0;i<5;i++)SPIbuf[3+i]=User_id[i];
1138   1      
1139   1              CommandLen=8;                           // 命令体长度
1140   1      
1141   1              SendMsg();
1142   1              Rstwdt();                       // 喂狗
1143   1      
1144   1              if(ACKReceive()!=ACK)   // 收到指纹模块NAK命令,表示命令体错误或命令不能识别或通信错误
1145   1              {
1146   2                      disperr(100);           // 显示错误
1147   2              }       
1148   1              else
1149   1              {
1150   2                      if(SPIReceive())                // 接收DSP数据
1151   2                      {
1152   3                              Rstwdt();                       // 喂狗
1153   3              
1154   3                              if(SPIbuf[SOHptr+7]=='D' && SPIbuf[SOHptr+8]=='S' && SPIbuf[SOHptr+9]=='U'
1155   3                                      && SPIbuf[SOHptr+10]=='S')
1156   3                              {
1157   4                                      if(wieformat==1)                // 自定义门禁方式
1158   4                                             

⌨️ 快捷键说明

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