基于單片機(jī)控制的密碼門禁系統(tǒng).doc

基于單片機(jī)控制的密碼門禁系統(tǒng)

收藏

資源目錄
跳過導(dǎo)航鏈接。
基于單片機(jī)控制的密碼門禁系統(tǒng).zip
基于單片機(jī)控制的密碼門禁系統(tǒng)
基于單片機(jī)控制的密碼門禁系統(tǒng).doc---(點(diǎn)擊預(yù)覽)
門禁仿真圖
5.DSN
Last Loaded 5.DBK
Backup of Picture1.Lib
Backup of Picture1.Sch
menjin.Bkp
menjin.c
menjin.ddb
menjin.PNG
Previous Backup of Picture1.Lib
Previous Backup of Picture1.Sch
壓縮包內(nèi)文檔預(yù)覽:(預(yù)覽前20頁/共34頁)
預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖 預(yù)覽圖
編號(hào):481643    類型:共享資源    大小:1.60MB    格式:ZIP    上傳時(shí)間:2015-10-26 上傳人:畢業(yè)設(shè)計(jì)****498... IP屬地:江蘇
80
積分
關(guān) 鍵 詞:
基于 單片機(jī) 控制 節(jié)制 密碼 門禁 系統(tǒng)
資源描述:
基于單片機(jī)控制的密碼門禁系統(tǒng),基于,單片機(jī),控制,節(jié)制,密碼,門禁,系統(tǒng)
內(nèi)容簡(jiǎn)介:
無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 1 - 題目:基于單片機(jī)控制的密碼門禁系統(tǒng)設(shè)計(jì) 摘要: 目前,門禁系統(tǒng)設(shè)計(jì)技術(shù)成熟,應(yīng)用非常廣泛。該文從硬件電路和軟件電路兩方面介紹了設(shè)計(jì)門禁系統(tǒng)的方法。系統(tǒng)具有密碼輸入,比較,開門,錯(cuò)誤報(bào)警等功能和等待模式,用戶模式和管理模式三種模式。使用 AT89C51 單片機(jī)作為控制核心,使用單片機(jī) C 語言進(jìn)行編程,完成門禁控制系統(tǒng)的硬件和軟件設(shè)計(jì)。 關(guān)鍵字:門禁系統(tǒng),單片機(jī),字符顯示,矩陣鍵盤輸入 引言: 門禁系統(tǒng)是在傳統(tǒng)的門鎖基礎(chǔ)上發(fā)展而來的?,F(xiàn)在,許多場(chǎng)合還在使用傳統(tǒng)的門鎖。傳統(tǒng)的門鎖是一種單純的機(jī)械裝置,雖然 經(jīng)過不斷改進(jìn),安全性有所提高但無論設(shè)計(jì)多么合理材料多么堅(jiān)固,總能通過種種非正常手段把它打開,安全性較差。對(duì)每個(gè)使用者來說,一把鎖配一把鑰匙,使用起來不方便,在出入人較多的通道鑰匙的管理也相當(dāng)麻煩,遇到鑰匙丟失或人員更換都要把鎖和鑰匙一起更換。為了解決這些問題,出現(xiàn)了電磁卡鎖和電子密碼鎖,這兩種鎖的出現(xiàn)從一定程度上提高了人們對(duì)出入口通道的管理效率,是通道管理進(jìn)入了電子時(shí)代。 在注重美觀的現(xiàn)代都市里,公司的形象體現(xiàn)了所追求的風(fēng)格和氣度,也是給顧客建立起信心的保障??梢韵胂螅谧非笾悄芑療o紙辦公的今天,在豪華氣派 的玻璃大門裝上一把笨重的鎖將會(huì)是件多么繁瑣而尷尬的事情?。〉?,如果能用手中的卡片輕輕一晃,大門應(yīng)聲而開,那將是一種全新的感受。另外,在越來越注重商業(yè)情報(bào)和安全的今天,傳統(tǒng)的個(gè)人身份鑒別手段已不能完全滿足現(xiàn)代社會(huì)經(jīng)濟(jì)活動(dòng)和社會(huì)安全防范的需要。從消除認(rèn)為不安全因素來看,只有不易被他人代替、仿制、甚至本人也無法轉(zhuǎn)讓的身份識(shí)別憑證才能勝任。因此,從易用性、安全性、成熟性、造價(jià)性等方面綜合比較,IC卡門禁技術(shù)正在以驚人的速度迅猛發(fā)展。 本文介紹了密碼門禁系統(tǒng)的設(shè)計(jì)與開發(fā),詳細(xì)分析了系統(tǒng)硬件設(shè)計(jì)和軟件設(shè)計(jì),給出了電路 原理圖,以及主要程序設(shè)計(jì)的流程圖和程序。系統(tǒng)硬件有電源供電、晶振電路、鍵盤控制電路、繼電器電路和蜂鳴器電路等幾部分組成。系統(tǒng)軟件實(shí)現(xiàn)主要分為:數(shù)碼管顯示,鍵盤掃描,工作模式及密碼比較。 2 單片機(jī)控制芯片方案選擇論證 2 1方案一: PIC16C84 單片機(jī)芯片。它是 8 位 CMOS EEPROM 微控制器。它有高性能的類似于 RISC35都只需要一個(gè)指令周期。程序指令的寬度為 14 1K 14 的 EEPROM 程序存儲(chǔ)器。 nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 2 - 圖 1 基于 PIC16C84 單片機(jī)控制密碼門禁的方框圖 用到的芯片有 CD4094: 位移位存儲(chǔ)總線寄存器 : CD4094 是帶輸出鎖存和三態(tài)控制的串入 /并出高速轉(zhuǎn)換器,具有使用簡(jiǎn)單、功耗低、驅(qū)動(dòng)能力強(qiáng)和控制靈活等優(yōu)點(diǎn)。 CD4094 的引腳定義如圖 2。 其中 (1)腳為鎖存端, (2)腳為串 行 數(shù)據(jù)輸入端, (3)(3)腳為串行時(shí)鐘端。 (4)(1)腳為高電平時(shí), 8位并行輸出口 Q1 Q8 在時(shí)鐘的上升沿隨串行輸入而變化; (1)腳為低電平時(shí),輸出鎖定。利用鎖存端可方便地進(jìn)行片選和級(jí)聯(lián)輸出控制。 (5)(15)腳為并行輸出狀態(tài)控制端, (15)腳為低電平時(shí),并行輸出端處在高阻狀態(tài),在用 CD4094 作顯示輸出時(shí),可使顯示數(shù)碼閃爍。 (6)(9)腳 QS、 (7)(10)腳 Q S是串行數(shù)據(jù)輸出端,用于級(jí)聯(lián)。 QS 端在第 9個(gè)串行時(shí)鐘的上升沿開始輸出, Q S端在第 9 個(gè)串行時(shí)鐘的下降沿開始輸出。當(dāng) CD4094 電源為 5V 時(shí),輸出電流大于 3 2MA,灌電流為 1 MA。串行時(shí)鐘頻率可達(dá) 2 5MHZ。 圖 2 CD4094 引腳圖 PIC16C84 LCD1602 顯示電路 鍵盤輸入電路 AT24C02 存儲(chǔ)電路 蜂鳴器電路 輸入門鎖控制 CD4094 CD4094 nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 3 - 2 2方案二: AT89C51 芯片。 AT89C51 是一種帶 4K 字節(jié) FLASH 存儲(chǔ)器 ( FPEROM Flash Programmable and Erasable Read Only Memory)的低電壓、高性能 CMOS 8 位 微處理器 ,俗稱 單片機(jī) 。 AT89C2051 是一種帶 2K 字節(jié) 閃存可編程可擦除 只讀存儲(chǔ)器 的 單片機(jī) 。單片機(jī) 的可擦除 只讀存儲(chǔ)器 可以反復(fù)擦除 1000 次。該器件采用 ATMEL 高密度非易失 存儲(chǔ)器 制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的 MCS-51 指令集和輸出管腳相兼容。由于將多功能 8位 CPU 和閃爍 存儲(chǔ)器 組合在單個(gè)芯片中, ATMEL 的 AT89C51 是一種高效微控制器,AT89C2051 是它的一種精簡(jiǎn)版本。 AT89C51 單片機(jī) 為很多 嵌入式控制系統(tǒng) 提供了一種靈活性高且價(jià)廉的方案。 圖 3 單片機(jī)控制密碼門禁方框圖 用到的芯片有 AT89C51: 管腳說明: VCC:供電電壓。 GND:接地。 P0口: P0口為一個(gè) 8位漏級(jí)開路雙向 I/O 口,每腳可吸收 8TTL 門電流。當(dāng) P0口的管腳第一次寫 1時(shí),被定義為 高阻 輸入。 P0 能夠用于外部程序數(shù)據(jù) 存儲(chǔ)器 ,它可以被定義為數(shù)據(jù) /地址的低八位。在 FIASH 編程時(shí), P0 口作為原碼輸入口,當(dāng) FIASH 進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí) P0 外部必須接上拉電阻。 P1口: P1口是一個(gè)內(nèi)部提供上拉電阻的 8 位雙向 I/O 口, P1 口緩沖器能接收輸出 4TTL門電流。 P1 口管腳寫入 1 后,被內(nèi)部上拉為高,可用作輸入, P1 口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在 FLASH 編程和校驗(yàn)時(shí), P1口作為低八位地址接收。 P2口: P2 口為一個(gè)內(nèi)部上拉電阻的 8位雙向 I/O 口, P2口緩沖器可接收,輸出 4 個(gè) TTL門電流,當(dāng) P2 口被寫“ 1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí), P2 口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。 P2 口當(dāng)用于外部 程序存儲(chǔ)器 或 16 位地址 外部數(shù)據(jù) 存儲(chǔ)器進(jìn)行存取時(shí), P2口輸出地址的高八位。在給出地址“ 1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù) 存儲(chǔ)器 進(jìn)行讀寫時(shí),P2 口輸出其 特殊功能寄存器 的內(nèi)容。 P2 口在 FLASH 編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和 控制信號(hào) 。 P3口: P3口管腳是 8個(gè)帶內(nèi)部上拉電阻的雙向 I/O 口,可接收輸出 4個(gè) TTL 門電流。當(dāng) P3 口寫入“ 1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下AT24C02 存儲(chǔ)電路 AT89C51 蜂鳴器電路 鍵盤輸入電路 LCD1602 顯示電路 時(shí)鐘電路 復(fù)位電路 輸入門鎖控制 nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 4 - 拉為低電平, P3 口將輸出電流( ILL)這是由于上拉的緣故。 P3口也可作為 AT89C51 的一 些特殊功能口,如下表所示: 口管腳 備選功能 P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 /INT0(外部中斷 0) P3.3 /INT1(外部中斷 1) P3.4 T0(計(jì)時(shí)器 0 外部輸入) P3.5 T1(計(jì)時(shí)器 1 外部輸入) P3.6 /WR( 外部數(shù)據(jù) 存儲(chǔ)器 寫選通) P3.7 /RD( 外部數(shù)據(jù) 存儲(chǔ)器 讀選通) P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些 控制信號(hào) 。 RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持 RST 腳兩個(gè) 機(jī)器周期 的高電平時(shí)間。 ALE/PROG:當(dāng)訪問外部 存儲(chǔ)器 時(shí), 地址鎖存 允許的 輸出電平 用于鎖存地址的低位字節(jié)。在 FLASH 編程 期間,此 引腳 用于輸入 編程 脈沖。在平時(shí), ALE 端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的 1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù) 存儲(chǔ)器 時(shí),將跳過一個(gè) ALE 脈沖。如想禁止ALE 的輸出可在 SFR8EH 地址上置 0。此時(shí), ALE 只有在執(zhí)行 MOVX, MOVC 指令是 ALE 才起作用。另外,該 引腳 被略微拉高。如果 微處理器 在外部執(zhí)行狀態(tài) ALE 禁止,置位無效。 /PSEN:外 部 程序存儲(chǔ)器 的選通信號(hào)。在由外部程序 存儲(chǔ)器 取指期間,每個(gè) 機(jī)器周期 兩次 /PSEN 有效。但在訪問 外部數(shù)據(jù) 存儲(chǔ)器時(shí),這兩次有效的 /PSEN 信號(hào)將不出現(xiàn)。 /EA/VPP:當(dāng) /EA 保持低電平時(shí),則在此期間外部程序 存儲(chǔ)器 ( 0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式 1時(shí), /EA 將內(nèi)部鎖定為 RESET;當(dāng) /EA 端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在 FLASH 編程期間,此引腳也用于施加 12V 編程電源( VPP)。 XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 XTAL2:來 自反向振蕩器的輸出。 圖 4 AT89C51 芯片圖 nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 5 - 因?yàn)?采用 AT89C51 的芯片能夠簡(jiǎn)化電路,有 4 個(gè) I/O 口,方便元器件的配置,同時(shí)功能也更強(qiáng)大,因此選擇方案二 3 分電路設(shè)計(jì)和論證 3. 1 鍵盤控制模塊選擇論證 3. 1. 1 5。它是利用單片機(jī) I/O 口讀取口的電平高低來判斷是否有鍵按I/O 口數(shù)較多。且對(duì)鍵盤處理的時(shí)候涉及到了一個(gè)重要的過程那就是鍵盤的抖動(dòng)問題。 圖 5 獨(dú)立式鍵盤輸入模塊 3. 1. 2 方案二: 6 I/O I/O nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 6 - 圖 6 矩陣式鍵盤輸入 由于單片機(jī)端口一定,為了節(jié)省 I/O 端口,減小按鍵占用電路板的面積,所以選擇方案二 。 3. 2 顯示控制模塊選擇論證 3. 2. 1 方案一: 8*8LED 點(diǎn)陣式電子廣告牌顯示 如圖 7。 8*8LED 點(diǎn)陣式電子廣告牌與 8 段位數(shù)碼管驅(qū)動(dòng)原理相同,利用人眼的“視覺駐留效應(yīng)”,通過軟件延時(shí),給人一種穩(wěn)定顯示的視覺效果。單片機(jī)控制一個(gè) 8*8LED 點(diǎn)陣需要使用兩個(gè)并行端口,一個(gè)端口控制行線,一個(gè)控制列線。顯示過程以行掃描方式進(jìn)行,行與行之間延時(shí) 1到 2ms,應(yīng)保證掃描所有 8 行所用時(shí)間在 20ms 以內(nèi) . 圖 7 8*8LED 點(diǎn)陣式電子廣告牌顯示 nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 7 - 3. 2. 2 方案二: LCD1602 字符液晶模塊顯示 如圖 8。 LCD162字符點(diǎn)陣液晶顯示模塊低功耗、平板型結(jié)構(gòu)、被動(dòng)顯示、顯示信息量大、易于彩色化 、沒有電磁輻射、壽命長(zhǎng)等。 LCD162字符點(diǎn)陣液晶顯示模塊有 16個(gè)引腳: 1: VSS 接地 2: VDD +5v 電源引腳 3: VO 液晶顯示驅(qū)動(dòng)電源( 0-5v),可接電位器 4: RS 數(shù)據(jù)和指令選擇控制端, RS=0:命令 /狀態(tài); RS=1 : 數(shù)據(jù) 5: R/W 讀寫控制線,置 0時(shí)寫操作,置 1時(shí)讀操作 6: E 數(shù)據(jù)讀寫操作控制位, E向 LCD 模塊發(fā)送一個(gè)脈沖, LCD 模塊與單片機(jī)之間進(jìn)行一次數(shù)據(jù)交換。 7 14: DB0-DB7數(shù)據(jù)線,可以用 8位連接,也可以用高 4位連接, 節(jié)約單片機(jī)資源。 15: A 背光控制正電源 16: K 背光控制地 圖 8 LCD1602 液晶顯示 LCD1602與 8*8LED 點(diǎn)陣式電子廣告牌顯示相比,在相同的面積上可容納的信息更多,而且,液晶顯示靠調(diào)制外界光進(jìn)行顯示,更適合人的視覺習(xí)慣,不會(huì)使人眼疲勞 ,在顯示期間,不會(huì)產(chǎn)生電磁輻射,有利于人體健康。所以我選擇方案二。 3. 3 各電路設(shè)計(jì) 3. 3. 1 最小系統(tǒng) nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 8 - 圖 9 51單片機(jī)最小系統(tǒng) 1) 復(fù)位電路 2)晶振電路 3) 5V 供電 4)地 3 3. 2 AT24C02存儲(chǔ)器電路 本設(shè)計(jì)有密碼掉電保護(hù)功能,提供此功能得益于 AT24C02這款 EEPROM 存儲(chǔ)器。 AT24C02是由 ATMEL 公司提供的, I2C 總線串行 EEPROM,其容量為 2KB,工作電壓在 1.85.5v之間,生產(chǎn)工藝是 CMOS 工藝。掉電的情況下,數(shù)據(jù)仍能保存下來,就像我們電腦上的硬盤。 1: A2A0 這 3個(gè)引腳是配置成不同的編碼值,在同一串行總線上最多可擴(kuò)充 8片同一容量或不同容量的 24系列串行 EEPROM 芯片。 2: SDA 串行數(shù)據(jù)輸入輸出口,是一個(gè)雙向的漏記開路結(jié)構(gòu)的引 腳,容量擴(kuò)展時(shí)可以將多片 24系列的 SDA 引腳直接相連,實(shí)際使用時(shí)該引腳必須接一個(gè) 5.1K 的上拉電阻。 3: SCL 串行移位時(shí)鐘控制端。寫入時(shí)上升沿起作用,讀出時(shí)下降沿起作用 4: WAP 硬件寫保護(hù)控制引腳。當(dāng)其為低電平時(shí),正常寫操作,高電平時(shí),對(duì)EEPROM 部分存儲(chǔ)區(qū)域提供硬件寫保護(hù)功能,即對(duì)被保護(hù)區(qū)域只能讀不能寫 5: GND 接地 6: VCC 接 +5v 電壓 圖 10 AT24C02存儲(chǔ)器芯片 nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 9 - 4. 軟件設(shè)計(jì) 4 1 程序流程: 4. 1. 1 主程序流程圖 圖 11 系統(tǒng)主程序流程圖 程序的各個(gè)模塊建立后,將其按照整體設(shè)計(jì)思路的流程整合在一起,通過各個(gè)模塊的協(xié)調(diào)工作得到完整的系統(tǒng)功能。 系統(tǒng)上電后,讀取 AT24C02 中的預(yù)設(shè)密碼,隨之進(jìn)入主循環(huán)。主循環(huán)中有三種模式的選擇,系統(tǒng)默認(rèn)開始模式為等待模式。此時(shí),液晶屏點(diǎn)亮??梢园茨J角袚Q鍵,進(jìn)入用戶模式或管理模式。在進(jìn)行相應(yīng)操作前,必須輸入正確的密碼。否則,超過 2 次錯(cuò)誤輸入,系統(tǒng)報(bào)警并返回等待模式。 開始 切換模式 進(jìn)入該模式 相應(yīng)操作 輸入密碼 進(jìn)等待模式 鍵盤掃面 密碼正確? 讀取 AT24C02密碼 yes no no yes nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 10 - 4 1 2 各子程序流程圖 4. 1. 2. 1 AT24C02 存儲(chǔ)器流程圖 AT24C02 的寫操作 寫操作分為字節(jié)寫和頁面寫兩種操作,對(duì)于頁面寫根據(jù)芯片的一次裝載的字節(jié)不同有所不同。在本設(shè)計(jì)中主要使用單字節(jié)的寫入方式。 圖 12 寫一個(gè)字節(jié)時(shí)序圖 圖 13 AT24C02 存儲(chǔ)器寫操作流程圖 AT24C02 的讀操作 讀操作有三種基本操作:當(dāng)前地址讀、隨機(jī)讀和順序讀。應(yīng)當(dāng)注意的是:最后一個(gè)讀操作的第 9 個(gè)時(shí)鐘周期不是“不關(guān)心”。為了結(jié)束讀操作,主機(jī)必須在第 9 個(gè)周期間發(fā)出停止條件或者在第 9 個(gè)時(shí)鐘周期內(nèi)保持 SDA 為高電平、然后發(fā)出停 止條件。 AT24C 系列片內(nèi)地址在接收到每一個(gè)數(shù)據(jù)字節(jié)地址后自動(dòng)加 1,故裝載一頁以內(nèi)規(guī)定數(shù)據(jù)字節(jié)時(shí),只須輸入首地址,若裝載字節(jié)多于規(guī)定的最多字節(jié)數(shù),數(shù)據(jù)地址將“上卷”,前面的數(shù)據(jù)被覆蓋。 連續(xù)讀操作時(shí)為了指定首地址,需要兩個(gè)偽字節(jié)寫來給定器件地址和片內(nèi)地址,重復(fù)一次啟動(dòng)信號(hào)和器件地址 (讀 ),就可讀出該地址的數(shù)據(jù)。由于偽字節(jié)寫中并未執(zhí)行寫操作,地址沒有加 1。以后每讀取一個(gè)字節(jié),地址自動(dòng)加 1。 在讀操作中接收器接收到最后一個(gè)數(shù)據(jù)字節(jié)后不返回肯定應(yīng)答 (保持 SDA 高電平 )隨后發(fā)停止信號(hào)。 nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 11 - 圖 14 AT24C02 存儲(chǔ)器讀操作流程圖 4. 1. 2. 2 LCD 函數(shù)流程圖 nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 12 - 圖 15 LCD 函數(shù)流程圖 4 2程序 4 2 1 主程序 #include reg51.h #include intrins.h #define WriteDeviceAddress 0xa0 #define ReadDeviceAddress 0xa1 sbit RS=0xb0; sbit RW=0xb1; sbit E=0xb2; void lcd_w_cmd(unsigned char com); void lcd_w_dat(unsigned char dat); unsigned char lcd_r_start(); unsigned char scan_key(void); nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 13 - void int1(); void display_welcom(); void display_right(); void display_wrong(); sbit SCL=P04; sbit SDA=P05; sbit DB0=P10; sbit DB1=P11; sbit DB2=P12; sbit DB3=P13; sbit DB4=P14; sbit DB5=P15; sbit DB6=P16; sbit DB7=P17; sbit P39=P00; sbit P38=P01; sbit P37=P02; sbit P36=P03; sbit P35=P04; sbit P34=P05; sbit P21=P20; sbit P22=P21; sbit P23=P22; sbit P24=P23; sbit P25=P24; sbit P26=P25; sbit P9=RST; sbit P10=P30; sbit UNLOCK=P31; sbit LOCK=P32; sbit ADMINI=P33; sbit BEEP=P25; typedef unsigned char uchar; uchar mode=0; uchar Password6=1,2,3,4,5,6; uchar Input6=0x0A,0x0A,0x0A,0x0A,0x0A,0x0A; /延時(shí)函數(shù) void delay(unsigned int number) unsigned char temp; for(;number!=0;number-) nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 14 - for(temp=150;temp!=0;temp-); void delay1() _nop_(); _nop_(); _nop_(); /開始信號(hào) void Star(void) SDA=1; SCL=1; delay1(); SDA=0; delay1(); /停 止信號(hào) void Stop(void) SDA=0; SCL=1; delay1(); SDA=1; delay1(); /應(yīng)答信號(hào) void Ack(void) SDA=0; delay1(); SCL=1; delay1(); SCL=0; /反應(yīng)答信號(hào) void NoAck(void) SDA=1; delay1(); delay1(); nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 15 - SCL=0; /寫數(shù)據(jù) void Write(uchar Data) uchar BitCounter=8; uchar temp; do temp=Data; SCL=0; delay1(); if(temp&0x80)=0x80) SDA=1; else SDA=0; SCL=1; temp=Data1; Data=temp; BitCounter-; while(BitCounter); SCL=0; delay(20); /讀數(shù)據(jù) uchar Read(void) uchar temp=0; uchar temp1=0; uchar BitCounter=8; SDA=1; do SCL=0; delay1(); SCL=1; delay1(); if(SDA) temp=temp|0x01; else temp=temp%0xfe; if(BitCounter-1) temp=temp1; temp=temp1; nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 16 - BitCounter-; while(BitCounter); delay(20); return(temp); /從 at24c02 中讀數(shù)據(jù) void WDToROM(uchar Data,uchar Address) Star(); Write(WriteDeviceAddress); Ack; Write(Address); Ack(); Write(Data); Ack(); Stop(); delay(10); uchar RDFromROM(uchar Address) uchar DATA=0; Start(); Write(WriteDeviceAddress); Ack(); Write(Address); Ack(); Start(); Write(ReadDeviceAddress); Ack(); _nop_(); _nop_(); _nop_(); _nop_(); DATA=Read(); SCL=0; NoAck(); Stop(); delay(10); return(DATA); /寫密碼 void WDPassword(uchar *temp) nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 17 - uchar count=0; while(count!=6) WDToROM(tempcount,count); count+; /讀密碼 void RDPassword(uchar *temp) uchar count=0; while(count!=6) tempcount=RDFromROM(count); count+; /等待模式 void WaitMode(void) uchar mov,speed; uchar value; uchar tmp=0x01; P1&=0x03; LOCK=1; UNLOCK=0; ADMINI=O; for(mov=0;mov6;mov+) Inputmov=0x0A; for(mov=0;mov8;mov+) for(speed=0;speed70;speed+) P0=tmp; delay(25); value=GetKey(); if(value=0x0D) mode=1; nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 18 - break; if(value=0x0E) mode=2; break; tmp=1; /訪客模式 void GuestMode(uchar *password,uchar *input) uchar count=0; uchar tmp=0; uchar error=0; uchar i; while(1) tmp=GetKey(); if(tmp/10=0) inputcount=tmp; count+; if(tmp=0x0A) for(i=0;i6;i+) if(passwordi!=inputi) BEEP=1; delay(200); BEEP=0; error+; for(i=0;i6;i+) inputi=0x0A; count=0; i=0; break; nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 19 - if(error=4) BEEP=1; delay(200); BEEp=0; delay(200); BEEP=1; delay(200); BEEP=0; delay(200); BEEP=1; delay(200); BEEP=0; BEEP=1; delay(200); BEEP=0; BEEP=1; delay(200); BEEP=0; mode=0; break; if(i=6) LOCK=0; UNLOCK=1; BEEP=1; delay(200); BEEP=0; for(i=0;i6;i+) inputi=0x0A; count=0; if(tmp=0x0B) input-count=0x0A; if(tmp=0x0C) nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 20 - for(i=0;i6;i+) inputi=0x0A; count=0; if(tmp=0x0D) mode=1; break; if(tmp=0x0E) mode=2; break; if(tmp=0x0F) mode=0; break; if(mode!=1) break; Display(input); /管理模式 void AdminiMode(uchar *password,uchar *input) uchar count=0; uchar tmp=0; uchar error=0; uchar i; while(1) tmp=GetKey(); /輸入密碼 if(tmp/10=0) inputcount=tmp; count+; nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 21 - if(tmp=0x0A) for(i=0;i6;i+) if(passwordi!=inputi) BEEP=1; delay(200); BEEP=0; error+; for(i=0;i6;i+) inputi=0x0A; count=0; i=0; break; if(error=4) BEEP=1; delay(200); BEEp=0; delay(200); BEEP=1; delay(200); BEEP=0; delay(200); BEEP=1; delay(200); BEEP=0; BEEP=1; delay(200); BEEP=0; BEEP=1; delay(200); BEEP=0; mode=0; break; if(i=6) nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 22 - LOCK=0; UNLOCK=1; ADMINI=1; BEEP=1; delay(200); BEEP=0; for(i=0;i6;i+) inputi=0x0A; count=0; while(1) tmp=GetKey(); if(tmp/10=0) inputcount=tmp; count+; if(tmp=0x0B) input-count=0x0A; if(tmp=0x0A) if(count=6) WDPassword(input); mode=0; break; else for(i=0;i6;i+) inputi=0x0A; count=0; if(tmp=0x0C) for(i=0;i6;i+) nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 23 - inputi=0x0A; count=0; if(tmp=0x0F) mode=0; break; Display(input); if(tmp=0x0B) input-count=0x0A; if(tmp=0x0C) for(i=0;i6;i+) inputi=0x0A; count=0; if(tmp=0x0D) mode=1; break; if(tmp=0x0E) mode=2; break; if(tmp=0x0F) mode=0; break; Display(input); if(mode!=2) break; nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 24 - void main() uchar tmp=1; P2=0xFF; P2=0xFF; P3=0x00; WDPassword(Password); LOCK=1; UNLOCK=0; ADMINI=0; BEEP=0; while(1) RDPassword(Password); switch(mode) case 0: WaitMode(); display_welcom(); break; case 1: GuestMode(Password,Input); break; case 2: AdminiMode(Password,Input); default: break; void int1() lcd_w_cmd(0x3c); lcd_w_cmd(0x0e); lcd_w_cmd(0x01); lcd_w_cmd(0x06); lcd_w_cmd(0x80); nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 25 - unsigned char lcd_r_start() unsigned char s; RW=1; delay1(); RS=0; delay1(); E=1; delay1(); S=P1; delay1(); E=0; delay1(); RW=0; delay1(); return(s); void lcd_w_cmd(unsigned char com) unsigned char i; do i=lcd_r_start(); i=i&0x80; delay(2); while(i!=0); RW=0; delay1(); RS=0; delay1(); E=1; delay1(); P1=com; delay1(); E=0; delay1(); RW=1; delay(255); void lcd_w_dat(unsigned char dat) unsigned char i; nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 26 - do i=lcd_r_start(); i=i&0x80; delay(2); whlie(i!=0); RW=0; delay1(); RS=1; delay1(); E=1; delay1(); P1=dat; delay1(); E=0; delay1(); RW=1; delay(255); /鍵盤掃描 unsigned char scan_key(void) unsigned i,temp,m,n; bit find=0; P0=0xff; for(i=0;i4;i+) P2=0xfei; temp=P0; temp=temp&0x0f; while(temp!=0x00) m=i; find=1; switch(temp) case 0x01:n=0;break; case 0x02:n=1;break; case 0x04:n=2;break; case 0x08:n=3;break; default:break; nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 27 - if(find=0)return -1; else return(n*4+m); void display_welcom() unsigned char lcd=welcom; unsigned char i; P1=0xff; int1(); delay(255); for(i=0;i6;i+) lcd_w_dat(lcdi); delay(200); while(1); void display_right() unsigned char lcd=right; unsigned char i; P1=0xff; int1(); delay(255); for(i=0;i5;i+) lcd_w_dat(lcdi); delay(200); while(1); void display_wrong() unsigned char lcd=wrong; unsigned char i; P1=0xff; int1(); delay(255); for(i=0;i5;i+) lcd_w_dat(lcdi); nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 28 - delay(200); while(1); 4 2 2 LCD162 程序 void int1() lcd_w_cmd(0x3c); lcd_w_cmd(0x0e); lcd_w_cmd(0x01); lcd_w_cmd(0x06); lcd_w_cmd(0x80); unsigned char lcd_r_start() unsigned char s; RW=1; delay1(); RS=0; delay1(); E=1; delay1(); S=P1; delay1(); E=0; delay1(); RW=0; delay1(); return(s); void lcd_w_cmd(unsigned char com) unsigned char i; do i=lcd_r_start(); i=i&0x80; delay(2); while(i!=0); RW=0; delay1(); RS=0; nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 29 - delay1(); E=1; delay1(); P1=com; delay1(); E=0; delay1(); RW=1; delay(255); void lcd_w_dat(unsigned char dat) unsigned char i; do i=lcd_r_start(); i=i&0x80; delay(2); whlie(i!=0); RW=0; delay1(); RS=1; delay1(); E=1; delay1(); P1=dat; delay1(); E=0; delay1(); RW=1; delay(255); void display_welcom() unsigned char lcd=welcom; unsigned char i; P1=0xff; int1(); delay(255); for(i=0;i6;i+) lcd_w_dat(lcdi); delay(200); nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 30 - while(1); 4 2 3 鍵盤掃描函數(shù) /鍵盤掃描 unsigned char scan_key(void) unsigned i,temp,m,n; bit find=0; P0=0xff; for(i=0;i4;i+) P2=0xfei; temp=P0; temp=temp&0x0f; while(temp!=0x00) m=i; find=1; switch(temp) case 0x01:n=0;break; case 0x02:n=1;break; case 0x04:n=2;break; case 0x08:n=3;break; default:break; if(find=0)return -1; else return(n*4+m); 4 2 4 AT24C02 程序 /向 AT24C02 寫入數(shù)據(jù) Void WDToROM(uchar Data, uchar Address) Start(); /調(diào)用起始條件函數(shù) Write(WriteDeviceAddress); /發(fā)送命令,準(zhǔn)備寫入數(shù)據(jù)到存儲(chǔ)器。讓存儲(chǔ)器做好準(zhǔn)備 Ack(); /調(diào)用應(yīng)答函數(shù) Write(Address); /先發(fā)送要寫入數(shù)據(jù)的存儲(chǔ)器內(nèi)存地址 Ack(); /調(diào)用應(yīng)答函數(shù) nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 31 - Stop(); /調(diào)用停止發(fā)送函數(shù),表示發(fā)送完 畢 Delay(10); /向 AT24C02 讀出數(shù)據(jù) Uchar RDFromROM(uchar Address) Uchar DATA=0; Start(); /調(diào)用起始條件函數(shù) Write(WriteDeviceAddress); /讓存儲(chǔ)器準(zhǔn)備接受命令 Ack(); Write(Address); Ack(); Start(); /重新調(diào)用起始函數(shù) Write(ReadDviceAddress); /發(fā)送讀出數(shù)據(jù)的命令 Ack(); _nop_(); _nop_(); _nop_(); _nop_(); DATA=Read(); /開始讀出數(shù)據(jù) SCL=0; NoAck(); /讀出數(shù)據(jù)成功。返回信號(hào)成功信號(hào)給存儲(chǔ)器 5軟件系統(tǒng)的調(diào)試 5.1 軟件調(diào)試 調(diào)試軟件介紹 Protel99SE 是應(yīng)用于 Windows9X/2000/NT 操作系統(tǒng)下的 EDA 設(shè)計(jì)軟件,采用設(shè)計(jì)庫管理模式,可以進(jìn)行聯(lián)網(wǎng)設(shè)計(jì),具有很強(qiáng)的數(shù)據(jù)交換能力和開放性及 3D模擬功能,可以完成電路原理圖設(shè)計(jì),印制電路板設(shè)計(jì)和可編程邏輯器件設(shè)計(jì)等工作,可以設(shè)計(jì) 32 個(gè)信號(hào)層, 16 個(gè)電源 -地層和 16 個(gè)機(jī)加工層。按照系統(tǒng)功能來劃分, Protel99se 主要包含 6 個(gè)功能模塊 : 電路工程設(shè)計(jì)部分 、 印刷電路板設(shè)計(jì)系統(tǒng) 、 自動(dòng)布線系統(tǒng) 、 電路模擬仿真系統(tǒng) 、 可編程邏輯設(shè)計(jì)系統(tǒng) 、 高級(jí) 信號(hào)完整性分析系統(tǒng) 。 存儲(chǔ)器和特殊功能寄存器的存取 、 中斷功能 、 靈活的指針 KeilC51 軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,如 Windows 界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到 KeilC51 生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解,在開發(fā)大型軟件是更能體現(xiàn)高級(jí)語言的優(yōu)勢(shì) 。 KEIL C51編譯器 由 uVision2 集成開發(fā)環(huán)境 與 編輯器和調(diào)試器 以及 C51編譯器 組成。其中 uVision2集成開發(fā)環(huán)境 中的 工程 (project)是由源文件、開發(fā)工具選項(xiàng)以 及編程說明三部分組成的 ;編輯器和調(diào)試器 包括 源代碼編輯器 、 斷點(diǎn) 設(shè)置、 調(diào)試函數(shù)語言 、 變量和存儲(chǔ)器 Proteus 軟件是一種低投資的電子設(shè)計(jì)自動(dòng)化軟件,提供可仿真數(shù)字和模擬、交流和直流等數(shù)千種元器件和多達(dá) 30多個(gè)元件庫。 Proteus 軟件提供多種現(xiàn)實(shí)存在的虛擬儀器儀表。此外, Proteus 還提供圖形顯示功能,可以將線路上變化的信號(hào),以圖形的方式實(shí)時(shí)地顯示出來。這些虛擬儀器儀表具有理想的參數(shù)指標(biāo),例如極高的輸入阻抗、極nts無 錫 職 業(yè) 技 術(shù) 學(xué) 院 畢業(yè)設(shè)計(jì)說明書(論文) - 32 - 低的輸出阻抗,盡可能減少儀器對(duì)測(cè)量結(jié)果的影響, Proteus 軟件提供豐富的測(cè)試信號(hào)用于電路的測(cè)試。 這些測(cè)試信號(hào)包括模擬信號(hào)和數(shù)字信號(hào)。提供 Schematic Drawing、SPICE 仿真與 PCB 設(shè)計(jì)功能,同時(shí)可以仿真單片機(jī)和周邊設(shè)備,可以仿真 51 系列、 AVR、PIC 等常用的 MCU,并提供周邊設(shè)備的仿真,例如 373、 led、示波器等。 Proteus 提供了大量的元件庫,有 RAM、 ROM、鍵盤、馬達(dá)、 LED、 LCD、 AD/DA、部分 SPI 器件、部分IIC 器件,編譯方面支持 Keil 和 MPLAB 等編譯器。一臺(tái)計(jì)算機(jī)、一套電子仿真軟件,在加上一本虛擬實(shí)驗(yàn)教程,就可相當(dāng)于一個(gè)設(shè)備先進(jìn)的實(shí)驗(yàn)室。以虛代實(shí)、以軟代硬,就建立一個(gè)完善的虛擬實(shí)驗(yàn)室。在計(jì)算機(jī)上學(xué)習(xí)電工基
溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。
提示  人人文庫網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學(xué)習(xí)交流,未經(jīng)上傳用戶書面授權(quán),請(qǐng)勿作他用。
關(guān)于本文
本文標(biāo)題:基于單片機(jī)控制的密碼門禁系統(tǒng)
鏈接地址:http://m.bubsandbeans.com/p-481643.html

官方聯(lián)系方式

2:不支持迅雷下載,請(qǐng)使用瀏覽器下載   
3:不支持QQ瀏覽器下載,請(qǐng)用其他瀏覽器   
4:下載后的文檔和圖紙-無水印   
5:文檔經(jīng)過壓縮,下載后原文更清晰   
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

網(wǎng)站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文庫版權(quán)所有   聯(lián)系電話:400-852-1180

備案號(hào):蜀ICP備2022000484號(hào)-2       經(jīng)營(yíng)許可證: 川B2-20220663       公網(wǎng)安備川公網(wǎng)安備: 51019002004831號(hào)

本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知人人文庫網(wǎng),我們立即給予刪除!