module.lst
来自「程序是智能指纹锁的」· LST 代码 · 共 617 行 · 第 1/3 页
LST
617 行
192 2 FingerOff();
193 2 NowKey = NO_KEY;}}
194 //2号键具有的功能,添加管理员
195 void Add_Adm(void)
196 {
197 1 if(NOFINGER==Find_Finger())
198 1 { AddFingerModule();//如果没有记录在(0,0)处,添加一个指纹到(0,0)处
199 2 NowKey = NO_KEY;
200 2 FingerOff();}
201 1 if(OK==Find_Finger())
202 1 { /*相应语音提示*/
203 2 if(OK==Search_Super_Adm())
204 2 { AddFinger_Adm();//增加一般管理员指纹信息
205 3 NowKey = NO_KEY;
206 3 DisplayWater();
207 3 FingerOff();}
208 2 else { FingerOff();
209 3 NowKey = NO_KEY;}}}
210 //查找高级管理员
211 //返回值:
212 //OK:找到对应的指纹信息
213 //其他:出错了
214 uchar Search_Super_Adm(void)
215 { if(!Add_Deal)
216 1 { FingerOn();
217 2 CommBuf[0] = C_SEARCH_FINGER;//0x44搜索指纹
218 2 CommBuf[1] = 0;
219 2 CommBuf[2] = 0;
220 2 CommBuf[3] = 0;
221 2 CommBuf[4] = 0;//高级管理员
222 2 Clear_Uart_Variable();
223 2 SendCommand(C_COMMAND,5,CommBuf);//发送搜索命令
224 2 //等待接收返回
225 2 Tc = 2;
226 2 while(!ReceiveOK&&Tc);
227 2 Clear_Uart_Variable();
228 2 if((SCC==CommBuf[CommBuf[3]+4])&&Tc)//数据包和校验判断 和 接收超时判断
229 2 {
230 3 if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))//正确
231 3 { Add_Deal = 1;
232 4 Add_Deal2 = 1;}
233 3 else{
234 4 Add_Deal = 0;
235 4 Add_Deal2 = 0;
236 4 FingerOff();
237 4 return FALSE;}}
238 2 else{
239 3 Add_Deal = 0;
240 3 Add_Deal2 = 0;
241 3 FingerOff();
C51 COMPILER V8.02 MODULE 12/04/2008 06:31:13 PAGE 5
242 3 return FALSE;}}
243 1 //探测手指
244 1 if(Add_Deal2&&ReceiveOK)
245 1 { Clear_Uart_Variable();
246 2 if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
247 2 { if((C_ANSWER == CommBuf[2])&&(0x02 == CommBuf[3])&&(C_SEARCH_FINGER == CommBuf[4]))
248 3 { //接收正确
249 4 switch(CommBuf[5])
250 4 { //指纹处理成功
251 5 case ANSWER_OK://0X31
252 5 /*提示声音*/
253 5 Add_Deal2 = 0;
254 5 Add_Deal3 = 1;
255 5 break;
256 5 case ANSWER_OUT_TIME:
257 5 FingerOff();
258 5 return FALSE;
259 5 case ANSWER_FAIL:
260 5 case ANSWER_NUMBER_E:
261 5 FingerOff();
262 5 return FALSE;}
263 4 if(Add_Deal2){
264 5 Add_Deal = 0;
265 5 Add_Deal2 = 0;
266 5 FingerOff();
267 5 return FALSE;}}else{
268 4 Add_Deal = 0;
269 4 Add_Deal2 = 0;
270 4 FingerOff();
271 4 return FALSE;}} else{
272 3 Add_Deal = 0;
273 3 Add_Deal2 = 0;
274 3 FingerOff();
275 3 return FALSE;}}
276 1 //等待搜索结果
277 1 if(Add_Deal3&&ReceiveOK)
278 1 { Add_Deal3 = 0;
279 2 Add_Deal = 0;
280 2 if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
281 2 { if((C_ANSWER == CommBuf[2])&&(C_SEARCH_FINGER == CommBuf[4]))
282 3 {//接收正确
283 4 switch(CommBuf[5])
284 4 { //指纹处理成功
285 5 case ANSWER_SEARCH_OK:DisplayFinger();//提示按指纹
286 5 return OK;
287 5 case ANSWER_OUT_TIME:
288 5 FingerOff();
289 5 return FALSE;
290 5 case ANSWER_FAIL:
291 5 case ANSWER_SEARCH_FAIL:
292 5 FingerOff();
293 5 return FALSE;}}}
294 2 FingerOff();}}
295 //增加一般管理员指纹信息
296 void AddFinger_Adm(void)
297 { static uchar i;
298 1 static uchar AH;//字节号
299 1 static uchar AL;//位号
300 1 uchar t = 0;
301 1 if(!Add_Deal)
302 1 { FingerOn();
303 2 BellOn();
C51 COMPILER V8.02 MODULE 12/04/2008 06:31:13 PAGE 6
304 2 DelayNmS(200);
305 2 BellOff();
306 2 //1 读取模块Flash
307 2 if(ReadFingerFlash(FingerRecord,sizeof(FingerRecord),0,0) != OK)
308 2 { DisplayErr();
309 3 FingerOff();
310 3 NowKey = NO_KEY;
311 3 return;}
312 2 //2 寻找下一个空位
313 2 for(i = 10;i<MAX_FINGER;i++)
314 2 { AH = i/8;AL = i%8;
315 3 t = FingerRecord[AH]<<(7-AL);
316 3 t = t>>7;
317 3 if(0 == t)break;} //找到空位
318 2 if(i == MAX_FINGER)
319 2 { //记录已满
320 3 DisplayErr();
321 3 FingerOff();
322 3 NowKey = NO_KEY;
323 3 return;}
324 2 //发送ADD指令
325 2 CommBuf[0] = C_ADD_FINGER;
326 2 CommBuf[1] = 0;
327 2 CommBuf[2] = i;
328 2 Clear_Uart_Variable();
329 2 SendCommand(C_COMMAND,3,CommBuf);//发送增加指纹命令
330 2 //等待正确返回
331 2 Tc = 2;
332 2 while(!ReceiveOK&&Tc);
333 2 Clear_Uart_Variable();
334 2 if((SCC==CommBuf[CommBuf[3]+4])&&Tc)//数据包和校验判断 和 接收超时判断
335 2 { if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
336 3 {//返回正确
337 4 //UARTSendByte(0xFF);
338 4 Add_Deal = 1;
339 4 Add_Deal2 = 1;}
340 3 else{Add_Deal = 0;
341 4 Add_Deal2 = 0;
342 4 DisplayErr();
343 4 FingerOff();
344 4 NowKey = NO_KEY;
345 4 return;}}
346 2 else
347 2 { Add_Deal = 0;
348 3 Add_Deal2 = 0;
349 3 DisplayErr();
350 3 FingerOff();
351 3 NowKey = NO_KEY;
352 3 return;}}
353 1 //接收第一次按手指指令
354 1 if(Add_Deal2&&ReceiveOK)
355 1 { Clear_Uart_Variable();
356 2 if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
357 2 { if((C_ANSWER == CommBuf[2])&&(0x02 == CommBuf[3])&&(C_ADD_FINGER == CommBuf[4]))
358 3 { //接收正确
359 4 //UARTSendByte(0xFC);
360 4 switch(CommBuf[5])
361 4 { case ANSWER_OK:
362 5 BellOn();
363 5 BellTimer = 6;//中断中关闭Bell
364 5 Add_Deal2 = 0;
365 5 Add_Deal3 = 1;
C51 COMPILER V8.02 MODULE 12/04/2008 06:31:13 PAGE 7
366 5 break;
367 5 case ANSWER_OUT_TIME:
368 5 DisplayOutTime();
369 5 break;
370 5 case ANSWER_NUMBER_E:
371 5 DisplayFail();//增加失败
372 5 break;}
373 4 if(Add_Deal2)
374 4 { Add_Deal = 0;
375 5 Add_Deal2 = 0;
376 5 FingerOff();
377 5 NowKey = NO_KEY;
378 5 return;}}
379 3 else
380 3 { Add_Deal = 0;
381 4 Add_Deal2 = 0;
382 4 DisplayErr();
383 4 FingerOff();
384 4 NowKey = NO_KEY;
385 4 return;}}
386 2 else
387 2 { Add_Deal = 0;
388 3 Add_Deal2 = 0;
389 3 DisplayErr();
390 3 FingerOff();
391 3 NowKey = NO_KEY;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?