📄 main.lst
字号:
276 1
277 1 TURN_ON(); // 指纹摸板复位
278 1 Set_class(); // 设置MSS安全等级
279 1
280 1 disptime();
281 1
282 1 while(1) // 系统主循环处理
283 1 {
284 2 managemode=FALSE; // 非管理操作标志
285 2
286 2 if(key) // 键盘处理
287 2 {
288 3 backlt=0; // 打开背光
289 3 key_judge(); // 判键值
290 3
291 3 if(key=='X') // 连续按ESC键超过3秒
292 3 {
293 4 key=0;
294 4 goto reset; // 退出循环复位
295 4 }
296 3
297 3 key_proc(); // 用户常规操作
298 3
299 3 key=0;
300 3 }
301 2
302 2 host_proc(); // 处理上位机信息
303 2
C51 COMPILER V7.07 MAIN 09/15/2005 14:57:53 PAGE 6
304 2 if(!HandwareErr) // 指纹模块硬件复位
305 2 {
306 3 COMDISABLE; // 不允许串口
307 3 if(!maxtrans)
308 3 password_normal_work(); // 密码应急操作
309 3
310 3 TURN_ON(); // 指纹摸板复位
311 3 Set_class(); // 设置MSS安全等级
312 3 COMENABLE; // 允许串口
313 3 }
314 2
315 2 // 防拆报警检测
316 2 if(wieformat==1) // 自定义门禁方式
317 2 {
318 3 temp=10;
319 3 do{temp--;}while(Tamper&(temp>0)); // 防拆报警
320 3 if(temp==0)
321 3 {
322 4 door_state|=0x80; // 修改报警门控状态
323 4 if(wieformat==1) // 自定义门禁方式
324 4 {
325 5 if(alram_on) // 防止通信失败重发三次
326 5 {
327 6 for(i=0;i<10;i++)
328 6 Wait10ms();
329 6 tamper_alarm(); // 向门控器通过韦根报警
330 6 for(i=0;i<10;i++)
331 6 Wait10ms();
332 6 tamper_alarm(); // 向门控器通过韦根报警
333 6 for(i=0;i<10;i++)
334 6 Wait10ms();
335 6 alram_on=FALSE;
336 6 alram_off=TRUE;
337 6 }
338 5 }
339 4 }
340 3 else
341 3 {
342 4 door_state&=0x7f; // 修改报警门控状态
343 4 if(wieformat==1) // 自定义门禁方式
344 4 {
345 5 if(alram_off)
346 5 {
347 6 for(i=0;i<10;i++)
348 6 Wait10ms();
349 6 tamper_alarm_off(); // 向门控器通过韦根撤除报警
350 6 for(i=0;i<10;i++)
351 6 Wait10ms();
352 6 tamper_alarm_off(); // 向门控器通过韦根撤除报警
353 6 for(i=0;i<10;i++)
354 6 Wait10ms();
355 6 alram_off=FALSE;
356 6 alram_on=TRUE;
357 6 }
358 5 }
359 4 }
360 3
361 3 Wiegand_recv(); // 接收韦根数据
362 3 }
363 2
364 2 if(sec_flag) // 秒标志
365 2 {
C51 COMPILER V7.07 MAIN 09/15/2005 14:57:53 PAGE 7
366 3 disptime();
367 3
368 3 sec_flag=0;
369 3
370 3 if((wieformat==1)&&(lockmode!=2)) // 自定义门禁方式且不是联动方式收集实时状态信息
371 3 {
372 4 getdevstate(); // 获取门控状态
373 4 for(i=0;i<10;i++)
374 4 Wait10ms();
375 4 }
376 3
377 3 temp=(door_state&0xf0);
378 3 temp=temp>>4;
379 3 RTrecord[19]=Hex_ascii(temp); // 门状态
380 3 temp=(door_state&0x0f);
381 3 RTrecord[20]=Hex_ascii(temp);
382 3 for(i=0;i<14;i++) RTrecord[i+5]=cur_time[i];
383 3
384 3 if(user_pass)
385 3 {
386 4 user_pass=FALSE;
387 4 for(i=0;i<5;i++) RTrecord[i]=User_id[i];
388 4 }
389 3 else
390 3 {
391 4 for(i=0;i<5;i++) RTrecord[i]=0x39;
392 4 }
393 3
394 3 if((cur_time[6]==0x30)&&(cur_time[7]==0x31) // 01日
395 3 &&(cur_time[8]==0x30)&&(cur_time[9]==0x33) // 03时
396 3 &&(cur_time[10]==0x30)&&(cur_time[11]==0x30) // 00分
397 3 &&(cur_time[12]==0x30)&&(cur_time[13]<0x32)) // 00~02秒
398 3 {
399 4 Cal_sensor(); // 每月的01日03时00分00~02秒校正传感器
400 4 }
401 3
402 3 backlt=1; // 关闭背光
403 3 }
404 2 } // 系统主循环
405 1 }
406
407 ///////////////////////////////////////////////////////////////////////////////
408 // 键盘扫描处理
409 ///////////////////////////////////////////////////////////////////////////////
410 void kbscan()
411 {
412 1 idata uchar key_in;
413 1
414 1 P0=0xff;
415 1 KEY_CS=0;
416 1 key_in=P0;
417 1 if(key_in!=0xff)
418 1 {
419 2 if(KM==1)
420 2 {
421 3 if(KP!=1)
422 3 {
423 4 KP=1;
424 4 P0=0xff;
425 4 KEY_CS=1;
426 4 KC2=1;
427 4 KEY_CS=0;
C51 COMPILER V7.07 MAIN 09/15/2005 14:57:53 PAGE 8
428 4 key_in=P0;
429 4 if(key_in!=0xff)
430 4 {
431 5 key=~key_in;
432 5 KC1=0;KC2=0;
433 5 KEY_CS=1;
434 5
435 5 if(maxtrans&&(key==0x40)&&(Menu_state==Menu_top))
436 5 {
437 6 esc_count++;
438 6 if(esc_count>100)
439 6 return;
440 6 }
441 5
442 5 if(maxtrans&&(key!=0x40))
443 5 {
444 6 key=0;
445 6 return;
446 6 }
447 5
448 5 if(!maxtrans)
449 5 {
450 6 if((key==0x40)&&(Menu_state==Menu_top))
451 6 {
452 7 esc_count++;
453 7 if(esc_count>100)
454 7 return;
455 7 }
456 6 else
457 6 {
458 7 esc_count=0;
459 7 return;
460 7 }
461 6 }
462 5 }
463 4 P0=0xff;
464 4 KEY_CS=1;
465 4 KC1=1;KC2=0;
466 4 KEY_CS=0;
467 4 key_in=P0;
468 4 if(key_in!=0xff)
469 4 {
470 5 key=~key_in+0x50;
471 5 KC1=0;KC2=0;
472 5 KEY_CS=1;
473 5
474 5 if(maxtrans)
475 5 {
476 6 key=0;
477 6 }
478 5 return;
479 5 }
480 4 KP=0;
481 4 KM=0;
482 4 KC1=0;KC2=0;
483 4 KEY_CS=1;
484 4 }
485 3 }
486 2 else
487 2 {
488 3 KM=1;
489 3 }
C51 COMPILER V7.07 MAIN 09/15/2005 14:57:53 PAGE 9
490 2 }
491 1 else
492 1 {
493 2 KM=0;
494 2 KP=0;
495 2 }
496 1 KC1=0;KC2=0;
497 1 KEY_CS=1;
498 1 }
499
500 ///////////////////////////////////////////////////////////////////////////////
501 // 键盘按键值判断
502 ///////////////////////////////////////////////////////////////////////////////
503 void key_judge()
504 {
505 1 pulse=1;
506 1
507 1 if(esc_count>100) // 如果长按ESC
508 1 {
509 2 esc_count=0;
510 2 key='X';
511 2 return;
512 2 }
513 1 else
514 1 {
515 2 if(Menu_state!=Menu_top)
516 2 esc_count=0;
517 2 }
518 1
519 1 switch(key)
520 1 {
521 2 case 0x01:
522 2 key='1';
523 2 break;
524 2 case 0x51:
525 2 key='2';
526 2 break;
527 2 case 0x52:
528 2 key='3';
529 2 break;
530 2 case 0x02:
531 2 key='4';
532 2 break;
533 2 case 0x04:
534 2 key='5';
535 2 break;
536 2 case 0x54:
537 2 key='6';
538 2 break;
539 2 case 0x08:
540 2 key='7';
541 2 break;
542 2 case 0x58:
543 2 key='8';
544 2 break;
545 2 case 0x60:
546 2 key='9';
547 2 break;
548 2 case 0x20:
549 2 key='0';
550 2 break;
551 2 case 0x70:
C51 COMPILER V7.07 MAIN 09/15/2005 14:57:53 PAGE 10
552 2 key='D';
553 2 break;
554 2 case 0x10:
555 2 key='U';
556 2 break;
557 2 case 0x80:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -