在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<s id="cmphk"><label id="cmphk"></label></s>
    <span id="cmphk"><var id="cmphk"></var></span>
    <dfn id="cmphk"><var id="cmphk"></var></dfn>
    <menu id="cmphk"><thead id="cmphk"></thead></menu>

    <address id="cmphk"></address>

      <dfn id="cmphk"></dfn>
      
      
      <span id="cmphk"></span>

      <object id="cmphk"><tt id="cmphk"></tt></object>
      1. 新聞中心

        LCD1602密碼鎖設(shè)計(jì)

        作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏
        密碼鎖說(shuō)明:(KT實(shí)驗(yàn)板調(diào)試成功)


        本密碼鎖是利用8051單片機(jī)的控制結(jié)合1602LCD,設(shè)計(jì)的一個(gè)微電腦LCD密碼鎖,可以用在需要密碼輸入的場(chǎng)合中,例如要當(dāng)門(mén)禁用時(shí),需要實(shí)際配合電子門(mén)鎖。也可以設(shè)計(jì)在保險(xiǎn)中做密碼鎖控制中。本密碼鎖應(yīng)用的知識(shí)主要有:
        1. 8051 4x4矩陣鍵盤(pán)掃描輸入
        2. 1602 LCD顯示
        3. 密碼比較處理的設(shè)計(jì)方法
        4. 定時(shí)器的使用
        5. 24cxxx的應(yīng)用等

        本文引用地址:http://www.biyoush.com/article/201611/317316.htm

        功能說(shuō)明:

        1. 使用LCD顯示器來(lái)顯示密碼輸入的相關(guān)消息及提示
        2. 可以設(shè)置6位數(shù)字(0-9)密碼
        3. 內(nèi)定另一組數(shù)字密碼為:000000
        4. 密碼輸入正確則繼電器啟動(dòng)2s
        5. 密碼輸入正確或錯(cuò)誤都有相應(yīng)的聲音提示
        6. 密碼輸入3次錯(cuò)誤,系統(tǒng)將自動(dòng)鎖定,30分鐘內(nèi)不準(zhǔn)使用,30分鐘后自動(dòng)開(kāi)啟
        7. 密碼輸入時(shí),如果在10秒內(nèi)沒(méi)有按鍵,表示放棄本次輸入,則自動(dòng)跳出密碼輸入狀態(tài),進(jìn)入歡迎界面
        8. 可以修改密碼或用原始密碼
        9. 斷電后密碼仍然存在(保存在24c02中)
        10.具有按鍵復(fù)位功能

        硬件連接:

        /*1602 LCD連接線圖:
        ---------------------------------------------------
        | LCM-----51  | LCM-----51  | LCM------51 |
        | ----------------------------------------------- |
        | DB0-----P0.0 | DB4-----P0.4 | RS-------P2.0 |
        | DB1-----P0.1 | DB5-----P0.5 | RW-------P2.1 |
        | DB2-----P0.2 | DB6-----P0.6 | E--------P2.2 |
        | DB3-----P0.3 | DB7-----P0.7 | VLCD接1K電阻到GND |
        ---------------------------------------------------

        接口說(shuō)明:1. P1口: 4x4矩陣鍵盤(pán)
        2. P2.4 工作指示燈
        3. P2.5 繼電器控制端
        4. P3.7 蜂鳴器控制端
        5. P3.3 24c02時(shí)鐘端
        6. P3.4 24c02數(shù)據(jù)端
        /*接盤(pán)按鍵說(shuō)明:
        --------------------------------------------------
        | 1 | 2 | 3 | A |
        - - - - - - - - - - - - -
        | 4 | 5 | 6 | B |
        - - - - - - - - - - - - -
        | 7 | 8 | 9 | C |
        - - - - - - - - - - - - -
        | * | 0 | # | D |
        --------------------------------------------------
        注:A--表示輸入密碼
        B--表示設(shè)置新密碼
        C--復(fù)位端口

        附加說(shuō)明:

        1. LCD1602驅(qū)動(dòng)-----------明皓
        2. 4x4鍵盤(pán)掃描-----------KT學(xué)習(xí)綜合實(shí)驗(yàn)源程序
        3. 密碼比較原理----------8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教材
        4. 24C02的讀寫(xiě)操作-------偉納電子ME300B單片機(jī)開(kāi)發(fā)系統(tǒng)演示程序

        zhaojun 2007/10/1

        [email protected]

        部分代碼:

        //========================================== 主函數(shù)部分 ==================================================

        /*****************************************************
        函 數(shù) 名:void clearmen(void)
        功 能:系統(tǒng)初始化
        說(shuō) 明:對(duì)系統(tǒng)用的標(biāo)志位和定時(shí)器進(jìn)行初始化
        入口參數(shù):無(wú)
        返 回 值:無(wú)
        *****************************************************/
        void clearmen(void)
        {
        flag1= 1; // Choice_menu()調(diào)用標(biāo)志
        signx= 1; // 循環(huán)標(biāo)志
        flag = 1; // 調(diào)用輸入新密碼提示標(biāo)志位
        mark = 1; // 循環(huán)標(biāo)志位
        num = 0; // 按鍵錯(cuò)誤計(jì)數(shù)器
        TH0=0x3C;TL0=0xB0; // 50ms定時(shí)初值
        TH1=0x3C;TL1=0xB0; // 50ms定時(shí)初值
        TMOD=0x11;ET0=1;TR0=0;ET1=1;TR1=0;EA=1;
        }

        /*****************************************************
        函 數(shù) 名:main()
        功 能:主函數(shù)
        說(shuō) 明:對(duì)按鍵和顯示進(jìn)行控制
        入口參數(shù):無(wú)
        返 回 值:無(wú)
        *****************************************************/
        void main(void)
        {

        uchar Key_value;
        Delay400Ms(); // 啟動(dòng)等待,等LCM講入工作狀態(tài)
        LCMInit(); // LCM初始化
        Delay400Ms();
        clearmen(); // 系統(tǒng)初始化
        while(1)
        {
        P1=0xf0;
        if(((P1&0xf0)!=0xf0)&(flag1==1)&(num<3)) // 有鍵按下
        {
        Key_value=Key_switch(); // 按鍵掃描
        if(Key_value!=0) // 的確有鍵按下
        {
        Choice_menu(); // 調(diào)用選擇程序
        flag1=0; // Choice_menu()調(diào)用標(biāo)志
        signx=1; // 循環(huán)標(biāo)志
        }
        while(signx==1)
        {
        TR0=0; // 定時(shí)器0關(guān),從先開(kāi)始計(jì)時(shí)
        TR0=1; // 定時(shí)器0開(kāi)
        P1=0xf0; // P1口賦值,從而判斷有無(wú)按鍵
        if((P1&0xf0)!=0xf0)
        {
        Key_value=Key_switch(); // 按鍵掃描
        if(Key_value==65) // 如果按鍵是"A",則輸入密碼
        {
        while(mark==1)
        {
        Password_importation(); // 密碼輸入
        }
        flag1=1; // Choice_menu()調(diào)用標(biāo)志
        signx=0; // 循環(huán)標(biāo)志
        }
        if(Key_value==66) // 如果按鍵是"B",則輸入新密碼
        {
        while(mark==1) // 輸入前比較秘密,密碼正確進(jìn)入新密碼設(shè)置
        { // 密碼錯(cuò)誤退出密碼設(shè)置
        Password_importation(); // 密碼輸入
        }
        //-------------------------------
        if(mark0!=0) // mark0=1:密碼比較正確可以輸入新密碼
        { // mark0=0:密碼比較錯(cuò)誤不能輸入新密碼
        mark=1; // 進(jìn)入循環(huán)標(biāo)志
        while(mark==1)
        {
        NewPassword_set(); // 新密碼設(shè)置函數(shù)
        }
        mark=1; // 進(jìn)入循環(huán)標(biāo)志
        while(mark==1)
        {
        NewPassword_set_again(); // 再次輸入密碼
        }
        }
        flag1=1; // Choice_menu()調(diào)用標(biāo)志
        signx=0; // 循環(huán)標(biāo)志
        }
        }
        }
        }
        else
        {
        Welcome_face(); // 歡迎界面
        mark = 1; // 循環(huán)標(biāo)志
        mark0= 0; // 是否輸入新密碼標(biāo)志位
        flag1=1; // Choice_menu()調(diào)用標(biāo)志
        WriteCommandLCM(0x0C,1); // 關(guān)光標(biāo)顯示
        sign=(bit)ReadCurrent(10); // 密碼比較標(biāo)志位
        }
        if(num==3) // 3次輸入錯(cuò)誤密碼,系統(tǒng)鎖定30min
        {
        ET1=1;TR1=1; // 開(kāi)定時(shí)器T1,定時(shí)30分鐘
        }
        }
        }

        //========================================== 密碼控制部分 ==================================================

        /*****************************************************
        函 數(shù) 名:void NewPassword_set_again(void)
        功 能:第二次輸入密碼
        說(shuō) 明:第二次輸入密碼并存入暫存器,再調(diào)用比較程序
        入口參數(shù):無(wú)
        返 回 值:無(wú)
        *****************************************************/
        void NewPassword_set_again(void)
        {
        bit sign1;
        uchar key_data;
        P1=0xf0; // 判斷是否有鍵按下
        if(flag==1)
        {
        NewPassword_again(); // 顯示密碼輸入界面
        Delay400Ms();
        flag=0; // 調(diào)用輸入新密碼提示標(biāo)志位
        Count=0; // 按鍵次數(shù)計(jì)數(shù)器置0
        Delay400Ms();
        }
        if((P1&0xf0)!=0xf0) // 判斷是否有鍵按下
        {
        key_data=Key_switch(); // 調(diào)用按鍵轉(zhuǎn)換程序
        if((key_data!=0)&(key_data!=65)&(key_data!=66)&(key_data!=67)&(key_data!=68)&(key_data!=35)&(key_data!=42))
        {//按鍵不能為數(shù)字(0~9)以外.A B C D # *
        Count++; // 按鍵次數(shù)器加1
        Led_hint(); // 按鍵指示
        Beep(); // 按一下鍵發(fā)一音
        sign1=1; // 有鍵按下標(biāo)志位
        }
        }
        if((sign1==1)&(flag==0)) // 有鍵按下
        {
        Scan_starnumber(); // 在密碼顯示區(qū)顯示" ****** "
        sign1=0; // 按鍵標(biāo)志位清0
        T_Password[Count-1]=key_data; // 按鍵值放入密碼暫存器
        }
        if(Count==6) // 6次按鍵則進(jìn)行密碼比較
        {
        Count=0; // 計(jì)算清0,從先計(jì)數(shù)
        flag =1; // 調(diào)用輸入新密碼提示標(biāo)志位
        mark =0; // 循環(huán)標(biāo)志位
        WriteCommandLCM(0x0C,1); // 關(guān)光標(biāo)顯示
        Newpassword_comparison(); // 新密碼設(shè)置比較
        }
        }

        /*****************************************************
        函 數(shù) 名:void Newpassword_comparison(void)
        功 能:第二次輸入密碼比較
        說(shuō) 明:對(duì)第一次輸入的密碼與第二次輸入的密碼進(jìn)行比較
        入口參數(shù):無(wú)
        返 回 值:無(wú)
        *****************************************************/
        void Newpassword_comparison(void)
        {
        uchar Number=0;
        while((T_Password[Number]==N_Password[Number])&(Number<6))// 密碼比較
        {
        Number++; // 計(jì)數(shù)值加1
        }
        if(Number>=6) // 密碼正確
        {
        Newpassword_OK(); // 新密碼設(shè)置成功提示
        WriteToROM(T_Password,0,6); // 密碼設(shè)置成功,則把密碼存入24c02中
        sign =1; // 比較新密碼標(biāo)志
        WriteCurrent((uchar)sign,10); // 存入標(biāo)志位
        Delay400Ms();
        Beep(); // 正確提示音
        Delay400Ms();
        Beep();
        mark=0;
        }
        else // 密碼錯(cuò)誤,報(bào)警
        {
        Newpassword_ERROR(); // 新密碼設(shè)置失敗提示
        num=0;
        sign =0; // 比較舊密碼標(biāo)志
        Delay400Ms();
        Beep();Beep();Beep(); // 錯(cuò)誤提示音
        Delay400Ms();
        Beep();Beep();Beep();
        Delay1s(); // 延時(shí)1s
        mark=0;
        }
        }

        /*****************************************************
        函 數(shù) 名:void NewPassword_set(void)
        功 能:新密碼設(shè)置
        說(shuō) 明:修改密碼
        入口參數(shù):無(wú)
        返 回 值:無(wú)
        *****************************************************/
        void NewPassword_set(void)
        {
        bit sign1;
        uchar key_data;
        P1=0xf0; // 判斷是否有鍵按下
        if(flag==1)
        {
        NewPassword_face(); // 顯示密碼輸入界面
        Delay400Ms();
        flag=0; // 調(diào)用輸入新密碼提示標(biāo)志位
        Count=0; // 按鍵次數(shù)計(jì)數(shù)器置0
        Delay400Ms();
        }
        if((P1&0xf0)!=0xf0) // 判斷是否有鍵按下
        {
        key_data=Key_switch(); // 調(diào)用按鍵轉(zhuǎn)換程序
        if((key_data!=0)&(key_data!=65)&(key_data!=66)&(key_data!=67)&(key_data!=68)&(key_data!=35)&(key_data!=42))
        {//按鍵不能為數(shù)字(0~9)以外.A B C D # *
        Count++; // 按鍵次數(shù)器加1
        Led_hint(); // 按鍵指示
        Beep(); // 按一下鍵發(fā)一音
        sign1=1; // 有鍵按下標(biāo)志位
        }
        }
        if((sign1==1)&(flag==0)) // 有鍵按下
        {
        Scan_starnumber(); // 在密碼顯示區(qū)顯示" ****** "
        sign1=0; // 按鍵標(biāo)志位清0
        N_Password[Count-1]=key_data; // 按鍵值放入密碼暫存器
        }
        if(Count==6) // 6次按鍵則進(jìn)行密碼比較
        {
        Count=0; // 計(jì)算清0,從先計(jì)數(shù)
        flag =1; // 調(diào)用輸入新密碼提示標(biāo)志位
        mark =0; // 循環(huán)標(biāo)志位
        WriteCommandLCM(0x0C,1); // 關(guān)光標(biāo)顯示
        }
        }
        /*****************************************************
        函 數(shù) 名:void Password_importation(void)
        功 能:密碼輸入
        說(shuō) 明:輸入密碼并調(diào)用密碼比較函數(shù)進(jìn)行比較
        入口參數(shù):無(wú)
        返 回 值:無(wú)
        *****************************************************/
        void Password_importation(void)
        {
        bit sign1;
        uchar key_data;
        P1=0xf0; // 判斷是否有鍵按下
        if(((P1&0xf0)!=0xf0)&(flag==1)) // 有鍵按下,且是第一次
        {
        key_data=Key_switch();
        if(key_data!=0)
        {
        Pass_face(); // 顯示密碼輸入界面
        Delay400Ms();
        flag=0; // 調(diào)用密碼輸入提示標(biāo)志位
        Count=0; // 輸入密碼個(gè)數(shù)計(jì)數(shù)器置0
        Delay400Ms();
        }
        }
        if((P1&0xf0)!=0xf0) // 判斷是否有鍵按下
        {
        key_data=Key_switch(); // 調(diào)用按鍵轉(zhuǎn)換程序
        if((key_data!=0)&(key_data!=65)&(key_data!=66)&(key_data!=67)&(key_data!=68)&(key_data!=35)&(key_data!=42))
        {//按鍵不能為數(shù)字(0~9)以外.A B C D # *
        Count++; // 按鍵次數(shù)器加1
        Led_hint(); // 按鍵指示
        Beep(); // 按一下鍵發(fā)一音
        sign1=1; // 有鍵按下標(biāo)志位
        }
        }
        if((sign1==1)&(flag==0)) // 有鍵按下
        {
        Scan_starnumber(); // 在密碼顯示區(qū)顯示" ****** "
        sign1=0; // 按鍵標(biāo)準(zhǔn)位清0
        T_Password[Count-1]=key_data; // 按鍵值放入密碼暫存器
        }
        if(Count==6) // 6次按鍵則進(jìn)行密碼比較
        {
        Count=0; // 計(jì)算清0,從先計(jì)數(shù)
        flag =1; // 調(diào)用密碼輸入提示標(biāo)志位
        mark =0; // 循環(huán)標(biāo)志位
        WriteCommandLCM(0x0C,1); // 關(guān)光標(biāo)顯示

        if(sign==0)
        PasswordComparison(0); // 輸入按鍵與原始密碼比較
        else PasswordComparison(1); // 輸入按鍵與新密碼比較
        }
        }

        /*****************************************************
        函 數(shù) 名:void Scan_starnumber(void)
        功 能:顯示密碼位為星號(hào)
        說(shuō) 明:在密碼顯示區(qū)顯示 " ****** "
        入口參數(shù):無(wú)
        返 回 值:無(wú)
        *****************************************************/
        void Scan_starnumber(void)
        {
        switch(Count) // 在相應(yīng)的地方顯示"*"
        {
        case 1:DisplayOneChar(5,1,42);break; //-----*-----------//
        case 2:DisplayOneChar(6,1,42);break; //------*----------//
        case 3:DisplayOneChar(7,1,42);break; //-------*---------//
        case 4:DisplayOneChar(8,1,42);break; //--------*--------//
        case 5:DisplayOneChar(9,1,42);break; //---------*-------//
        case 6:DisplayOneChar(10,1,42);break; //----------*------//
        } //-----*******-----//
        }

        /*****************************************************
        函 數(shù) 名:void PasswordComparison(bit mark)
        功 能:密碼比較程序
        說(shuō) 明:對(duì)輸入密碼進(jìn)行比較
        入口參數(shù):mark:當(dāng)mark=1時(shí),對(duì)原始密碼進(jìn)行比較;當(dāng)mark=0時(shí),對(duì)原始密碼進(jìn)行比較
        返 回 值:無(wú)
        *****************************************************/
        void PasswordComparison(bit mark1)
        {
        uchar Number=0;
        if(mark1==0) // 輸入按鍵與原始密碼比較
        {
        while((T_Password[Number]==O_Password[Number])&(Number<6)) // 密碼比較
        {
        Number++; // 計(jì)數(shù)值加1
        }
        }
        else // 輸入按鍵與新密碼比較
        {
        ReadFromROM(N_Password,0,6);
        while((T_Password[Number]==N_Password[Number])&(Number<6)) // 密碼比較
        {
        Number++; // 計(jì)數(shù)值加1
        }
        }
        if(Number>=6) // 密碼正確
        {
        mark0=1; // 進(jìn)入新密碼設(shè)置
        Password_OK(); // 調(diào)用密碼輸入正確提示函數(shù)
        REL=0; // 繼電器開(kāi)啟,即密碼鎖開(kāi)啟
        Delay400Ms();
        Beep();Beep(); // 正確提示音
        Delay400Ms();
        Beep();Beep();
        Delay1s(); // 延時(shí)2s
        Delay1s();
        REL=1; // 繼電器關(guān)閉,即密碼鎖開(kāi)啟
        mark=0; // 退出循環(huán)
        num=0;
        }
        else // 密碼錯(cuò)誤,報(bào)警
        {
        mark0=0; // 新密碼輸入控制位
        Password_ERROR(); // 調(diào)用密碼輸入錯(cuò)誤提示函數(shù)
        Delay400Ms();
        Beep();Beep();Beep();Beep(); // 錯(cuò)誤提示音
        Delay400Ms();
        Beep();Beep();Beep();Beep();
        Delay1s(); // 延時(shí)1s
        mark=0; // 退出循環(huán)
        num++; // 密碼錯(cuò)誤輸入計(jì)數(shù)器
        }
        }



        關(guān)鍵詞: LCD1602密碼

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