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

📄 finger.c

📁 this progam is used with e_lock,and so on.
💻 C
字号:
#include "Include.h"

extern unsigned char NowKey;				//当前按键
extern unsigned int  Tc;					//超时计时器
extern unsigned char Timer;					//超时计数
extern unsigned char Timer2;				//超时计数2
//extern unsigned char BellTimer;
extern unsigned char Rx_Cnt;				//串口接收计数器
extern	bit		ReceiveOK;					//数据包接收完成标志位
sbit FINGER_POWER=P1^0;						//模块电源控制,低电平有效
unsigned char FingerRecord[26];				//指纹记录数组,每位代表对应编号指纹有无
unsigned char xdata CommBuf[MAX_BUF_NUMBER];//串口缓冲
unsigned char xdata SCC;					//串口接收和校验
//打开模块电源

void FingerOn(void)
{
        FINGER_POWER=0;
        DelayNuS(10);
}
//关闭模块电源
void FingerOff(void)
{
        FINGER_POWER=1;
        DelayNuS(10);
}
//初始化
void FingerInit(void)
{
        UARTInit();
        FingerOff();

        memset(FingerRecord,0,sizeof(FingerRecord));//初始化记录
}
//复位UART变量
void Clear_Uart_Variable(void)
{
		ReceiveOK = 0;
		Rx_Cnt = 0;	
}

//发送命令
//内含编码
//入口参数:
//      BaoBS:包标识
//      Number:包内容长度
//      p:待发包内容
//返回值:
//      1:操作成功
//      0:参数错误
//      2:超时
unsigned char SendCommand(unsigned char BaoBS,unsigned char Number,unsigned char *p)
{
        unsigned char i = 0;	   //发送一个数据包:'M'+'X'+BaoBS+Number+&p+SUM
        unsigned char Sum = 0;
        unsigned char* pt = p;

        if(Number>MAX_LR_NUMBER)
        {
                return FALSE;//参数错误
        }

        //发送包头
        UARTSendByte('M');
        Sum += 'M';
        UARTSendByte('X');
        Sum += 'X';

        //发送包标识
        UARTSendByte(BaoBS);
        Sum += BaoBS;

        //发送包长度
        UARTSendByte(Number);
        Sum += Number;

        //发送包内容
        for(i = 0;i<Number;i++)
        {
                UARTSendByte(*p);
                Sum += *p;
                p++;
        }
        //发送校验和
        UARTSendByte(Sum);
		return	0;
}

//清空指纹
//返回值:
//      OK:操作成功
//      其它:通讯错误
unsigned char EmptyFinger(void)
{
        unsigned char Command = C_EMPTY_FINGER;

		Clear_Uart_Variable();
		SendCommand(C_COMMAND,1,&Command);

		Tc = 2;
		while(!ReceiveOK&&Tc);
		Clear_Uart_Variable();
		if(0==Tc)	return	FALSE;

		if(SCC==CommBuf[CommBuf[3]+4])				//数据包和校验判断
		{
			if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
			{
				;	
			}
			else
			{
				return	ANSWER_NUMBER_E;
			}
		}
		else
		{
			return	C_GET_FAIL;
		}

		Tc = 2;
		while(!ReceiveOK&&Tc);
		Clear_Uart_Variable();
		if(0==Tc)	return	FALSE;

		if(SCC==CommBuf[CommBuf[3]+4]) 					//数据包和校验判断
		{
			if((C_ANSWER==CommBuf[2])&&(C_EMPTY_FINGER==CommBuf[4]))
			{				
				return OK;	
			}
			else
			{
				return	ANSWER_NUMBER_E;
			}
		}
		else
		{
			return	C_GET_FAIL;
		}

        return FALSE;
}

//写Flash
//入口参数:
//      p:待写数据存放地址
//      Number:读取个数
//      AddrH:地址高字节
//      AddrL:地址低字节
//返回值:
//      OK:操作成功
//      其它:通讯错误
unsigned char WriteFingerFlash(unsigned char *p,unsigned char Number,unsigned char AddrH,unsigned char AddrL)
{
        CommBuf[0] = C_WRITE_FLASH;
        CommBuf[1] = AddrH;
        CommBuf[2] = AddrL;
        CommBuf[3] = Number;

        memcpy(&CommBuf[4],p,Number);

		Clear_Uart_Variable();
		SendCommand(C_COMMAND,Number+4,CommBuf);

		Tc = 2;
		while(!ReceiveOK&&Tc);
		Clear_Uart_Variable();
		if(0==Tc)	return	FALSE;

		if(SCC==CommBuf[CommBuf[3]+4])				//数据包和校验判断
		{
			if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
			{
				;	
			}
			else
			{
				return	ANSWER_NUMBER_E;
			}
		}
		else
		{
			return	C_GET_FAIL;
		}

		Tc = 2;
		while(!ReceiveOK&&Tc);
		Clear_Uart_Variable();
		if(0==Tc)	return	FALSE;

		if(SCC==CommBuf[CommBuf[3]+4])					//数据包和校验判断
		{
			if((C_ANSWER==CommBuf[2])&&(C_WRITE_FLASH==CommBuf[4]))
			{				
				return OK;	
			}
			else
			{
				return	ANSWER_NUMBER_E;
			}
		}
		else
		{
			return	C_GET_FAIL;
		}

        return FALSE;
}

//读Flash
//入口参数:
//      p:读取数据存放地址
//      Number:读取个数
//      AddrH:地址高字节
//      AddrL:地址低字节
//返回值:
//      OK:操作成功
//      其它:通讯错误
unsigned char ReadFingerFlash(unsigned char *p,unsigned char Number,unsigned char AddrH,unsigned char AddrL)
{
        unsigned char Command = C_READ_FLASH; 

        CommBuf[0] = C_READ_FLASH;
        CommBuf[1] = AddrH;
        CommBuf[2] = AddrL;
        CommBuf[3] = Number;
		//发送读Flash指令
		Clear_Uart_Variable();
		SendCommand(C_COMMAND,4,CommBuf);

		//等待接收正确接收返回
		Tc = 2;
		while(!ReceiveOK&&Tc);
		Clear_Uart_Variable();
		if(0==Tc)	return	FALSE;

		if(SCC==CommBuf[CommBuf[3]+4]) 				//数据包和校验判断
		{
			if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
			{
				;	
			}
			else
			{
				return	ANSWER_NUMBER_E;
			}
		}
		else
		{
			return	C_GET_FAIL;
		}

		//等待返回数据
		Tc = 2;
		while(!ReceiveOK&&Tc);
		Clear_Uart_Variable();
		if(0==Tc)	return	FALSE;

		if(SCC==CommBuf[CommBuf[3]+4]) 					//数据包和校验判断
		{
			if((C_ANSWER==CommBuf[2])&&(C_READ_FLASH==CommBuf[4]))
			{
                memcpy(p,&CommBuf[5],Number);//复制数据					
				return OK;	
			}
			else
			{
				return	ANSWER_NUMBER_E;
			}
		}
		else
		{
			return	C_GET_FAIL;
		}

        return FALSE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -