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