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

📄 main.lst

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