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

📄 wiegand.lst

📁 KEIL C上的门禁控制器源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -