|
- #include <REG51.h>
- #include<intrins.h>
- #define LCM_Data P0 //??P0??????LCM_Data
- #define uchar unsigned char
- #define uint unsigned int
- //1602
- sbit lcd1602_rs=P2^5;
- sbit lcd1602_rw=P2^6;
- sbit lcd1602_en=P2^7;
- sbit Scl=P3^4; //24C02???????
- sbit Sda=P3^5; //24C02????????
- sbit ALAM = P2^1; //????
- sbit KEY = P3^6; //????
- bit pass=0; //??????????
- bit ReInputEn=0; //??????????????
- bit s3_keydown=0; //3???????λ
- bit key_disable=0; //??????????
- unsigned char countt0,second; //t0?ж??????,???????
- void Delay5Ms(void); //???????????
- unsigned char code a[]={0xFE,0xFD,0xFB,0xF7}; //???????????
- //??????????????
- unsigned char code start_line[] = {"password: "};
- unsigned char code name[] = {"====mimasuo====="}; //???????
- unsigned char code Correct[] = {" yes "}; //???????
- unsigned char code Error[] = {" on "}; //???????
- unsigned char code codepass[] = {" pass "};
- unsigned char code LockOpen[] = {" open "}; //OPEN
- unsigned char code SetNew[] = {"SetNewWordEnable"}; //?????μ???
- unsigned char code Input[] = {"input: "}; //INPUT
- unsigned char code ResetOK[] = {"ResetPasswordOK "}; //??????????
- unsigned char code initword[] = {"Init password..."}; // ?????????
- unsigned char code Er_try[] = {"on ,try again!"};
- unsigned char code again[] = {"input again "}; //???????
- unsigned char InputData[6]; //?????????????
- unsigned char CurrentPassword[6]={6,6,6,6,6,6}; //???EEPROM???????????
- unsigned char TempPassword[6];
- unsigned char N=0; //????????λ??????
- unsigned char ErrorCont; //???????????
- unsigned char CorrectCont; //??????????
- unsigned char ReInputCont; //???????????
- unsigned char code initpassword[6]={0,0,0,0,0,0}; //????????????????????000000
- unsigned char code adminpassword[6]={1,3,1,4,2,0}; //????????????????????000000
- //=====================5ms???==============================
- void Delay5Ms(void)
- {
- unsigned int TempCyc = 5552;
- while(TempCyc--);
- }
- //===================400ms???==============================
- void Delay400Ms(void)
- {
- unsigned char TempCycA = 5;
- unsigned int TempCycB;
- while(TempCycA--)
- {
- TempCycB=7269;
- while(TempCycB--);
- }
- }
- //=============================================================================================
- //================================24C02========================================================
- //=============================================================================================
- void mDelay(uint t) //???
- {
- uchar i;
- while(t--)
- {
- for(i=0;i<125;i++)
- {;}
- }
- }
-
- void Nop(void) //?????
- {
- _nop_(); //?????????????????1us
- _nop_();
- _nop_();
- _nop_();
- }
- /*****24c02???????24c02????*****/
- /*???????*/
- void Start(void)
- {
- Sda=1;
- Scl=1;
- Nop();
- Sda=0;
- Nop();
- }
- /*??????*/
- void Stop(void)
- {
- Sda=0;
- Scl=1;
- Nop();
- Sda=1;
- Nop();
- }
- /*???λ*/
- void Ack(void)
- {
- Sda=0;
- Nop();
- Scl=1;
- Nop();
- Scl=0;
- }
- /*???????λ*/
- void NoAck(void)
- {
- Sda=1;
- Nop();
- Scl=1;
- Nop();
- Scl=0;
- }
- /*?????????????Data???????????*/
- void Send(uchar Data)
- {
- uchar BitCounter=8;
- uchar temp;
- do
- {
- temp=Data; //???????????????temp
- Scl=0;
- Nop();
- if((temp&0x80)==0x80) //????????????&0x80
- Sda=1;
- else
- Sda=0;
- Scl=1;
- temp=Data<<1; //????????
- Data=temp; //???????????????Data
- BitCounter--; //?????????0??????????????????
- }
- while(BitCounter); //?ж?????????
- Scl=0;
- }
- /*???????????????????????*/
- uchar Read(void)
- {
- uchar temp=0;
- uchar temp1=0;
- uchar BitCounter=8;
- Sda=1;
- do
- {
- Scl=0;
- Nop();
- Scl=1;
- Nop();
- if(Sda) //????λ????1
- temp=temp|0x01; //?1 temp?????λ?1??|0x01??????????λ???1??
- else //????0
- temp=temp&0xfe; //temp???λ?0??&0xfe??11111110?????λ????0??
- if(BitCounter-1) //BitCounter??1????????
- {
- temp1=temp<<1; //temp????
- temp=temp1;
- }
- BitCounter--; //BitCounter????0???????????????
- }
- while(BitCounter); //?ж??????????
- return(temp);
- }
- void WrToROM(uchar Data[],uchar Address,uchar Num)
- {
- uchar i;
- uchar *PData;
- PData=Data;
- for(i=0;i<Num;i++)
- {
- Start();
- Send(0xa0);
- Ack();
- Send(Address+i);
- Ack();
- Send(*(PData+i));
- Ack();
- Stop();
- mDelay(20);
- }
- }
- void RdFromROM(uchar Data[],uchar Address,uchar Num)
- {
- uchar i;
- uchar *PData;
- PData=Data;
- for(i=0;i<Num;i++)
- {
- Start();
- Send(0xa0);
- Ack();
- Send(Address+i);
- Ack();
- Start();
- Send(0xa1);
- Ack();
- *(PData+i)=Read();
- Scl=0;
- NoAck();
- Stop();
- }
- }
- //==================================================================================================
- //=======================================LCD1602====================================================
- //==================================================================================================
- #define yi 0x80 //LCD????е???λ??,???LCD1602????????λD7???1??100000000=80??
- #define er 0x80+0x40 //LCD????г??λ??????????е???????λ??????0x40??
- //----------------????????????澭??????----------------------
- void delay(uint xms)//??????????вκ???
- {
- uint x,y;
- for(x=xms;x>0;x--)
- for(y=110;y>0;y--);
- }
- //--------------------------д???---------------------------
- void write_1602com(uchar com)//****???д???????****
- {
- lcd1602_rs=0;//????/????????????
- lcd1602_rw=0; //??д??????д
- P0=com;//????????
- delay(1);
- lcd1602_en=1;//????????????????Ч????????????
- delay(1);
- lcd1602_en=0;//en??????????????????????????
- }
- //-------------------------д????-----------------------------
- void write_1602dat(uchar dat)//***???д?????????****
- {
- lcd1602_rs=1;//????/?????????????
- lcd1602_rw=0; //??д??????д
- P0=dat;//????????
- delay(1);
- lcd1602_en=1; //en??????????????????????
- delay(1);
- lcd1602_en=0; //en??????????????????????????
- }
- //-------------------------?????-------------------------
- void lcd_init(void)
- {
- write_1602com(0x38);//????????????????????16*2???????5*7????8λ????
- write_1602com(0x0c);//?????????????
- write_1602com(0x06);//?????????????????????
- write_1602com(0x01);//?????
- }
- //========================================================================================
- //=========================================================================================
- //==============???????????????=========================
- unsigned char coding(unsigned char m)
- {
- unsigned char k;
- switch(m)
- {
- case (0x11): k=1;break;
- case (0x21): k=2;break;
- case (0x41): k=3;break;
- case (0x81): k='A';break;
- case (0x12): k=4;break;
- case (0x22): k=5;break;
- case (0x42): k=6;break;
- case (0x82): k='B';break;
- case (0x14): k=7;break;
- case (0x24): k=8;break;
- case (0x44): k=9;break;
- case (0x84): k='C';break;
- case (0x18): k='*';break;
- case (0x28): k=0;break;
- case (0x48): k='#';break;
- case (0x88): k='D';break;
- }
- return(k);
- }
- //=====================???????????????===============================
- unsigned char keynum(void)
- {
- unsigned char row,col,i;
- P1=0xf0;
- if((P1&0xf0)!=0xf0)
- {
- Delay5Ms();
- Delay5Ms();
- if((P1&0xf0)!=0xf0)
- {
- row=P1^0xf0; //???????
- i=0;
- P1=a[i]; //?????λ
- while(i<4)
- {
- if((P1&0xf0)!=0xf0)
- {
- col=~(P1&0xff); //???????
- break; //???λ????????
- }
- else
- {
- i++;
- P1=a[i];
- }
- }
- }
- else
- {
- return 0;
- }
- while((P1&0xf0)!=0xf0);
- return (row|col); //????????????????
- }
- else return 0; //????????????0
- }
- //=======================??????????????Ч????========================
- void OneAlam(void)
- {
- ALAM=0;
- Delay5Ms();
- ALAM=1;
- }
- //========================????????????????????========================
- void TwoAlam(void)
- {
- ALAM=0;
- Delay5Ms();
- ALAM=1;
- Delay5Ms();
- ALAM=0;
- Delay5Ms();
- ALAM=1;
- }
- //========================?????????,???????========================
- void ThreeAlam(void)
- {
- ALAM=0;
- Delay5Ms();
- ALAM=1;
- Delay5Ms();
- ALAM=0;
- Delay5Ms();
- ALAM=1;
- Delay5Ms();
- ALAM=0;
- Delay5Ms();
- ALAM=1;
- }
- //=======================??????????=========================
- void DisplayChar(void)
- {
- unsigned char i;
- if(pass==1)
- {
- //DisplayListChar(0,1,LockOpen);
- write_1602com(er); //????п?????
- for(i=0;i<16;i++)
- {
- write_1602dat(LockOpen[i]); //???open ???????
- }
- }
- else
- {
- if(N==0)
- {
- //DisplayListChar(0,1,Error);
- write_1602com(er);
- for(i=0;i<16;i++)
- {
- write_1602dat(Error[i]); //???????
- }
- }
- else
- {
- //DisplayListChar(0,1,start_line);
- write_1602com(er);
- for(i=0;i<16;i++)
- {
- write_1602dat(start_line[i]);//??????????
- }
- }
- }
- }
- //========================????????==================================================
- //==================================================================================
- void ResetPassword(void)
- {
- unsigned char i;
- unsigned char j;
- if(pass==0)
- {
- pass=0;
- DisplayChar(); //???????
- ThreeAlam(); //????????????????????3??
- }
- else //???????2?????????????ó???
- {
- if(ReInputEn==1) //???????£?ReInputEn??1??????????????
- {
- if(N==6) //????6λ????
- {
- ReInputCont++; //???????????
- if(ReInputCont==2) //????????????
- {
- for(i=0;i<6;)
- {
- if(TempPassword[i]==InputData[i]) //??????????????????????
- i++;
- else //??????ε??????
- {
- //DisplayListChar(0,1,Error);
- write_1602com(er);
- for(j=0;j<16;j++)
- {
- write_1602dat(Error[j]); //???????Error
- }
- ThreeAlam(); //???????
- pass=0; //????
- ReInputEn=0; //??????ù????
- ReInputCont=0;
- DisplayChar();
- break;
- }
- }
- if(i==6)
- {
- //DisplayListChar(0,1,ResetOK);
- write_1602com(er);
- for(j=0;j<16;j++)
- {
- write_1602dat(ResetOK[j]); //??????????????
- }
- TwoAlam(); //??????????
- WrToROM(TempPassword,0,6); //????????д??24C02?洢
- ReInputEn=0;
- }
- ReInputCont=0;
- CorrectCont=0;
- }
- else //????????????
- {
- OneAlam();
- //DisplayListChar(0, 1, again); //?????????????
- write_1602com(er);
- for(j=0;j<16;j++)
- {
- write_1602dat(again[j]); //????????????
- }
- for(i=0;i<6;i++)
- {
- TempPassword[i]=InputData[i]; //???????????????????????
- }
- }
- N=0; //????????λ????????????
- }
- }
- }
- }
- //=======================?????????????????????????????????======================
- void Alam_KeyUnable(void)
- {
- P1=0x00;
- {
- ALAM=~ALAM; //???????????????
- Delay5Ms();
- }
- }
- //=======================??????в???============================================
- void Cancel(void)
- {
- unsigned char i;
- unsigned char j;
- //DisplayListChar(0, 1, start_line);
- write_1602com(er);
- for(j=0;j<16;j++)
- {
- write_1602dat(start_line[j]); //??????????????????
- }
- TwoAlam(); //?????
- for(i=0;i<6;i++)
- {
- InputData[i]=0; //??????????????
- }
- KEY=1; //?????
- ALAM=1; //??????
- pass=0; //??????????????
- ReInputEn=0; //?????????????????
- ErrorCont=0; //??????????????????
- CorrectCont=0; //??????????????????
- ReInputCont=0; //???????????????????
- s3_keydown=0;
- key_disable=0; //??????????????
- N=0; //????λ????????????
- }
- //==========================?????????????????λ??????????===============================
- void Ensure(void)
- {
- unsigned char i,j;
- RdFromROM(CurrentPassword,0,6); //??24C02??????洢????
- if(N==6)
- {
- if(ReInputEn==0) //??????????δ????
- {
- for(i=0;i<6;)
- {
- if(CurrentPassword[i]==InputData[i]) //?ж??????????24c02?е???????????
- {
- i++; //????λ i??+1
- }
- else //??????????
- {
- ErrorCont++; //???????++
- if(ErrorCont==3) //??????????????????????????????????
- {
- write_1602com(er);
- for(i=0;i<16;i++)
- {
- write_1602dat(Error[i]);
- }
- do
- Alam_KeyUnable();
- while(1);
- }
- else //???????С??3?????????????3????????????????
- {
- TR0=1; //??????
- key_disable=1; //????????
- pass=0; //passλ????
- break; //????
- }
- }
- }
- if(i==6) //??????????
- {
- if((InputData[0]==adminpassword[0])&&(InputData[1]==adminpassword[1])&&(InputData[2]==adminpassword[2])&&(InputData[3]==adminpassword[3])&&(InputData[4]==adminpassword[4])&&(InputData[5]==adminpassword[5]))
- {
- WrToROM(initpassword,0,6); //???????????д??24C02?洢
- write_1602com(er);
- for(j=0;j<16;j++)
- {
- write_1602dat(initword[j]); //????????????
- }
- TwoAlam(); //????????
- Delay400Ms(); //???400ms
- TwoAlam(); //????????
- N=0; //????λ????????????
- }
- else
- {
- CorrectCont++; //???????????++
- if(CorrectCont==1) //??????????????????????????????????
- {
- //DisplayListChar(0,1,LockOpen);
- write_1602com(er);
- for(j=0;j<16;j++)
- {
- write_1602dat(LockOpen[j]); //???open????????
- }
- TwoAlam(); //????????????
- KEY=0; //????
- pass=1; //????????λ
- TR0=1; //??????
- for(j=0;j<6;j++) //?????????
- {
- InputData[i]=0; //??????????λ????
- }
- }
- else //??????????????????????????????
- {
- write_1602com(er);
- for(j=0;j<16;j++)
- {
- write_1602dat(SetNew[j]); //??????????????
- }
- TwoAlam(); //??????????
- ReInputEn=1; //????????????????
- CorrectCont=0; //?????????????
- }
- }
- }
-
- else //=========================??????????????????????????131420????????????============
- {
- if((InputData[0]==adminpassword[0])&&(InputData[1]==adminpassword[1])&&(InputData[2]==adminpassword[2])&&(InputData[3]==adminpassword[3])&&(InputData[4]==adminpassword[4])&&(InputData[5]==adminpassword[5]))
- {
- WrToROM(initpassword,0,6); //???????????д??24C02?洢
- write_1602com(er);
- for(j=0;j<16;j++)
- {
- write_1602dat(initword[j]); //????????????
- }
- TwoAlam(); //????????
- Delay400Ms(); //???400ms
- TwoAlam(); //????????
- N=0; //????λ????????????
- }
- else //???????????
- {
- write_1602com(er);
- for(j=0;j<16;j++)
- {
- write_1602dat(Error[j]); //??????????
- }
- ThreeAlam(); //?????????
- pass=0;
- }
- }
- }
- else //???????????????????????????????????
- {
- //DisplayListChar(0,1,Er_try);
- write_1602com(er);
- for(j=0;j<16;j++)
- {
- write_1602dat(Er_try[j]); //??????????????
- }
- ThreeAlam(); //?????????
- }
- }
- else //???????????6λ????????????
- {
- //DisplayListChar(0,1,Error);
- write_1602com(er);
- for(j=0;j<16;j++)
- {
- write_1602dat(Error[j]); //???????
- }
- ThreeAlam(); //?????????
- pass=0;
- }
-
- N=0; //??????????????????????????????????
- }
- //==============================??????===============================
- void main(void)
- {
- unsigned char KEY,NUM;
- unsigned char i,j;
- P1=0xFF; //P1???λ
- TMOD=0x11; //???幤?????
- TL0=0xB0;
- TH0=0x3C; //??????????
- EA=1; //???ж??????
- ET0=1; //???ж????????
- TR0=0; //???????????
- Delay400Ms(); //??????????LCM????????
- lcd_init(); //LCD?????
- write_1602com(yi);//??????????????????е?0??λ?????????
- for(i=0;i<16;i++)
- {
- write_1602dat(name[i]);//???????д????????
- }
- write_1602com(er);
- for(i=0;i<16;i++)
- {
- write_1602dat(start_line[i]);//д??????????????
- }
- write_1602com(er+9); //???ù??λ??
- write_1602com(0x0f); //???ù??????
- Delay5Ms(); //??????(????)
- N=0; //?????????????λ??
- while(1) //???????
- {
- if(key_disable==1) //???????????1?
- Alam_KeyUnable(); //??????????
- else
- ALAM=1; //?????
- KEY=keynum(); //????????λ????
- if(KEY!=0) //???а????????
- {
- if(key_disable==1) //???????????1?
- {
- second=0; //??????
- }
- else //????????????
- {
- NUM=coding(KEY); //?????????λ?y????????????????NUM
- {
- switch(NUM) //?ж?????
- {
- case ('A'): ; break;
- case ('B'): ; break;
- case ('C'):
- write_1602com(yi);//??????????????????е?0??λ?????????
- for(i=0;i<16;i++)
- {
- write_1602dat(name[i]);//???????д????????
- }
- if(N>=1) N--; OneAlam(); //?????????
- //DisplayOneChar(6+N,1,'*');
- for(j=N;j<16;j++)
- {
- write_1602com(er+6+j);
- write_1602dat(' ');
- }
- for(j=0;j<N;j++)
- {
- write_1602com(er+6+j); //???λ?????????????????
- write_1602dat('@'); //?????????????????*????
- }
- InputData[N]=N+4;
- break; //ABC??????尷??
- case ('D'): ResetPassword(); break; //????????????
- case ('*'): Cancel(); break; //??????????
- case ('#'): Ensure(); break; //??????
- default: //???????????????????????????????
- {
- //DisplayListChar(0,1,Input);
- if(N<6) //???????????????6λ??????????????棬????6λ?????Ч??
- {
- write_1602com(er);
- for(i=0;i<16;i++)
- {
- write_1602dat(Input[i]); //?????????
- }
- OneAlam(); //?????????
- for(j=0;j<=N;j++)
- {
- write_1602com(er+6+j); //???λ?????????????????
- write_1602dat('*'); //?????????????????*????
- }
- InputData[N]=NUM; //??????????????InputData[]???????
- N++; //????λ????
- }
- else //????????λ??????6??????????
- {
- N=6; //???????????6λ?????????????
- break;
- }
- }
- }
- }
- }
- }
- }
- }
- //*********************************?ж??????**************************************
- void time0_int(void) interrupt 1 //?????T0
- {
- TL0=0xB0;
- TH0=0x3C; //?????????????
- //TR0=1;
- countt0++; //????????????1???50ms
- if(countt0==20) //???20?ξ???1s
- {
- countt0=0; //????????
- second++; //???
- if(pass==1) //???????
- {
- if(second==1) //????1s?
- {
- TR0=0; //??????
- TL0=0xB0;
- TH0=0x3C; //??θ????
- second=0; //??????
- }
- }
- else //??????????
- {
- if(second==3) //????3?
- {
- TR0=0; //???????
- second=0; //??????
- key_disable=0; //????????????
- s3_keydown=0;
- TL0=0xB0;
- TH0=0x3C; //????????
- }
- else
- TR0=1; //???????
- }
-
- }
- }
復制代碼 |
-
-
密碼鎖.7z
2020-11-29 03:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
6.74 MB, 下載次數: 12, 下載積分: 黑幣 -5
|