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

📄 main.lst

📁 门禁控制器源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.07   MAIN                                                                  09/15/2005 14:57:53 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Main.c LARGE OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          ///////////////////////////////////////////////////////////////////////////////
   2          //
   3          // Hopinfo Copyright.
   4          //
   5          // www.chinahopeinfo.com.cn
   6          //
   7          // 2005.04.26
   8          //
   9          // 审阅:黄平生
  10          //
  11          // 主程序,串口通信、菜单管理、中断管理、初始化
  12          //
  13          ///////////////////////////////////////////////////////////////////////////////
  14          
  15          #include "Global.h"
  16          
  17          ///////////////////////////////////////////////////////////////////////////////
  18          // 控制器参数
  19          struct  Para
  20          {
  21                  uchar Wiegand_format;                   // 1、韦根通信1 个字节,3 种选择,1~4
  22                  uchar Machine_addr;                             // 2、终端编号1 个字节,1~254
  23                  uchar Area_addr;                                // 3、终端区域编号1 个字节,1~240
  24                  uchar Secu_class;                               // 4、安全等级1 个字节,1~10
  25                  uchar Match_mode;                               // 5、匹配模式1 个字节,1~2
  26                  uchar Lock_para;                                // 6、锁控参数1 个字节,1~3
  27                  uchar Baudrate;                                 // 7、串口速率1 个字节,1~6
  28          };
  29          
  30          union Para_u
  31          {
  32                  uchar para_dat[7];
  33                  struct Para Actual_para;
  34          }Para_ee;                                                       // 控制器参数
  35          
  36          ///////////////////////////////////////////////////////////////////////////////
  37          // 内部存储区变量       0~128字节
  38          data  uchar cur_time[15];                       // 系统当前时间显示存储区 XXXX年XX月XX日XX时XX分XX秒星期X
  39          data  uchar time[10];                           // 读取时钟存储区
  40          
  41          // 中断或系统
  42          data  uchar pulse=0;                            // 蜂鸣次数
  43          data  uchar key;                                        // 键盘值
  44          data  uint  time_out;                           // 通用超时定时器
  45          data  uchar on_timer=10;                        // 蜂鸣开启时延
  46          data  uchar off_timer=5;                        // 蜂鸣关闭时延
  47          data  uchar second=217;                         // 秒中断计数
  48          data  uchar door_state;                         // 门控状态
  49          
  50          // 显示
  51          data  uchar u8CursorX;                          // 光标X坐标列
  52          data  uchar u8CursorY;                          // 光标Y坐标行
  53          data  uchar cs;                                         // 显示片选
  54          
  55          // SPI通信包参数
C51 COMPILER V7.07   MAIN                                                                  09/15/2005 14:57:53 PAGE 2   

  56          data  char  User_id[6];                         // 用户编号0~65534
  57          data  char  groupclass;                         // 用户分组信息
  58          data  uchar checksum;                           // 校验和
  59          data  uchar testchecksum;                       // 接收到的校验和
  60          data  uchar MSG=0;                                      // 信息号
  61          data  uchar CSH;                                        // 校验和ASC高字节
  62          data  uchar CSL;                                        // 校验和ASC低字节
  63          data  uint  SOHptr;                                     // SPI缓冲区头指针
  64          data  uint  ETXptr;                                     // ETX位置
  65          data  uint  CommandLen;                         // 命令体长度
  66          
  67          // 韦根通信和485通信地址
  68          idata uchar laddr;                                      // 地址低字节ASC码
  69          idata uchar haddr;                                      // 地址高字节ASC码
  70          idata uchar areaaddr;                           // 分组地址
  71          idata uchar decaddr;                            // 设备地址
  72          
  73          // 韦根通信包参数
  74          data  ulong Wiegand_dat;                        // 韦根通信数据
  75          data  uchar Wiecnt_max;                         // 韦根通信长度
  76          data  uchar Wgnd_count;                         // 韦根数据位计数
  77          
  78          bdata bit recv_end;                                     // 韦根接收结束
  79          bdata bit W_rec_end;                            // 韦根写记录结束
  80          bdata bit Odd;                                          // 韦根校验位
  81          bdata bit Even;
  82          
  83          bdata bit sec_flag=0;                           // 秒计数标志
  84          bdata bit KP;                                           // 按键按下状态
  85          bdata bit KM;                                           // 按键抬起状态
  86          bdata bit reverse;                                      // LCD底色显示控制
  87          bdata bit HandwareErr=FALSE;            // 指纹模块工作状态
  88          bdata bit ack;                                          // 时钟I2C总线通信应答状态
  89          bdata bit maxtrans=FALSE;                       // 大/小数据传输状态
  90          bdata bit user_pass=FALSE;                      // 用户比对是否通过标志
  91          
  92          bdata bit tele_alarm_on;                        // 布控/撤控标志
  93          
  94          bdata bit alram_on=TRUE;                        // 防拆报警布防
  95          bdata bit alram_off=TRUE;                       // 防拆报警撤防
  96          
  97          bdata bit managemode=FALSE;                     // 管理员比对操作
  98          
  99          data uchar Menu_state=0;                        // 菜单当前状态
 100          
 101          // 小数据量串口通信
 102          data uint  recv_ctr;                            // 接收数据终止指针
 103          data uint  trans_ctr;                           // 发送数据指针
 104          data uint  trans_size;                          // 发送数据大小
 105          
 106          data uchar disp_buf[12];                        // 显示缓冲区
 107          
 108          data uchar esc_count;                           // ESC按键计数
 109          
 110          bdata bit  comm_ok;                                     // 通信状态
 111          
 112          ///////////////////////////////////////////////////////////////////////////////
 113          // 内部存储区变量       128~256字节,其中系统用41字节
 114          
 115          idata char matchmode;                           // 匹配模式
 116          idata char lockmode;                            // 锁控方式
 117          idata char wieformat;                           // 韦根格式
