?? 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 + -