📄 module.c
字号:
#include "Include.h"
extern unsigned char FingerRecord[26]; //指纹记录数组,每位代表对应编号指纹有无
extern unsigned char xdata CommBuf[MAX_BUF_NUMBER]; //串口缓冲
extern unsigned char xdata SCC; //串口接收和校验
//extern unsigned char BellTimer;
extern unsigned int Tc; //超时计时器
extern unsigned char NowKey; //当前按键
extern bit ReceiveOK; //数据包接收完成标志位
/**********************************/
bit Add_Deal = 0; //线程标志位1
bit Add_Deal2 = 0; //线程标志位2
bit Add_Deal3 = 0; //线程标志位3
/**********************************/
//显示操作成功
void DisplayOK(void)
{
unsigned char i = 0;
for(i=0;i<4;i++)
{
// BellOn();
LedBlueOn();
LedRedOff();
DelayNmS(200);
// BellOff();
LedBlueOff();
LedRedOn();
DelayNmS(200);
}
LedRedOff();
}
//显示操作失败
void DisplayFail(void)
{
unsigned char i = 0;
for(i=0;i<2;i++)
{
// BellOn();
LedRedOff();
DelayNmS(200);
// BellOff();
LedRedOn();
DelayNmS(200);
}
LedRedOff();
}
//显示通讯错误
void DisplayErr(void)
{
unsigned char i = 0;
for(i=0;i<2;i++)
{
// BellOn();
LedRedOn();
DelayNmS(200);
// BellOff();
LedRedOff();
DelayNmS(200);
}
}
//显示超时
void DisplayOutTime(void)
{
unsigned char i = 0;
for(i=0;i<2;i++)
{
// BellOn();
LedBlueOn();
LedRedOn();
DelayNmS(200);
// BellOff();
LedBlueOff();
LedRedOff();
DelayNmS(200);
}
}
//清空指纹库
void EmptyFingerModule(void)
{
//1 指纹标识全部清零
memset(FingerRecord,0,sizeof(FingerRecord));
FingerOn();
// BellOn();DelayNmS(200);BellOff();
//2 写入模块Flash中
if(OK == WriteFingerFlash(FingerRecord,sizeof(FingerRecord),0,0))
{
}
else
{
DisplayErr();
FingerOff();
return;
}
//3 清空指纹库
if(OK == EmptyFinger())
{
DisplayOK();
}
else
{
DisplayErr();
}
FingerOff();
}
void SearchFingerModule(void)
{
unsigned char SearchResult = 0;
unsigned char SearchReturn = 0;
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:
DisplayOK();
break;
case ANSWER_OUT_TIME:
DisplayOutTime();
break;
case ANSWER_FAIL:
case ANSWER_SEARCH_FAIL:
DisplayFail();//增加失败
break;
}
}
else
{
DisplayErr();
}
}
else
{
DisplayErr();
}
FingerOff();
NowKey = NO_KEY;
}
}
void AddFingerModule(void)
{
static unsigned char i;
static unsigned char AH;//字节号
static unsigned char AL;//位号
unsigned char t = 0;
if(!Add_Deal)
{
FingerOn();
// BellOn();DelayNmS(200);BellOff();
//1 读取模块Flash
if(ReadFingerFlash(FingerRecord,sizeof(FingerRecord),0,0) != OK)
{
DisplayErr();
FingerOff();
NowKey = NO_KEY;
return;
}
//2 寻找下一个空位
for(i = 0;i<MAX_FINGER;i++)
{
AH = i/8;
AL = i%8;
t = FingerRecord[AH]<<(7-AL);
t = t>>7;
if(0 == t)
{
//找到空位
break;
}
}
if(i == MAX_FINGER)
{
//记录已满
DisplayErr();
FingerOff();
NowKey = NO_KEY;
return;
}
//发送ADD指令
CommBuf[0] = C_ADD_FINGER;
CommBuf[1] = 0;
CommBuf[2] = i;
Clear_Uart_Variable();
SendCommand(C_COMMAND,3,CommBuf);//发送增加指纹命令
//等待正确返回
Tc = 2;
while(!ReceiveOK&&Tc);
Clear_Uart_Variable();
if((SCC==CommBuf[CommBuf[3]+4])&&Tc) //数据包和校验判断 和 接收超时判断
{
if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
{
//返回正确
//UARTSendByte(0xFF);
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_ADD_FINGER == CommBuf[4]))
{
//接收正确
//UARTSendByte(0xFC);
switch(CommBuf[5])
{
case ANSWER_OK:
// BellOn();
// BellTimer = 6;//中断中关闭Bell
PLAY_A();
Add_Deal2 = 0;
Add_Deal3 = 1;
break;
case ANSWER_OUT_TIME:
DisplayOutTime();
break;
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;
Clear_Uart_Variable();
if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
{
if((C_ANSWER == CommBuf[2])&&(0x02 == CommBuf[3])&&(C_ADD_FINGER == CommBuf[4]))
{
//接收正确
switch(CommBuf[5])
{
case ANSWER_OK:
DisplayOK();
//4 更改指纹记录
for(i = 0;i<MAX_FINGER;i++)
{
AH = i/8;
AL = i%8;
t = FingerRecord[AH]<<(7-AL);
t = t>>7;
if(0 == t)
{
//找到空位
break;
}
}
FingerRecord[AH] |= 1<<AL;
t = WriteFingerFlash(FingerRecord,sizeof(FingerRecord),0,0);
UARTSendByte(t);
if(OK == t)
{
PLAY_A();
}
else
{
DisplayErr();
}
break;
case ANSWER_OUT_TIME:
DisplayOutTime();
break;
case ANSWER_FAIL:
case ANSWER_NUMBER_E:
DisplayFail();//增加失败
break;
}
}
else
{
DisplayErr();
}
}
else
{
DisplayErr();
}
FingerOff();
NowKey = NO_KEY;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -