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

📄 finger.c

📁 MSP430设计的继电保护控制和通信程序
💻 C
📖 第 1 页 / 共 5 页
字号:
                      else //play("指纹库已满");
                      play(0x0109);
                }
                else 
                //play("设备故障");
                play(0x009f);
          }
              
    }
    else 
    //play("设备故障");
    play(0x009f);
   Status = CMDFpVerifyEnd();                        //结束比对通过后可操作的次数       
}     
//----------------------------------------------------------------
void DeleteFinger()
{
    uchar ten=0,one=1;        //ID号不能为0
    uchar Status;
    P1IE &= ~BIT7;     // 屏蔽触发感应的对比键
    CCTL0 &= ~CCIE;
    Status = CMDDeviceTest();
    if(Status == M2ERROR_NONE)
    {
         //play("比对模式,按1号车主1号指纹");
         play(0x0020);
         play(0x006c);
         delay(100);
         play(0x0076);
         play(0x0071);
         delay(10000);
         Status = CMDFpVerifyMaster(0x00,0x00);        //比对通过后允许n次登录或删除操作
         if(Status == M2ERROR_NONE)
         {
               //play("输入使用者两位编码");
               play(0x0082);
               Time_count=50;
               while((!(KeyA))&&(Time_count>0))
               {
                    if(KeyB)
                    {
                           while(KeyB)
                           {;}
                           Time_count=50;
                           delay(500);
                           ten++;
                           if(ten > 4) 
                               ten=0;
                            
                           //play("ten十");
                           play_number(ten);
                           if(ten != 0)
                           play(0x0016);
                    }
                    if(KeyC)
                    {
                           while(KeyC)
                           {;}
                           Time_count=50;
                           delay(500);
                           one++;
                           if(one > 9)
                              one=1;
                           
                           //play("one");
                           play_number(one);
                    }
                    if(TACTL & TAIFG)
                    {
                         Time_count--;
                         TACTL &= ~TAIFG;  //清中断标志
                    }
               }
               if(Time_count > 0)
               {
               
                    while(KeyA);
                    delay(500);
                    UserTwoCode = ten*10+one;
                    Status = CMDFpDelete(UserTwoCode,0x00);             //删除xx号指纹
                    if(Status == M2ERROR_NONE)
                    {
                       //play("删除成功");
                         UserTwoCode_Flag[UserTwoCode]=0x00;
                         flash_write((char *)0x01018,UserTwoCode_Flag,50);
                         play(0x010e);
                    }
                    else //play("删除失败");
                     play(0x0114);
                }
                else //输入有误
                play(0x00ff);
         }
         else
         {
             if(Status == M2ERROR_MASTERFP_NOT_FOUND)
             ;
             //play("指纹库空");
             else 
              //play("比对失败");
             play(0x00ab);
       }
    }
    else 
    //play("设备故障");  
    play(0x009f);
   Status = CMDFpVerifyEnd();                        //结束比对通过后可操作的次数
}
//----------------------------------------------------------------
void UpdatePass()
{
    uchar count=0,pass=0;
    uchar Status,KeyStatus;
    uchar TemUnlockPass1[6],TemUnlockPass2[6];
    CCTL0 &= ~CCIE;
    P1IE &= ~BIT7;     // 屏蔽触发感应的对比键
    Status = CMDDeviceTest();
    if(Status == M2ERROR_NONE)
    {
         //play("比对模式,按1号车主1号指纹");
         play(0x0020);
         play(0x006c);
         delay(100);
         play(0x0076);
         play(0x0071);
         delay(10000);
         Status = CMDFpVerifyMaster(0x00,0x00);        //比对通过后允许n次登录或删除操作
         if(Status == M2ERROR_NONE)
         {
             //play("输入新密码");
             play(0x00cc);
             KeyStatus = InPass(TemUnlockPass1);
             if(KeyStatus ==RIGHT)
             {
                 //play("再次输入新密码");
                 play(0x00d2);
                 KeyStatus = InPass(TemUnlockPass2); 
                 if(KeyStatus == RIGHT)
                 {
                       Status = Verify(TemUnlockPass1,TemUnlockPass2,6);
                       if(Status == RIGHT)
                       {
                            flash_write((char *)0x01062,TemUnlockPass2,6);  //保存新密码
                            //play("修改成功,请牢记密码");
                            play(0x00f0);
                            play(0x00f5);
                        }
                        else 
                        //play("输入有误");
                        play(0x00ff);
                  }
                  else 
                  //play("输入有误");
                  play(0x00ff);
              }
              else 
              //play("输入有误");
              play(0x00ff);
         }      
         else
         {
             if(Status == M2ERROR_MASTERFP_NOT_FOUND)
             ;
             //play("指纹库空");
             else 
              //play("比对失败");
             play(0x00ab);
          }
    }
    else 
    //play("设备故障");  
    play(0x009f);
    Status = CMDFpVerifyEnd();                        //结束比对通过后可操作的次数
}     
//-----------------------------------------------------------------
void Unlock_Pass()
{
    uchar TemUnlockPass[6];
    uchar Status1,Status2,KeyStatus;
    flash_read((char *)0x01062,UnlockPass,6);      //读出 原密码
    //play("输入密码");
    play(0x00da);
    KeyStatus = InPass(TemUnlockPass);
    if(KeyStatus == RIGHT)
    {
          Status1 = Verify(TemUnlockPass,UnlockPass,6);
          Status2 = Verify(TemUnlockPass,PrivateUnlockPass,6);  //厂家私有密码
          if((Status1 == RIGHT)||(Status2 == RIGHT))
          {
                //play("解锁成功");
                play(0x0104);
                P2OUT |= BIT3;          /* 接通引擎 */
                delay(500);
                //if(AlarmStatus == NoneAlarm)  /*在非警戒状态下才可以解锁 */
                Master_Slave(0x02);//解锁;
          }
          else 
          //play("密码错误");
          play(0x00fa);
    }
    else
    //play("输入有误");
    play(0x00ff);
}
//-----------------------------------------------------------------
void VerifyFinger()
{
    uchar Status,ID_L,ID_H;
    //play("比对模式,现比对指纹");
    play(0x0020);
    play(0x0024);
    delay(500);
    Status = CMDFpIdentify();
    ID_L = Param1_L;
    ID_H = Param1_H;
    if(Status == M2ERROR_NONE) 
    {
         //play("ID_L号使用者比对成功");
         play_number(ID_L);
         play(0x0065);
         play(0x00b0);
         VerifyFingerStatus = RIGHT;
         P2OUT |= BIT3;        /* 接通引擎 */
         delay(500);           /* 延时利于通讯 */
         //if(AlarmStatus == NoneAlarm)  /*在非警戒状态下才可以解锁 */
         Master_Slave(0x02);   /* 向执行板发出开锁命令 */
    }
    else 
    //play("比对失败"); 
    play(0x00ab);
}     
//-----------------------------------------------------------------
     
void app_function(uchar Function)
{
    switch(Function)
    {
       case 1:RegisterMaster();break;
       case 2:RegisterSlave(); break;
       case 3:DeleteFinger();  break;
       case 4:UpdatePass();    break;
       case 5:Unlock_Pass();   break;
       case 6:Config64Bit();   break;
    }
}
//------------------------------------------------------------------
void play_function(uchar NumberFunction)
{
      switch(NumberFunction)
      {
          case 1: play(0x002a);     break;//"注册车主指纹"
          case 2: play(0x0031);     break;//"注册一般用户指纹"
          case 3: play(0x0039);      break;//"删除指纹"
          case 4: play(0x003e);      break;//"修改密码"
          case 5: play(0x0045);      break;//"密码解锁"
          case 6: play(0x004c);      break;//"配置64位密码"
      }
}
//------------------------------------------------------------------
void key()
{
    uchar Function_count=1;
    uchar PlayCount=5;                /* 初始化循环播放次数为5次 */
    uchar LongKey = 0;
    uchar i;
    uchar flag = 0;
    Function_count = 0;
    if(KeyA)                       /* 确定建 */
    {
         ;
    }
    if(KeyB)                                 /* 锁车键 :短按为锁车并进入鸣叫防盗状态,长按为静音锁车 */
    {
         LongKey = 0;
         Time_count=0;
         CCTL0 |= CCIE;
         while(KeyB)
         {
             if((Time_count>=30))/*&&(!(KEYON3)))                     /* 长按进入静音防盗状态(需在引擎断电的情况下)*/
             {
                 LongKey = 1;                         /* 置位长按标志 */
                 CCTL0 &= ~CCIE;                      /* 关定时器中断 */
                 AlarmStatus = QuiteAlarm;            /* 静音防盗状态 */
                 pAlarmStatus = QuiteAlarm;  
                 FOOTBRAKFlag = 1;                    /* 恢复自动锁车门第一次踩刹车的标志*/
                 VerifyFingerStatus = ERROR;          /* 清除指纹验证通过标志利于踩刹车后自动上车门*/
                 P2OUT &= ~BIT3;                      /* 关断引擎 */
                 P2OUT |= BIT4;                       /* 尾灯亮灭间隔0.5秒 */
                 Time_count = 0;
                 CCTL0 |= CCIE;
                 while(Time_count < 5);
                 P2OUT &= ~BIT4;                       /* 尾灯灭 */
                 P2OUT &= ~BIT3;                       /* 断引擎回路 */
                 P2OUT |= BIT1;                        /* 区分锁的类型:电锁(0.7s),气锁(3s) */
                 if(LATCHTYPE)                         
                 {
                     Time_count=0;
                     while(Time_count < 7);
                     P2OUT &= ~BIT1;
                 }
                 if(!(LATCHTYPE))              /* 气锁为低 */
                 {
                      Time_count=0;
                      while(Time_count < 30);
                      P2OUT &= ~BIT1;
                 }
                 CCTL0 &= ~CCIE;
             }
         }
         if(LongKey == 0)
         {
            if((AlarmStatus == NoneAlarm)&&(!(KEYON3)))  /* 行驶中锁车 */
            {
                CCTL0 |= CCIE;
                AutoLatch = 1;         /* 置此标志表示不用自动锁车 */
                FOOTBRAKFlag = 0;
                P2OUT |= BIT1;
                if(LATCHTYPE)          /* 电锁为高 */
                {
                     Time_count=0;
                     while(Time_count < 7);
                     P2OUT &= ~BIT1;
                 }
                 if(!(LATCHTYPE))      /* 气锁为低 */
                 {
                      Time_count=0;
                      while(Time_count < 30);
                      P2OUT &= ~BIT1;
                 }
                 CCTL0 &= ~CCIE;
            }
            else
            {
                 AlarmStatus = CryAlarm;
                 pAlarmStatus = CryAlarm;    /* 以备自动恢复报警状态用 */
                 FOOTBRAKFlag = 1;        
                 VerifyFingerStatus = ERROR;
                 P2OUT &= ~BIT3;             /* 关断引擎 */
                 delay(100);
                 P2OUT &= ~BIT3;                      /* 关断引擎 */
                 P2OUT |= BIT2;              /* Cry */
                 P2OUT |= BIT4;              /* 尾灯亮 */
                 Time_count = 0;
                 CCTL0 |= CCIE;
                 while(Time_count < 3);
                 P2OUT &= ~BIT2;             /* Quite */
                 Time_count = 0;
                 while(Time_count < 2);
                 P2OUT &= ~BIT4;              /* 尾灯灭 */
                 P2OUT |= BIT1;               /* 上锁 */
                 if(LATCHTYPE)                /* 电锁为高 */
                 {
                      Time_count=0;
                      while(Time_count < 7);
                      P2OUT &= ~BIT1;
                 }
                 if(!(LATCHTYPE))             /* 气锁为低 */
                 {
                      Time_count=0;
                      while(Time_count < 30);
                      P2OUT &= ~BIT1;
                  }
                  CCTL0 &= ~CCIE;
             } 
         }
         while(KeyB)                           /*  按键松开 */
         {;}
         delay(500);
    }
    if(KeyC)                                   /* 开锁键:短按为开锁,长按为寻车  */
    {
         LongKey = 0;
         Time_count=0;
         CCTL0 |= CCIE;
         while(KeyC)
         {
             if(Time_count >= 30)                                /* 长按为寻车 */
             {
                 LongKey = 1;
                 if((AlarmStatus == NoneAlarm)&&(!(KEYON3)))      /* 行驶中紧急呼救 */
                 {
                     while(!(KeyB))                            /* 按静音键停止呼救状态 */
                     {
                          P2OUT |= BIT2;                       /* Cry */
                          P2OUT |= BIT4;                       /* 尾灯亮 */
                          Time_count=0;
                          while(Time_count < 5);
                          P2OUT &= ~BIT4;                      /* 尾灯灭 */
                          Time_count=0;
               

⌨️ 快捷键说明

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