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

📄 finger.lst

📁 this progam is used with e_lock,and so on.
💻 LST
字号:
C51 COMPILER V7.06   FINGER                                                                12/04/2008 15:12:02 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE FINGER
OBJECT MODULE PLACED IN Finger.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Finger.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "Include.h"
   2          
   3          extern unsigned char NowKey;                            //当前按键
   4          extern unsigned int  Tc;                                        //超时计时器
   5          extern unsigned char Timer;                                     //超时计数
   6          extern unsigned char Timer2;                            //超时计数2
   7          //extern unsigned char BellTimer;
   8          extern unsigned char Rx_Cnt;                            //串口接收计数器
   9          extern  bit             ReceiveOK;                                      //数据包接收完成标志位
  10          sbit FINGER_POWER=P1^0;                                         //模块电源控制,低电平有效
  11          unsigned char FingerRecord[26];                         //指纹记录数组,每位代表对应编号指纹有无
  12          unsigned char xdata CommBuf[MAX_BUF_NUMBER];//串口缓冲
  13          unsigned char xdata SCC;                                        //串口接收和校验
  14          //打开模块电源
  15          
  16          void FingerOn(void)
  17          {
  18   1              FINGER_POWER=0;
  19   1              DelayNuS(10);
  20   1      }
  21          //关闭模块电源
  22          void FingerOff(void)
  23          {
  24   1              FINGER_POWER=1;
  25   1              DelayNuS(10);
  26   1      }
  27          //初始化
  28          void FingerInit(void)
  29          {
  30   1              UARTInit();
  31   1              FingerOff();
  32   1      
  33   1              memset(FingerRecord,0,sizeof(FingerRecord));//初始化记录
  34   1      }
  35          //复位UART变量
  36          void Clear_Uart_Variable(void)
  37          {
  38   1                      ReceiveOK = 0;
  39   1                      Rx_Cnt = 0;     
  40   1      }
  41          
  42          //发送命令
  43          //内含编码
  44          //入口参数:
  45          //      BaoBS:包标识
  46          //      Number:包内容长度
  47          //      p:待发包内容
  48          //返回值:
  49          //      1:操作成功
  50          //      0:参数错误
  51          //      2:超时
  52          unsigned char SendCommand(unsigned char BaoBS,unsigned char Number,unsigned char *p)
  53          {
  54   1              unsigned char i = 0;       //发送一个数据包:'M'+'X'+BaoBS+Number+&p+SUM
  55   1              unsigned char Sum = 0;
C51 COMPILER V7.06   FINGER                                                                12/04/2008 15:12:02 PAGE 2   

  56   1              unsigned char* pt = p;
  57   1      
  58   1              if(Number>MAX_LR_NUMBER)
  59   1              {
  60   2                      return FALSE;//参数错误
  61   2              }
  62   1      
  63   1              //发送包头
  64   1              UARTSendByte('M');
  65   1              Sum += 'M';
  66   1              UARTSendByte('X');
  67   1              Sum += 'X';
  68   1      
  69   1              //发送包标识
  70   1              UARTSendByte(BaoBS);
  71   1              Sum += BaoBS;
  72   1      
  73   1              //发送包长度
  74   1              UARTSendByte(Number);
  75   1              Sum += Number;
  76   1      
  77   1              //发送包内容
  78   1              for(i = 0;i<Number;i++)
  79   1              {
  80   2                      UARTSendByte(*p);
  81   2                      Sum += *p;
  82   2                      p++;
  83   2              }
  84   1              //发送校验和
  85   1              UARTSendByte(Sum);
  86   1                      return  0;
  87   1      }
  88          
  89          //清空指纹
  90          //返回值:
  91          //      OK:操作成功
  92          //      其它:通讯错误
  93          unsigned char EmptyFinger(void)
  94          {
  95   1              unsigned char Command = C_EMPTY_FINGER;
  96   1      
  97   1                      Clear_Uart_Variable();
  98   1                      SendCommand(C_COMMAND,1,&Command);
  99   1      
 100   1                      Tc = 2;
 101   1                      while(!ReceiveOK&&Tc);
 102   1                      Clear_Uart_Variable();
 103   1                      if(0==Tc)       return  FALSE;
 104   1      
 105   1                      if(SCC==CommBuf[CommBuf[3]+4])                          //数据包和校验判断
 106   1                      {
 107   2                              if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
 108   2                              {
 109   3                                      ;       
 110   3                              }
 111   2                              else
 112   2                              {
 113   3                                      return  ANSWER_NUMBER_E;
 114   3                              }
 115   2                      }
 116   1                      else
 117   1                      {
C51 COMPILER V7.06   FINGER                                                                12/04/2008 15:12:02 PAGE 3   

 118   2                              return  C_GET_FAIL;
 119   2                      }
 120   1      
 121   1                      Tc = 2;
 122   1                      while(!ReceiveOK&&Tc);
 123   1                      Clear_Uart_Variable();
 124   1                      if(0==Tc)       return  FALSE;
 125   1      
 126   1                      if(SCC==CommBuf[CommBuf[3]+4])                                  //数据包和校验判断
 127   1                      {
 128   2                              if((C_ANSWER==CommBuf[2])&&(C_EMPTY_FINGER==CommBuf[4]))
 129   2                              {                               
 130   3                                      return OK;      
 131   3                              }
 132   2                              else
 133   2                              {
 134   3                                      return  ANSWER_NUMBER_E;
 135   3                              }
 136   2                      }
 137   1                      else
 138   1                      {
 139   2                              return  C_GET_FAIL;
 140   2                      }
 141   1      
 142   1              return FALSE;
 143   1      }
 144          
 145          //写Flash
 146          //入口参数:
 147          //      p:待写数据存放地址
 148          //      Number:读取个数
 149          //      AddrH:地址高字节
 150          //      AddrL:地址低字节
 151          //返回值:
 152          //      OK:操作成功
 153          //      其它:通讯错误
 154          unsigned char WriteFingerFlash(unsigned char *p,unsigned char Number,unsigned char AddrH,unsigned char Add
             -rL)
 155          {
 156   1              CommBuf[0] = C_WRITE_FLASH;
 157   1              CommBuf[1] = AddrH;
 158   1              CommBuf[2] = AddrL;
 159   1              CommBuf[3] = Number;
 160   1      
 161   1              memcpy(&CommBuf[4],p,Number);
 162   1      
 163   1                      Clear_Uart_Variable();
 164   1                      SendCommand(C_COMMAND,Number+4,CommBuf);
 165   1      
 166   1                      Tc = 2;
 167   1                      while(!ReceiveOK&&Tc);
 168   1                      Clear_Uart_Variable();
 169   1                      if(0==Tc)       return  FALSE;
 170   1      
 171   1                      if(SCC==CommBuf[CommBuf[3]+4])                          //数据包和校验判断
 172   1                      {
 173   2                              if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
 174   2                              {
 175   3                                      ;       
 176   3                              }
 177   2                              else
 178   2                              {
C51 COMPILER V7.06   FINGER                                                                12/04/2008 15:12:02 PAGE 4   

 179   3                                      return  ANSWER_NUMBER_E;
 180   3                              }
 181   2                      }
 182   1                      else
 183   1                      {
 184   2                              return  C_GET_FAIL;
 185   2                      }
 186   1      
 187   1                      Tc = 2;
 188   1                      while(!ReceiveOK&&Tc);
 189   1                      Clear_Uart_Variable();
 190   1                      if(0==Tc)       return  FALSE;
 191   1      
 192   1                      if(SCC==CommBuf[CommBuf[3]+4])                                  //数据包和校验判断
 193   1                      {
 194   2                              if((C_ANSWER==CommBuf[2])&&(C_WRITE_FLASH==CommBuf[4]))
 195   2                              {                               
 196   3                                      return OK;      
 197   3                              }
 198   2                              else
 199   2                              {
 200   3                                      return  ANSWER_NUMBER_E;
 201   3                              }
 202   2                      }
 203   1                      else
 204   1                      {
 205   2                              return  C_GET_FAIL;
 206   2                      }
 207   1      
 208   1              return FALSE;
 209   1      }
 210          
 211          //读Flash
 212          //入口参数:
 213          //      p:读取数据存放地址
 214          //      Number:读取个数
 215          //      AddrH:地址高字节
 216          //      AddrL:地址低字节
 217          //返回值:
 218          //      OK:操作成功
 219          //      其它:通讯错误
 220          unsigned char ReadFingerFlash(unsigned char *p,unsigned char Number,unsigned char AddrH,unsigned char Addr
             -L)
 221          {
 222   1              unsigned char Command = C_READ_FLASH; 
 223   1      
 224   1              CommBuf[0] = C_READ_FLASH;
 225   1              CommBuf[1] = AddrH;
 226   1              CommBuf[2] = AddrL;
 227   1              CommBuf[3] = Number;
 228   1                      //发送读Flash指令
 229   1                      Clear_Uart_Variable();
 230   1                      SendCommand(C_COMMAND,4,CommBuf);
 231   1      
 232   1                      //等待接收正确接收返回
 233   1                      Tc = 2;
 234   1                      while(!ReceiveOK&&Tc);
 235   1                      Clear_Uart_Variable();
 236   1                      if(0==Tc)       return  FALSE;
 237   1      
 238   1                      if(SCC==CommBuf[CommBuf[3]+4])                          //数据包和校验判断
 239   1                      {
C51 COMPILER V7.06   FINGER                                                                12/04/2008 15:12:02 PAGE 5   

 240   2                              if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
 241   2                              {
 242   3                                      ;       
 243   3                              }
 244   2                              else
 245   2                              {
 246   3                                      return  ANSWER_NUMBER_E;
 247   3                              }
 248   2                      }
 249   1                      else
 250   1                      {
 251   2                              return  C_GET_FAIL;
 252   2                      }
 253   1      
 254   1                      //等待返回数据
 255   1                      Tc = 2;
 256   1                      while(!ReceiveOK&&Tc);
 257   1                      Clear_Uart_Variable();
 258   1                      if(0==Tc)       return  FALSE;
 259   1      
 260   1                      if(SCC==CommBuf[CommBuf[3]+4])                                  //数据包和校验判断
 261   1                      {
 262   2                              if((C_ANSWER==CommBuf[2])&&(C_READ_FLASH==CommBuf[4]))
 263   2                              {
 264   3                      memcpy(p,&CommBuf[5],Number);//复制数据                                 
 265   3                                      return OK;      
 266   3                              }
 267   2                              else
 268   2                              {
 269   3                                      return  ANSWER_NUMBER_E;
 270   3                              }
 271   2                      }
 272   1                      else
 273   1                      {
 274   2                              return  C_GET_FAIL;
 275   2                      }
 276   1      
 277   1              return FALSE;
 278   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    730    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    134    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     26      24
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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