用24C04與1602LCD設(shè)計(jì)電子密碼鎖.doc_第1頁
用24C04與1602LCD設(shè)計(jì)電子密碼鎖.doc_第2頁
用24C04與1602LCD設(shè)計(jì)電子密碼鎖.doc_第3頁
用24C04與1602LCD設(shè)計(jì)電子密碼鎖.doc_第4頁
用24C04與1602LCD設(shè)計(jì)電子密碼鎖.doc_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

畢業(yè)設(shè)計(jì) 論文 畢業(yè)設(shè)計(jì) 論文 學(xué)學(xué) 生生 姓姓 名 名 趙軍成 學(xué)學(xué) 號(hào) 號(hào) 21 專專 業(yè)業(yè) 應(yīng)用電子技術(shù) 系系 部部 電子工程學(xué)院 設(shè)計(jì)設(shè)計(jì) 論文論文 題目題目 用 24C04 與 1602LCD 設(shè)計(jì)電子密碼鎖 課程設(shè)計(jì) 指指 導(dǎo)導(dǎo) 教教 師師 陳愛文 年 月 日 目 錄 0 1 引言 2 2 設(shè)計(jì)任務(wù)和要求 3 2 1 系統(tǒng)總結(jié)構(gòu)設(shè)計(jì)圖 3 2 2 單元電路設(shè)計(jì)與參數(shù)計(jì)算 4 2 3 各模塊的功能 4 2 3 2 矩陣鍵盤鍵值讀取 5 2 3 3 1602液晶顯示模塊 5 2 4 延時(shí)模塊 6 2 4 2密碼設(shè)置模塊 6 2 4 3 密碼比較模塊 7 2 4 4改密處理 7 2 5 單片機(jī)及其外圍電路 8 2 6 時(shí)鐘電路 9 2 7 矩陣鍵盤電路的設(shè)計(jì) 10 2 8 操作面板 11 2 9 液晶顯示電路 11 2 9 2 液晶顯示子程序 13 2 10 系統(tǒng)軟件設(shè)計(jì) 14 2 11 系統(tǒng)主程序 14 2 12 初始化及按鍵識(shí)別 15 2 13 源程序如下所示 16 3 實(shí)現(xiàn)與檢測 28 3 1 原理圖及元器件清單 28 3 2 綜合邏輯功能檢測 29 參考文獻(xiàn) 30 摘要摘要 隨著信息技術(shù)的不斷發(fā)展 信息化時(shí)代也逐步進(jìn)入普通家庭 人們對(duì)個(gè)人的信息 安全以及隱私等私密信息的安全要求不斷提高 傳統(tǒng)的機(jī)械鎖已經(jīng)不能滿足要求 針對(duì) 此現(xiàn)狀設(shè)計(jì)一款安全可靠廉價(jià)的電子密碼鎖有著十分重要的意義 本設(shè)計(jì)以 AT89C51 為 主控芯片 帶有一個(gè)密碼輸入鍵盤 外圍時(shí)鐘復(fù)位電路 存儲(chǔ)單元 24C04 顯示單元 1602LCD 通過 LED 燈的亮與滅表示電子鎖的鎖閉與打開 利用單片機(jī)靈活的編程設(shè)計(jì)和 豐富的 IO 端口 能實(shí)現(xiàn)密碼鎖的基本功能 用戶可以任意設(shè)置密碼增加了密碼鎖的保密 性 同時(shí)如果增加指紋識(shí)別 光電識(shí)別能進(jìn)一步增加密碼鎖的保密性 為了提高可讀性 采用了 1602 作為顯示單元 使用戶對(duì)密碼鎖的運(yùn)行情況一目了然 關(guān)鍵詞 單片機(jī) 電子密碼鎖 24C04 1602LCD 匯編語言 程序設(shè)計(jì) 1 引言引言 隨著人們生活水平的提高 如何實(shí)現(xiàn)家庭防盜這一問題也變的尤其的突出 鎖是置于 可啟閉的器物上 用以關(guān)住某個(gè)確定的空間范圍或某種器具的 必須以鑰匙或暗碼打開扣 件 傳統(tǒng)的機(jī)械鎖由于其構(gòu)造的簡單 被撬的事件屢見不鮮 鎖具發(fā)展到現(xiàn)在已有若干 年的歷史了 人們對(duì)它的結(jié)構(gòu) 機(jī)理也研究得很透徹 因此 不用鑰匙就能打開的方法 和工具也層出不窮 盜賊還想方設(shè)法利用高科技手段撬門開鎖 使廣大居民防不勝防 傳統(tǒng)鎖具都存在致命的弱點(diǎn) 第一 鎖芯采用常見的銅 鋁 鋅等材料 抵抗不了強(qiáng)力 破壞 第二 鎖具制作工藝 技術(shù)落后 無法阻止技術(shù)手段的開啟 目前 市場上很多 國內(nèi)外的鎖具 實(shí)際上都不具備真正的防盜功能 在慣偷面前 兩根鋼絲或幾件簡單的 工具就可以把這些鎖打開 主要是鎖具的技術(shù)原理太過簡單 隨著科技的進(jìn)步 鎖已發(fā) 展到了密碼鎖 磁性鎖 電子鎖 激光鎖 聲控鎖等等 在傳統(tǒng)鑰匙的基礎(chǔ)上 加了一 組或多組密碼 不同聲音 不同磁場 不同聲波 不同光束光波 不同圖像 如指紋 眼底視網(wǎng)膜等 來控制鎖的開啟 從而大大提高了鎖的安全性 使不法之徒無從下手 人們也就能對(duì)自身財(cái)產(chǎn)安全有了更多的保障 當(dāng)今安全信息系統(tǒng)應(yīng)用越來越廣泛 特別 在保護(hù)機(jī)密 維護(hù)隱私和財(cái)產(chǎn)保護(hù)方面起到重大作用 而基于電子密碼鎖的安全系統(tǒng)是 其中的組成部分 因此研究它具有重大的現(xiàn)實(shí)意義 電子鎖可以在日常生活和現(xiàn)代辦公中 住宅與辦公室的安全防范 單位的文件檔案 財(cái)務(wù)報(bào)表以及一些個(gè)人資料的保存等多種場合使用 大大提高了主人物資的安全性 目 前使用的密碼鎖種類繁多 各具特色 本文從經(jīng)濟(jì)實(shí)用的角度出發(fā) 采用 AT89S51 單機(jī) 研制了一款具有防盜自動(dòng)報(bào)警功能的電子密碼鎖 同時(shí)通過 LCD1602 增強(qiáng)了可讀性 該 密碼鎖設(shè)計(jì)方法合理 簡單易行 成本低 符合住宅 辦公室用鎖要求 具有一定的推 廣價(jià)值 1 系統(tǒng)設(shè)置 6 位密碼 密碼通過鍵盤輸入 若密碼正確 則將鎖打開 2 密碼 由用戶自己設(shè)定 在開鎖狀態(tài)下 用戶可自行修改密碼 3 具有自動(dòng)報(bào)警功能 一是密碼輸入錯(cuò)誤 3 次 則報(bào)警 保證了系統(tǒng)的安全性 系 統(tǒng)工作時(shí) 用戶通過按鍵輸入 6 位密碼 單片機(jī)將輸入密碼與設(shè)定密碼進(jìn)行比較 若密 碼正確 則發(fā)出開鎖信號(hào) 將門打開 系統(tǒng)不報(bào)警 若密碼不正確 系統(tǒng)提示重新輸入 密碼 重新輸入密碼的次數(shù)不能超過 3 次 若 3 次輸入的密碼都不正確 則發(fā)出報(bào)警信 號(hào) 本文注重實(shí)踐和理論相結(jié)合 按照單片機(jī)初學(xué)者的學(xué)習(xí)過程 由淺入深逐步講解了設(shè)計(jì) 電子鎖的整個(gè)設(shè)計(jì)過程及應(yīng)用到的編程軟件 整個(gè)設(shè)計(jì)報(bào)告工分為 4 個(gè)部分 各部分的安排 如下 第一部分 是設(shè)計(jì)電子鎖的背景及目的 第二部分 介紹了這個(gè)方案的設(shè)計(jì)任務(wù)要求 第三部分 介紹了電子鎖的原理圖及元器件清單 第四部分 介紹了電子鎖的性能測試與分析 2 2 設(shè)計(jì)任務(wù)和要求設(shè)計(jì)任務(wù)和要求 設(shè)計(jì)任務(wù)是利用開發(fā)板設(shè)計(jì)一個(gè)電子鎖 設(shè)計(jì)要求 自己在自己電腦上寫好要連接的電子鎖的程序 再在實(shí)驗(yàn)室里將已經(jīng)調(diào)試成 功的電子鎖的程序下載到開發(fā)板上 觀察并記錄開發(fā)板上的等的運(yùn)行情況 如果不是如預(yù)期 那樣運(yùn)行 要找出原因并進(jìn)行調(diào)試 最后對(duì)自己的實(shí)驗(yàn)設(shè)計(jì)進(jìn)行驗(yàn)收 2 1 系統(tǒng)總結(jié)構(gòu)設(shè)計(jì)圖 本設(shè)計(jì)由主控芯片 51 單片機(jī) 24C04 斷電存儲(chǔ)電路 單片機(jī)時(shí)鐘電路 LCD1602 顯示電路 鍵盤和開鎖電路組成 單片機(jī)負(fù)責(zé)控制整個(gè)系統(tǒng)的執(zhí)行過程 開鎖控制電路 89S51 單片機(jī) 24C02 掉電存儲(chǔ) LCD1602 顯示電路 矩陣 鍵盤 控制 指示電路 輸入錯(cuò)誤鎖定鍵盤 延時(shí)報(bào)警控制電路 2 2 單元電路設(shè)計(jì)與參數(shù)計(jì)算 圖 2 2 1 電子鎖的仿真圖 2 3 各模塊的功能 1 鍵盤輸入模塊 分為密碼輸入按鍵與幾個(gè)功能按鍵 用于完成密碼鎖輸入功能 2 密碼存儲(chǔ)模塊 用于完成掉電存儲(chǔ)功能 使修改的密碼斷電后仍能保存 3 蜂鳴器報(bào)警電路 用于完成輸錯(cuò)密碼時(shí)候的警報(bào)功能 4 晶振電路 用于單片機(jī)的起振 5 復(fù)位電路 完成系統(tǒng)的復(fù)位 6 顯示模塊 用于完成對(duì)系統(tǒng)狀態(tài)顯示及操作提示功能 7 LED 顯示模塊 用于輔助報(bào)警與輸入提示 8 開鎖電路 應(yīng)用繼電器及發(fā)光二極管模擬開鎖 完成開鎖及開鎖提示 2 3 2 矩陣鍵盤鍵值讀取 矩陣鍵盤接 P1 口 行接低 4 位 列接高 4 為 先讓行為高 列為低 若有鍵按下 則 所在行為低 得到按鍵的所在行數(shù) 之后令 P1 口 行為低 列為高 運(yùn)用相似的方法得到 所按鍵的所在列數(shù) 及確定按鍵位置 返回鍵值 由于機(jī)械鍵盤會(huì)出現(xiàn)信號(hào)抖動(dòng)的情況 固 在發(fā)現(xiàn)有按鍵后延時(shí) 5 毫秒再次確定 若讓有按鍵 證明按鍵穩(wěn)定 否則認(rèn)為接收到的是抖 動(dòng)信號(hào) 不予處理 2 3 3 1602 液晶顯示模塊 1602 具有三個(gè)工作狀態(tài)控制端 調(diào)節(jié)他們的高低變化配合數(shù)據(jù)口的信息 可以顯示 2 16 的字母或者數(shù)字 通過子函數(shù)可以實(shí)現(xiàn)檢測初始化 LCD 寫指令到 LCD LCD 狀態(tài) LCD 清屏 輸入一個(gè)字節(jié)數(shù)據(jù)到 LCD LCD 光標(biāo)定位到 x 處 LCD 光標(biāo)歸位 輸入一個(gè)字符到 LCD 輸入一個(gè)字符串到 LCD 等功能 液晶顯示子程序在每次更新顯示內(nèi)容時(shí)都會(huì)被調(diào)用 其流程如圖所示 開始 清顯示 寫指令入IR 字符地址入DPTR 字符 00H 寫結(jié)束 字符代碼送入P0口寫數(shù)據(jù)入DR 地址 1 返回 液晶顯示子程序流程圖 每次更新顯示內(nèi)容前 需清顯示清空 LCD 原先的顯示內(nèi)容 清屏指令的指令碼為 01H 即將 P0 口賦值 01H 然后寫入指令寄存器 IR LCD1602 要顯示的內(nèi)容是根據(jù)其控制器內(nèi)置的字符碼表 事先列出要顯示的 ASCII 字符 串 每次送一個(gè)字符的 ASCII 碼入 P0 口 然后寫入數(shù)據(jù)寄存器 DR 最后將字符地址加一 LCD1602 會(huì)將寫入的 ASCII 碼對(duì)應(yīng)的字符依次顯示出來 由于顯示字符串的長度不盡相同 約定每串字符以 00H 結(jié)尾 程序檢測到字符碼為 00H 時(shí) 即停止寫入 返回 LCD 顯示的內(nèi) 容在下次更新前會(huì)一直保持 2 4 延時(shí)模塊 一個(gè)程序會(huì)有許多地方需要進(jìn)行延時(shí)操作 例如矩陣鍵盤的消抖延時(shí) 一般延時(shí)可以通 過空循環(huán)與中斷響應(yīng)兩種方法進(jìn)行 由于本程序?qū)τ跁r(shí)間精度要求不高 故使用相對(duì)簡單的 空循環(huán)的方法進(jìn)行延時(shí) 進(jìn)過實(shí)驗(yàn) 單片機(jī)每空循環(huán) 110 次耗時(shí) 1ms 故用兩次循環(huán) 里面 一次空循環(huán) 110 外面的一次由輸入決定循環(huán)次數(shù) 這樣就會(huì)進(jìn)行輸入數(shù)值時(shí)長的延時(shí) 2 4 4 密碼讀取模塊 首先預(yù)讀入密碼的字符數(shù)組清零 顯示位置清空 然后讀取鍵值 先判斷此時(shí)是否是在 第九個(gè)鍵值輸入了數(shù)字鍵值 如果是不響應(yīng)重新讀入 這樣可以防止讀入字符串溢出 造成 密碼讀取錯(cuò)誤 然后通過 switch 語句 5 處理鍵值 字母鍵值 并將讀取位置 顯示位置進(jìn) 行相關(guān)調(diào)整 如果輸入的是數(shù)字有效鍵值 存入當(dāng)前指向的字符數(shù)組空間 其后將鍵值變量 清零準(zhǔn)備讀取下一個(gè)鍵值 進(jìn)行循環(huán)讀取 直到成功讀取 8 位密碼或者因?yàn)檩斎肓舜_定鍵提 前完成讀取工作 2 4 2 密碼設(shè)置模塊 在系統(tǒng)進(jìn)行初始化時(shí) 要求設(shè)置密碼 整體思路是要求讀取一組密碼 保存在臨時(shí)空間 然后再次讀取密碼 如果相同 證明設(shè)置成功 將新密碼覆蓋進(jìn)標(biāo)準(zhǔn)密碼數(shù)組里 如果兩次 的密碼不同 顯示錯(cuò)誤信息 要求重新輸入 第一次讀入密碼 第二次讀入密碼 保存密碼 提示成功 判斷兩次密碼 相同 不相同 圖 2 3 5 密碼設(shè)置模塊 2 4 3 密碼比較模塊 該模塊將輸入密碼字符串與設(shè)定密碼字符串比較 如果相同 執(zhí)行開鎖動(dòng)作并將輸入錯(cuò) 誤次數(shù)清零 如果不同 累計(jì)錯(cuò)誤次數(shù) 如果是第三次輸入錯(cuò)誤 系統(tǒng)鎖死并發(fā)出聲光告警 如果小于三次 顯示密碼錯(cuò)誤信息 返回密碼輸入環(huán)節(jié) 邏輯框圖如圖 2 3 6 圖 2 3 6 密碼比較模塊 2 4 4 改密處理 如圖 可以看出 改密鍵的處理流程跟開鎖鍵類似 都需檢查密碼是否正確 錯(cuò)誤的話 提示重新輸入 只有輸入密碼正確才可以進(jìn)行改密 然后再按更改鍵 密碼更改程序被調(diào)用 進(jìn)而更改密碼 此過程 LCD 都會(huì)顯示信息 模塊啟動(dòng) 驗(yàn)證密碼 判斷錯(cuò)誤 次數(shù) 顯示錯(cuò)誤信息并 返回 發(fā)出報(bào)警 系統(tǒng)鎖死 發(fā)出報(bào)警 系統(tǒng)鎖死 連續(xù)錯(cuò)誤次 數(shù)小于三次 連續(xù)錯(cuò)誤次數(shù) 小于三次 密碼正確 密碼錯(cuò)誤 開始 密碼正確 提示 輸入新密碼 密碼錯(cuò)誤重新輸入 再次 輸入新密碼 對(duì)比兩次 輸入相同 更改成功 否 否 是 改密流程圖 2 5 單片機(jī)及其外圍電路 復(fù)位電路 2 6 時(shí)鐘電路 時(shí)鐘電路為單片機(jī)產(chǎn)生時(shí)序脈沖 單片機(jī)所有運(yùn)算與控制過程都是在統(tǒng)一的時(shí)序脈沖的驅(qū)動(dòng) 下的進(jìn)行的 如果單片機(jī)的時(shí)鐘電路停止工作 晶振停振 那么單片機(jī)也就停止運(yùn)行了 當(dāng)采用內(nèi)部時(shí)鐘時(shí) 連接方法如下圖所示 在晶振引腳XTAL1 19腳 和XTAL2 18腳 引腳 之間接入一個(gè)12MHZ晶振 兩個(gè)引腳對(duì)地分別再接入一個(gè)電容即可產(chǎn)生所需的時(shí)鐘信號(hào) 電 容的容量一般在幾十皮法 C1 C2 Y1 XTA L1 XTA L2 2 7 矩陣鍵盤電路的設(shè)計(jì) 為了加強(qiáng)密碼的保密性 采用一個(gè) 4 4 的矩陣式鍵盤可以任意設(shè)置用戶密碼 1 16 位 長度 從而提高了密碼的保密性 同時(shí)也能減少與單片機(jī)接口時(shí)所占用的 I O 口線的數(shù)目 節(jié)省了單片機(jī)的寶貴資源 在按鍵比較多的時(shí)候 通常采用這種方法 每一行與每一列的交叉處不相同 而是通過一個(gè)按鍵來連通 利用這種行列式矩陣結(jié)構(gòu) 只需要 N 根行線與 M 根列線 即可組成具有 N M 個(gè)按鍵的矩陣鍵盤 在這種行列式矩陣鍵盤編碼的單片機(jī)系統(tǒng)中 鍵盤處理程序首先執(zhí)行等待按鍵并確認(rèn)有 無按鍵按下的程序段 當(dāng)確認(rèn)有按鍵按下后 下一步就是要識(shí)別哪一個(gè)按鍵被按下 對(duì)鍵的識(shí)別方法通常有兩 種 一種是通用的組行掃描查詢法 另一種是速度較快的線反轉(zhuǎn)法 此系統(tǒng)中 我們采用線反轉(zhuǎn)法 首先辨別鍵盤中有無按鍵被按下 在單片機(jī) I O 口向鍵 盤送全掃描字 然后讀入行線狀態(tài)來判斷 具體方法是 向行線輸出全掃描字 00H 把全部 列線置成低電平 然后將列線的電平狀態(tài)讀入累加器 A 中 如果有按鍵被按下 總會(huì)有一根 行線電瓶被拉至低電平從而使行線不全為 1 判斷鍵盤中哪一個(gè)按鍵被按下通常是通過將列線逐列至低電平后 檢查行輸入狀態(tài)來實(shí) 現(xiàn)的 方法是 依次給列線送低電平 然后檢查所有行線狀態(tài) 如果全為 1 則所按下的按 鍵不在此列 如果不全為 1 則所按下的按鍵必在此列 而且是在與零電平行線相交的交點(diǎn) 上的那個(gè)按鍵 2 8 操作面板 10 個(gè)數(shù)字鍵用來輸入密碼 另外 6 個(gè)功能鍵分別是 更正 改密 鎖定 其中更正鍵 的功能是當(dāng)輸入密碼錯(cuò)誤的時(shí)候 清除前面已經(jīng)輸入的數(shù)據(jù) 重新輸入 在輸入密碼狀態(tài)下 0 9 數(shù)字鍵為有效鍵 有時(shí)間和次數(shù)限制功能 只有三次輸入密碼機(jī)會(huì) 每次限制在 10 秒 內(nèi)完成 輸入密碼有誤或每次輸入密碼超時(shí) 則被認(rèn)為是密碼輸入錯(cuò)誤 當(dāng) 3 次輸入都錯(cuò)誤 時(shí) 程序?qū)⒎祷仄鹗紶顟B(tài) 密碼輸入正確后 繼電器吸合 表示鎖被打開 在密碼輸入正確 的情況下 程序進(jìn)入查看密碼和修改密碼狀態(tài) 按 改密 鍵進(jìn)入重新設(shè)置密碼狀態(tài) 在 輸入密碼時(shí) 如發(fā)現(xiàn)輸入有誤 可按 更正 鍵刪除后 重新輸入 按 鎖定 確認(rèn)后 程 序退出修改密碼狀態(tài) 2 9 液晶顯示電路 本系統(tǒng)設(shè)計(jì)的顯示電路是為了給使用者以提示而設(shè)置的為了達(dá)到界面友好的目的 顯示 部分由液晶顯示器 LCD1602 取代普通的數(shù)碼管完成 開鎖時(shí) 按下鍵盤上的開鎖按鍵后 利 用鍵盤上的數(shù)字鍵 0 9 輸入密碼 每按下一個(gè)數(shù)字鍵后在顯示器上顯示一個(gè) 輸入多少位 就顯示多少個(gè) 當(dāng)密碼輸入完成時(shí) 如果輸入的密碼正確的話 LCD 顯示 OK 綠燈亮 起 單片機(jī)其中 P3 0 引腳會(huì)輸出低電平 使三極管 T2 導(dǎo)通 電磁鐵吸合 繼電器開關(guān)跳轉(zhuǎn) 電子密碼鎖被打開 如果密碼不正確 LCD 顯示屏?xí)@示 ERROR P3 0 輸出的是高電平 電子密碼鎖不能打開 同時(shí)紅燈亮起 通過 LCD 顯示屏 可以清楚地判斷出密碼鎖所處的狀 態(tài) 圖3 7 顯示器電路 顯示器主要用于顯示以下幾個(gè)字符 指示如圖所示 圖3 8 a 開機(jī)狀態(tài) 等待輸入狀態(tài) 密碼輸入正確狀態(tài) 密碼輸入錯(cuò)誤及輸入密碼超時(shí)的提示 2 9 2 液晶顯示子程序 液晶顯示子程序在每次更新顯示內(nèi)容時(shí)都會(huì)被調(diào)用 其流程如圖所示 ASWORDPS D KO RORE R 開始 清顯示 寫指令入IR 字符地址入DPTR 字符 00H 寫結(jié)束 字符代碼送入P0口寫數(shù)據(jù)入DR 地址 1 返回 液晶顯示子程序流程圖 每次更新顯示內(nèi)容前 需清顯示清空 LCD 原先的顯示內(nèi)容 清屏指令的指令碼為 01H 即將 P0 口賦值 01H 然后寫入指令寄存器 IR LCD1602 要顯示的內(nèi)容是根據(jù)其控制器內(nèi)置的字符碼表 事先列出要顯示的 ASCII 字符 串 每次送一個(gè)字符的 ASCII 碼入 P0 口 然后寫入數(shù)據(jù)寄存器 DR 最后將字符地址加一 LCD1602 會(huì)將寫入的 ASCII 碼對(duì)應(yīng)的字符依次顯示出來 由于顯示字符串的長度不盡相同 約定每串字符以 00H 結(jié)尾 程序檢測到字符碼為 00H 時(shí) 即停止寫入 返回 LCD 顯示的內(nèi) 容在下次更新前會(huì)一直保持 2 10 系統(tǒng)軟件設(shè)計(jì) 系統(tǒng)的軟件設(shè)計(jì)采用匯編語言編碼 設(shè)計(jì)方法是先用文本編輯器編寫源碼 然后用軟件 Keil C51 編譯 如果沒有錯(cuò)誤 可連接生成 HEX 格式的文件 需事先在 Keil C51 中設(shè)置 如果有錯(cuò)誤則無法連接 但可在生成的 OBJ 文件中找到代碼錯(cuò)誤的地方 便于修改 當(dāng)然 也可以直接在 Keil 中編碼 生成的 HEX 文件是記錄文本行的 ASCII 文本文件 在 HEX 文件 中 每一行是一個(gè) HEX 記錄 由十六進(jìn)制數(shù)組成的機(jī)器碼或者數(shù)據(jù)常量 HEX 文件經(jīng)常被用 于將程序或數(shù)據(jù)傳輸存儲(chǔ)到 ROM EPROM 大多數(shù)編程器和模擬器使用 HEX 文件 2 11 系統(tǒng)主程序 系統(tǒng)的主程序如圖 4 1 所示 由于用戶在使用系統(tǒng)的過程中 可能在任何時(shí)刻按下任何 按鍵 而程序都必須對(duì)此作出正確響應(yīng) 開始 系統(tǒng)初始化 密碼輸入 顯示菜單二 鍵盤掃描 顯示菜單一 啟動(dòng)密碼輸入 F鍵按下 鎖定 密碼比較 關(guān)鎖 延時(shí)1s 開鎖 提示正確 密碼正確 密碼正確標(biāo)志 1 存新密碼 提示錯(cuò)誤 錯(cuò)誤 次數(shù)加1 查看密碼 修改密碼 錯(cuò)誤了3次 D鍵按下 N Y N Y N Y Y N Y N Y N 主程序流程圖 2 12 初始化及按鍵識(shí)別 如圖 4 2 系統(tǒng)的初始化包括堆棧起始地址的設(shè)定 兩個(gè)定時(shí) 計(jì)數(shù)器的設(shè)定 液 晶顯示模式的設(shè)定 密碼緩沖區(qū)的初始化 一些自定義數(shù)據(jù)空間的初始化 蜂鳴器初始化發(fā) 聲等操作 系統(tǒng)初始化并讀取密碼完成后 液晶顯示 PASSWORD CONTROL 提示用戶可以輸入 密碼 此時(shí)程序即不斷測試按鍵 檢查是否有按鍵被按下 如果有 則進(jìn)行按鍵識(shí)別 如果 沒有按鍵按下 或者按下的按鍵沒有被識(shí)別 R3 賦值 0FFH 并跳轉(zhuǎn)至按鍵測試 實(shí)際程序 運(yùn)行時(shí) 絕大部分時(shí)間都在測試按鍵 等待用戶輸入 載入 初始密碼 讀取成功 讀取密碼 系統(tǒng)初始化 開始 提示輸入密碼 按鍵測試子程序 有按鍵按下 按鍵識(shí)別子程序 識(shí)別成功 按鍵重定位 延時(shí)0 5S 否 是 是 是 否 否 初始化及按鍵識(shí)別流程圖 2 13 源程序如下所示 include delay h uS 延時(shí)函數(shù) 含有輸入?yún)?shù) unsigned char t 無返回值 unsigned char 是定義無符號(hào)字符變量 其值的范圍是 0 255 這里使用晶振 12M 精確延時(shí)請(qǐng)使用匯編 大致延時(shí) 長度如下 T tx2 5 uS void DelayUs2x unsigned char t while t mS 延時(shí)函數(shù) 含有輸入?yún)?shù) unsigned char t 無返回值 unsigned char 是定義無符號(hào)字符變量 其值的范圍是 0 255 這里使用晶振 12M 精確延時(shí)請(qǐng)使用匯編 void DelayMs unsigned char t while t 大致延時(shí) 1mS DelayUs2x 245 DelayUs2x 245 include eeprom h include delay h void Start void I2 開始 SDA 1 SCL 1 NOP4 SDA 0 NOP4 SCL 0 void Stop void I2C 停止 SDA 0 SCL 0 NOP4 SCL 1 NOP4 SDA 1 void RACK void 讀取應(yīng)答 SDA 1 NOP4 SCL 1 NOP4 SCL 0 void NO ACK void 發(fā)送非應(yīng)答信號(hào) SDA 1 SCL 1 NOP4 SCL 0 SDA 0 void Write A Byte uchar b 寫一個(gè)字節(jié)數(shù)據(jù) uchar i for i 0 i 8 i b 1 SDA CY CY 進(jìn)位程序狀態(tài)字寄存器 nop SCL 1 NOP4 SCL 0 RACK void Write IIC uchar addr uchar dat 向指寫地地址寫數(shù)據(jù) Start Write A Byte 0 xa0 Write A Byte addr Write A Byte dat Stop DelayMs 10 uchar Read A Byte void 讀取一個(gè)字節(jié) uchar i b for i 0 i 8 i SCL 1 b 4 0 x0f switch temp 橫行 case 1 keyno 0 A break 第一行橫行 case 2 keyno 4 B break 第一行橫行 case 4 keyno 8 C break 第一行橫行 case 8 keyno 12 D break 第一行橫行 P1 0 x0f return keyno include LCD H void write com unsigned char com 寫命令 RS CLR RW CLR P0 com DelayMs 5 EN SET DelayMs 5 EN CLR void write data unsigned char date 寫一個(gè)字符 RS SET RW CLR P0 date DelayMs 5 EN SET DelayMs 5 EN CLR void init 初始化 write com 0 x38 write com 0 x0c write com 0 x06 write com 0 x01 寫入字符串函數(shù) void LCD Write String unsigned char x unsigned char y unsigned char s if y 0 write com 0 x80 x else write com 0 xC0 x while s write data s s 寫入字符函數(shù) void LCD Write Char unsigned char x unsigned char y unsigned char Data if y 0 write com 0 x80 x else write com 0 xC0 x write data Data include include include lcd h include key h include delay h include eeprom h void int0 void unsigned char password 6 0 x01 0 x01 0 x01 0 x01 0 x01 0 x01 unsigned char password1 6 unsigned char code aa Password unsigned char code gg New unsigned char code bb ERROR unsigned char code cc OK unsigned char code dd unsigned char code ee Next unsigned char code ff success unsigned char keydata main unsigned char i j k l m n o a1 for i 0 i 6 i Write IIC i password i init LCD 初始化 int0 P3 6 0 P3 7 0 P1 0 x0f LCD Write String 0 0 aa LCD Write String 1 1 dd write com 0 xc0 1 while 1 start LCD Write String 0 0 aa LCD Write String 1 1 dd write com 0 xc0 1 while 1 if 0keydata 4keydata 8keyd ata keydata 14 在 0 9 之間的數(shù)字通過 password i keydata 鍵盤值進(jìn)行保存 keydata 0 把鍵盤值置其它值 不被其它利用 以一樣 i write data 在 LCD 上顯示 這字符代表輸入了一個(gè)密碼 if i 6 這里限制了六位密碼 i 0 goto panduan if keydata 33 確定進(jìn)入密碼比較 keydata 0 panduan i 0 for j 0 j 6 j l password j k Random Read j if l k 密碼不同進(jìn)行處理 l 0 k 0 LCD Write String 0 0 bb DelayMs 1000 a1 1 if a1 2 while 1 P3 7 1 P3 6 0 兩次錯(cuò)誤發(fā)出報(bào)警 goto start 第二次輸入密碼 if l k 密碼對(duì)了 進(jìn)入運(yùn)行狀態(tài) 這里綠燈代表該狀態(tài) l 0 k 0 a1 0 P3 6 1 P3 7 0 LCD Write String 0 0 cc LCD Write String 1 1 dd if o 1 o 0 LCD Write String 0 0 gg LCD Write String 4 0 aa LCD Write String 1 1 dd write com 0 xc0 1 goto text2 goto yingxing 跳到下面函數(shù)中 yingxing 里 yingxing while 1 if keydata 4 鎖定功能 P3 6 0 goto start if keydata 15 修改密碼 o if o 1 goto start text2 keydata 0 while 1 if 0keydata 4keydata 8keyd ata keydata 14 上面表達(dá)式 0 9 之間的數(shù)字通過 password m keydata 讀取鍵盤值 keydata 0 m write data if m 6 到密碼輸入到六位的時(shí)候進(jìn)行判斷是否再輸 入 或者判斷前后兩次密碼是否一致 m 0 n if n 2 goto panduan1 輸入第二次的時(shí)候進(jìn)行前后兩次 密碼進(jìn)判斷 for i 0 i 6 i 儲(chǔ)存前一次密碼 password1 i password i LCD Write String 1 1 dd LCD Write String 0 0 ee DelayMs 1000 LCD Write String 0 0 aa write com 0 xc0 1 if keydata 13 重新輸入改密 text m 0 n 0 LCD Write String 1 1 dd write com 0 xc0 1 if keydata 33 退出不改密碼 out m 0 n 0 o 0 LCD Write String 0 0 cc LCD Write String 1 1 dd goto yingxing if keydata 33 keydata 0 panduan1 for j 0 j 6 j 第一次與第二次密碼比較 l password j k password1 j if l k 第一次與第二次密碼輸入錯(cuò)誤 l 0 k 0 LCD Write String 0 0 bb DelayMs 1000 LCD Write String 0 0 aa goto text else for i 0 i 6 i Write IIC i password i LCD Write String 0 0 ff DelayM

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論