📄 lesson10.lst
字号:
171 4 ACC = P1;
172 4 ACC &= 0X87;//P1.7 for beep!
173 4 if(!(ACC == 0X87))//P1.7 for beep!
174 4 {
175 5 g_uc_key_number |= ACC;/*combine to the key number*/
176 5 if(uc_keypad_response_flag == 0)
177 5 {
178 6 keypad_response_dual(g_uc_key_number);
179 6 }
180 5 else
181 5 {
182 6 keypad_response_single(g_uc_key_number);
183 6 }
184 5 }
185 4 }
186 3 }
187 2 }
188 1 }
189 /*************************************************/
190 /*name:keypad_response_dual()
191 function:response to the dual key number
192 input:uc_key_number*/
193 /*************************************************/
194 data uchar uc_temp_receive[7][3];
195 void keypad_response_dual(uchar key_number)
196 {
197 1 data uchar k,j;//k for key number;j for rotate
198 1 data uchar uc_device_addr,uc_device_sub_addr;//
199 1 data uchar uc_tmp_password[3];
200 1 data uint temp;//暂存产量总和
201 1
202 1 while(!(ACC == 0x87))//wait for the release of the key//P1.7 for beep!
203 1 {
204 2 delay(2,255);
205 2 P1 = 0x87;
206 2 ACC = P1;
207 2 ACC &= 0X87;
208 2 }
209 1 {
210 2 uc_keypad_response_flag = 1;//for single key press
211 2 g_uc_key_any_cnt ++;
212 2 for(k=0;k<=11;k++)
213 2 {
214 3 if(key_number == g_uc_key_number_all[k])
215 3 break;
216 3 }
217 2 if(g_uc_key_any_cnt == 1)
218 2 {
219 3 g_uc_key_no_combined = k << 4;
220 3 }
221 2 else
222 2 {
223 3 g_uc_key_any_cnt = 0;
224 3 g_uc_key_no_combined += k;
225 3 switch(g_uc_key_no_combined)
226 3 {
227 4 case 0xA0:/*A+0*/
228 4 g_uc_disp_cnt = 2;//password 4位
229 4 beep = 0;//提示用户输入密码
230 4 delay(200,200);
231 4 beep = 1;
232 4
C51 COMPILER V7.50 LESSON10 06/19/2006 21:28:10 PAGE 5
233 4 while(g_uc_disp_cnt < 6)
234 4 {
235 5 keypad_scan();
236 5 switch(g_uc_disp_cnt)
237 5 {
238 6 case 3://键盘扫描后,g_uc_disp_cnt已经++了
239 6 g_min_disp = 0x8F;
240 6 g_sec_disp = 0xFF;
241 6 break;
242 6 case 4://密码用8888显示为不可见//需要按B确认!?
243 6 g_min_disp = 0x88;
244 6 g_sec_disp = 0xFF;
245 6 break;
246 6 case 5:
247 6 g_sec_disp = 0x8F;
248 6 break;
249 6 case 6:
250 6 g_sec_disp = 0x88;
251 6 break;
252 6 default:
253 6 break;
254 6 }
255 5 }
256 4 g_uc_disp_cnt = 0;
257 4 uc_device_addr = 0xA0;//0xA0=1010 0000B, 1010is the device number,000 is the A2A1A0 hard wired, 0 wr
-ite.
258 4 uc_device_sub_addr = 0x00;//EEPROM 首地址
259 4 g_uc_data_send[0] = 0x00;//密码只有4位,g_uc_data_send[0]写00
260 4 g_uc_data_send[1] = g_uc_min_cnt;//存储的数据保存在数组g_uc_data_send中
261 4 g_uc_data_send[2] = g_uc_sec_cnt;
262 4 ISendStr(uc_device_addr,uc_device_sub_addr,g_uc_data_send,3);//以页方式存储
263 4 break;
264 4 case 0xAB:/*A+B*/
265 4 g_uc_disp_cnt = 2;//password 4位
266 4 beep = 0;//提示键盘按下
267 4 delay(50,100);
268 4 beep = 1;
269 4 while(g_uc_disp_cnt < 6)
270 4 {
271 5 keypad_scan();
272 5 switch(g_uc_disp_cnt)
273 5 {
274 6 case 3://键盘扫描后,g_uc_disp_cnt已经++了
275 6 g_min_disp = 0x8F;
276 6 g_sec_disp = 0xFF;
277 6 break;
278 6 case 4://密码用8888显示为不可见//需要按B确认!?
279 6 g_min_disp = 0x88;
280 6 g_sec_disp = 0xFF;
281 6 break;
282 6 case 5:
283 6 g_sec_disp = 0x8F;
284 6 break;
285 6 case 6:
286 6 g_sec_disp = 0x88;
287 6 break;
288 6 default:
289 6 break;
290 6 }
291 5 }
292 4 g_uc_disp_cnt = 0;
293 4 uc_tmp_password[0] = 0x00;
C51 COMPILER V7.50 LESSON10 06/19/2006 21:28:10 PAGE 6
294 4 uc_tmp_password[1] = g_uc_min_cnt;
295 4 uc_tmp_password[2] = g_uc_sec_cnt;
296 4 uc_device_addr = 0xA0;//0xA0=1010 0000B, 1010is the device number,000 is the A2A1A0 hard wired, 0 wr
-ite.
297 4 uc_device_sub_addr = 0x00;//EEPROM 首地址
298 4 IRcvStr(uc_device_addr,uc_device_sub_addr,g_uc_data_receive,3);//以页方式读取//读出的数据保存在数组g
-_uc_data_receive中
299 4 j = memcmp(uc_tmp_password,g_uc_data_receive,3);//读出的数据保存在数组g_uc_data_send中
300 4 if(j == 0)
301 4 {
302 5 for(j = 1;j < 7;j++)//clear the data
303 5 {
304 6 uc_device_sub_addr = 0x00 + ((j) << 3);//EEPROM 首地址
305 6 g_uc_data_send[0] = 0x00;
306 6 g_uc_data_send[1] = 0x00;
307 6 g_uc_data_send[2] = 0x00;
308 6 ISendStr(uc_device_addr,uc_device_sub_addr,g_uc_data_send,3);//以页方式存储
309 6 }
310 5 beep = 0;//提示用户密码正确,数据已经清除
311 5 delay(200,200);
312 5 beep = 1;
313 5 }
314 4 else
315 4 {
316 5 beep = 0;
317 5 for(j = 0;j < 8;j++)//断续提示声,提示用户password错误
318 5 {
319 6 delay(50,200);
320 6 if(beep == 0)beep = 1;
321 6 else beep = 0;
322 6 }
323 5 }
324 4 break;
325 4 case 0xA1:
326 4 beep = 0;//提示键盘按下
327 4 delay(50,100);
328 4 beep = 1;
329 4 TR0 = 0;//并不启动
330 4 g_uc_hr_cnt = 0xFF;//清屏
331 4 g_uc_min_cnt = 0xFF;
332 4 g_uc_sec_cnt = 0xFF;
333 4 display_led(g_uc_hr_cnt ,g_uc_min_cnt ,g_uc_sec_cnt);
334 4 g_uc_disp_cnt = 0;//设置时钟,6位
335 4 while(g_uc_disp_cnt < 6)
336 4 {
337 5 keypad_scan();
338 5 }
339 4 g_uc_disp_cnt = 0;
340 4 g_uc_hr_cnt %= 0x24;//adjust the hr
341 4 g_uc_min_cnt %= 0x60;//adjust the min
342 4 g_uc_sec_cnt %= 0x60;//adjust the sec
343 4 display_led(g_uc_hr_cnt ,g_uc_min_cnt ,g_uc_sec_cnt);
344 4 g_st_current_time.hr = g_uc_hr_cnt;
345 4 g_st_current_time.min = g_uc_min_cnt;
346 4 g_st_current_time.sec = g_uc_sec_cnt;
347 4 break;
348 4 case 0xA2:
349 4 ET0 = 1;
350 4 TR0 = 1;//启动T0
351 4 ET1 = 1;//使能T1
352 4 TR1 = 1;//启动T1
353 4 EX0 = 1;//使能外部中断0
C51 COMPILER V7.50 LESSON10 06/19/2006 21:28:10 PAGE 7
354 4 break;
355 4 case 0xA3://显示所有产量(记录值)总和
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -