📄 finger.c
字号:
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 + -