?? 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 + -