?? 1602.lst
字號:
280 //=========================================================================================
281
282
283
284
285 //==============將按鍵值編碼為數值=========================
286 unsigned char coding(unsigned char m)
287 {
288 1 unsigned char k;
289 1
290 1 switch(m)
291 1 {
292 2 case (0x18): k=1;break;
293 2 case (0x28): k=2;break;
294 2 case (0x48): k=3;break;
295 2 case (0x88): k='A';break;
296 2 case (0x14): k=4;break;
297 2 case (0x24): k=5;break;
298 2 case (0x44): k=6;break;
299 2 case (0x84): k='B';break;
300 2 case (0x12): k=7;break;
301 2 case (0x22): k=8;break;
302 2 case (0x42): k=9;break;
303 2 case (0x82): k='C';break;
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 6
304 2 case (0x11): k='*';break;
305 2 case (0x21): k=0;break;
306 2 case (0x41): k='#';break;
307 2 case (0x81): k='D';break;
308 2 }
309 1 return(k);
310 1 }
311
312
313 //=====================按鍵檢測并返回按鍵值===============================
314 unsigned char keynum(void)
315 {
316 1 unsigned char row,col,i;
317 1 P1=0xf0;
318 1 if((P1&0xf0)!=0xf0)
319 1 {
320 2 Delay5Ms();
321 2 Delay5Ms();
322 2 if((P1&0xf0)!=0xf0)
323 2 {
324 3 row=P1^0xf0; //確定行線
325 3 i=0;
326 3 P1=a[i]; //精確定位
327 3 while(i<4)
328 3 {
329 4 if((P1&0xf0)!=0xf0)
330 4 {
331 5 col=~(P1&0xff); //確定列線
332 5 break; //已定位后提前退出
333 5 }
334 4 else
335 4 {
336 5 i++;
337 5 P1=a[i];
338 5 }
339 4 }
340 3 }
341 2 else
342 2 {
343 3 return 0;
344 3 }
345 2
346 2 while((P1&0xf0)!=0xf0);
347 2
348 2 return (row|col); //行線與列線組合后返回
349 2 }
350 1 else return 0; //無鍵按下時返回0
351 1 }
352
353
354
355
356 //=======================一聲提示音,表示有效輸入========================
357 void OneAlam(void)
358 {
359 1 ALAM=0;
360 1 Delay5Ms();
361 1 ALAM=1;
362 1 }
363
364 //========================二聲提示音,表示操作成功========================
365 void TwoAlam(void)
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 7
366 {
367 1 ALAM=0;
368 1 Delay5Ms();
369 1 ALAM=1;
370 1 Delay5Ms();
371 1 ALAM=0;
372 1 Delay5Ms();
373 1 ALAM=1;
374 1 }
375
376 //========================三聲提示音,表示錯誤========================
377 void ThreeAlam(void)
378 {
379 1 ALAM=0;
380 1 Delay5Ms();
381 1 ALAM=1;
382 1 Delay5Ms();
383 1 ALAM=0;
384 1 Delay5Ms();
385 1 ALAM=1;
386 1 Delay5Ms();
387 1 ALAM=0;
388 1 Delay5Ms();
389 1 ALAM=1;
390 1
391 1 }
392
393 //=====================顯示輸入的N個數字,用H代替以便隱藏============================
394 void DisplayOne(void)
395 {
396 1 // DisplayOneChar(9+N,1,'*');
397 1 write_1602com(yi+5+N);
398 1 write_1602dat('*');
399 1 }
400
401 //=======================顯示提示輸入=========================
402 void DisplayChar(void)
403 {
404 1 unsigned char i;
405 1 if(pass==1)
406 1 {
407 2 //DisplayListChar(0,1,LockOpen);
408 2 write_1602com(er);
409 2 for(i=0;i<16;i++)
410 2 {
411 3 write_1602dat(LockOpen[i]);
412 3 }
413 2 }
414 1 else
415 1 {
416 2 if(N==0)
417 2 {
418 3 //DisplayListChar(0,1,Error);
419 3 write_1602com(er);
420 3 for(i=0;i<16;i++)
421 3 {
422 4 write_1602dat(Error[i]);
423 4 }
424 3 }
425 2 else
426 2 {
427 3 //DisplayListChar(0,1,start_line);
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 8
428 3 write_1602com(er);
429 3 for(i=0;i<16;i++)
430 3 {
431 4 write_1602dat(start_line[i]);
432 4 }
433 3 }
434 2 }
435 1 }
436
437 void DisplayInput(void)
438 {
439 1 unsigned char i;
440 1 if(CorrectCont==1)
441 1 {
442 2 //DisplayListChar(0,0,Input);
443 2 write_1602com(er);
444 2 for(i=0;i<16;i++)
445 2 {
446 3 write_1602dat(Input[i]);
447 3 }
448 2 }
449 1 }
450
451
452 //========================重置密碼==================================================
453 //==================================================================================
454 void ResetPassword(void)
455 {
456 1 unsigned char i;
457 1 unsigned char j;
458 1 if(pass==0)
459 1 {
460 2 pass=0;
461 2 DisplayChar();
462 2 ThreeAlam();
463 2 }
464 1 else
465 1 {
466 2 if(ReInputEn==1)
467 2 {
468 3 if(N==6)
469 3 {
470 4 ReInputCont++;
471 4 if(ReInputCont==2)
472 4 {
473 5 for(i=0;i<6;)
474 5 {
475 6 if(TempPassword[i]==InputData[i]) //將兩次輸入的新密碼作對比
476 6 i++;
477 6 else
478 6 {
479 7 //DisplayListChar(0,1,Error);
480 7 write_1602com(er);
481 7 for(j=0;j<16;j++)
482 7 {
483 8 write_1602dat(Error[j]);
484 8 }
485 7 ThreeAlam(); //錯誤提示
486 7 pass=0;
487 7 ReInputEn=0; //關閉重置功能,
488 7 ReInputCont=0;
489 7 DisplayChar();
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 9
490 7 break;
491 7 }
492 6 }
493 5 if(i==6)
494 5 {
495 6 //DisplayListChar(0,1,ResetOK);
496 6 write_1602com(er);
497 6 for(j=0;j<16;j++)
498 6 {
499 7 write_1602dat(ResetOK[j]);
500 7 }
501 6
502 6 TwoAlam(); //操作成功提示
503 6 WrToROM(TempPassword,0,6); //將新密碼寫入24C02存儲
504 6 ReInputEn=0;
505 6 }
506 5 ReInputCont=0;
507 5 CorrectCont=0;
508 5 }
509 4 else
510 4 {
511 5 OneAlam();
512 5 //DisplayListChar(0, 1, again); //顯示再次輸入一次
513 5 write_1602com(er);
514 5 for(j=0;j<16;j++)
515 5 {
516 6 write_1602dat(again[j]);
517 6 }
518 5 for(i=0;i<6;i++)
519 5 {
520 6 TempPassword[i]=InputData[i]; //將第一次輸入的數據暫存起來
521 6 }
522 5 }
523 4
524 4 N=0; //輸入數據位數計數器清零
525 4 }
526 3 }
527 2 }
528 1
529 1 }
530
531
532
533 //=======================輸入密碼錯誤超過三過,報警并鎖死鍵盤======================
534 void Alam_KeyUnable(void)
535 {
536 1 P1=0x00;
537 1 {
538 2 ALAM=~ALAM;
539 2 Delay5Ms();
540 2 }
541 1 }
542
543
544 //=======================取消所有操作============================================
545 void Cancel(void)
546 {
547 1 unsigned char i;
548 1 unsigned char j;
549 1 //DisplayListChar(0, 1, start_line);
550 1 write_1602com(er);
551 1 for(j=0;j<16;j++)
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 10
552 1 {
553 2 write_1602dat(start_line[j]);
554 2 }
555 1 TwoAlam(); //提示音
556 1 for(i=0;i<6;i++)
557 1 {
558 2 InputData[i]=0;
559 2 }
560 1 KEY=1; //關閉鎖
561 1 ALAM=1; //報警關
562 1 operation=0; //操作標志位清零
563 1 pass=0; //密碼正確標志清零
564 1 ReInputEn=0; //重置輸入充許標志清零
565 1 ErrorCont=0; //密碼錯誤輸入次數清零
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -