📄 finger.lst
字号:
C51 COMPILER V7.06 FINGER 12/04/2008 15:12:02 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE FINGER
OBJECT MODULE PLACED IN Finger.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Finger.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "Include.h"
2
3 extern unsigned char NowKey; //当前按键
4 extern unsigned int Tc; //超时计时器
5 extern unsigned char Timer; //超时计数
6 extern unsigned char Timer2; //超时计数2
7 //extern unsigned char BellTimer;
8 extern unsigned char 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
16 void FingerOn(void)
17 {
18 1 FINGER_POWER=0;
19 1 DelayNuS(10);
20 1 }
21 //关闭模块电源
22 void FingerOff(void)
23 {
24 1 FINGER_POWER=1;
25 1 DelayNuS(10);
26 1 }
27 //初始化
28 void FingerInit(void)
29 {
30 1 UARTInit();
31 1 FingerOff();
32 1
33 1 memset(FingerRecord,0,sizeof(FingerRecord));//初始化记录
34 1 }
35 //复位UART变量
36 void Clear_Uart_Variable(void)
37 {
38 1 ReceiveOK = 0;
39 1 Rx_Cnt = 0;
40 1 }
41
42 //发送命令
43 //内含编码
44 //入口参数:
45 // BaoBS:包标识
46 // Number:包内容长度
47 // p:待发包内容
48 //返回值:
49 // 1:操作成功
50 // 0:参数错误
51 // 2:超时
52 unsigned char SendCommand(unsigned char BaoBS,unsigned char Number,unsigned char *p)
53 {
54 1 unsigned char i = 0; //发送一个数据包:'M'+'X'+BaoBS+Number+&p+SUM
55 1 unsigned char Sum = 0;
C51 COMPILER V7.06 FINGER 12/04/2008 15:12:02 PAGE 2
56 1 unsigned char* pt = p;
57 1
58 1 if(Number>MAX_LR_NUMBER)
59 1 {
60 2 return FALSE;//参数错误
61 2 }
62 1
63 1 //发送包头
64 1 UARTSendByte('M');
65 1 Sum += 'M';
66 1 UARTSendByte('X');
67 1 Sum += 'X';
68 1
69 1 //发送包标识
70 1 UARTSendByte(BaoBS);
71 1 Sum += BaoBS;
72 1
73 1 //发送包长度
74 1 UARTSendByte(Number);
75 1 Sum += Number;
76 1
77 1 //发送包内容
78 1 for(i = 0;i<Number;i++)
79 1 {
80 2 UARTSendByte(*p);
81 2 Sum += *p;
82 2 p++;
83 2 }
84 1 //发送校验和
85 1 UARTSendByte(Sum);
86 1 return 0;
87 1 }
88
89 //清空指纹
90 //返回值:
91 // OK:操作成功
92 // 其它:通讯错误
93 unsigned char EmptyFinger(void)
94 {
95 1 unsigned char Command = C_EMPTY_FINGER;
96 1
97 1 Clear_Uart_Variable();
98 1 SendCommand(C_COMMAND,1,&Command);
99 1
100 1 Tc = 2;
101 1 while(!ReceiveOK&&Tc);
102 1 Clear_Uart_Variable();
103 1 if(0==Tc) return FALSE;
104 1
105 1 if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
106 1 {
107 2 if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
108 2 {
109 3 ;
110 3 }
111 2 else
112 2 {
113 3 return ANSWER_NUMBER_E;
114 3 }
115 2 }
116 1 else
117 1 {
C51 COMPILER V7.06 FINGER 12/04/2008 15:12:02 PAGE 3
118 2 return C_GET_FAIL;
119 2 }
120 1
121 1 Tc = 2;
122 1 while(!ReceiveOK&&Tc);
123 1 Clear_Uart_Variable();
124 1 if(0==Tc) return FALSE;
125 1
126 1 if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
127 1 {
128 2 if((C_ANSWER==CommBuf[2])&&(C_EMPTY_FINGER==CommBuf[4]))
129 2 {
130 3 return OK;
131 3 }
132 2 else
133 2 {
134 3 return ANSWER_NUMBER_E;
135 3 }
136 2 }
137 1 else
138 1 {
139 2 return C_GET_FAIL;
140 2 }
141 1
142 1 return FALSE;
143 1 }
144
145 //写Flash
146 //入口参数:
147 // p:待写数据存放地址
148 // Number:读取个数
149 // AddrH:地址高字节
150 // AddrL:地址低字节
151 //返回值:
152 // OK:操作成功
153 // 其它:通讯错误
154 unsigned char WriteFingerFlash(unsigned char *p,unsigned char Number,unsigned char AddrH,unsigned char Add
-rL)
155 {
156 1 CommBuf[0] = C_WRITE_FLASH;
157 1 CommBuf[1] = AddrH;
158 1 CommBuf[2] = AddrL;
159 1 CommBuf[3] = Number;
160 1
161 1 memcpy(&CommBuf[4],p,Number);
162 1
163 1 Clear_Uart_Variable();
164 1 SendCommand(C_COMMAND,Number+4,CommBuf);
165 1
166 1 Tc = 2;
167 1 while(!ReceiveOK&&Tc);
168 1 Clear_Uart_Variable();
169 1 if(0==Tc) return FALSE;
170 1
171 1 if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
172 1 {
173 2 if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
174 2 {
175 3 ;
176 3 }
177 2 else
178 2 {
C51 COMPILER V7.06 FINGER 12/04/2008 15:12:02 PAGE 4
179 3 return ANSWER_NUMBER_E;
180 3 }
181 2 }
182 1 else
183 1 {
184 2 return C_GET_FAIL;
185 2 }
186 1
187 1 Tc = 2;
188 1 while(!ReceiveOK&&Tc);
189 1 Clear_Uart_Variable();
190 1 if(0==Tc) return FALSE;
191 1
192 1 if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
193 1 {
194 2 if((C_ANSWER==CommBuf[2])&&(C_WRITE_FLASH==CommBuf[4]))
195 2 {
196 3 return OK;
197 3 }
198 2 else
199 2 {
200 3 return ANSWER_NUMBER_E;
201 3 }
202 2 }
203 1 else
204 1 {
205 2 return C_GET_FAIL;
206 2 }
207 1
208 1 return FALSE;
209 1 }
210
211 //读Flash
212 //入口参数:
213 // p:读取数据存放地址
214 // Number:读取个数
215 // AddrH:地址高字节
216 // AddrL:地址低字节
217 //返回值:
218 // OK:操作成功
219 // 其它:通讯错误
220 unsigned char ReadFingerFlash(unsigned char *p,unsigned char Number,unsigned char AddrH,unsigned char Addr
-L)
221 {
222 1 unsigned char Command = C_READ_FLASH;
223 1
224 1 CommBuf[0] = C_READ_FLASH;
225 1 CommBuf[1] = AddrH;
226 1 CommBuf[2] = AddrL;
227 1 CommBuf[3] = Number;
228 1 //发送读Flash指令
229 1 Clear_Uart_Variable();
230 1 SendCommand(C_COMMAND,4,CommBuf);
231 1
232 1 //等待接收正确接收返回
233 1 Tc = 2;
234 1 while(!ReceiveOK&&Tc);
235 1 Clear_Uart_Variable();
236 1 if(0==Tc) return FALSE;
237 1
238 1 if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
239 1 {
C51 COMPILER V7.06 FINGER 12/04/2008 15:12:02 PAGE 5
240 2 if((C_ANSWER==CommBuf[2])&&(0x01==CommBuf[4]))
241 2 {
242 3 ;
243 3 }
244 2 else
245 2 {
246 3 return ANSWER_NUMBER_E;
247 3 }
248 2 }
249 1 else
250 1 {
251 2 return C_GET_FAIL;
252 2 }
253 1
254 1 //等待返回数据
255 1 Tc = 2;
256 1 while(!ReceiveOK&&Tc);
257 1 Clear_Uart_Variable();
258 1 if(0==Tc) return FALSE;
259 1
260 1 if(SCC==CommBuf[CommBuf[3]+4]) //数据包和校验判断
261 1 {
262 2 if((C_ANSWER==CommBuf[2])&&(C_READ_FLASH==CommBuf[4]))
263 2 {
264 3 memcpy(p,&CommBuf[5],Number);//复制数据
265 3 return OK;
266 3 }
267 2 else
268 2 {
269 3 return ANSWER_NUMBER_E;
270 3 }
271 2 }
272 1 else
273 1 {
274 2 return C_GET_FAIL;
275 2 }
276 1
277 1 return FALSE;
278 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 730 ----
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 + -