国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于51單片機(jī)的電子密碼鎖

這篇具有很好參考價(jià)值的文章主要介紹了基于51單片機(jī)的電子密碼鎖。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

主要功能:

1、6位密碼開鎖

  1. 可以修改用戶密碼和管理員密碼

  1. 斷電記憶

  1. 3次錯(cuò)誤報(bào)警鎖住鍵盤文章來源地址http://www.zghlxwxcb.cn/news/detail-504506.html

基于51單片機(jī)的電子密碼鎖
基于51單片機(jī)的電子密碼鎖
#include <REG51.h>
#include<intrins.h>
#define LCM_Data  P0
#define uchar unsigned char 
#define uint  unsigned int
#define w 6                //定義密碼位數(shù)
sbit lcd1602_rs=P2^5;
sbit lcd1602_rw=P2^6;
sbit lcd1602_en=P2^7;

sbit Scl=P2^0;            //24C02串行時(shí)鐘
sbit Sda=P2^1;            //24C02串行數(shù)據(jù)

sbit ALAM = P2^4;        //報(bào)警    
sbit KEY = P3^6;        //開鎖

sbit open_led=P2^2;        //開鎖指示燈

bit  operation=0;        //操作標(biāo)志位
bit  pass=0;            //密碼正確標(biāo)志
bit  ReInputEn=0;        //重置輸入充許標(biāo)志    
bit  s3_keydown=0;        //3秒按鍵標(biāo)志位
bit  key_disable=0;        //鎖定鍵盤標(biāo)志

unsigned char countt0,second;    //t0中斷計(jì)數(shù)器,秒計(jì)數(shù)器

void Delay5Ms(void);

unsigned char code a[]={0xFE,0xFD,0xFB,0xF7};                                             //控盤掃描控制表

unsigned char code start_line[]    = {"password:       "};
unsigned char code name[]          = {"===Coded Lock==="};                                                //顯示名稱
unsigned char code Correct[]     = {"     correct    "};                                             //輸入正確
unsigned char code Error[]       = {"      error     "};                                              //輸入錯(cuò)誤
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[]        = {"error,try again!"};
unsigned char code again[]        = {"input again     "};

unsigned char InputData[6];                                                                //輸入密碼暫存區(qū)
unsigned char CurrentPassword[6]={1,3,1,4,2,0};                                                         //當(dāng)前密碼值
unsigned char TempPassword[6];
unsigned char N=0;                //密碼輸入位數(shù)記數(shù)
unsigned char ErrorCont;            //錯(cuò)誤次數(shù)計(jì)數(shù)
unsigned char CorrectCont;            //正確輸入計(jì)數(shù)
unsigned char ReInputCont;             //重新輸入計(jì)數(shù)
unsigned char code initpassword[6]={0,0,0,0,0,0};


//=====================5ms延時(shí)==============================
void Delay5Ms(void)
{
    unsigned int TempCyc = 5552;
    while(TempCyc--);
}

//===================400ms延時(shí)==============================
void Delay400Ms(void)
{
 unsigned char TempCycA = 5;
 unsigned int TempCycB;
 while(TempCycA--)
 {
  TempCycB=7269;
  while(TempCycB--);
 }
}

//=============================================================================================
//================================24C02========================================================
//=============================================================================================

void mDelay(uint t) //延時(shí)
{ 
    uchar i;
       while(t--)
       {
           for(i=0;i<125;i++)
           {;}
       }
}
   

void Nop(void)          //空操作
{
     _nop_();
     _nop_();
     _nop_();
     _nop_();
}


/*起始條件*/

void Start(void)
{
     Sda=1;
     Scl=1;
     Nop();
     Sda=0;
     Nop();
}


 /*停止條件*/
void Stop(void)
{
     Sda=0;
     Scl=1;
     Nop();
     Sda=1;
     Nop();
}

