久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3645|回復: 2
打印 上一主題 下一主題
收起左側

我的密碼鎖復位鍵不能用 能幫我看一下嗎

[復制鏈接]
跳轉到指定樓層
樓主
void init_main() {
        Lcd_Initial();                            //對12864液晶顯示屏的初始化作用
        number = 0;                                   //密碼存儲,顯示位置,各方面清零
        P32 = 0;                                   //進行電磁鐵的初始關閉作用
        //顯示居民小區:
        Lcd_Character_16X16( 1, 0, 0,data_shuju[0]);
        Lcd_Character_16X16( 1, 0, 16,data_shuju[1]);
        Lcd_Character_16X16( 1, 0, 32,data_shuju[2]);
        Lcd_Character_16X16( 1, 0, 48,data_shuju[3]);
        Lcd_Character_16X16( 1, 0, 64,data_shuju[4]);
        //顯示請輸入密碼:
        Lcd_Character_16X16( 1, 4, 0,data_shuju[5]);
        Lcd_Character_16X16( 1, 4, 16,data_shuju[6]);
        Lcd_Character_16X16( 1, 4, 32,data_shuju[7]);
        Lcd_Character_16X16( 1, 4, 48,data_shuju[8]);
        Lcd_Character_16X16( 1, 4, 64,data_shuju[9]);
        Lcd_Character_16X16( 1, 4, 80,data_shuju[10]);

        EA = 1;                                           //總中斷打開
        EX1 = 1;                                   //外部中斷1打開
        IT1 = 0;                                   //外部中斷1工作方式,為低電平觸發,IT1 = 1為下降沿觸發
}

/***************************************************************
函數:主函數
功能:綜合各個函數的作用
注意:進入主函數的時候,首先開啟初始化函數功能
***************************************************************/
void main() {
        init_main();                           //初始化主函數之前的所有操作
        while(1) {                                   //進入無限循環當中
                key_scan();                           //進行鍵盤掃描函數
        }
        //clear_screen();
}

/*********************************************************************
函數:鍵盤掃描函數
功能:集成了輸入密碼,顯示密碼個數,清除密碼,
          顯示密碼正確與錯誤各種功能的集成函數
          可稱為本函數的核心函數之一
鍵盤掃描方式:采用的翻轉法的鍵盤掃描,可以減少掃描代碼的數量
注意:本函數采用的是帶有返回值,不帶參數的函數,所以在函數的
          末尾一定要加入return keyscan;這個語句
**********************************************************************/
uchar key_scan()
{                                                                                  //函數開始
   unsigned char k=0,p1_h=0,p1_l=0;                  //翻轉法的定義k為選擇分支作用,
   uchar Mark;                                                                                  //p1_h是選擇分支的高四位,p1_l是選擇分支的低四位
   char keyscan = 0, i = 0, j = 0;                  //記錄輸入的數據是數值,然后將其送入到shuru所代表的數組當中去
                                                                                     //i的作用記錄輸入的數據是否是6位數據,防止超出所存儲的數組的空間
                                                                                  //j的作用是用來加強功能鍵“確認”的作用
/*************************/
        P1 = 0xf0;                                  //翻轉法先給P1口送數據
        k = P1;                                          //然后賦值給k
        if(k != 0xf0)                                  //判斷k是否是0xf0,如果不是,進入內部執行相應的程序
        {
                delayms(50);                          //延時,防抖動
                k = P1;                                  //重新賦值
                if(k != 0xf0)                          //確定是否k不等于0xf0
                {
                        number++;                  //number用于確定后面的在12864中的輸出位置和密碼存儲的位置
                        p1_h = P1;                  //將P1的高四位賦值給p1_h
                        P1 = 0x0f;                  //然后將0x0f賦值給P1口,翻轉,確定低四位,賦值給p1_l
                        p1_l = P1;                  //將P1口的值賦給p1_l(是小寫的字母l,不是數字1)

                        k = p1_h|p1_l;                  //將高四位和低四位相或,然后賦值給k
                        if (k == 0XE7) {          //此判斷是為了確定是否是確認按鍵,如果是,直接進入確定程序
                                j = 1;        
                        }

                        if(number == 7)                  //此判斷是為了確定輸入的是否是6個數字,防止多輸入或者少輸入
                        {
                                if (k != 0XB7) {  //這個是判斷是否是清除按鍵,
                                        number = 0;
                                }
                        }

                        while (p1_l == P1);          //這個是松手檢測,防止長時間按在按鍵上,使輸入的數據重復
                        if (number > 0||j == 1){  
                                switch(k)          //條件分支語句
                                {
                                        case 0XD7: keyscan = 0;        Lcd_Character_16X8( 1, 6, 8*number,shuzi[0]);delayms(1000);Lcd_Character_16X8( 1, 6, 8*number,shuzi[10]);shuru[number-1] = keyscan;break;                //keyscan是用來確定輸入的數據,number是用來確定輸入的位置,shuru【】是用來放置密碼
                                        case 0XEE: keyscan = 1;        Lcd_Character_16X8( 1, 6, 8*number,shuzi[1]);delayms(1000);Lcd_Character_16X8( 1, 6, 8*number,shuzi[10]);shuru[number-1] = keyscan;break;                //keyscan是用來確定輸入的數據,number是用來確定輸入的位置,shuru【】是用來放置密碼
                                        case 0XDE: keyscan = 2; Lcd_Character_16X8( 1, 6, 8*number,shuzi[2]);delayms(1000);Lcd_Character_16X8( 1, 6, 8*number,shuzi[10]);shuru[number-1] = keyscan;break;                //keyscan是用來確定輸入的數據,number是用來確定輸入的位置,shuru【】是用來放置密碼
                                        case 0XBE: keyscan = 3; Lcd_Character_16X8( 1, 6, 8*number,shuzi[3]);delayms(1000);Lcd_Character_16X8( 1, 6, 8*number,shuzi[10]);shuru[number-1] = keyscan;break;                //keyscan是用來確定輸入的數據,number是用來確定輸入的位置,shuru【】是用來放置密碼
                                        case 0XED: keyscan = 4;        Lcd_Character_16X8( 1, 6, 8*number,shuzi[4]);delayms(1000);Lcd_Character_16X8( 1, 6, 8*number,shuzi[10]);shuru[number-1] = keyscan;break;                //keyscan是用來確定輸入的數據,number是用來確定輸入的位置,shuru【】是用來放置密碼
                                        case 0XDD: keyscan = 5;        Lcd_Character_16X8( 1, 6, 8*number,shuzi[5]);delayms(1000);Lcd_Character_16X8( 1, 6, 8*number,shuzi[10]);shuru[number-1] = keyscan;break;                //keyscan是用來確定輸入的數據,number是用來確定輸入的位置,shuru【】是用來放置密碼
                                        case 0XBD: keyscan = 6; Lcd_Character_16X8( 1, 6, 8*number,shuzi[6]);delayms(1000);Lcd_Character_16X8( 1, 6, 8*number,shuzi[10]);shuru[number-1] = keyscan;break;                //keyscan是用來確定輸入的數據,number是用來確定輸入的位置,shuru【】是用來放置密碼
                                        case 0XEB: keyscan = 7;        Lcd_Character_16X8( 1, 6, 8*number,shuzi[7]);delayms(1000);Lcd_Character_16X8( 1, 6, 8*number,shuzi[10]);shuru[number-1] = keyscan;break;                //keyscan是用來確定輸入的數據,number是用來確定輸入的位置,shuru【】是用來放置密碼
                                        case 0XDB: keyscan = 8;        Lcd_Character_16X8( 1, 6, 8*number,shuzi[8]);delayms(1000);Lcd_Character_16X8( 1, 6, 8*number,shuzi[10]);shuru[number-1] = keyscan;break;                //keyscan是用來確定輸入的數據,number是用來確定輸入的位置,shuru【】是用來放置密碼
                                        case 0XBB: keyscan = 9; Lcd_Character_16X8( 1, 6, 8*number,shuzi[9]);delayms(1000);Lcd_Character_16X8( 1, 6, 8*number,shuzi[10]);shuru[number-1] = keyscan;break;                //keyscan是用來確定輸入的數據,number是用來確定輸入的位置,shuru【】是用來放置密碼
                                        case 0XE7: number = 0;
                                                           for(i = 0; i < 6; i++)
                                                                        if (mima[i] != shuru[i])//對比原始密碼和輸入密碼
                                                                        {
                                                                                Mark++;
                                                                                //該if語句是用來判斷密碼Mark的錯誤次數,一旦達到3次,
                                                                                //就進入到while循環當中,并且P30口 = 0;蜂鳴器響,直至單片機復位才可消失
                                                                                if (3 == Mark) {
                                                                                        P30 = 0;
                                                                                        Lcd_Character_16X8( 1, 6, 8*1,disappear_char[0]);
                                                                                        Lcd_Character_16X8( 1, 6, 8*2,disappear_char[0]);
                                                                                        Lcd_Character_16X8( 1, 6, 8*3,disappear_char[0]);
                                                                                        Lcd_Character_16X8( 1, 6, 8*4,disappear_char[0]);
                                                                                        Lcd_Character_16X8( 1, 6, 8*5,disappear_char[0]);
                                                                                        Lcd_Character_16X8( 1, 6, 8*6,disappear_char[0]);
                                                                                        while(1);
                                                                                }
                                                                                //密碼錯誤
                                                                                Lcd_Character_16X16( 1, 6, 64,mistake[0]);
                                                                                Lcd_Character_16X16( 1, 6, 80,mistake[1]);
                                                                                Lcd_Character_16X16( 1, 6, 96,mistake[2]);
                                                                                Lcd_Character_16X16( 1, 6, 112,mistake[3]);
                                                                                //消除密碼顯示
                                                                                delayms(1000);
                                                                                Lcd_Character_16X8( 1, 6, 8*1,disappear_char[0]);
                                                                                Lcd_Character_16X8( 1, 6, 8*2,disappear_char[0]);
                                                                                Lcd_Character_16X8( 1, 6, 8*3,disappear_char[0]);
                                                                                Lcd_Character_16X8( 1, 6, 8*4,disappear_char[0]);
                                                                                Lcd_Character_16X8( 1, 6, 8*5,disappear_char[0]);
                                                                                Lcd_Character_16X8( 1, 6, 8*6,disappear_char[0]);
                                                                                //消除密碼錯誤漢字顯示
                                                                                Lcd_Character_16X16( 1, 6, 64,disappear_hanzi[0]);
                                                                                Lcd_Character_16X16( 1, 6, 80,disappear_hanzi[0]);
                                                                                Lcd_Character_16X16( 1, 6, 96,disappear_hanzi[0]);
                                                                                Lcd_Character_16X16( 1, 6, 112,disappear_hanzi[0]);
                                                                                break;                                                                                                
                                                                        }
                                                                        if(i == 6)        //確認密碼是否是正確的,通過i值
                                                                        {
                                                                                //輸入密碼正確
                                                                                Lcd_Character_16X16( 1, 6, 64,mistake[0]);
                                                                                Lcd_Character_16X16( 1, 6, 80,mistake[1]);
                                                                                Lcd_Character_16X16( 1, 6, 96,mistake[4]);
                                                                                Lcd_Character_16X16( 1, 6, 112,mistake[5]);
                                                                                delayms(1000);                //延時
                                                                                //消除密碼顯示位
                                                                                Lcd_Character_16X8( 1, 6, 8*1,disappear_char[0]);
                                                                                Lcd_Character_16X8( 1, 6, 8*2,disappear_char[0]);
                                                                                Lcd_Character_16X8( 1, 6, 8*3,disappear_char[0]);
                                                                                Lcd_Character_16X8( 1, 6, 8*4,disappear_char[0]);
                                                                                Lcd_Character_16X8( 1, 6, 8*5,disappear_char[0]);
                                                                                Lcd_Character_16X8( 1, 6, 8*6,disappear_char[0]);
                                                                                //消除密碼正確顯示位
                                                                                Lcd_Character_16X16( 1, 6, 64,disappear_hanzi[0]);
                                                                                Lcd_Character_16X16( 1, 6, 80,disappear_hanzi[0]);
                                                                                Lcd_Character_16X16( 1, 6, 96,disappear_hanzi[0]);
                                                                                Lcd_Character_16X16( 1, 6, 112,disappear_hanzi[0]);
                                                                                P32 = 1;
                                                                                delayms(2000);
                                                                                P32 = 0;
                                                                        }
                                                                break;         
                                        case 0XB7: keyscan = 10;number--;Lcd_Character_16X8( 1, 6, 8*number,disappear_char[0]);number--;break;
                                        //這個是用來清除輸錯的密碼,然后重新輸入新的位數的密碼
                                        default: break;
                                /*        case 0XE7: return(4);break;
                                        case 0XDE: return(5);break;
                                        case 0XDD: return(6);break;
                                        case 0XDB: return(7);break;
                                        case 0XD7: return(8);break;
                                        case 0XBE: return(9);break;
                                        case 0XBD: return(10);break;
                                        case 0XBB: return(11);break;
                                        case 0XB7: return(12);break;
                                        case 0X7E: return(13);break;
                                        case 0X7D: return(14);break;
                                        case 0X7B: return(15);break;
                                        case 0X77: return(16);break;
                                        default:  return(0);break;        */
                                }
                        }

                }
        }
        return keyscan;                                //函數返回的參數

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:362913 發表于 2018-7-3 10:16 | 只看該作者
已經解決了
回復

使用道具 舉報

板凳
ID:111634 發表于 2018-7-7 16:32 | 只看該作者
本帖最后由 zl2168 于 2018-7-7 16:36 編輯

功能齊全的電子密碼鎖
⑴ 電路設計    …

⑵ 功能設計    …

⑶ 程序設計    …
⑷ Proteus仿真    … 電子密碼鎖1.rar (1.13 MB, 下載次數: 3)
Proteus仿真一下,確認有效,驗證上述功能。以上摘自張志良編著《80C51單片機實用教程》ISBN 978-7-04-044532-9,高教社出版。書中電路和程序設計有詳細說明,程序語句條條有注解。

電子密碼鎖功能3.jpg (192.6 KB, 下載次數: 24)

電子密碼鎖功能3.jpg
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区久久 | 色性av | 男女羞羞视频在线 | 亚洲精品91 | 精品一区二区视频 | a看片| 一区二区三区四区av | 欧美在线观看网站 | 老头搡老女人毛片视频在线看 | 久热免费 | 一级黄a视频| 国产一区视频在线 | www.久久| 色吧色综合 | 盗摄精品av一区二区三区 | 日韩和的一区二区 | www.五月天婷婷.com | 久久亚洲一区二区三 | 欧美日韩中文字幕 | 91免费版在线观看 | 午夜精品在线 | 97人人爱 | 日韩在线精品 | 羞羞的视频免费看 | 午夜影院在线观看版 | 欧美午夜精品久久久久免费视 | 久热久| 日本午夜视频 | 欧美日韩精品在线免费观看 | 精品欧美 | 日韩中文视频 | 天天操天天干天天曰 | 国产一区二区在线视频 | 亚洲91 | 完全免费在线视频 | 亚洲综合国产精品 | 中文字幕第一页在线 | 欧美一级欧美三级在线观看 | 午夜看看 | www.色.com| 神马久久av |