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

📄 finger.lst

📁 程序是智能指纹锁的
💻 LST
字号:
C51 COMPILER V8.02   FINGER                                                                12/04/2008 06:31:01 PAGE 1   


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

line level    source

   1          #include "Include.h"
   2          
   3          extern uchar NowKey;//当前按键
   4          extern uint  Tc;//超时计时器
   5          extern uchar Timer;//超时计数
   6          extern uchar Timer2;//超时计数2
   7          extern uchar BellTimer;
   8          extern uchar 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          void FingerOn(void)
  16                  {
  17   1                      FINGER_POWER=0;
  18   1              DelayNuS(10);}
  19          //关闭模块电源
  20          void FingerOff(void)
  21          {               FINGER_POWER=1;
  22   1              DelayNuS(10);}
  23          //初始化
  24          void FingerInit(void)
  25          {           UARTInit();
  26   1              FingerOff();
  27   1              memset(FingerRecord,0,sizeof(FingerRecord));}//初始化记录
  28          //复位UART变量
  29          void Clear_Uart_Variable(void)
  30          {               ReceiveOK = 0;Rx_Cnt = 0;}
  31          //发送命令
  32          //内含编码
  33          //入口参数:
  34          //      BaoBS:包标识
  35          //      Number:包内容长度
  36          //      p:待发包内容
  37          //返回值:
  38          //      1:操作成功
  39          //      0:参数错误
  40          //      2:超时
  41          uchar SendCommand(uchar BaoBS,uchar Number,uchar *p)
  42          {
  43   1              uchar i = 0;
  44   1              uchar Sum = 0;
  45   1              uchar* pt = p;
  46   1              if(Number>MAX_LR_NUMBER)return FALSE;//参数错误
  47   1              //发送包头
  48   1              UARTSendByte('M');
  49   1              Sum += 'M';
  50   1              UARTSendByte('X');
  51   1              Sum += 'X';
  52   1              //发送包标识
  53   1              UARTSendByte(BaoBS);
  54   1              Sum += BaoBS;
  55   1              //发送包长度
C51 COMPILER V8.02   FINGER                                                                12/04/2008 06:31:01 PAGE 2   

  56   1              UARTSendByte(Number);
  57   1              Sum += Number;
  58   1              //发送包内容
  59   1              for(i = 0;i<Number;i++)
  60   1              {       UARTSendByte(*p);
  61   2                      Sum += *p;
  62   2                      p++;}
  63   1              //发送校验和
  64   1              UARTSendByte(Sum);
  65   1                      return  0;}
  66          //清空指纹
  67          //返回值:
  68          //      OK:操作成功
  69          //      其它:通讯错误
  70          uchar EmptyFinger(void)
  71          {
  72   1              uchar Command = C_EMPTY_FINGER;
  73   1                      Clear_Uart_Variable();
  74   1                      SendCommand(C_COMMAND,1,&Command);
  75   1                      Tc = 2;
  76   1                      while(!ReceiveOK&&Tc);
  77   1                      Clear_Uart_Variable();
  78   1                      if(0==Tc)       return  FALSE;
  79   1                      if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
  80   1                      {       if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]));
  81   2                              else return     ANSWER_NUMBER_E;}
  82   1                      else return     C_GET_FAIL;
  83   1                      Tc = 2;
  84   1                      while(!ReceiveOK&&Tc);
  85   1                      Clear_Uart_Variable();
  86   1                      if(0==Tc)       return  FALSE;
  87   1                      if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
  88   1                      {       if((C_ANSWER==CommBuf[2])&&(C_EMPTY_FINGER==CommBuf[4]))return OK;
  89   2                              else return     ANSWER_NUMBER_E;}
  90   1                      else{return     C_GET_FAIL;}
  91   1              return FALSE;}
  92          //写Flash
  93          //入口参数:
  94          //      p:待写数据存放地址
  95          //      Number:读取个数
  96          //      AddrH:地址高字节
  97          //      AddrL:地址低字节
  98          //返回值:
  99          //      OK:操作成功
 100          //      其它:通讯错误
 101          uchar WriteFingerFlash(uchar *p,uchar Number,uchar AddrH,uchar AddrL)
 102          {       CommBuf[0] = C_WRITE_FLASH;
 103   1              CommBuf[1] = AddrH;
 104   1              CommBuf[2] = AddrL;
 105   1              CommBuf[3] = Number;
 106   1              memcpy(&CommBuf[4],p,Number);
 107   1                      Clear_Uart_Variable();
 108   1                      SendCommand(C_COMMAND,Number+4,CommBuf);
 109   1                      Tc = 2;
 110   1                      while(!ReceiveOK&&Tc);
 111   1                      Clear_Uart_Variable();
 112   1                      if(0==Tc)       return  FALSE;
 113   1                      if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
 114   1                      {       if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]));
 115   2                              else return     ANSWER_NUMBER_E;}
 116   1                      else return     C_GET_FAIL;
 117   1                      Tc = 2;
C51 COMPILER V8.02   FINGER                                                                12/04/2008 06:31:01 PAGE 3   

 118   1                      while(!ReceiveOK&&Tc);
 119   1                      Clear_Uart_Variable();
 120   1                      if(0==Tc)       return  FALSE;
 121   1                      if(SCC==CommBuf[CommBuf[3]+4])                                  //数据包和校验判断
 122   1                      {       if((C_ANSWER==CommBuf[2])&&(C_WRITE_FLASH==CommBuf[4]))return OK;
 123   2                              else return     ANSWER_NUMBER_E;}
 124   1                      else return     C_GET_FAIL;
 125   1              return FALSE;}
 126          
 127          //读Flash
 128          //入口参数:
 129          //      p:读取数据存放地址
 130          //      Number:读取个数
 131          //      AddrH:地址高字节
 132          //      AddrL:地址低字节
 133          //返回值:
 134          //      OK:操作成功
 135          //      其它:通讯错误
 136          uchar ReadFingerFlash(uchar *p,uchar Number,uchar AddrH,uchar AddrL)
 137                  {
 138   1                      uchar Command = C_READ_FLASH; 
 139   1      
 140   1              CommBuf[0] = C_READ_FLASH;
 141   1              CommBuf[1] = AddrH;
 142   1              CommBuf[2] = AddrL;
 143   1              CommBuf[3] = Number;
 144   1                      //发送读Flash指令
 145   1                      Clear_Uart_Variable();
 146   1                      SendCommand(C_COMMAND,4,CommBuf);
 147   1                      //等待接收正确接收返回
 148   1                      Tc = 2;
 149   1                      while(!ReceiveOK&&Tc);
 150   1                      Clear_Uart_Variable();
 151   1                      if(0==Tc)       return  FALSE;
 152   1                      if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
 153   1                      {       if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]));
 154   2                              else return     ANSWER_NUMBER_E;}
 155   1                      else return     C_GET_FAIL;
 156   1                      //等待返回数据
 157   1                      Tc = 2;
 158   1                      while(!ReceiveOK&&Tc);
 159   1                      Clear_Uart_Variable();
 160   1                      if(0==Tc) return FALSE;
 161   1                      if(SCC==CommBuf[CommBuf[3]+4])                                  //数据包和校验判断
 162   1                      {       if((C_ANSWER==CommBuf[2])&&(C_READ_FLASH==CommBuf[4]))
 163   2                              {   memcpy(p,&CommBuf[5],Number);//复制数据                                     
 164   3                                      return OK;}
 165   2                              else return     ANSWER_NUMBER_E;}
 166   1                      else return     C_GET_FAIL;
 167   1              return FALSE;}                                                     
 168          //查找某一地址的记录为空与否
 169          //入口参数:
 170          //AddrH:高地址位
 171          //AddrH:低地址位
 172          //返回值:
 173          //OK:有指纹
 174          //NOFINGER:无指纹
 175          //其他:不成功
 176          uchar Find_Finger(void)
 177          {               FingerOn();
 178   1              CommBuf[0] = C_READ_INFO;//0x4B查询指纹库信息
 179   1              CommBuf[1] = 0;//高地址
C51 COMPILER V8.02   FINGER                                                                12/04/2008 06:31:01 PAGE 4   

 180   1              CommBuf[2] = 0;//低地址
 181   1                      Clear_Uart_Variable();
 182   1                      SendCommand(C_COMMAND,3,CommBuf);//1.发送查询是否存在指定编号的指纹命令
 183   1                      //等待接收正确接收返回
 184   1                      Tc = 2;
 185   1                      while(!ReceiveOK&&Tc);
 186   1                      Clear_Uart_Variable();
 187   1                      if(0==Tc)       return  FALSE;
 188   1                      if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
 189   1                      {       if((0x30==CommBuf[2])&&(0x01==CommBuf[4]));//2。正确接收
 190   2                              else return     ANSWER_NUMBER_E;}
 191   1                      else return     C_GET_FAIL;
 192   1                      //等待返回数据
 193   1                      Tc = 2;
 194   1                      while(!ReceiveOK&&Tc);
 195   1                      Clear_Uart_Variable();
 196   1                      if(0==Tc)       return  FALSE;
 197   1                      if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
 198   1                      {if((C_ANSWER==CommBuf[2])&&(C_READ_INFO==CommBuf[4]))//3。正确接收
 199   2                              { switch (CommBuf[5])
 200   3                                              {case ANSWER_HAVE_FINGER://37
 201   4                                                      break;                                                                          
 202   4                                              case ANSWER_NUMBER_E://35 
 203   4                                                      return  ANSWER_NUMBER_E;
 204   4                                              case ANSWER_NO_FINGER://38 
 205   4                                                      return NOFINGER;}
 206   3                                              return OK;}
 207   2                              else{return     ANSWER_NUMBER_E;}}
 208   1                      else return     C_GET_FAIL;
 209   1      return FALSE;   
 210   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    901    ----
   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 + -