?? 1602.lst
字號:
566 1 CorrectCont=0; //密碼正確輸入次數清零
567 1 ReInputCont=0; //重置密碼輸入次數清零
568 1 open_led=1;
569 1 s3_keydown=0;
570 1 key_disable=0;
571 1 N=0; //輸入位數計數器清零
572 1 }
573
574
575 //==========================確認鍵,并通過相應標志位執行相應功能===============================
576 void Ensure(void)
577 {
578 1 unsigned char i,j;
579 1 RdFromROM(CurrentPassword,0,6); //從24C02里讀出存儲密碼
580 1 if(N==6)
581 1 {
582 2 if(ReInputEn==0) //重置密碼功能未開啟
583 2 {
584 3 for(i=0;i<6;)
585 3 {
586 4 if(CurrentPassword[i]==InputData[i])
587 4 {
588 5 i++;
589 5 }
590 4 else
591 4 {
592 5 ErrorCont++;
593 5 if(ErrorCont==3) //錯誤輸入計數達三次時,報警并鎖定鍵盤
594 5 {
595 6 write_1602com(er);
596 6 for(i=0;i<16;i++)
597 6 {
598 7 write_1602dat(Error[i]);
599 7 }
600 6 do
601 6 Alam_KeyUnable();
602 6 while(1);
603 6 }
604 5 else
605 5 {
606 6 TR0=1; //開啟定時
607 6 key_disable=1; //鎖定鍵盤
608 6 pass=0;
609 6 break;
610 6 }
611 5 }
612 4 }
613 3
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 11
614 3 if(i==6)
615 3 {
616 4 CorrectCont++;
617 4 if(CorrectCont==1) //正確輸入計數,當只有一次正確輸入時,開鎖,
618 4 {
619 5 //DisplayListChar(0,1,LockOpen);
620 5 write_1602com(er);
621 5 for(j=0;j<16;j++)
622 5 {
623 6 write_1602dat(LockOpen[j]);
624 6 }
625 5 TwoAlam(); //操作成功提示音
626 5 KEY=0; //開鎖
627 5 pass=1; //置正確標志位
628 5 TR0=1; //開啟定時
629 5 open_led=0; //開鎖指示燈亮
630 5 for(j=0;j<6;j++) //將輸入清除
631 5 {
632 6 InputData[i]=0;
633 6 }
634 5 }
635 4 else //當兩次正確輸入時,開啟重置密碼功能
636 4 {
637 5 //DisplayListChar(0,1,SetNew);
638 5 write_1602com(er);
639 5 for(j=0;j<16;j++)
640 5 {
641 6 write_1602dat(SetNew[j]);
642 6 }
643 5 TwoAlam(); //操作成功提示
644 5 ReInputEn=1; //允許重置密碼輸入
645 5 CorrectCont=0; //正確計數器清零
646 5 }
647 4 }
648 3
649 3 else //=========================當第一次使用或忘記密碼時可以用131420對其密碼初始化============
650 3 {
651 4 if((InputData[0]==1)&&(InputData[1]==3)&&(InputData[2]==1)&&(InputData[3]==4)&&(InputData[4]==2)&&(Inp
-utData[5]==0))
652 4 {
653 5 WrToROM(initpassword,0,6); //強制將初始密碼寫入24C02存儲
654 5 //DisplayListChar(0,1,initword); //顯示初始化密碼
655 5 write_1602com(er);
656 5 for(j=0;j<16;j++)
657 5 {
658 6 write_1602dat(initword[j]);
659 6 }
660 5 TwoAlam();
661 5 Delay400Ms();
662 5 TwoAlam();
663 5 N=0;
664 5 }
665 4 else
666 4 {
667 5 //DisplayListChar(0,1,Error);
668 5 write_1602com(er);
669 5 for(j=0;j<16;j++)
670 5 {
671 6 write_1602dat(Error[j]);
672 6 }
673 5 ThreeAlam(); //錯誤提示音
674 5 pass=0;
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 12
675 5 }
676 4 }
677 3 }
678 2
679 2 else //當已經開啟重置密碼功能時,而按下開鎖鍵,
680 2 {
681 3 //DisplayListChar(0,1,Er_try);
682 3 write_1602com(er);
683 3 for(j=0;j<16;j++)
684 3 {
685 4 write_1602dat(Er_try[j]);
686 4 }
687 3 ThreeAlam();
688 3 }
689 2 }
690 1
691 1 else
692 1 {
693 2 //DisplayListChar(0,1,Error);
694 2 write_1602com(er);
695 2 for(j=0;j<16;j++)
696 2 {
697 3 write_1602dat(Error[j]);
698 3 }
699 2
700 2 ThreeAlam(); //錯誤提示音
701 2 pass=0;
702 2 }
703 1
704 1 N=0; //將輸入數據計數器清零,為下一次輸入作準備
705 1
706 1 operation=1;
707 1 }
708
709
710 //==============================主函數===============================
711 void main(void)
712 {
713 1 unsigned char KEY,NUM;
714 1 unsigned char i,j;
715 1 P1=0xFF;
716 1 TMOD=0x11;
717 1 TL0=0xB0;
718 1 TH0=0x3C;
719 1 EA=1;
720 1 ET0=1;
721 1 TR0=0;
722 1 Delay400Ms(); //啟動等待,等LCM講入工作狀態
723 1 lcd_init(); //LCD初始化
724 1 write_1602com(yi);//日歷顯示固定符號從第一行第0個位置之后開始顯示
725 1 for(i=0;i<16;i++)
726 1 {
727 2 write_1602dat(name[i]);//向液晶屏寫日歷顯示的固定符號部分
728 2 }
729 1 write_1602com(er);//時間顯示固定符號寫入位置,從第2個位置后開始顯示
730 1 for(i=0;i<16;i++)
731 1 {
732 2 write_1602dat(start_line[i]);//寫顯示時間固定符號,兩個冒號
733 2 }
734 1 write_1602com(er+9); //設置光標位置
735 1 write_1602com(0x0f); //設置光標為閃爍
736 1 Delay5Ms(); //延時片刻(可不要)
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 13
737 1
738 1 N=0; //初始化數據輸入位數
739 1 while(1)
740 1 {
741 2 if(key_disable==1)
742 2 Alam_KeyUnable();
743 2 else
744 2 ALAM=1; //關報警
745 2
746 2 KEY=keynum();
747 2 if(KEY!=0)
748 2 {
749 3 if(key_disable==1)
750 3 {
751 4 second=0;
752 4 }
753 3 else
754 3 {
755 4 NUM=coding(KEY);
756 4 {
757 5 switch(NUM)
758 5 {
759 6 case ('A'): ; break;
760 6 case ('B'): ; break;
761 6 case ('C'): ; break;
762 6 case ('D'): ResetPassword(); break; //重新設置密碼
763 6 case ('*'): Cancel(); break; //取消當前輸入
764 6 case ('#'): Ensure(); break; //確認鍵,
765 6 default:
766 6 {
767 7 //DisplayListChar(0,1,Input);
768 7 write_1602com(er);
769 7 for(i=0;i<16;i++)
770 7 {
771 8 write_1602dat(Input[i]);
772 8 }
773 7 operation=0;
774 7 if(N<6) //當輸入的密碼少于6位時,接受輸入并保存,大于6位時則無效。
775 7 {
776 8 OneAlam(); //按鍵提示音
777 8 //DisplayOneChar(6+N,1,'*');
778 8 for(j=0;j<=N;j++)
779 8 {
780 9 write_1602com(er+6+j);
781 9 write_1602dat('*');
782 9 }
783 8 InputData[N]=NUM;
784 8 N++;
785 8 }
786 7 else //輸入數據位數大于6后,忽略輸入
787 7 {
788 8 N=6;
789 8 break;
790 8 }
791 7 }
792 6 }
793 5 }
794 4 }
795 3 }
796 2 }
797 1 }
798
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 14
799 //*********************************中斷服務函數**************************************
800 void time0_int(void) interrupt 1
801 {
802 1 TL0=0xB0;
803 1 TH0=0x3C;
804 1 //TR0=1;
805 1 countt0++;
806 1 if(countt0==20)
807 1 {
808 2 countt0=0;
809 2 second++;
810 2 if(pass==1)
811 2 {
812 3 if(second==1)
813 3 {
814 4 open_led=1; //關指示燈
815 4 TR0=0; //關定時器
816 4 TL0=0xB0;
817 4 TH0=0x3C;
818 4 second=0;
819 4 }
820 3 }
821 2 else
822 2 {
823 3 if(second==3)
824 3 {
825 4 TR0=0;
826 4 second=0;
827 4 key_disable=0;
828 4 s3_keydown=0;
829 4 TL0=0xB0;
830 4 TH0=0x3C;
831 4 }
832 3 else
833 3 TR0=1;
834 3 }
835 2
836 2 }
837 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1737 ----
CONSTANT SIZE = 214 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 24 23
IDATA SIZE = ---- ----
BIT SIZE = 5 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -