📄 finger.lst
字号:
C51 COMPILER V8.02 FINGER 12/04/2008 06:31:01 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE FINGER
OBJECT MODULE PLACED IN Finger.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Finger.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "Include.h"
2
3 extern uchar NowKey;//当前按键
4 extern uint Tc;//超时计时器
5 extern uchar Timer;//超时计数
6 extern uchar Timer2;//超时计数2
7 extern uchar BellTimer;
8 extern uchar Rx_Cnt;//串口接收计数器
9 extern bit ReceiveOK;//数据包接收完成标志位
10 sbit FINGER_POWER=P1^0;//模块电源控制,低电平有效
11 unsigned char FingerRecord[26];//指纹记录数组,每位代表对应编号指纹有无
12 unsigned char xdata CommBuf[MAX_BUF_NUMBER];//串口缓冲
13 unsigned char xdata SCC;//串口接收和校验
14 //打开模块电源
15 void FingerOn(void)
16 {
17 1 FINGER_POWER=0;
18 1 DelayNuS(10);}
19 //关闭模块电源
20 void FingerOff(void)
21 { FINGER_POWER=1;
22 1 DelayNuS(10);}
23 //初始化
24 void FingerInit(void)
25 { UARTInit();
26 1 FingerOff();
27 1 memset(FingerRecord,0,sizeof(FingerRecord));}//初始化记录
28 //复位UART变量
29 void Clear_Uart_Variable(void)
30 { ReceiveOK = 0;Rx_Cnt = 0;}
31 //发送命令
32 //内含编码
33 //入口参数:
34 // BaoBS:包标识
35 // Number:包内容长度
36 // p:待发包内容
37 //返回值:
38 // 1:操作成功
39 // 0:参数错误
40 // 2:超时
41 uchar SendCommand(uchar BaoBS,uchar Number,uchar *p)
42 {
43 1 uchar i = 0;
44 1 uchar Sum = 0;
45 1 uchar* pt = p;
46 1 if(Number>MAX_LR_NUMBER)return FALSE;//参数错误
47 1 //发送包头
48 1 UARTSendByte('M');
49 1 Sum += 'M';
50 1 UARTSendByte('X');
51 1 Sum += 'X';
52 1 //发送包标识
53 1 UARTSendByte(BaoBS);
54 1 Sum += BaoBS;
55 1 //发送包长度
C51 COMPILER V8.02 FINGER 12/04/2008 06:31:01 PAGE 2
56 1 UARTSendByte(Number);
57 1 Sum += Number;
58 1 //发送包内容
59 1 for(i = 0;i<Number;i++)
60 1 { UARTSendByte(*p);
61 2 Sum += *p;
62 2 p++;}
63 1 //发送校验和
64 1 UARTSendByte(Sum);
65 1 return 0;}
66 //清空指纹
67 //返回值:
68 // OK:操作成功
69 // 其它:通讯错误
70 uchar EmptyFinger(void)
71 {
72 1 uchar Command = C_EMPTY_FINGER;
73 1 Clear_Uart_Variable();
74 1 SendCommand(C_COMMAND,1,&Command);
75 1 Tc = 2;
76 1 while(!ReceiveOK&&Tc);
77 1 Clear_Uart_Variable();
78 1 if(0==Tc) return FALSE;
79 1 if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
80 1 { if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]));
81 2 else return ANSWER_NUMBER_E;}
82 1 else return C_GET_FAIL;
83 1 Tc = 2;
84 1 while(!ReceiveOK&&Tc);
85 1 Clear_Uart_Variable();
86 1 if(0==Tc) return FALSE;
87 1 if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
88 1 { if((C_ANSWER==CommBuf[2])&&(C_EMPTY_FINGER==CommBuf[4]))return OK;
89 2 else return ANSWER_NUMBER_E;}
90 1 else{return C_GET_FAIL;}
91 1 return FALSE;}
92 //写Flash
93 //入口参数:
94 // p:待写数据存放地址
95 // Number:读取个数
96 // AddrH:地址高字节
97 // AddrL:地址低字节
98 //返回值:
99 // OK:操作成功
100 // 其它:通讯错误
101 uchar WriteFingerFlash(uchar *p,uchar Number,uchar AddrH,uchar AddrL)
102 { CommBuf[0] = C_WRITE_FLASH;
103 1 CommBuf[1] = AddrH;
104 1 CommBuf[2] = AddrL;
105 1 CommBuf[3] = Number;
106 1 memcpy(&CommBuf[4],p,Number);
107 1 Clear_Uart_Variable();
108 1 SendCommand(C_COMMAND,Number+4,CommBuf);
109 1 Tc = 2;
110 1 while(!ReceiveOK&&Tc);
111 1 Clear_Uart_Variable();
112 1 if(0==Tc) return FALSE;
113 1 if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
114 1 { if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]));
115 2 else return ANSWER_NUMBER_E;}
116 1 else return C_GET_FAIL;
117 1 Tc = 2;
C51 COMPILER V8.02 FINGER 12/04/2008 06:31:01 PAGE 3
118 1 while(!ReceiveOK&&Tc);
119 1 Clear_Uart_Variable();
120 1 if(0==Tc) return FALSE;
121 1 if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
122 1 { if((C_ANSWER==CommBuf[2])&&(C_WRITE_FLASH==CommBuf[4]))return OK;
123 2 else return ANSWER_NUMBER_E;}
124 1 else return C_GET_FAIL;
125 1 return FALSE;}
126
127 //读Flash
128 //入口参数:
129 // p:读取数据存放地址
130 // Number:读取个数
131 // AddrH:地址高字节
132 // AddrL:地址低字节
133 //返回值:
134 // OK:操作成功
135 // 其它:通讯错误
136 uchar ReadFingerFlash(uchar *p,uchar Number,uchar AddrH,uchar AddrL)
137 {
138 1 uchar Command = C_READ_FLASH;
139 1
140 1 CommBuf[0] = C_READ_FLASH;
141 1 CommBuf[1] = AddrH;
142 1 CommBuf[2] = AddrL;
143 1 CommBuf[3] = Number;
144 1 //发送读Flash指令
145 1 Clear_Uart_Variable();
146 1 SendCommand(C_COMMAND,4,CommBuf);
147 1 //等待接收正确接收返回
148 1 Tc = 2;
149 1 while(!ReceiveOK&&Tc);
150 1 Clear_Uart_Variable();
151 1 if(0==Tc) return FALSE;
152 1 if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
153 1 { if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]));
154 2 else return ANSWER_NUMBER_E;}
155 1 else return C_GET_FAIL;
156 1 //等待返回数据
157 1 Tc = 2;
158 1 while(!ReceiveOK&&Tc);
159 1 Clear_Uart_Variable();
160 1 if(0==Tc) return FALSE;
161 1 if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
162 1 { if((C_ANSWER==CommBuf[2])&&(C_READ_FLASH==CommBuf[4]))
163 2 { memcpy(p,&CommBuf[5],Number);//复制数据
164 3 return OK;}
165 2 else return ANSWER_NUMBER_E;}
166 1 else return C_GET_FAIL;
167 1 return FALSE;}
168 //查找某一地址的记录为空与否
169 //入口参数:
170 //AddrH:高地址位
171 //AddrH:低地址位
172 //返回值:
173 //OK:有指纹
174 //NOFINGER:无指纹
175 //其他:不成功
176 uchar Find_Finger(void)
177 { FingerOn();
178 1 CommBuf[0] = C_READ_INFO;//0x4B查询指纹库信息
179 1 CommBuf[1] = 0;//高地址
C51 COMPILER V8.02 FINGER 12/04/2008 06:31:01 PAGE 4
180 1 CommBuf[2] = 0;//低地址
181 1 Clear_Uart_Variable();
182 1 SendCommand(C_COMMAND,3,CommBuf);//1.发送查询是否存在指定编号的指纹命令
183 1 //等待接收正确接收返回
184 1 Tc = 2;
185 1 while(!ReceiveOK&&Tc);
186 1 Clear_Uart_Variable();
187 1 if(0==Tc) return FALSE;
188 1 if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
189 1 { if((0x30==CommBuf[2])&&(0x01==CommBuf[4]));//2。正确接收
190 2 else return ANSWER_NUMBER_E;}
191 1 else return C_GET_FAIL;
192 1 //等待返回数据
193 1 Tc = 2;
194 1 while(!ReceiveOK&&Tc);
195 1 Clear_Uart_Variable();
196 1 if(0==Tc) return FALSE;
197 1 if(SCC==CommBuf[CommBuf[3]+4])//数据包和校验判断
198 1 {if((C_ANSWER==CommBuf[2])&&(C_READ_INFO==CommBuf[4]))//3。正确接收
199 2 { switch (CommBuf[5])
200 3 {case ANSWER_HAVE_FINGER://37
201 4 break;
202 4 case ANSWER_NUMBER_E://35
203 4 return ANSWER_NUMBER_E;
204 4 case ANSWER_NO_FINGER://38
205 4 return NOFINGER;}
206 3 return OK;}
207 2 else{return ANSWER_NUMBER_E;}}
208 1 else return C_GET_FAIL;
209 1 return FALSE;
210 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 901 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 134 ----
PDATA SIZE = ---- ----
DATA SIZE = 26 24
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -