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

📄 module.c

📁 this progam is used with e_lock,and so on.
💻 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 + -