C51 COMPILER V7.07   MAIN                                                                  09/15/2005 14:57:53 PAGE 3   

 118          idata uchar baudrate;                           // 波特率
 119          idata uint SOH_crt;                                     // 数据包开始指针
 120          
 121          idata char Start_user_id[6];            // 开始用户编号
 122          idata char End_user_id[6];                      // 终止用户编号
 123          idata char Start_time[5];                       // 开始时间
 124          idata char End_time[5];                         // 终止时间
 125          idata char Security_level;                      // 安全等级0~4
 126          idata char ManageClass;                         // 管理分类'M'管理用户'G'普通用户
 127          idata char AppClass;                            // 应用分类'F'指纹用户'P'密码用户
 128          idata char Password[7];                         // 密码
 129          
 130          ///////////////////////////////////////////////////////////////////////////////
 131          // 外部存储区变量       256~1280字节
 132          xdata uchar SPIbuf[BUFSIZE];            // SPI和串行通信缓冲区
 133          xdata uchar RTrecord[MAX_REALREC_SIZE]; // 实时记录缓冲区
 134          xdata uchar recv_buf[RCVBUFSIZE];       // 接收数据缓冲区
 135          xdata uchar trans_buf[TRANSBUFSIZE];// 发送数据缓冲区
 136          xdata char  tele_code[12];                      // 报警电话号码
 137          
 138          ///////////////////////////////////////////////////////////////////////////////
 139          // 中断1服务列程
 140          // 10ms定时中断服务
 141          ///////////////////////////////////////////////////////////////////////////////
 142          void timer0_isr() interrupt 1
 143          {
 144   1              TR0=0;
 145   1              TH0=0xb8;
 146   1              TL0=0x00;                       // 10ms
 147   1              TR0=1;
 148   1      
 149   1              Rstwdt();                       // 喂狗
 150   1      
 151   1              kbscan();                       // 键盘扫描
 152   1      
 153   1              if(pulse)                       // 蜂鸣器鸣叫处理
 154   1              {
 155   2                      if(on_timer>0)
 156   2                      {
 157   3                              speaker=0;      // 开启蜂鸣
 158   3                              on_timer--;
 159   3                      }
 160   2                      else
 161   2                      {
 162   3                              speaker=1;                      // 蜂鸣器关闭
 163   3                              if(off_timer>0)off_timer--;
 164   3                              else 
 165   3                              {                               
 166   4                                      pulse--;                // 鸣叫次数
 167   4                                      on_timer=10;    // 蜂鸣器鸣叫时间 10*10ms
 168   4                                      off_timer=5;    // 蜂鸣器关闭时间 5*10ms
 169   4                              }
 170   3                      }
 171   2              
 172   2              }
 173   1      
 174   1              if(time_out>0)time_out--;               // 通用定时器
 175   1      
 176   1              if(!(second--))                 // 秒标志
 177   1              {
 178   2                      second=217;                     // 2.17秒,避免秒节点对齐
 179   2                      sec_flag=1;
C51 COMPILER V7.07   MAIN                                                                  09/15/2005 14:57:53 PAGE 4   

 180   2              }
 181   1      }
 182          
 183          ///////////////////////////////////////////////////////////////////////////////
 184          // 系统硬件初始化
 185          ///////////////////////////////////////////////////////////////////////////////
 186          void Init()     
 187          {
 188   1              idata uint i;
 189   1      
 190   1              // 缓冲区变量初始化
 191   1              maxtrans=FALSE;         // 缺省数据为小数据量传输模式
 192   1              recv_ctr=0;
 193   1              trans_ctr=0;
 194   1              trans_size=0;
 195   1      
 196   1              // 变量初始化
 197   1              for(i=0;i<6;i++) User_id[i]=0;
 198   1              for(i=0;i<6;i++) Start_user_id[i]=0;
 199   1              for(i=0;i<6;i++) End_user_id[i]=0;
 200   1              for(i=0;i<7;i++) Password[i]=0;
 201   1              for(i=0;i<5;i++) Start_time[i]=0;
 202   1              for(i=0;i<5;i++) End_time[i]=0;
 203   1              for(i=0;i<12;i++) disp_buf[i]=0;
 204   1              for(i=0;i<12;i++) tele_code[i]=0;
 205   1      
 206   1              tele_alarm_on=FALSE;
 207   1      
 208   1              door_state=0x0f;                                        // 门控状态
 209   1      
 210   1              esc_count=0;
 211   1      
 212   1              KP=0;
 213   1              KM=0;
 214   1              Menu_state=Menu_top;
 215   1      
 216   1              // 系统寄存器设置
 217   1              T2CON=0x30;             // 设置T2为波特率生成器
 218   1          TH2 = 0xff ;                  
 219   1          TL2 = 0xb8;         // 波特率设为9600bps
 220   1          RCAP2H=0xff;
 221   1          RCAP2L=0xb8;
 222   1          TR2 = 1;            // 允许T2中断
 223   1      
 224   1          SCON=0x50;          // 设置串行口通信格式                   
 225   1              TCON|=0x05;
 226   1              TMOD=0x11;              // 定时器T2设为8位自动重装,T0为16位定时器
 227   1      
 228   1              TH0=0xb8;
 229   1              TL0=0x00;               // 10ms
 230   1              TR0=1;                  // 允许T0中断
 231   1      
 232   1          P0=0xff;
 233   1              P1=0xff;
 234   1              Dir=0;                  // 不允许485发送
 235   1              backlt=0;               // 打开背光
 236   1              P2=0xff;
 237   1              P3=0xff;
 238   1              P4=0xff;
 239   1      
 240   1              ET0=1;                  // 允许T0中断
 241   1              IT0=1;
C51 COMPILER V7.07   MAIN                                                                  09/15/2005 14:57:53 PAGE 5   

 242   1              IT1=1;  
 243   1              EX0=1;                  // 开放INT0
 244   1              EX1=1;                  // 开放INT1
 245   1      
 246   1              PS=1;                   // 串口为低级中断
 247   1      
 248   1              COMENABLE;              // 允许串口中断
 249   1              ENABLE;                 // 允许所有中断
 250   1      }
 251          
 252          ///////////////////////////////////////////////////////////////////////////////
 253          // 系统硬件初始化
 254          ///////////////////////////////////////////////////////////////////////////////
 255          void main(void)
 256          {
 257   1              idata uchar i;
 258   1              idata uchar temp;
 259   1      
 260   1      reset:
 261   1              KC1=0;KC2=0;                            // 按键硬件初始化
 262   1      
 263   1              GLCD_LcdInit();                         // 液晶屏初始化
 264   1              backlt=0;                                       // 打开背光
 265   1              GLCD_ClearScreen ();
 266   1              DispLogo();                                     // 显示公司信息
 267   1      
 268   1              ParaInit();                                     // 系统参数初始化
 269   1              Init();                                         // 系统设置初始化
 270   1              pulse=1;
 271   1      
 272   1              if(wieformat>0)                         // 门禁模式
 273   1                      W_init();                               // 韦根通信初始化
 274   1      
 275   1              Baud_Init();                            // 波特率

⌨️ 快捷键说明

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