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

📄 main.lst

📁 KEIL C上的门禁控制器源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 558   2                      key='M';
 559   2                      break;
 560   2              case 0x40:
 561   2                      key='C';
 562   2                      break;
 563   2              case 0xd0:
 564   2                      key='F';
 565   2                      break;  
 566   2              default:
 567   2                      break;          
 568   2              }
 569   1      }
 570          
 571          ///////////////////////////////////////////////////////////////////////////////
 572          // 键盘处理
 573          ///////////////////////////////////////////////////////////////////////////////
 574          void key_proc()
 575          {
 576   1              COMDISABLE;
 577   1      
 578   1              switch(key)
 579   1              {
 580   2              case '0':
 581   2              case '1':
 582   2              case '2':
 583   2              case '3':
 584   2              case '4':
 585   2              case '5':
 586   2              case '6':
 587   2              case '7':
 588   2              case '8':
 589   2              case '9':
 590   2                      switch(matchmode)
 591   2                      {
 592   3                      case 0:
 593   3                              finger_work1to1();      // 1:1指纹正常操作
 594   3                              break;
 595   3                      case 1:
 596   3                              finger_work1ton();      // 1:N指纹正常操作
 597   3                              break;
 598   3                      case 2:
 599   3                              groupclass=key;
 600   3                              finger_work1tog();      // 1:G指纹正常操作
 601   3                              break;
 602   3                      default:
 603   3                              break;
 604   3                      }
 605   2                      break;
 606   2              case 'U':
 607   2                      password_normal_work(); // 密码正常操作
 608   2                      break;                          
 609   2              case 'M':
 610   2                      manager_work();                 // 系统管理处理
 611   2                      break;
 612   2              case 'D':
 613   2              case 'F':
C51 COMPILER V7.07   MAIN                                                                  09/15/2005 14:57:53 PAGE 11  

 614   2                      break;
 615   2              default:
 616   2                      break;          
 617   2              }
 618   1      
 619   1              COMENABLE;
 620   1      }
 621          
 622          ///////////////////////////////////////////////////////////////////////////////
 623          // 指纹1:G比对用户操作处理
 624          ///////////////////////////////////////////////////////////////////////////////
 625          void finger_work1tog()
 626          {
 627   1              user_pass=FALSE;
 628   1              Wait10ms();
 629   1              Wait10ms();
 630   1              if(GroupIdentify())
 631   1              {
 632   2                      second=100;
 633   2                      sec_flag=0;                     // 保证韦根通信有足够的延时
 634   2                      Set_record();
 635   2                      user_pass=TRUE;         // 用户通过比对
 636   2              }
 637   1      }
 638          ///////////////////////////////////////////////////////////////////////////////
 639          // 指纹1:N比对用户操作处理
 640          ///////////////////////////////////////////////////////////////////////////////
 641          void finger_work1ton()
 642          {
 643   1              user_pass=FALSE;
 644   1              Wait10ms();
 645   1              Wait10ms();
 646   1              if(Identify())
 647   1              {
 648   2                      second=100;
 649   2                      sec_flag=0;                     // 保证韦根通信有足够的延时
 650   2                      Set_record();
 651   2                      user_pass=TRUE;         // 用户通过比对
 652   2              }
 653   1      }
 654          
 655          ///////////////////////////////////////////////////////////////////////////////
 656          // 指纹1:1比对用户操作处理
 657          ///////////////////////////////////////////////////////////////////////////////
 658          void finger_work1to1()
 659          {
 660   1              user_pass=FALSE;
 661   1              ManageClass='G';
 662   1              AppClass='F';
 663   1      
 664   1              GLCD_ClearScreen ();
 665   1              if(input_id_proc())                     // 输入用户编号
 666   1              {
 667   2                      Wait10ms();
 668   2                      Wait10ms();
 669   2                      if(Verify())
 670   2                      {
 671   3                              second=100;
 672   3                              sec_flag=0;                     // 保证韦根通信有足够的延时
 673   3                              Set_record();
 674   3                              user_pass=TRUE;         // 用户通过比对
 675   3                      }
C51 COMPILER V7.07   MAIN                                                                  09/15/2005 14:57:53 PAGE 12  

 676   2              }
 677   1      }
 678          
 679          ///////////////////////////////////////////////////////////////////////////////
 680          // 密码用户操作处理
 681          ///////////////////////////////////////////////////////////////////////////////
 682          void password_normal_work()
 683          {
 684   1              user_pass=FALSE;
 685   1              ManageClass='G';
 686   1              AppClass='P';
 687   1      
 688   1              if(pass_proc())
 689   1              {
 690   2                      if(Verify())
 691   2                      {
 692   3                              sec_flag=0;                     // 保证韦根通信有足够的延时
 693   3                              Set_record();
 694   3                              user_pass=TRUE;         // 用户通过比对
 695   3                      }
 696   2              }
 697   1      }
 698          
 699          ///////////////////////////////////////////////////////////////////////////////
 700          // 系统管理处理过程
 701          ///////////////////////////////////////////////////////////////////////////////
 702          void manager_work()
 703          {       
 704   1              uchar  ucManagerNum;
 705   1       
 706   1              ManageClass='M';
 707   1              AppClass='F';
 708   1      
 709   1              ucManagerNum=0;
 710   1      
 711   1              ucManagerNum = Get_manager_num();       // 获取管理员用户数目
 712   1              Menu_state=0x10;
 713   1      
 714   1              if(ucManagerNum > 0)    // 管理用户已注册必须通过指纹
 715   1              {
 716   2                      GLCD_ClearScreen ();
 717   2                      if(input_id_proc())                     // 输入用户编号
 718   2                      {
 719   3                              Wait10ms();
 720   3                              Wait10ms();
 721   3      
 722   3                              managemode=TRUE;                // 管理操作标志
 723   3      
 724   3                              if(!Verify())
 725   3                              {
 726   4                                      managemode=FALSE;       // 非管理操作标志
 727   4                                      return;                 // 管理员指纹匹配失败返回
 728   4                              }
 729   3                      }
 730   2                      else
 731   2                      {
 732   3                              managemode=TRUE;                // 管理操作标志
 733   3                              return;
 734   3                      }
 735   2              }
 736   1      
 737   1              key=0;                          // 无键盘输入
C51 COMPILER V7.07   MAIN                                                                  09/15/2005 14:57:53 PAGE 13  

 738   1              Menu_process();         // 菜单处理
 739   1              sec_flag=0;                     // 保证韦根通信有足够的延时
 740   1      
 741   1              return;                         // 进入具体菜单处理
 742   1      }
 743          
 744          ///////////////////////////////////////////////////////////////////////////////
 745          // 看门狗
 746          ///////////////////////////////////////////////////////////////////////////////
 747          void Rstwdt()
 748          {
 749   1              WDT_CONTR=0x34;
 750   1      }
 751          
 752          ///////////////////////////////////////////////////////////////////////////////
 753          // 显示公司信息
 754          ///////////////////////////////////////////////////////////////////////////////
 755          void DispLogo()
 756          {
 757   1              GLCD_ClearScreen ();
 758   1              reverse=0;
 759   1              GLCD_Locate(0,16);
 760   1              dprintf("  杭州浩普信息",14);
 761   1              GLCD_Locate(0,32);
 762   1              dprintf(" www.chinahope",14);
 763   1              GLCD_Locate(0,48);
 764   1              dprintf("    .com.cn",11);
 765   1      }
 766          
 767          ///////////////////////////////////////////////////////////////////////////////
 768          // 系统参数初始化
 769          ///////////////////////////////////////////////////////////////////////////////
 770          void ParaInit()
 771          {
 772   1              idata uchar temp;
 773   1      
 774   1              DISABLE;                                        // 禁止中断
 775   1              Read_Para();                            // 读各种设置参数
 776   1              ENABLE;                                         // 开启中断
 777   1      
 778   1              wieformat=Para_ee.Actual_para->Wiegand_format;
 779   1              if(wieformat<0 || wieformat>3)
 780   1              {
 781   2                      wieformat=0x00;                 // 缺省为考勤模式00bit
 782   2              }
 783   1      
 784   1              decaddr=Para_ee.Actual_para->Machine_addr;
 785   1              if((decaddr==0)||(decaddr==0xff))
 786   1              {
 787   2                      decaddr=1;              // 缺省设备地址为1
 788   2              }
 789   1      
 790   1              temp=decaddr&0xF0;
 791   1              temp=temp>>4;
 792   1              haddr=Hex_ascii(temp);  // ASC设备地址高位
 793   1              temp=decaddr&0x0F;
 794   1              laddr=Hex_ascii(temp);  // ASC设备地址低位
 795   1      
 796   1              areaaddr=Para_ee.Actual_para->Area_addr;
 797   1              if(areaaddr>=240)
 798   1              {
 799   2                      areaaddr=1;             // 缺省分组地址为1
C51 COMPILER V7.07   MAIN                                                                  09/15/2005 14:57:53 PAGE 14  

 800   2              }
 801   1      
 802   1              Security_level=Para_ee.Actual_para->Secu_class;
 803   1              if(Security_level>4 || Security_level<0)
 804   1              {
 805   2                      Security_level=3;               // 缺省安全等级为3
 806   2              }
 807   1      
 808   1              matchmode=Para_ee.Actual_para->Match_mode;
 809   1              if(matchmode>2 || matchmode<0)
 810   1              {
 811   2                      matchmode=0;    // 缺省比对模式为1:1
 812   2              }
 813   1      
 814   1              lockmode=Para_ee.Actual_para->Lock_para;
 815   1              if(lockmode>2 || lockmode<0)
 816   1              {
 817   2                      lockmode=0;             // 缺省锁控为双锁双动
 818   2              }
 819   1      
 820   1              baudrate=Para_ee.Actual_para->Baudrate;
 821   1              if(baudrate>5 || baudrate<0)
 822   1              {
 823   2                      baudrate=1;             // 缺省波特率9600
 824   2              }
 825   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1767    ----
   CONSTANT SIZE    =     42    ----
   XDATA SIZE       =    945    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     80    ----
   IDATA SIZE       =     42       6
   BIT SIZE         =     17    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -