📄 module.c
字号:
#include "Include.h"
extern uchar FingerRecord[26];//指纹记录数组,每位代表对应编号指纹有无
extern uchar xdata CommBuf[MAX_BUF_NUMBER];//串口缓冲
extern uchar xdata SCC;//串口接收和校验
extern uchar BellTimer;
extern uint Tc;//超时计时器
extern uchar NowKey;//当前按键
extern bit ReceiveOK;//数据包接收完成标志位
/**********************************/
bit Add_Deal = 0; //线程标志位1
bit Add_Deal2 = 0; //线程标志位2
bit Add_Deal3 = 0; //线程标志位3
/**********************************/
//显示操作成功
//P00,P02和PO4交错闪烁4次
void DisplayOK(void)
{ uchar i = 0;
for(i=0;i<4;i++)
{ BellOn();
LedBlueOn();
LedRedOff();
DelayNmS(250);
BellOff();
LedBlueOff();
LedRedOn();
DelayNmS(250);
}
LedRedOff();}
//显示操作失败
//P04闪烁2次
void DisplayFail(void)
{ uchar i = 0;
for(i=0;i<2;i++)
{ BellOn();
LedRedOff();
DelayNmS(250);
BellOff();
LedRedOn();
DelayNmS(250);}
LedRedOff();}
//显示通讯错误
//P02P04闪烁4次
void DisplayErr(void)
{ uchar i = 0;
for(i=0;i<4;i++)
{ BellOn();
LedRedOn();
DelayNmS(250);
BellOff();
LedRedOff();
DelayNmS(250);}
}
//显示超时
//P00,P02和P04同时闪烁2次
void DisplayOutTime(void)
{ uchar i = 0;
for(i=0;i<2;i++)
{ BellOn();
LedBlueOn();
LedRedOn();
DelayNmS(250);
BellOff();
LedBlueOff();
LedRedOff();
DelayNmS(250);}}
//显示一次操作成功
//P00,P02和P04流水一次
void DisplayWater(void)
{ LedBlueOn();
DelayNmS(250);//1
LedBlueOff();
BellOn();
DelayNmS(250);//2
BellOff();
LedRedOn();
DelayNmS(250);//3
LedRedOff();
}
//显示提示按下指纹
//P02先闪烁一次,P00,P02和P04闪烁一次
void DisplayFinger(void)
{ BellOn();
DelayNmS(250);//1
BellOff();
DelayNmS(250);//2
BellOn();
LedRedOn();
LedBlueOn();
DelayNmS(250);//3
BellOff();
LedRedOff();
LedBlueOff();}
//清空指纹库
//1号键,将指纹与现有指纹库对比,成功开门,否则不动作。
void SearchFingerModule(void)
{ if(!Add_Deal)
{ FingerOn();
BellOn();
DelayNmS(200);
BellOff();
CommBuf[0] = C_SEARCH_FINGER;
CommBuf[1] = 0;
CommBuf[2] = 0;
CommBuf[3] = 0;
CommBuf[4] = MAX_FINGER;//最大指纹数
Clear_Uart_Variable();
SendCommand(C_COMMAND,5,CommBuf);//发送搜索命令
//等待接收返回
Tc = 2;
while(!ReceiveOK&&Tc);
Clear_Uart_Variable();
if((SCC==CommBuf[CommBuf[3]+4])&&Tc) //数据包和校验判断 和 接收超时判断
{ if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
{ Add_Deal = 1;Add_Deal2 = 1;}
else{Add_Deal = 0;
Add_Deal2 = 0;
DisplayErr();
FingerOff();
NowKey = NO_KEY;
return;}}
else{
Add_Deal = 0;
Add_Deal2 = 0;
DisplayErr();
FingerOff();
NowKey = NO_KEY;
return;}}
//探测手指
if(Add_Deal2&&ReceiveOK){
Clear_Uart_Variable();
if(SCC==CommBuf[CommBuf[3]+4]){//数据包和校验判断
if((C_ANSWER == CommBuf[2])&&(0x02 == CommBuf[3])&&(C_SEARCH_FINGER == CommBuf[4]))
{ //接收正确
switch(CommBuf[5])
{ //指纹处理成功
case ANSWER_OK:
BellOn();
BellTimer = 6;//中断中关闭Bell
Add_Deal2 = 0;
Add_Deal3 = 1;
break;
case ANSWER_OUT_TIME:
DisplayOutTime();
break;
case ANSWER_FAIL:
case ANSWER_NUMBER_E:
DisplayFail();//增加失败
break;
}
if(Add_Deal2)
{ Add_Deal = 0;
Add_Deal2 = 0;
FingerOff();
NowKey = NO_KEY;
return;}}
else{ Add_Deal = 0;
Add_Deal2 = 0;
DisplayErr();
FingerOff();
NowKey = NO_KEY;
return;}}
else{
Add_Deal = 0;
Add_Deal2 = 0;
DisplayErr();
FingerOff();
NowKey = NO_KEY;
return;}}
//等待搜索结果
if(Add_Deal3&&ReceiveOK)
{ Add_Deal3 = 0;
Add_Deal = 0;
if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
{ if((C_ANSWER == CommBuf[2])&&(C_SEARCH_FINGER == CommBuf[4]))
{ //接收正确
switch(CommBuf[5])
{ //指纹处理成功
case ANSWER_SEARCH_OK:
leftmotor();
DisplayOK();
INITmotor();
break;
case ANSWER_OUT_TIME:
DisplayOutTime();
break;
case ANSWER_FAIL:
case ANSWER_SEARCH_FAIL:
DisplayFail();//增加失败
break;}}
else DisplayErr();}
else DisplayErr();
FingerOff();
NowKey = NO_KEY;}}
//2号键具有的功能,添加管理员
void Add_Adm(void)
{
if(NOFINGER==Find_Finger())
{ AddFingerModule();//如果没有记录在(0,0)处,添加一个指纹到(0,0)处
NowKey = NO_KEY;
FingerOff();}
if(OK==Find_Finger())
{ /*相应语音提示*/
if(OK==Search_Super_Adm())
{ AddFinger_Adm();//增加一般管理员指纹信息
NowKey = NO_KEY;
DisplayWater();
FingerOff();}
else { FingerOff();
NowKey = NO_KEY;}}}
//查找高级管理员
//返回值:
//OK:找到对应的指纹信息
//其他:出错了
uchar Search_Super_Adm(void)
{ if(!Add_Deal)
{ FingerOn();
CommBuf[0] = C_SEARCH_FINGER;//0x44搜索指纹
CommBuf[1] = 0;
CommBuf[2] = 0;
CommBuf[3] = 0;
CommBuf[4] = 0;//高级管理员
Clear_Uart_Variable();
SendCommand(C_COMMAND,5,CommBuf);//发送搜索命令
//等待接收返回
Tc = 2;
while(!ReceiveOK&&Tc);
Clear_Uart_Variable();
if((SCC==CommBuf[CommBuf[3]+4])&&Tc)//数据包和校验判断 和 接收超时判断
{
if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))//正确
{ Add_Deal = 1;
Add_Deal2 = 1;}
else{
Add_Deal = 0;
Add_Deal2 = 0;
FingerOff();
return FALSE;}}
else{
Add_Deal = 0;
Add_Deal2 = 0;
FingerOff();
return FALSE;}}
//探测手指
if(Add_Deal2&&ReceiveOK)
{ Clear_Uart_Variable();
if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
{ if((C_ANSWER == CommBuf[2])&&(0x02 == CommBuf[3])&&(C_SEARCH_FINGER == CommBuf[4]))
{ //接收正确
switch(CommBuf[5])
{ //指纹处理成功
case ANSWER_OK://0X31
/*提示声音*/
Add_Deal2 = 0;
Add_Deal3 = 1;
break;
case ANSWER_OUT_TIME:
FingerOff();
return FALSE;
case ANSWER_FAIL:
case ANSWER_NUMBER_E:
FingerOff();
return FALSE;}
if(Add_Deal2){
Add_Deal = 0;
Add_Deal2 = 0;
FingerOff();
return FALSE;}}else{
Add_Deal = 0;
Add_Deal2 = 0;
FingerOff();
return FALSE;}} else{
Add_Deal = 0;
Add_Deal2 = 0;
FingerOff();
return FALSE;}}
//等待搜索结果
if(Add_Deal3&&ReceiveOK)
{ Add_Deal3 = 0;
Add_Deal = 0;
if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
{ if((C_ANSWER == CommBuf[2])&&(C_SEARCH_FINGER == CommBuf[4]))
{//接收正确
switch(CommBuf[5])
{ //指纹处理成功
case ANSWER_SEARCH_OK:DisplayFinger();//提示按指纹
return OK;
case ANSWER_OUT_TIME:
FingerOff();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -