- view source
- print?
- 001.
- #include "stm32f10x.h"
- 002.
- #include "stm32f10x_usart.h"
- 003.
- #include "misc.h"
- 004.
- unsigned
- char
- dat[18];
- 005.
- 006.
- //FINGERPRINT通信协议定义
- 007.
- unsigned
- char
- FP_Pack_Head[6] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF};
- //协议包头
- 008.
- unsigned
- char
- FP_Get_Img[6] = {0x01,0x00,0x03,0x01,0x0,0x05};
- //获得指纹图像
- 009.
- unsigned
- char
- FP_Templete_Num[6] ={0x01,0x00,0x03,0x1D,0x00,0x21 };
- //获得模版总数
- 010.
- unsigned
- char
- FP_Search[11]={0x01,0x0,0x08,0x04,0x01,0x0,0x0,0x03,0xA1,0x0,0xB2};
- //搜索指纹搜索范围0 - 929
- 011.
- unsigned
- char
- FP_Search_0_9[11]={0x01,0x0,0x08,0x04,0x01,0x0,0x0,0x0,0x13,0x0,0x21};
- //搜索0-9号指纹
- 012.
- unsigned
- char
- FP_Img_To_Buffer1[7]={0x01,0x0,0x04,0x02,0x01,0x0,0x08};
- //将图像放入到BUFFER1
- 013.
- unsigned
- char
- FP_Img_To_Buffer2[7]={0x01,0x0,0x04,0x02,0x02,0x0,0x09};
- //将图像放入到BUFFER2
- 014.
- unsigned
- char
- FP_Reg_Model[6]={0x01,0x0,0x03,0x05,0x0,0x09};
- //将BUFFER1跟BUFFER2合成特征模版
- 015.
- unsigned
- char
- FP_Delet_All_Model[6]={0x01,0x0,0x03,0x0d,0x00,0x11};
- //删除指纹模块里所有的模版
- 016.
- unsigned
- char
- FP_Save_Finger[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0B,0x00,0x19};
- //将BUFFER1中的特征码存放到指定的位置
- 017.
- unsigned
- char
- FP_Delete_Model[10]={0x01,0x00,0x07,0x0C,0x0,0x0,0x0,0x1,0x0,0x0};
- //删除指定的模版
- 018.
- 019.
- 020.
- //从 USART1 发送一个字节
- 021.
- void
- USART1_SendByte(unsigned
- char
- temp)
- 022.
- {
- 023.
- USART_SendData(USART1, temp);
- 024.
- while
- (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
- 025.
- }
- 026.
- 027.
- //从 USART1 读取一个字节
- 028.
- unsigned
- char
- USART1_ReceivByte()
- 029.
- {
- 030.
- unsigned
- char
- recev;
- 031.
- while
- (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
- 032.
- recev = USART_ReceiveData(USART1);
- 033.
- return
- recev;
- 034.
- }
- 035.
- //FINGERPRINT命令字
- 036.
- //FINGERPRINT_获得指纹图像命令
- 037.
- void
- FINGERPRINT_Cmd_Get_Img(
- void
- )
- 038.
- {
- 039.
- unsigned
- char
- i;
- 040.
- 041.
- for
- (i=0;i<6;i++)
- //发送包头
- 042.
- USART1_SendByte(FP_Pack_Head[i]);
- 043.
- 044.
- for
- (i=0;i<6;i++)
- //发送命令 0x1d
- 045.
- USART1_SendByte(FP_Get_Img[i]);
- 046.
- 047.
- for
- (i=0;i<12;i++)
- //读回应答信息
- 048.
- dat[i]=USART1_ReceivByte();
- 049.
- }
- 050.
- 051.
- //删除所有指纹模版
- 052.
- void
- FINGERPRINT_Cmd_Delete_All_Model(
- void
- )
- 053.
- {
- 054.
- unsigned
- char
- i;
- 055.
- 056.
- for
- (i=0;i<6;i++)
- //发送包头
- 057.
- USART1_SendByte(FP_Pack_Head[i]);
- 058.
- 059.
- for
- (i=0;i<6;i++)
- //发送命令 0x1d
- 060.
- USART1_SendByte(FP_Delet_All_Model[i]);
- 061.
- 062.
- for
- (i=0;i<12;i++)
- //读回应答信息
- 063.
- dat[i]=USART1_ReceivByte();
- 064.
- }
- 065.
- 066.
- //讲图像转换成特征码存放在Buffer1中
- 067.
- void
- FINGERPRINT_Cmd_Img_To_Buffer1(
- void
- )
- 068.
- {
- 069.
- unsigned
- char
- i;
- 070.
- for
- (i=0;i<6;i++)
- //发送包头
- 071.
- {
- 072.
- USART1_SendByte(FP_Pack_Head[i]);
- 073.
- }
- 074.
- for
- (i=0;i<7;i++)
- //发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
- 075.
- {
- 076.
- USART1_SendByte(FP_Img_To_Buffer1[i]);
- 077.
- }
- 078.
- for
- (i=0;i<12;i++)
- //读应答信息
- 079.
- {
- 080.
- dat[i]=USART1_ReceivByte();
- //把应答数据存放到缓冲区
- 081.
- }
- 082.
- }
- 083.
- 084.
- //将图像转换成特征码存放在Buffer2中
- 085.
- void
- FINGERPRINT_Cmd_Img_To_Buffer2(
- void
- )
- 086.
- {
- 087.
- unsigned
- char
- i;
- 088.
- for
- (i=0;i<6;i++)
- //发送包头
- 089.
- {
- 090.
- USART1_SendByte(FP_Pack_Head[i]);
- 091.
- }
- 092.
- 093.
- for
- (i=0;i<7;i++)
- //发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
- 094.
- {
- 095.
- USART1_SendByte(FP_Img_To_Buffer2[i]);
- 096.
- }
- 097.
- for
- (i=0;i<12;i++)
- 098.
- {
- 099.
- dat[i]=USART1_ReceivByte();
- //读回应答信息
- 100.
- }
- 101.
- }
- 102.
- 103.
- //将BUFFER1 跟 BUFFER2 中的特征码合并成指纹模版
- 104.
- void
- FINGERPRINT_Cmd_Reg_Model(
- void
- )
- 105.
- {
- 106.
- unsigned
- char
- i;
- 107.
- 108.
- for
- (i=0;i<6;i++)
- //包头
- 109.
- {
- 110.
- USART1_SendByte(FP_Pack_Head[i]);
- 111.
- }
- 112.
- 113.
- for
- (i=0;i<6;i++)
- //命令合并指纹模版
- 114.
- {
- 115.
- USART1_SendByte(FP_Reg_Model[i]);
- 116.
- }
- 117.
- 118.
- for
- (i=0;i<12;i++)
- 119.
- {
- 120.
- dat[i]=USART1_ReceivByte();
- 121.
- }
- 122.
- }
- 123.
- 124.
- //存储模版到特定地址
- 125.
- void
- FINGERPRINT_Cmd_Save_Finger( unsigned
- char
- ucH_Char, unsigned
- char
- ucL_Char)
- 126.
- {
- 127.
- unsigned
- long
- temp = 0;
- 128.
- unsigned
- char
- i;
- 129.
- 130.
- FP_Save_Finger[5] = ucH_Char;
- 131.
- FP_Save_Finger[6] = ucL_Char;
- 132.
- 133.
- 134.
- for
- (i=0;i<7;i++)
- //计算校验和
- 135.
- temp = temp + FP_Save_Finger[i];
- 136.
- 137.
- FP_Save_Finger[7]=(temp & 0x00FF00) >> 8;
- //存放校验数据
- 138.
- FP_Save_Finger[8]= temp & 0x0000FF;
- 139.
- 140.
- 141.
- for
- (i=0;i<6;i++)
- 142.
- USART1_SendByte(FP_Pack_Head[i]);
- //发送包头
- 143.
- 144.
- for
- (i=0;i<9;i++)
- 145.
- USART1_SendByte(FP_Save_Finger[i]);
- //发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
- 146.
- 147.
- for
- (i=0;i<12;i++)
- 148.
- dat[i]=USART1_ReceivByte();
- 149.
- }
- 150.
- 151.
- //获得指纹模板数量
- 152.
- void
- FINGERPRINT_Cmd_Get_Templete_Num(
- void
- )
- 153.
- {
- 154.
- unsigned
- int
- i;
- 155.
- 156.
- for
- (i=0;i<6;i++)
- //包头
- 157.
- USART1_SendByte(FP_Pack_Head[i]);
- 158.
- 159.
- //发送命令 0x1d
- 160.
- for
- (i=0;i<6;i++)
- 161.
- USART1_SendByte(FP_Templete_Num[i]);
- 162.
- 163.
- for
- (i=0;i<12;i++)
- 164.
- dat[i]=USART1_ReceivByte();
- 165.
- }
- 166.
- 167.
- //搜索全部用户999枚
- 168.
- void
- FINGERPRINT_Cmd_Search_Finger(
- void
- )
- 169.
- {
- 170.
- unsigned
- char
- i;
- 171.
- //发送命令搜索指纹库
- 172.
- for
- (i=0;i<6;i++)
- 173.
- {
- 174.
- USART1_SendByte(FP_Pack_Head[i]);
- 175.
- }
- 176.
- 177.
- for
- (i=0;i<11;i++)
- 178.
- {
- 179.
- USART1_SendByte(FP_Search[i]);
- 180.
- }
- 181.
- 182.
- for
- (i=0;i<16;i++)
- 183.
- {
- 184.
- dat[i]=USART1_ReceivByte();
- 185.
- }
- 186.
- }
- 187.
- 188.
- //搜索用户0~9枚
- 189.
- void
- FINGERPRINT_Cmd_Search_Finger_Admin(
- void
- )
- 190.
- {
- 191.
- unsigned
- char
- i;
- 192.
- for
- (i=0;i<6;i++)
- //发送命令搜索指纹库
- 193.
- {
- 194.
- USART1_SendByte(FP_Pack_Head[i]);
- 195.
- }
- 196.
- 197.
- for
- (i=0;i<11;i++)
- 198.
- {
- 199.
- USART1_SendByte(FP_Search_0_9[i]);
- 200.
- }
- 201.
- 202.
- for
- (i=0;i<12;i++)
- 203.
- dat[i]=USART1_ReceivByte();
- 204.
- }
- 205.
- 206.
- //添加一个新的指纹
- 207.
- unsigned
- char
- FP_add_new_user(unsigned
- char
- ucH_user,unsigned
- char
- ucL_user)
- 208.
- {
- 209.
- do
- 210.
- {
- 211.
- FINGERPRINT_Cmd_Get_Img();
- //获得指纹图像
- 212.
- }
- while
- ( dat[9]!=0x0 );
- //检测是否成功的按了指纹
- 213.
- 214.
- FINGERPRINT_Cmd_Img_To_Buffer1();
- //将图像转换成特征码存放在Buffer1中
- 215.
- 216.
- do
- 217.
- {
- 218.
- FINGERPRINT_Cmd_Get_Img();
- //获得指纹图像
- 219.
- }
- while
- ( dat[9]!=0x0 );
- 220.
- 221.
- FINGERPRINT_Cmd_Img_To_Buffer2();
- //将图像转换成特征码存放在Buffer2中
- 222.
- 223.
- FINGERPRINT_Cmd_Reg_Model();
- //转换成特征码
- 224.
- 225.
- FINGERPRINT_Cmd_Save_Finger(ucH_user,ucL_user);
- 226.
- 227.
- return
- 0;
- 228.
- }