/*應(yīng)答位*/
void Ack(void)
{
    Sda=0;
    Nop();
    Scl=1;
    Nop();
    Scl=0;
}

/*反向應(yīng)答位*/
void NoAck(void)
{
     Sda=1;
     Nop();
     Scl=1;
     Nop();
     Scl=0;
}

 /*發(fā)送數(shù)據(jù)子程序,Data為要求發(fā)送的數(shù)據(jù)*/
void Send(uchar Data)
{
       uchar BitCounter=8;
       uchar temp;
       do
       {
           temp=Data;
           Scl=0;
           Nop();
           if((temp&0x80)==0x80)
           Sda=1;
           else 
           Sda=0;
           Scl=1;
           temp=Data<<1;
           Data=temp;
           BitCounter--;
       }
       while(BitCounter);
       Scl=0;
}

/*讀一字節(jié)的數(shù)據(jù),并返回該字節(jié)值*/
uchar Read(void)
{
    uchar temp=0;
    uchar temp1=0;
    uchar BitCounter=8;
    Sda=1;
    do{
    Scl=0;
    Nop();
    Scl=1;
    Nop();
    if(Sda)
    temp=temp|0x01;
    else
    temp=temp&0xfe;
    if(BitCounter-1)
    {
    temp1=temp<<1;
    temp=temp1;
    }
    BitCounter--;
    }
    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第一行的初始位置,因?yàn)長(zhǎng)CD1602字符地址首位D7恒定為1(100000000=80)
#define er 0x80+0x40 //LCD第二行初始位置(因?yàn)榈诙械谝粋€(gè)字符位置地址是0x40)


//----------------延時(shí)函數(shù),后面經(jīng)常調(diào)用----------------------
void delay(uint xms)//延時(shí)函數(shù),有參函數(shù)
{
    uint x,y;
    for(x=xms;x>0;x--)
     for(y=110;y>0;y--);
}

//--------------------------寫指令---------------------------
write_1602com(uchar com)//****液晶寫入指令函數(shù)****
{
    lcd1602_rs=0;//數(shù)據(jù)/指令選擇置為指令
    lcd1602_rw=0; //讀寫選擇置為寫
    P0=com;//送入數(shù)據(jù)
    delay(1);
    lcd1602_en=1;//拉高使能端,為制造有效的下降沿做準(zhǔn)備
    delay(1);
    lcd1602_en=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
}

//-------------------------寫數(shù)據(jù)-----------------------------
write_1602dat(uchar dat)//***液晶寫入數(shù)據(jù)函數(shù)****
{
    lcd1602_rs=1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù)
    lcd1602_rw=0; //讀寫選擇置為寫
    P0=dat;//送入數(shù)據(jù)
    delay(1);
    lcd1602_en=1; //en置高電平,為制造下降沿做準(zhǔn)備
    delay(1);
    lcd1602_en=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
}

//-------------------------初始化-------------------------
void lcd_init(void)
{
    write_1602com(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
    write_1602com(0x0c);//開顯示不顯示光標(biāo)
    write_1602com(0x06);//整屏不移動(dòng),光標(biāo)自動(dòng)右移
    write_1602com(0x01);//清顯示
}
//========================================================================================
//=========================================================================================




//==============將按鍵值編碼為數(shù)值=========================
unsigned char coding(unsigned char m)     
{
    unsigned char k;
    
    switch(m)
    {
        case (0x18): k=1;break;
        case (0x28): k=2;break;
        case (0x48): k=3;break;
        case (0x88): k='A';break;
        case (0x14): k=4;break;
        case (0x24): k=5;break;
        case (0x44): k=6;break;
        case (0x84): k='B';break;
        case (0x12): k=7;break;
        case (0x22): k=8;break;
        case (0x42): k=9;break;
        case (0x82): k='C';break;
        case (0x11): k='*';break;
        case (0x21): k=0;break;
        case (0x41): k='#';break;
        case (0x81): k='D';break;
    }
    return(k);
}


//=====================按鍵檢測(cè)并返回按鍵值===============================
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;                     //無鍵按下時(shí)返回0
}




//=======================一聲提示音,表示有效輸入========================
void OneAlam(void)
{
    ALAM=0;
    Delay5Ms();
    ALAM=1;
}

//========================二聲提示音,表示操作成功========================
void TwoAlam(void)
{
    ALAM=0;
    Delay5Ms();
    ALAM=1;
    Delay5Ms();
    ALAM=0;
    Delay5Ms();
    ALAM=1;
}

//========================三聲提示音,表示錯(cuò)誤========================
void ThreeAlam(void)
{
    ALAM=0;
    Delay5Ms();
    ALAM=1;
    Delay5Ms();
    ALAM=0;
    Delay5Ms();
    ALAM=1;
    Delay5Ms();
    ALAM=0;
    Delay5Ms();
    ALAM=1;

}

//=====================顯示輸入的N個(gè)數(shù)字,用H代替以便隱藏============================
void DisplayOne(void)
{
//    DisplayOneChar(9+N,1,'*');
    write_1602com(yi+5+N);
    write_1602dat('*');
}

//=======================顯示提示輸入=========================
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]);    
        }
    }
    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 DisplayInput(void)
{
    unsigned char i;
    if(CorrectCont==1)
    {
        //DisplayListChar(0,0,Input);
        write_1602com(er);
        for(i=0;i<16;i++)
        {
            write_1602dat(Input[i]);    
        }
    }
}


//========================重置密碼==================================================
//==================================================================================
void ResetPassword(void)
{
    unsigned char i;    
    unsigned char j;
    if(pass==0)
    {
        pass=0;
        DisplayChar();
        ThreeAlam();
    }
    else
    {
        if(ReInputEn==1)
        {
            if(N==6)
            {
                ReInputCont++;                
                if(ReInputCont==2)
                {
                    for(i=0;i<6;)
                    {
                        if(TempPassword[i]==InputData[i])    //將兩次輸入的新密碼作對(duì)比
                            i++;
                        else
                        {
                            //DisplayListChar(0,1,Error);
                            write_1602com(er);
                            for(j=0;j<16;j++)
                            {
                                write_1602dat(Error[j]);    
                            }
                            ThreeAlam();            //錯(cuò)誤提示    
                            pass=0;
                            ReInputEn=0;            //關(guān)閉重置功能,
                            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存儲(chǔ)
                        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];        //將第一次輸入的數(shù)據(jù)暫存起來                        
                    }
                }

            N=0;                        //輸入數(shù)據(jù)位數(shù)計(jì)數(shù)器清零
           }
        }
    }

}



//=======================輸入密碼錯(cuò)誤超過三過,報(bào)警并鎖死鍵盤======================
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;                    //關(guān)閉鎖
    ALAM=1;                    //報(bào)警關(guān)
    operation=0;            //操作標(biāo)志位清零
    pass=0;                    //密碼正確標(biāo)志清零
    ReInputEn=0;            //重置輸入充許標(biāo)志清零
    ErrorCont=0;            //密碼錯(cuò)誤輸入次數(shù)清零
    CorrectCont=0;            //密碼正確輸入次數(shù)清零
    ReInputCont=0;            //重置密碼輸入次數(shù)清零 
    open_led=1;
    s3_keydown=0;
    key_disable=0;
    N=0;                    //輸入位數(shù)計(jì)數(shù)器清零
}


//==========================確認(rèn)鍵,并通過相應(yīng)標(biāo)志位執(zhí)行相應(yīng)功能===============================
void Ensure(void)
{    
    unsigned char i,j;
    RdFromROM(CurrentPassword,0,6);                     //從24C02里讀出存儲(chǔ)密碼
    if(N==6)
    {
        if(ReInputEn==0)                            //重置密碼功能未開啟
        {
            for(i=0;i<6;)
               {                    
                if(CurrentPassword[i]==InputData[i])
                {
                    i++;
                }
                else 
                {            
                    ErrorCont++;
                    if(ErrorCont==3)            //錯(cuò)誤輸入計(jì)數(shù)達(dá)三次時(shí),報(bào)警并鎖定鍵盤
                    {
                        write_1602com(er);
                        for(i=0;i<16;i++)
                        {
                            write_1602dat(Error[i]);    
                        }
                        do
                        Alam_KeyUnable();
                        while(1);
                    }
                    else
                    {
                        TR0=1;                //開啟定時(shí)
                        key_disable=1;            //鎖定鍵盤
                        pass=0;
                        break;
                    }
                }
            }

            if(i==6)
            {
                CorrectCont++;
                if(CorrectCont==1)                //正確輸入計(jì)數(shù),當(dāng)只有一次正確輸入時(shí),開鎖,
                {
                    //DisplayListChar(0,1,LockOpen);
                    write_1602com(er);
                    for(j=0;j<16;j++)
                    {
                        write_1602dat(LockOpen[j]);    
                    }
                    TwoAlam();            //操作成功提示音
                    KEY=0;                                            //開鎖
                    pass=1;                                            //置正確標(biāo)志位
                    TR0=1;                                            //開啟定時(shí)
                    open_led=0;                                        //開鎖指示燈亮
                    for(j=0;j<6;j++)                                //將輸入清除
                    {
                        InputData[i]=0;
                    }
                }    
                else                                                //當(dāng)兩次正確輸入時(shí),開啟重置密碼功能
                {
                    //DisplayListChar(0,1,SetNew);
                    write_1602com(er);
                    for(j=0;j<16;j++)
                    {
                        write_1602dat(SetNew[j]);    
                    }
                    TwoAlam();                                        //操作成功提示
                    ReInputEn=1;                                    //允許重置密碼輸入
                    CorrectCont=0;                                    //正確計(jì)數(shù)器清零
                }
              }
    
            else            //=========================當(dāng)?shù)谝淮问褂没蛲浢艽a時(shí)可以用131420對(duì)其密碼初始化============
            {
                if((InputData[0]==1)&&(InputData[1]==3)&&(InputData[2]==1)&&(InputData[3]==4)&&(InputData[4]==2)&&(InputData[5]==0))
                   {
                    WrToROM(initpassword,0,6);                 //強(qiáng)制將初始密碼寫入24C02存儲(chǔ)
                    //DisplayListChar(0,1,initword);            //顯示初始化密碼
                    write_1602com(er);
                    for(j=0;j<16;j++)
                    {
                        write_1602dat(initword[j]);    
                    }
                    TwoAlam();
                    Delay400Ms();
                    TwoAlam();
                    N=0;
                }
                else
                {
                    //DisplayListChar(0,1,Error);
                    write_1602com(er);
                    for(j=0;j<16;j++)
                    {
                        write_1602dat(Error[j]);    
                    }
                     ThreeAlam();                                        //錯(cuò)誤提示音
                    pass=0;    
                }
            }
        }

        else                                            //當(dāng)已經(jīng)開啟重置密碼功能時(shí),而按下開鎖鍵,
        {
            //DisplayListChar(0,1,Er_try);
            write_1602com(er);
            for(j=0;j<16;j++)
            {
                write_1602dat(Er_try[j]);    
            }
            ThreeAlam();
        }
    }

    else
    {
        //DisplayListChar(0,1,Error);
        write_1602com(er);
        for(j=0;j<16;j++)
        {
            write_1602dat(Error[j]);    
        }

         ThreeAlam();                                        //錯(cuò)誤提示音
        pass=0;    
    }
    
    N=0;                                                    //將輸入數(shù)據(jù)計(jì)數(shù)器清零,為下一次輸入作準(zhǔn)備

    operation=1;
}


//==============================主函數(shù)===============================
void main(void)
{
     unsigned char KEY,NUM;
    unsigned char i,j;
     P1=0xFF; 
    TMOD=0x11;
     TL0=0xB0;
     TH0=0x3C;
     EA=1;
     ET0=1;    
     TR0=0;
     Delay400Ms();     //啟動(dòng)等待,等LCM講入工作狀態(tài)
     lcd_init();     //LCD初始化
    write_1602com(yi);//日歷顯示固定符號(hào)從第一行第0個(gè)位置之后開始顯示
    for(i=0;i<16;i++)
    {
        write_1602dat(name[i]);//向液晶屏寫日歷顯示的固定符號(hào)部分
    }
    write_1602com(er);//時(shí)間顯示固定符號(hào)寫入位置,從第2個(gè)位置后開始顯示
    for(i=0;i<16;i++)
    {
        write_1602dat(start_line[i]);//寫顯示時(shí)間固定符號(hào),兩個(gè)冒號(hào)
    }
    write_1602com(er+9);    //設(shè)置光標(biāo)位置
    write_1602com(0x0f);    //設(shè)置光標(biāo)為閃爍
     Delay5Ms(); //延時(shí)片刻(可不要)

     N=0;                                                        //初始化數(shù)據(jù)輸入位數(shù)
     while(1)
     {
        if(key_disable==1)
            Alam_KeyUnable();
        else
            ALAM=1;                                //關(guān)報(bào)警

        KEY=keynum();
        if(KEY!=0)
        {    
            if(key_disable==1)
            {
                second=0;
            }
            else
            {
                NUM=coding(KEY);
                {
                    switch(NUM)
                    {
                        case ('A'):     ;                     break;
                        case ('B'):        ;                     break;
                        case ('C'):     ;                     break;
                        case ('D'): ResetPassword();        break;      //重新設(shè)置密碼
                        case ('*'): Cancel();                break;      //取消當(dāng)前輸入
                        case ('#'): Ensure();                 break;       //確認(rèn)鍵,
                        default: 
                        {    
                            //DisplayListChar(0,1,Input);
                            write_1602com(er);
                            for(i=0;i<16;i++)
                            {
                                write_1602dat(Input[i]);
                            }
                            operation=0;
                            if(N<6)                                       //當(dāng)輸入的密碼少于6位時(shí),接受輸入并保存,大于6位時(shí)則無效。
                            {  
                                OneAlam();                                //按鍵提示音                        
                                //DisplayOneChar(6+N,1,'*');
                                 for(j=0;j<=N;j++)
                                {
                                    write_1602com(er+6+j);
                                    write_1602dat('*');
                                }
                                InputData[N]=NUM;
                                N++;
                            }
                            else                                        //輸入數(shù)據(jù)位數(shù)大于6后,忽略輸入
                            {
                                N=6;
                                 break;
                            }
                        }
                    }
                }
            }
         } 
    }
}

//*********************************中斷服務(wù)函數(shù)**************************************
void  time0_int(void) interrupt 1 
{
     TL0=0xB0;
     TH0=0x3C;
     //TR0=1;
     countt0++;
      if(countt0==20)
       {
        countt0=0;
        second++;
        if(pass==1)
        {
            if(second==1)
            {
                open_led=1;            //關(guān)指示燈
                TR0=0;                //關(guān)定時(shí)器
                TL0=0xB0;
                 TH0=0x3C;
                second=0;
            }
        }
        else
        {
            if(second==3)
            {
                TR0=0;
                second=0;
                key_disable=0;    
                s3_keydown=0;    
                TL0=0xB0;
                TH0=0x3C;
            }
            else
                TR0=1;
        }
            
       }
}

到了這里,關(guān)于基于51單片機(jī)的電子密碼鎖的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 51單片機(jī)簡(jiǎn)易電子密碼鎖

    51單片機(jī)簡(jiǎn)易電子密碼鎖

    由于作業(yè)需求,在昨天天晚上寫了一個(gè)通過lcd1602,i2c,eeprom,按鍵,實(shí)現(xiàn)的可以設(shè)置密碼的簡(jiǎn)易電子鎖, ? ?首先點(diǎn)擊k15(回車鍵)進(jìn)入 ?進(jìn)入后可以點(diǎn)擊0-9按鍵輸入6位密碼,錯(cuò)誤則顯示error,5s后重新顯示密碼輸入頁面,密碼正確則進(jìn)入。 ? ?進(jìn)入后可以點(diǎn)擊Esc鍵設(shè)置密碼,進(jìn)入設(shè)

    2024年02月02日
    瀏覽(27)
  • 51單片機(jī)學(xué)習(xí)--矩陣鍵盤、電子密碼鎖

    51單片機(jī)學(xué)習(xí)--矩陣鍵盤、電子密碼鎖

    矩陣鍵盤的模塊原理圖: 功能:按下矩陣按鍵,在LCD上顯示對(duì)應(yīng)的數(shù)值。 采用模塊化編程,在此只給出MatrixKey.c 和 main.c 兩部分代碼 這里要注意必須先判斷KeyNum是否為0,否則while不斷循環(huán)會(huì)不斷顯示0,導(dǎo)致看不到按下按鈕顯示的數(shù)字 要利用寫好的矩陣鍵盤來制作一個(gè)密碼鎖

    2024年02月16日
    瀏覽(26)
  • 【Proteus仿真】【51單片機(jī)】電子密碼鎖設(shè)計(jì)

    【Proteus仿真】【51單片機(jī)】電子密碼鎖設(shè)計(jì)

    本項(xiàng)目使用Proteus8仿真51單片機(jī)控制器,使用LCD1602液晶、矩陣按鍵、蜂鳴器、EEPROM模塊、繼電器模塊等。 系統(tǒng)運(yùn)行后,LCD1602顯示密碼輸入提示界面,系統(tǒng)存儲(chǔ)在EEPROM的初始密碼為123456, 用戶可通過矩陣按鍵S1-S10輸入數(shù)值0-9,當(dāng)在密碼輸入過程中有誤,可按S11鍵回刪并重新輸

    2024年02月13日
    瀏覽(20)
  • 基于單片機(jī)的電子密碼鎖設(shè)計(jì)

    基于單片機(jī)的電子密碼鎖設(shè)計(jì)

    1.設(shè)計(jì)任務(wù) 利用AT89C51單片機(jī)為核心控制元件,設(shè)計(jì)一個(gè)簡(jiǎn)易的電子密碼鎖,可設(shè)置四位密碼,輸入錯(cuò)誤三次,報(bào)警燈亮起(紅燈亮起),輸入正確,綠燈閃爍三次??赏ㄟ^LCD顯示屏查看密碼,并可通過特殊鍵位清除密碼。 本系統(tǒng)由AT89C51單片機(jī)系統(tǒng)(主要是AT89C51單片機(jī)最小系

    2024年02月02日
    瀏覽(38)
  • 基于單片機(jī)智能電子密碼鎖設(shè)計(jì)

    基于單片機(jī)智能電子密碼鎖設(shè)計(jì)

    ** 單片機(jī)設(shè)計(jì)介紹,基于單片機(jī)智能電子密碼鎖設(shè)計(jì) ??基于單片機(jī)的智能電子密碼鎖設(shè)計(jì)是一種利用單片機(jī)(如Arduino、Raspberry Pi等)和相關(guān)電子元件來實(shí)現(xiàn)的電子密碼鎖系統(tǒng)。下面是一個(gè)基本設(shè)計(jì)的介紹: 系統(tǒng)組成: 單片機(jī)模塊:負(fù)責(zé)控制和處理密碼輸入、驗(yàn)證和鎖控制

    2024年02月03日
    瀏覽(21)
  • 基于51單片機(jī)的密碼鎖設(shè)計(jì)

    基于51單片機(jī)的密碼鎖設(shè)計(jì)

    電子密碼鎖設(shè)計(jì),以AT89C51為主控,晶振電路和復(fù)位電路共同組成最小系統(tǒng),使得單片機(jī)可以正常運(yùn)行。矩陣按鍵作為輸入模塊,輸入密碼,LCD1602作為顯示設(shè)備,顯示輸入的密碼和提示語句,AT24C02作為EEPROM存儲(chǔ)器,使用LED模擬“鎖”,表示鎖的開啟和關(guān)閉狀態(tài)。系統(tǒng)掉電后,

    2024年02月11日
    瀏覽(20)
  • 基于51單片機(jī)密碼鎖(修改密碼,串口上鎖解鎖,仿真)

    基于51單片機(jī)密碼鎖(修改密碼,串口上鎖解鎖,仿真)

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 目錄 一、仿真圖 二、步驟 1.矩陣按鍵 2.串口配置 3.串口接收數(shù)據(jù)判斷 4.修改密碼+密碼輸入 總結(jié) 前言 LCD1602+矩陣按鍵+串口上鎖解鎖+修改密碼 ??提供參考 代碼如下: 代碼如下(示例): 這里把判斷拿

    2024年02月15日
    瀏覽(31)
  • 基于51單片機(jī)的紅外密碼鎖設(shè)計(jì)[proteus仿真]

    基于51單片機(jī)的紅外密碼鎖設(shè)計(jì)[proteus仿真]

    密碼鎖檢測(cè)系統(tǒng)這個(gè)題目算是課程設(shè)計(jì)和畢業(yè)設(shè)計(jì)中常見的題目了,本期是一個(gè)基于51單片機(jī)的紅外密碼鎖設(shè)計(jì) 需要的源文件和程序的小伙伴可以關(guān)注公眾號(hào)【阿目分享嵌入式】,贊賞任意文章 2¥,私信阿目【112基于51單片機(jī)的紅外密碼鎖設(shè)計(jì)】即可獲?。吹较?huì)第一時(shí)

    2024年02月21日
    瀏覽(25)
  • 基于51單片機(jī)LCD1602的簡(jiǎn)易矩陣鍵盤密碼鎖

    基于51單片機(jī)LCD1602的簡(jiǎn)易矩陣鍵盤密碼鎖

    初次開始寫博客,表達(dá)方面也許會(huì)有很多不足,希望自己能通過這種方式鞏固自己的學(xué)習(xí)和鍛煉表達(dá)能力,同時(shí)也是對(duì)于自己學(xué)習(xí)的記錄。 四位密碼鎖,密碼可更改,輸入僅四次以內(nèi)有效 矩陣鍵盤定義為1-16,順序?yàn)閺淖笊系接蚁拢?-10號(hào)為密碼輸入鍵位,對(duì)鍵碼取余,輸入

    2024年01月23日
    瀏覽(29)
  • 基于51單片機(jī)的簡(jiǎn)易6位密碼鎖(數(shù)碼管 led 矩陣)

    基于51單片機(jī)的簡(jiǎn)易6位密碼鎖(數(shù)碼管 led 矩陣)

    ? 本文章是基于51單片機(jī)的簡(jiǎn)易密碼鎖,無掉電保護(hù),所以沒有用到I^C總線協(xié)議,僅用到數(shù)碼管顯示,矩陣鍵盤掃描,led顯示。? ?本例程主要實(shí)現(xiàn)功能為:定義一個(gè)六位數(shù)的初始密碼,用矩陣輸入,輸入正確后led被點(diǎn)亮,錯(cuò)誤不點(diǎn)亮;摁下任意一個(gè)按鍵蜂鳴器發(fā)出聲音,松下

    2024年02月11日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包