📄 wiegand.lst
字号:
317 4 tempaddr=door_state&0x80;
318 4 door_state=(uchar)(tempaddr+(Wiegand_dat&0xff));
319 4 }
320 3 }
321 2
322 2 if(W_evenchk())
323 2 {
324 3 if(W_oddchk())
325 3 {
326 4 }
327 3 }
328 2
329 2 Wiegand_dat=0;
330 2 Wgnd_count=0;
331 2 Odd=0;
332 2 Even=0;
333 2 recv_end=FALSE;
334 2 }
335 1 }
336
337 ///////////////////////////////////////////////////////////////////////////////
338 // 发送韦根数据的1位
339 ///////////////////////////////////////////////////////////////////////////////
340 void Send_bit(bit outbit)
341 {
342 1 if(outbit)
343 1 {
344 2 DATA1=0;
345 2 Delay100us(); // 100us维持周期
346 2 DATA1=1;
347 2 }
348 1 else
349 1 {
350 2 DATA0=0;
351 2 Delay100us();
352 2 DATA0=1;
353 2 }
354 1 }
355
356 ///////////////////////////////////////////////////////////////////////////////
357 // 发送韦根数据
358 ///////////////////////////////////////////////////////////////////////////////
359 void Send_Wiegand()
360 {
361 1 idata uchar i;
362 1 idata ulong c;
363 1
364 1 Odd=0; // 校验初始化
365 1 Even=0;
C51 COMPILER V7.07 WIEGAND 09/15/2005 12:05:42 PAGE 7
366 1 Odd=W_oddchk(); // 校验
367 1 Even=W_evenchk();
368 1
369 1
370 1 EX0=0; // 禁止外部中断接收数据
371 1 EX1=0;
372 1
373 1 for(i=0;i<38;i++){;}
374 1
375 1 Send_bit(Even); // 发送奇校验位
376 1
377 1 for(i=0;i<Wiecnt_max;i++)
378 1 {
379 2 TR1=0;
380 2 TH1=0xf8;
381 2 TL1=0xcc; // 1ms
382 2 TR1=1; // T1参数设置
383 2 while(!TF1); // TF1溢出
384 2 TF1=0;
385 2
386 2 c=Wiegand_dat; // 要发送的韦根数据
387 2
388 2 switch(wieformat)
389 2 {
390 3 case 1:
391 3 case 3:
392 3 if(Wiegand_dat&0x80000000)
393 3 Send_bit(1); // 数据最高位先发送,数据1
394 3 else
395 3 Send_bit(0); // 数据0
396 3 Wiegand_dat=c<<1; // 发送下一位
397 3 break;
398 3 case 2:
399 3 if(Wiegand_dat&0x800000)
400 3 Send_bit(1); // 数据最高位先发送,数据1
401 3 else
402 3 Send_bit(0); // 数据0
403 3 Wiegand_dat=c<<1; // 发送下一位
404 3 break;
405 3 default:
406 3 break;
407 3 }
408 2 }
409 1
410 1 TR1=0;
411 1 TH1=0xf8;
412 1 TL1=0xcc;
413 1 TR1=1;
414 1 while(!TF1);
415 1 TF1=0;
416 1 TF1=0;
417 1
418 1 Send_bit(Odd); // 发送偶校验位
419 1
420 1 EX0=1; // 允许外部中断接收数据
421 1 EX1=1;
422 1
423 1 for(i=0;i<4;i++){;}
424 1 }
425
426 ///////////////////////////////////////////////////////////////////////////////
427 // 白名单注册
C51 COMPILER V7.07 WIEGAND 09/15/2005 12:05:42 PAGE 8
428 ///////////////////////////////////////////////////////////////////////////////
429 void white_bill_reg()
430 {
431 1 idata uchar i;
432 1
433 1 Wiegand_dat=0x000000f1; // F1命令注册白名单
434 1 Wiegand_dat=Wiegand_dat<<8;
435 1
436 1 Wiegand_dat=Wiegand_dat+decaddr; // 设备地址
437 1 Wiegand_dat=Wiegand_dat<<16;
438 1
439 1 Wiegand_dat=Wiegand_dat+asctoint(User_id); // 用户编号
440 1
441 1 Send_Wiegand();
442 1
443 1 for(i=0; i<10; i++)
444 1 Wait10ms();
445 1
446 1 // 发两次保险
447 1 Wiegand_dat=0x000000f1; // F1命令注册白名单
448 1 Wiegand_dat=Wiegand_dat<<8;
449 1
450 1 Wiegand_dat=Wiegand_dat+decaddr; // 设备地址
451 1 Wiegand_dat=Wiegand_dat<<16;
452 1
453 1 Wiegand_dat=Wiegand_dat+asctoint(User_id); // 用户编号
454 1 Send_Wiegand();
455 1
456 1 Wiegand_dat=0;
457 1 Wgnd_count=0;
458 1 }
459
460 ///////////////////////////////////////////////////////////////////////////////
461 // 白名单注销
462 ///////////////////////////////////////////////////////////////////////////////
463 void white_bill_del()
464 {
465 1 idata uchar i;
466 1
467 1 Wiegand_dat=0x000000f2; // F2命令注销白名单
468 1 Wiegand_dat=Wiegand_dat<<8;
469 1
470 1 Wiegand_dat=Wiegand_dat+decaddr; // 设备地址
471 1 Wiegand_dat=Wiegand_dat<<16;
472 1
473 1 Wiegand_dat=Wiegand_dat+asctoint(User_id); // 用户编号
474 1
475 1 Send_Wiegand();
476 1
477 1 for(i=0; i<10; i++)
478 1 Wait10ms();
479 1
480 1 // 发两次保险
481 1 Wiegand_dat=0x000000f2; // F2命令注销白名单
482 1 Wiegand_dat=Wiegand_dat<<8;
483 1
484 1 Wiegand_dat=Wiegand_dat+decaddr; // 设备地址
485 1 Wiegand_dat=Wiegand_dat<<16;
486 1
487 1 Wiegand_dat=Wiegand_dat+asctoint(User_id); // 用户编号
488 1
489 1 Send_Wiegand();
C51 COMPILER V7.07 WIEGAND 09/15/2005 12:05:42 PAGE 9
490 1
491 1 Wiegand_dat=0;
492 1 Wgnd_count=0;
493 1 }
494
495 ///////////////////////////////////////////////////////////////////////////////
496 // 获取门控状态
497 ///////////////////////////////////////////////////////////////////////////////
498 void getdevstate()
499 {
500 1 Wiegand_dat=0x000000f3; // F3获取门控状态
501 1 Wiegand_dat=Wiegand_dat<<8;
502 1
503 1 Wiegand_dat=Wiegand_dat+areaaddr; // 分组地址
504 1 Wiegand_dat=Wiegand_dat<<8;
505 1
506 1 Wiegand_dat=Wiegand_dat+decaddr; // 设备地址
507 1 Wiegand_dat=Wiegand_dat<<8;
508 1 Send_Wiegand();
509 1
510 1 Wiegand_dat=0;
511 1 Wgnd_count=0;
512 1 }
513
514 ///////////////////////////////////////////////////////////////////////////////
515 // 防拆报警控制
516 ///////////////////////////////////////////////////////////////////////////////
517 void tamper_alarm()
518 {
519 1 Wiegand_dat=0x000000f4; // F4布防
520 1 Wiegand_dat=Wiegand_dat<<8;
521 1
522 1 Wiegand_dat=Wiegand_dat+areaaddr; // 分组地址
523 1 Wiegand_dat=Wiegand_dat<<8;
524 1
525 1 Wiegand_dat=Wiegand_dat+decaddr; // 设备地址
526 1 Wiegand_dat=Wiegand_dat<<8;
527 1 Send_Wiegand();
528 1
529 1 Wiegand_dat=0;
530 1 Wgnd_count=0;
531 1 }
532
533 ///////////////////////////////////////////////////////////////////////////////
534 // 防拆去除报警控制
535 ///////////////////////////////////////////////////////////////////////////////
536 void tamper_alarm_off()
537 {
538 1 Wiegand_dat=0x000000f5; // F5撤防
539 1 Wiegand_dat=Wiegand_dat<<8;
540 1
541 1 Wiegand_dat=Wiegand_dat+areaaddr; // 分组地址
542 1 Wiegand_dat=Wiegand_dat<<8;
543 1
544 1 Wiegand_dat=Wiegand_dat+decaddr; // 设备地址
545 1 Wiegand_dat=Wiegand_dat<<8;
546 1 Send_Wiegand();
547 1
548 1 Wiegand_dat=0;
549 1 Wgnd_count=0;
550 1 }
551
C51 COMPILER V7.07 WIEGAND 09/15/2005 12:05:42 PAGE 10
552 ///////////////////////////////////////////////////////////////////////////////
553 // 双锁双动控制方式
554 ///////////////////////////////////////////////////////////////////////////////
555 void lock_22()
556 {
557 1 idata uchar i;
558 1
559 1 Wiegand_dat=0x000000f8; // F8设置锁控方式命令
560 1 Wiegand_dat=Wiegand_dat<<8;
561 1
562 1 Wiegand_dat=Wiegand_dat+areaaddr; // 分组地址
563 1 Wiegand_dat=Wiegand_dat<<8;
564 1
565 1 Wiegand_dat=Wiegand_dat+decaddr; // 设备地址
566 1 Wiegand_dat=Wiegand_dat<<8;
567 1
568 1 Wiegand_dat=Wiegand_dat+0; // 双锁双动
569 1
570 1 Send_Wiegand();
571 1
572 1 for(i=0; i<10; i++)
573 1 Wait10ms();
574 1
575 1 // 发两次保险
576 1 Wiegand_dat=0x000000f8; // F8设置锁控方式命令
577 1 Wiegand_dat=Wiegand_dat<<8;
578 1
579 1 Wiegand_dat=Wiegand_dat+areaaddr; // 分组地址
580 1 Wiegand_dat=Wiegand_dat<<8;
581 1
582 1 Wiegand_dat=Wiegand_dat+decaddr; // 设备地址
583 1 Wiegand_dat=Wiegand_dat<<8;
584 1
585 1 Wiegand_dat=Wiegand_dat+0; // 双锁双动
586 1
587 1 Send_Wiegand();
588 1
589 1 Wiegand_dat=0;
590 1 Wgnd_count=0;
591 1 }
592
593 ///////////////////////////////////////////////////////////////////////////////
594 // 双锁单动控制方式
595 ///////////////////////////////////////////////////////////////////////////////
596 void lock_21()
597 {
598 1 idata uchar i;
599 1
600 1 Wiegand_dat=0x000000f8; // F8设置锁控方式命令
601 1 Wiegand_dat=Wiegand_dat<<8;
602 1
603 1 Wiegand_dat=Wiegand_dat+areaaddr; // 分组地址
604 1 Wiegand_dat=Wiegand_dat<<8;
605 1
606 1 Wiegand_dat=Wiegand_dat+decaddr; // 设备地址
607 1 Wiegand_dat=Wiegand_dat<<8;
608 1
609 1 Wiegand_dat=Wiegand_dat+1; // 双锁单动
610 1
611 1 Send_Wiegand();
612 1
613 1 for(i=0; i<10; i++)
C51 COMPILER V7.07 WIEGAND 09/15/2005 12:05:42 PAGE 11
614 1 Wait10ms();
615 1
616 1 // 发两次保险
617 1 Wiegand_dat=0x000000f8; // F8设置锁控方式命令
618 1 Wiegand_dat=Wiegand_dat<<8;
619 1
620 1 Wiegand_dat=Wiegand_dat+areaaddr; // 分组地址
621 1 Wiegand_dat=Wiegand_dat<<8;
622 1
623 1 Wiegand_dat=Wiegand_dat+decaddr; // 设备地址
624 1 Wiegand_dat=Wiegand_dat<<8;
625 1
626 1 Wiegand_dat=Wiegand_dat+1; // 双锁单动
627 1
628 1 Send_Wiegand();
629 1
630 1 Wiegand_dat=0;
631 1 Wgnd_count=0;
632 1 }
633
634 ///////////////////////////////////////////////////////////////////////////////
635 // 双锁联动控制方式
636 ///////////////////////////////////////////////////////////////////////////////
637 void lock_2inter()
638 {
639 1 idata uchar i;
640 1
641 1 Wiegand_dat=0x000000f8; // F8设置锁控方式命令
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -