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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機的電子密碼鎖全套設計資料

  [復制鏈接]
跳轉到指定樓層
樓主
單片機電子密碼鎖原理圖,代碼,和文件


電路原理圖如下:


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


摘要

在日常的生活和工作中, 住宅與部門的安全防范、單位的文件檔案、財務報表以及一些個人資料的保存多以加鎖的辦法來解決。若使用傳統的機械式鑰匙開鎖,人們常需攜帶多把鑰匙, 使用極不方便, 且鑰匙丟失后安全性即大打折扣。具有防盜報警等功能的電子密碼鎖代替密碼量少、安全性差的機械式密碼鎖已是必然趨勢。隨著科學技術的不斷發展,人們對日常生活中的安全保險器件的要求越來越高。為滿足人們對鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應運而生。密碼鎖具有安全性高、成本低、功耗低、易操作、記住密碼即可開鎖等優點。
              目前使用的電子密碼鎖大部分是基于單片機技術,以單片機為主要器件,其編碼器與解碼器的生成為軟件方式。
本系統由STC89C51單片機系統(主要是STC89C51單片機最小系統)、4×4矩陣鍵盤、LCD1602顯示和報警系統等組成,具有設置、修改六位用戶密碼、超次報警、超次鎖定、密碼錯誤報警等功能(本設計由P0口控制LCD顯示,密碼正確顯示OPEN! 密碼錯誤顯示error!超過三次輸入錯誤自動鎖定。由P1口控制矩陣鍵盤含有0-9數字鍵和A-D功能鍵。)。除上述基本的密碼鎖功能外,依據實際的情況還可以添加遙控功能。本系統成本低廉,功能實用。

目錄
第一章 緒論
1.1、課題背景和意義
1.2、電子密碼鎖發展趨勢
第二章 總體設計方案的確定
2.1 電子密碼鎖設計的具體要求
2.2總體設計方案選定
第三章 系統硬件設計
3.1  設計原理
3.2 單片機STC89C51簡介
3.3  AT24C02存儲芯片
3.4  LCD顯示模塊
3.5  鍵盤設計
3.6  聲音提示模塊
3.7 繼電器控制模塊
第四章 系統軟件設計
4.1主程序模塊
4.2 鍵盤掃描子程序
4.3 系統模塊密碼設置子程序
4.4開鎖子程序
4.4軟件調試
第五章 系統制作及調試
5.1焊接注意事項:
5.2、硬件調試問題及解決方法
第六章 結論
參考文獻
附錄一  原理圖
附錄二 仿真圖
附錄三 電子密碼鎖程序源代碼

第一章 緒論

1.1、課題背景和意義

隨著電子技術和計算機技術的飛速發展,單片機性能不斷完善,性能價格比顯著提高,技術日趨完善。由于單片機具有體積小、重量輕、價格便宜、功耗低、控制功能強及運算速度快等特點,因而在國民經濟建設、軍事及家用電器等各個領域均得到了廣泛的應用。本設計利用單片機及附加電子元器件實現數據采集和控制算法,來完成某一實際功能,檢驗并提高同學對整體電路設計和把握能力,了解單片機系統設計流程,以及電路板的實際制作和調試能力。同時也加強對數字電路、單片機和微機原理等課程知識的實際應用能力,也為同類產品的進一步發展奠定理論和實踐基礎。
隨著人們生活水平的提高和安全意識的加強,對安全的要求也就越來越高。鎖自古以來就是把守護門的鐵將軍,人們對它要求甚高,既要安全可靠的防盜,又要使用方便,這也是制鎖者長期以來研制的主題。隨著電子技術的發展,各類電子產品應運而生,電子密碼鎖就是其中之一。據有關資料介紹,電子密碼鎖的研究從20世紀30年代就開始了,在一些特殊場所早就有所應用。這種鎖是通過鍵盤輸入一組密碼完成開鎖過程。研究這種鎖的初衷,就是為提高鎖的安全性。由于電子鎖的密鑰量(密碼量)極大,可以與機械鎖配合使用,并且可以避免因鑰匙被仿制而留下安全隱患。電子鎖只需記住一組密碼,無需攜帶金屬鑰匙,免除了人們攜帶金屬鑰匙的煩惱,而被越來越多的人所欣賞。電子鎖的種類繁多,例如數碼鎖,指紋鎖,磁卡鎖,IC卡鎖,生物鎖等。但較實用的還是按鍵式電子密碼鎖。
20世紀80年代后,隨著電子鎖專用集成電路的出現,電子鎖的體積縮小,可靠性提高,成本較高,是適合使用在安全性要求較高的場合,且需要有電源提供能量,使用還局限在一定范圍,難以普及,所以對它的研究一直沒有明顯進展。
目前,在西方發達國家,電子密碼鎖技術相對先進,種類齊全,電子密碼鎖已被廣泛應用于智能門禁系統中,通過多種更加安全,更加可靠的技術實現大門的管理。在我國電子鎖整體水平尚處于國際上70年代左右,電子密碼鎖的成本還很高,市場上仍以按鍵電子鎖為主,按鍵式和卡片鑰匙式電子鎖已引進國際先進水平,現國內有幾個廠生產供應市場。但國內自行研制開發的電子鎖,其市場結構尚未形成,應用還不廣泛。國內的不少企業也引進了世界上先進的技術,發展前景非常可觀。希望通過不斷的努力,使電子密碼鎖在我國也能得到廣泛應用

1.2、電子密碼鎖發展趨勢  

電子密碼鎖應用于金融業,其根本的作用是“授權”,即被“授權”的人才可以存取錢、物。廣義上講,金融業的“授權”主要包括以下三種層次的內容:1、授予保管權,如使用保管箱、保險箱和保險柜;2、授予出入權,如出入金庫、運鈔車和保管室;3、授予流通權,如自動存取款。目前,金融行業電子密碼鎖的應用主要集中在前兩個層面上。下面將介紹幾種在金融行業中使用較多的電子密碼鎖以及它們的技術發展方向。當然,以上所說的授權技術再高超,都必須由精良的“鎖具”擔當承載結構部件,實現開啟、閉鎖的功能,而且承擔實體防護作用,抵抗住或盡量延遲破壞行為,讓電子密碼鎖“軟、硬不吃”。一般情況下,鎖具防盜的關鍵是鎖身外殼、閉鎖的部件的強度、鎖止型式、配合間隙和布局。提高電子密碼鎖之防護能力的必然途徑是報警,在金融業的許多場所有人值守、有電視監控,具有報警功能,可以綜合物理防范和人力防范兩種作用。報警的前提是具備探測功能,根據電子密碼鎖的使用場所和防護要求,可選擇多種多樣的探測手段。在中國的城市金融業中,實現聯網報警已經成為對各金融網點的基本要求。根據國內外的實踐經驗,金融業實行安全防范風險等級很有必要,即依據使用的防盜報警器材的性能、安裝布局和人員值守狀況等,可以評估被防護物或區域的防護能力,得出風險等級,其中,電子密碼鎖的性能至關重要。

由于數字、字符、圖形圖像、人體生物特征和時間等要素均可成為鑰匙的電子信息,組合使用這些信息能夠使電子密碼鎖獲得高度的保密性,如防范森嚴的金庫,需要使用復合信息密碼的電子密碼鎖,這樣對盜賊而言是“道高一尺、魔高一丈”。組合使用信息也能夠使電子密碼鎖獲得無窮擴展的可能,使產品多樣化,對用戶而言是“千挑百選、自得其所”。


第二章 總體設計方案的確定
2.1 電子密碼鎖設計的具體要求

(1)本設計為了防止密碼被竊取要求在輸入密碼時在LCD屏幕上顯示*號。

(2)設計開鎖密碼位六位密碼的電子密碼鎖。

(3)能夠LCD顯示在密碼正確時顯示OPEN,密碼錯誤時顯示 ERROR,輸入密碼時顯示INPUT  PASSWORD。

(4)實現輸入密碼錯誤超過限定的三次電子密碼鎖定。

(5)4×4的矩陣鍵盤其中包括0-9的數字鍵、*、#和A-D的功能鍵

(6)本產品具備報警功能,當輸入密碼錯誤時蜂鳴器響并且LED燈亮。

  • (7)密碼可以由用戶自己修改設定(只支持6位密碼),修改密碼之前必須再次輸入密碼,在輸入新密碼時候需要二次確認,以防止誤操作
2.2總體設計方案選定

方案一:采用數字電路控制。

用以74LS112雙JK觸發器構成的數字邏輯電路作為密碼鎖的核心控制,共設了9個用戶輸入鍵,其中只有4個是有效的密碼按鍵,其它的都是干擾按鍵,若按下干擾鍵,鍵盤輸入電路自動清零,原先輸入的密碼無效,需要重新輸入;如果用戶輸入密碼的時間超過10秒(一般情況下,用戶不會超過10秒,若用戶覺得不便,還可以修改)電路將報警20秒,若電路連續報警三次,電路將鎖定鍵盤2分鐘,防止他人的非法操作。采用數字電路設計的方案好處就是設計簡單但控制的準確性和靈活性差。故不采用。

方案二:采用一種是用以STC89C51為核心的單片機控制方案。

選用單片機STC89C51 作為本設計的核心元件,利用單片機靈活的編程設計和豐富的IO端口,及其控制的準確性,實現基本的密碼鎖功能。在單片機的外圍電路外接輸入鍵盤用于密碼的輸入和一些功能的控制,外接LCD1602顯示器用于顯示作用。其原理如下圖2.1所示:

圖2.1  單片機控制密碼鎖原理圖

可以看出方案二控制靈活準確性好且保密性強還具有擴展功能,根據現實生活的需要此次設計采用此方案



第三章 系統硬件設計
3.1  設計原理

本設計主要由單片機、矩陣鍵盤、液晶顯示器和密碼存儲等部分組成。其中矩陣鍵盤用于輸入數字密碼和進行各種功能的實現。由用戶通過連接單片機的矩陣鍵盤輸入密碼,后經過單片機對用戶輸入的密碼與自己保存的密碼進行對比,從而判斷密碼是否正確,然后控制引腳的高低電平傳到開鎖電路或者報警電路控制開鎖還是報警,實際使用時只要將單片機的負載由繼電器換成電子密碼鎖的電磁鐵吸合線圈即可,當然也可以用繼電器的常開觸點去控制電磁鐵吸合線圈。

本系統共有兩部分構成,即硬件部分與軟件部分。其中硬件部分由電源輸入部分、鍵盤輸入部分、密碼存儲部分、復位部分、晶振部分、顯示部分、報警部分、開鎖部分組成,軟件部分對應的由主程序、初始化程序、LCD顯示程序、鍵盤掃描程序、啟動程序、關閉程序、建功能程序、密碼設置程序、EEPROM讀寫程序和延時程序等組成。其原理框圖如圖3.1所示。

3.1 電子密碼鎖原理框圖

3.2 單片機STC89C51簡介

STC89C51是一種低功耗、高性能CMOS8位微控制器,具有 4K 在系統可編程Flash 存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統可編程Flash,使得STC89C51為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。 具有以下標準功能: 4k字節Flash,512字節RAM, 32 位I/O 口線,看門狗定時器,2個16 位 定時器/計數器,一個6向量2級中斷結構,全雙工串行口。另外 STC89C51 可降至0Hz 靜態邏輯操作,支持2種軟件可選擇節電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數器、串口、中斷繼續工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。最高運作頻率35Mhz,6T/12T可選。STC89C51主要功能如表1所示,其DIP封裝如圖2所示

表1:STC89C51主要功能

主要功能特性
兼容MCS51指令系統
4K可反復擦寫Flash ROM
32個雙向I/O口
256x8bit內部RAM
2個16位可編程定時/計數器中斷
時鐘頻率0-24MHz
2個串行中斷
可編程UART串行通道
2個外部中斷源
共6個中斷源
2個讀寫中斷口線
3級加密位
低功耗空閑和掉電模式
軟件設置睡眠和喚醒功能

STC89C52引腳介紹

① 主電源引腳(2根)

VCC(Pin40):電源輸入,接+5V電源

GND(Pin20):接地線

②外接晶振引腳(2根)

XTAL1(Pin19):片內振蕩電路的輸入端

XTAL2(Pin20):片內振蕩電路的輸出端

③控制引腳(4根)

RST/VPP(Pin9):復位引腳,引腳上出現2個機器周期的高電平將使單片機復位。

ALE/PROG(Pin30):地址鎖存允許信號

PSEN(Pin29):外部存儲器讀選通信號

EA/VPP(Pin31):程序存儲器的內外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從內部程序存儲器讀指令。

④可編程輸入/輸出引腳(32根)

STC89C52單片機有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個口有8位(8根引腳),共32根。

P0口(Pin39~Pin32):8位雙向I/O口線,名稱為P0.0~P0.7

P1口(Pin1~Pin8):8位準雙向I/O口線,名稱為P1.0~P1.7

P2口(Pin21~Pin28):8位準雙向I/O口線,名稱為P2.0~P2.7

P3口(Pin10~Pin17):8位準雙向I/O口線,名稱為P3.0~P3.7

作頻率35Mhz,6T/12T可選。
圖3.2  STC89C51 DIP封裝圖
最小系統包括單片機及其所需的必要的電源、時鐘、復位等部件,能使單片機始終處于正常的運行狀態。電源、時鐘等電路是使單片機能運行的必備條件,可以將最小系統作為應用系統的核心部分,通過對其進行存儲器擴展、A/D擴展等,使單片機完成較復雜的功能。
STC89C51是片內有ROM/EPROM的單片機,因此,這種芯片構成的最小系統簡單﹑可靠。用STC89C52單片機構成最小應用系統時,只要將單片機接上時鐘電路和復位電路即可,結構如圖2-3所示,由于集成度的限制,最小應用系統只能用作一些小型的控制單元。





圖3.3單片機最小系統原理框圖

(1) 時鐘電路
STC89C51單片機的時鐘信號通常有兩種方式產生:一是內部時鐘方式,二是外部時鐘方式。內部時鐘方式如圖2-4所示。在STC89C51單片機內部有一振蕩電路,只要在單片機的XTAL1(18)和XTAL2(19)引腳外接石英晶體(簡稱晶振),就構成了自激振蕩器并在單片機內部產生時鐘脈沖信號。圖中電容C1和C2的作用是穩定頻率和快速起振,電容值在5~30pF,典型值為30pF。晶振CYS的振蕩頻率范圍在1.2~12MHz間選擇,典型值為12MHz和6MHz。

圖3.4 STC89C51內部時鐘電路
(2) 復位電路
當在STC89C51單片機的RST引腳引入高電平并保持2個機器周期時,單片機內部就執行復位操作(若該引腳持續保持高電平,單片機就處于循環復位狀態)。
最簡單的上電自動復位電路中上電自動復位是通過外部復位電路的電容充放電來實現的。只要Vcc的上升時間不超過1ms,就可以實現自動上電復位。
除了上電復位外,有時還需要按鍵手動復位。本設計就是用的按鍵手動復位。按鍵手動復位有電平方式和脈沖方式兩種。其中電平復位是通過RST(9)端與電源Vcc接通而實現的。

圖3.5 STC89C51復位電路

(3) STC89C51中斷技術概述
中斷技術主要用于實時監測與控制,要求單片機能及時地響應中斷請求源提出的服務請求,并作出快速響應、及時處理。這是由片內的中斷系統來實現的。當中斷請求源發出中斷請求時,如果中斷請求被允許,單片機暫時中止當前正在執行的主程序,轉到中斷服務處理程序處理中斷服務請求。中斷服務處理程序處理完中斷服務請求后,再回到原來被中止的程序之處(斷點),繼續執行被中斷的主程序。
圖2-6為整個中斷響應和處理過程。





              圖3.6  中斷響應和處理過程
圖3.6 中斷過程
如果單片機沒有中斷系統,單片機的大量時間可能會浪費在查詢是否有服務請求發生的定時查詢操作上。采用中斷技術完全消除了單片機在查詢方式中的等待現象,大大地提高了單片機的工作效率和實時性。
3.3 AT24C02存儲芯片

AT24C02是美國Atmel公司的低功耗CMOS型E2PROM,內含256×8位存儲空間,具有工作電壓寬(2.5~5.5 V)、擦寫次數多(大于10000次)、寫入速度快(小于10 ms)、抗干擾能力強、數據不易丟失、體積小等特點。而且他是采用了I2C總線式進行數據讀寫的串行器件,占用很少的資源和I/O線,并且支持在線編程,進行數據實時的存取十分方便。AT24C02中帶有的片內地址寄存器。每寫入或讀出一個數據字節后,該地址寄存器自動加1,以實現對下一個存儲單元的讀寫。所有字節均以單一操作方式讀取。為降低總的寫入時間,一次操作可寫入多達8個字節的數據。I2C總線是一種用于IC器件之間連接的二線制總線。他通過SDA(串行數據線)及SCL(串行時鐘線)兩根線在連到總線上的器件之間傳送信息,并根據地址識別每個器件。AT24C02正是運用了I2C規程,使用主/從機雙向通信,主機(通常為單片機)和從機(AT24C02)均可工作于接收器和發送器狀態。主機產生串行時鐘信號(通過SCL引腳)并發出控制字,控制總線的傳送方向,并產生開始和停止的條件。無論是主機還是從機,接收到一個字節后必須發出一個確認信號ACK。AT24C02的控制字由8位二進制數構成,在開始信號發出以后,主機便會發出控制字,以選擇從機并控制總線傳送的方向。

SOIC                 PDIP

圖3.7 24C02的兩種引腳圖

圖3.8  AT24C02的電路接線圖

圖中AT24C02的1、2、3腳是三條地址線,用于確定芯片的硬件地址。第8腳和第4腳分別為正、負電源。第5腳SDA為串行數據輸入/輸出,數據通過這條雙向I2C總線串行傳送,第6腳SCL為串行時鐘輸入線, SDA和SCL都需要和正電源間各接一個10 K的電阻上拉。第7腳需要接地。

24C02中帶有片內地址寄存器。每寫入或讀出一個數據字節后,該地址寄存器自動加1,以實現對下一個存儲單元的讀寫。所有字節均以單一操作方式讀取。為降低總的寫入時間,一次操作可寫入多達8個字節的數據。

3.4 LCD顯示模塊
LCD1602A 是一種工業字符型液晶,能夠同時顯示16x02 即32個字符。(16列2行)。在日常生活中,我們對液晶顯示器并不陌生。液晶顯示模塊已作為很多電子產品的通過器件,如在計算器、萬用表、電子表及很多家用電子產品中都可以看到,顯示的主要是數字、專用符號和圖形。在單片機的人機交流界面中,一般的輸出方式有以下幾種:發光管、LED數碼管、液晶顯示器。發光管和LED數碼管比較常用,軟硬件都比較簡單。
在單片機系統中應用晶液顯示器作為輸出器件有以下幾個優點:
由于液晶顯示器每一個點在收到信號后就一直保持那種色彩和亮度,恒定發光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新新亮點。因此,液晶顯示器畫質高且不會閃爍。
液晶顯示器都是數字式的,和單片機系統的接口更加簡單可靠,操作更加方便。
液晶顯示器通過顯示屏上的電極控制液晶分子狀態來達到顯示的目的,在重量上比相同顯示面積的傳統顯示器要輕得多。
相對而言,液晶顯示器的功耗主要消耗在其內部的電極和驅動IC上,因而耗電量比其它顯示器要少得多。
(1)引腳說明:
第1腳:VSS為地電源。
第2腳:VDD接5V正電源。
第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。
第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。
第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平
R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數據。
第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。
第7~14腳:D0~D7為8位雙向數據線。
第15腳:背光源正極。
第16腳:背光源負極。
(2)1602LCD的RAM地址映射以及標準字庫表
LCD1602液晶模塊內部的字符發生存儲器已經存儲了160個不同的點陣字符圖形,這些字符圖有:阿拉伯數字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母。
它的讀寫操作、屏幕和光標的操作都是通過指令編程來實現的(說明:1為高電平,0為低電平)。
指令1:清顯示,指令碼01H,光標復位到地址00H位置。
指令2:光標復位,光標返回到地址00H 。
指令3:光標和顯示模式設置 I/D:光標移動方向,高電平右移,低電平左移 。S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效 。
指令4:顯示開關控制。 D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示。 C:控制光標的開與關,高電平表示有光標,低電平表示無光標。 B:控制光標是否閃爍,高電平閃爍,低電平不閃爍 。
指令5:光標或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標 。
指令6:功能設置命令 DL:高電平時為4位總線,低電平時為8位總線。      N:低電平時為單行顯示,高電平時雙行顯示。 F:低電平時顯示5X7的點陣字符,高電平時顯示5x10的點陣字符 (有些模塊是 DL:高電平時為8位總線,低電平時為4位總線)。
指令7:字符發生器RAM地址設置 。
指令8:DDRAM地址設置 。
指令9:讀出忙信號和光標地址。 BF為忙標志位,高電平表示忙,此時模塊不能接收命令或者數據,如果為低電平表示不忙,模塊就能接收相應的命令或者數據。
指令10:寫數據 。
指令11:讀數據 。
液晶顯示模塊是一個慢顯示器件,所以在執行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。
1602 內部顯示地址如圖3-6所示:
                         圖3.9 1602內部顯示地址
例如第二行第一個字符的地址是40H,那么是否直接寫入40H 就可以將光標定位在第二行第 一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1,所以實際寫入的數據應該是01000000B(40H)+10000000B(80H)=11000000B(C0H) 。在對液晶模塊的初始化中要先設置其顯示模式,在液晶模塊顯示字符時光標是自動右移的,無需人工干預。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態。1602 液晶模塊內部的字符發生存儲器(CGROM)已經存儲了160個不同的點陣字符圖形,如下圖所示,這些字符有:阿拉伯數字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H 中的點陣字符圖形顯示出來,我們就能看到字母“A”。

液晶顯示的原理是利用液晶的物理特性, 通過電壓對其顯示區域進行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規模集成電路直接驅動、易于實現全彩色顯示的特點,目前已經被廣泛應用在便攜式電腦、數字攝像機、PDA移動通信工具等眾多領域。

圖3.10 液晶顯示模塊電路圖
3.5 鍵盤設計

本設計就采用行列式鍵盤,同時也能減少鍵盤與單片機接口時所占用的I/O線的數目,在按鍵比較多的時候,通常采用這樣方法。

每一條水平(行線)與垂直線(列線)的交叉處不相通,而是通過一個按鍵來連通,利用這種行列式矩陣結構只需要N條行線和M條列線,即可組成具有N×M個按鍵的鍵盤。

在這種行列式矩陣鍵盤非鍵盤編碼的單片機系統中,鍵盤處理程序首先執行等待按鍵并確認有無按鍵按下的程序段。

4×4矩陣鍵盤的工作原理

在鍵盤中按鍵數量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖5所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數越多,區別越明顯,比如再多加一條線就可以構成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數比較多時,采用矩陣法來做鍵盤是合理的。

掃描原理

把每個鍵都分成水平和垂直的兩端接入,比如說掃描碼是從垂直的入,那就代表那一行所接收到的掃描碼是同一個bit,而讀入掃描碼的則是水平,掃描的動作是先輸入掃描碼,再去讀取輸入的值,經過比對之后就可知道是哪個鍵被按下。

比如說掃描碼送入01111111,前面的0111是代表此時掃描第一行P1.0列,而后面的1111是讓讀取的4行接腳先設為VDD,若此時第一行的第三列按鍵被按下,那讀取的結果就會變成01111101(注意1111變成1101),其中LSB的第三個bit會由1變成0,這是因為這個按鍵被按下之后,會被垂直的掃描碼電位short,而把讀取的LSB的bit電位拉到0,此即為掃描原理。

由於這種按鍵是機械式的開關,當按鍵被按下時,鍵會震動一小段時間才穩定,為了避免讓單片機誤判為多次輸入同一按鍵,我們必須在偵測到有按鍵被按下,就Delay一小段時間,使鍵盤以達穩定狀態,再去判讀所按下的鍵,就可以讓鍵盤的輸入穩定。圖3.8為鍵盤整體模框圖:

圖3.8  鍵盤整體模框圖
3.6  聲音提示模塊

蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發聲器件。 ;蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。蜂鳴器在電路中用字母“H”或“HA”(舊標準用“FM”、“LB”、“JD”等)表示。1.壓電式蜂鳴器 壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。有的壓電式蜂鳴器外殼上還裝有發光二極管

多諧振蕩器由晶體管或集成電路構成。當接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發聲。

壓電蜂鳴片由鋯鈦酸鉛或鈮鎂酸鉛壓電陶瓷材料制成。在陶瓷片的兩面鍍上銀電極,經極化和老化處理后,再與黃銅片或不銹鋼片粘在一起。

電磁式蜂鳴器 電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。

接通電源后,振蕩器產生的音頻信號電流通過電磁線圈,使電磁線圈產生磁場。振動膜片在電磁線圈和磁鐵的相互纏繞

蜂鳴器驅動電路一般都包含以下幾個部分:一個三極管、一個蜂鳴器、一個限流電阻。

蜂鳴器為發聲元件,在其兩端施加直流電壓(有源蜂鳴器)或者方波(無源蜂鳴器)就可以發聲,其主要參數是外形尺寸、發聲方向、工作電壓、工作頻率、工作電流、驅動方式(直流/方波)等。這些都可以根據需要來選擇。本設計采用有源蜂鳴器。

圖3.9 聲音報警電路

三極管Q1起開關作用,其基極的低電平使三極管飽和導通,使蜂鳴器發聲;而基極高電平則使三極管關閉,蜂鳴器停止發聲。

3.7 繼電器控制模塊

電磁繼電器一般由鐵芯、線圈、銜鐵、觸點簧片等組成的。只要在線圈兩端加上一定的電壓,線圈中就會流過一定的電流,從而產生電磁效應,銜鐵就會在電磁力吸引的作用下克服返回彈簧的拉力吸向鐵芯,從而帶動銜鐵的動觸點與靜觸點(常開觸點)吸合。當線圈斷電后,電磁的吸力也隨之消失,銜鐵就會在彈簧的反作用力返回原來的位置,使動觸點與原來的靜觸點(常閉觸點)釋放。這樣吸合、釋放,從而達到了在電路中的導通、切斷的目的。對于繼電器的“常開、常閉”觸點,可以這樣來區分:繼電器線圈未通電時處于斷開狀態的靜觸點,稱為“常開觸點”;處于接通狀態的靜觸點稱為“常閉觸點”。繼電器一般有兩股電路,為低壓控制電路和高壓工作電路。

圖3.12繼電器控制負載電路


電路中繼電器室通過PNP型三極管驅動,當閥值超過設定時,單片機會由高電平跳變成低電平,三極管導通繼電器吸合,繼電器起開關作用,可以驅動負載。


第四章 系統軟件設計
4.1主程序模塊

本系統軟件設計由主程序、初始化程序、LCD顯示程序、鍵盤掃描程序、鍵功能程序、密碼設置程序、EEPROM讀寫程序和延時程序等組成。主要程序設計流程圖如下所示:

圖4.1  主程序的流程圖

4.2 鍵盤掃描子程序

圖4.2  鍵盤掃描程序流程圖

4.3 系統模塊密碼設置子程序
由于設計是分模塊化進行,所以子程序是整體軟件系統的組成部分,子程序不但可以使程序化整為零,使其復雜簡單化,同時也方便閱讀,修改等,每個功能模塊都有它自己的子程序,在本設計中是用LCD顯示數據,所以就要用到顯示子程序,設計中用的是矩陣鍵盤,所以就用到鍵盤掃描子程序,例如還有顯示初始化子程序、LCD忙檢測子程序、關閉狀態顯示子程序、開鎖狀態顯示子程序、密碼輸入及修改狀態顯示子程序、密碼輸入錯誤后的提示子程序等。如下圖為密碼修改子程序流程圖

圖4.3  設置密碼子程序

4.4開鎖子程序

                                        圖4.4  開鎖流程圖

4.4軟件調試
在硬件支持的環境下,用proteus設計好的電路,Keil編好的程序編譯成芯片可識別的S51文件,利用PC機寫進proteus程序圖芯片內進行仿真測試,并對其出現的錯誤進行修改,由圖4.5~圖4.9可看出最終調試成功。
圖4.5  keil編譯程序成功
圖4.6  keil生成hex文件
圖4.7  proteus調用keil的hex文件進行仿真

圖4.8  仿真成功密碼正確


圖4.9  密碼正確黃燈亮

第五章 系統制作及調試
5.1焊接注意事項:

LCD的注意事項

1. 采用焊接方法將金屬基PIN安裝于LCD時,從玻璃末端到PCB的焊接位置的長度至少5mm,焊接溫度必須在260℃以下,且焊接時間必須在10秒以內,以免焊接過程中對裝置的損壞,確保焊接性能。在230℃,30秒條件下,90%的焊料須緊密附著于PIN上。

2. 對LCD基板或基PIN焊接位置的調整必須在安裝前完成。嚴禁猛烈移動基PIN,否則會機械地破壞LCD屏與基PIN之間的連接點。焊接時平放LCD,盡量不讓LCD受力。

3. 焊接LCD基板時,將其小心、平衡地插入PCB插槽,以避免損壞基PIN或LCD基板。

4. 焊接時,LCD基板不應長時間置于焊錫蒸汽中,清洗PCB時,必須避免污染LCD基板,否則可能損壞顯示器表面的偏光片及封口膠。

5. 顯示器表面的保護膜直到焊接完成才可揭掉,禁止手指及其它硬物接觸偏光片,禁止水和其他化學物質沾污裝置,因為這些物質會污染顯示器表面。

單片機焊接注意事項:

80s51單片機與其它單片機,dsp,arm芯片相比較而言是脆弱的,如果焊接時不小心就很可能把芯片損壞!建議用比較好的恒溫可調的烙鐵,功率在30瓦左右,溫度控制在260到300度,建議采用點焊而不用拉焊,焊接時烙鐵放在每個引腳的時間不能太長(最好低于3秒)。上邊提到的方法還不能確保芯片完好,對芯片有危害的還有帶電烙鐵的靜電感應!烙鐵質量不是太好的,焊接時可以把烙鐵電源插頭拔掉。

其他的電子器件焊接須知:

一般分四步驟進行。①準備焊接:清潔被焊元件處的積塵及油污,再將被焊元器件周圍的元器件左右掰一掰,讓電烙鐵頭可以觸到被焊元器件的焊錫處,以免烙鐵頭伸向焊接處時燙壞其他元器件。焊接新的元器件時,應對元器件的引線鍍錫。②加熱焊接:將沾有少許焊錫和松香的電烙鐵頭接觸被焊元器件約幾秒鐘。若是要拆下印刷板上的元器件,則待烙鐵頭加熱后,用手或銀子輕輕拉動元器件,看是否可以取下。③清理焊接面:若所焊部位焊錫過多,可將烙鐵頭上的焊錫甩掉(注意不要燙傷皮膚,也不要甩到印刷電路板上!),用光烙錫頭"沾"些焊錫出來。若焊點焊錫過少、不圓滑時,可以用電烙鐵頭"蘸"些焊錫對焊點進行補焊。④檢查焊點:看焊點是否圓潤、光亮、牢固,是否有與周圍元器件連焊的現象。

焊接流程按照附錄I所示的電子密碼鎖的硬件聯接原理圖按下列順序依次焊接:

(1)焊接單片機的晶振電路、復位電路等單片機的最小系統的外圍電路。

(2)焊接LCD的相應管腳并把LCD的管腳單片機相連接。

(3)焊接鍵盤的按鍵電路。

(4)焊接電子密碼鎖的密碼輸入錯誤的報警電路。

(5)焊接密碼鎖的開鎖機構電路。

(6)焊接其他接口及輔助電路。

(7)焊接接地及高電平。

5.2、硬件調試問題及解決方法

本設計在焊接調試時遇到的問題以及解決方法:

單片機的最小系統問題:

電源、晶振電路和復位電路都無異常。

Lcd焊接時的問題:

(1)接通電源后lcd無反應,各個引腳均屬正常。推斷可能是初始化程序出現問題。

經查找得知是lcd顯示器的15和16管腳控制背光功能,連接好之后還是不能顯示字符。

(2)接通電源開門燈和報警電路就會工作,分析原因是單片機剛開始各個管腳輸出高電平。


第六章 結論

本設計從經濟實用的角度出發,采用單片機STC89C51低功耗CMOS型E2PROM AT24C02作為主控芯片與數據存儲器單元,結合外圍的鍵盤輸入、顯示、報警、開鎖等電路并用C語言的控制程序,研制了一款可以多次更改密碼具有報警功能的電子密碼鎖。設計完全可行可以達到設計目地。使用單片機制作的電子密碼鎖具有軟硬件設計簡單,易于開發,成本較低,安全可靠,操作方便等特點,可應用于住宅、辦公室的保險箱及檔案柜等需要防盜的場所,有一定的實用性。該電路設計還具有按鍵有效提示,輸入錯誤提示,控制開鎖電平,控制報警電路,修改密碼等多種功能。可在意外泄密的情況下隨時修改密碼。保密性強,靈活性高,特別適用于家庭、辦公室、學生宿舍及賓館等場所。


附錄一  原理圖

附錄二 仿真圖


完整的Word格式文檔51黑下載地址(帶源碼+仿真+原理圖):
電子密碼鎖.7z (6.67 MB, 下載次數: 3006)


評分

參與人數 2黑幣 +55 收起 理由
玥玥喵喵 + 5 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:313328 發表于 2018-11-22 17:34 | 只看該作者
很好的資料
回復

使用道具 舉報

板凳
ID:66287 發表于 2018-11-23 10:07 | 只看該作者
if(i==6)                                         //密碼輸入對時
                        {
                                if((InputData[0]==adminpassword[0])&&(InputData[1]==adminpassword[1])&&(InputData[2]==adminpassword[2])&&(InputData[3]==adminpassword[3])&&(InputData[4]==adminpassword[4])&&(InputData[5]==adminpassword[5]))
                                   {
                                        WrToROM(initpassword,0,6);                                 //強制將初始密碼寫入24C02存儲
                                        write_1602com(er);
                                        for(j=0;j<16;j++)
                                        {
                                                write_1602dat(initword[j]);                                //顯示初始化密碼
                                        }
                                        TwoAlam();                                                                        //成功提示音
                                        Delay400Ms();                                                                //延時400ms
                                        TwoAlam();                                                                        //成功提示音
                                        N=0;                                                                                //輸入位數計數器清零
                                }
                                else
                                {
                                        CorrectCont++;                                        //輸入正確變量++
                                        if(CorrectCont==1)                                //正確輸入計數,當只有一次正確輸入時,開鎖
                                        {
                                                //DisplayListChar(0,1,LockOpen);
                                                write_1602com(er);
                                                for(j=0;j<16;j++)
                                                {
                                                        write_1602dat(LockOpen[j]);                  //顯示open開鎖畫面
                                                }
                                                TwoAlam();                        //操作成功提示音
                                                KEY=0;                                                                                        //開鎖
                                                pass=1;                                                                                        //置正確標志位
                                                TR0=1;                                                                                        //開啟定時
                                                for(j=0;j<6;j++)                                                                //將輸入清除
                                                {
                                                        InputData[i]=0;                                                                //開鎖后將輸入位清零
                                                }
                                        }       
                                        else                                                                                                //當兩次正確輸入時,開啟重置密碼功能
                                        {
                                                write_1602com(er);
                                                for(j=0;j<16;j++)
                                                {
                                                        write_1602dat(SetNew[j]);                                        //顯示重置密碼界面
                                                }
                                                TwoAlam();                                                                            //操作成功提示
                                                ReInputEn=1;                                                                        //允許重置密碼輸入
                                                CorrectCont=0;                                                                        //正確計數器清零
                                        }
                                }
                          }
       


真不錯!!!
回復

使用道具 舉報

地板
ID:442132 發表于 2018-12-11 16:31 | 只看該作者
有點看不懂
回復

使用道具 舉報

5#
ID:373998 發表于 2018-12-21 09:46 | 只看該作者
bhjyqjs 發表于 2018-11-23 10:07
if(i==6)                                         //密碼輸入對時
                        {
                                if((InputData[0]==adminpassword[0])&&(InputData[1]==adminpas ...

請問ABCD各鍵表示什么??我是個菜鳥,冒昧打擾了。。
回復

使用道具 舉報

6#
ID:104477 發表于 2018-12-25 18:33 來自手機 | 只看該作者
我做了藍牙加按鍵密碼鎖,沒有超次限制
回復

使用道具 舉報

7#
ID:427731 發表于 2018-12-26 18:00 | 只看該作者
你這怎么用啊 兄弟 你沒寫啊
回復

使用道具 舉報

8#
ID:358464 發表于 2019-1-7 15:02 | 只看該作者
感謝分享,參考一下
回復

使用道具 舉報

9#
ID:470446 發表于 2019-1-19 10:23 | 只看該作者
學習學習
回復

使用道具 舉報

10#
ID:470446 發表于 2019-1-19 10:43 | 只看該作者
學習學習
回復

使用道具 舉報

11#
ID:478370 發表于 2019-2-20 10:18 | 只看該作者
資料很到位
回復

使用道具 舉報

12#
ID:477625 發表于 2019-2-20 15:57 | 只看該作者
老鐵,你的三次密碼輸入錯誤之后,led燈并不能亮呀,你可以仿真一下
回復

使用道具 舉報

13#
ID:480316 發表于 2019-3-5 10:43 | 只看該作者
很好的論文  非常值得借鑒
回復

使用道具 舉報

14#
ID:485778 發表于 2019-3-6 19:09 | 只看該作者
有完整的編程程序嗎   借鑒一下
回復

使用道具 舉報

15#
ID:424192 發表于 2019-3-6 21:21 | 只看該作者
嗯嗯,寫得不錯額。
回復

使用道具 舉報

16#
ID:473186 發表于 2019-3-7 02:00 | 只看該作者
不錯不錯,收下先
回復

使用道具 舉報

17#
ID:473186 發表于 2019-3-7 02:00 | 只看該作者
期待更多的作品上線來咯
回復

使用道具 舉報

18#
ID:476725 發表于 2019-3-8 19:12 | 只看該作者
大神,請問所有電路和各個部分都需要自己設計和焊接嗎,可以用帶有鍵盤的單片機套裝嗎。我對電路設計基本不懂,只會寫代碼。
回復

使用道具 舉報

19#
ID:487333 發表于 2019-3-9 14:41 | 只看該作者
謝謝樓主
回復

使用道具 舉報

20#
ID:499935 發表于 2019-3-28 15:28 | 只看該作者
樓主在嗎,需要你的幫忙,
回復

使用道具 舉報

21#
ID:502407 發表于 2019-4-1 14:35 | 只看該作者
資源有分享的嗎
回復

使用道具 舉報

22#
ID:308455 發表于 2019-4-7 11:01 | 只看該作者
h黑幣不夠,哎,樓主很棒
回復

使用道具 舉報

23#
ID:347814 發表于 2019-4-14 17:14 | 只看該作者
為什么我把源碼復制到PROTEUS中,編譯進出現錯誤呢?
回復

使用道具 舉報

24#
ID:347814 發表于 2019-4-14 17:21 | 只看該作者

為什么我把文件在PROTEUS中仿真時出現錯誤呢?

回復

使用道具 舉報

25#
ID:521289 發表于 2019-4-25 13:15 | 只看該作者
太棒了
回復

使用道具 舉報

26#
ID:523143 發表于 2019-4-27 19:14 | 只看該作者
學習學習謝謝
回復

使用道具 舉報

27#
ID:528622 發表于 2019-5-6 15:50 | 只看該作者
學習學習
回復

使用道具 舉報

28#
ID:527921 發表于 2019-5-7 17:22 | 只看該作者
非常感謝大佬的分享 準備細細品味
回復

使用道具 舉報

29#
ID:528536 發表于 2019-5-7 17:52 | 只看該作者
怎么生成不了.核心文件呢?求解

我將程序代碼復制,并新建一個程序,將代碼粘貼,結果生成不了.hex文件。
回復

使用道具 舉報

30#
ID:354697 發表于 2019-5-11 13:28 | 只看該作者
hs88 發表于 2018-12-25 18:33
我做了藍牙加按鍵密碼鎖,沒有超次限制

大佬,我要做藍牙鎖,可以參考一下你的資料么
回復

使用道具 舉報

31#
ID:535176 發表于 2019-5-11 21:30 | 只看該作者
不錯,想做一個
回復

使用道具 舉報

32#
ID:536982 發表于 2019-5-15 19:19 | 只看該作者
學習學習
回復

使用道具 舉報

33#
ID:543975 發表于 2019-5-21 16:59 | 只看該作者
先mark一下
回復

使用道具 舉報

34#
ID:305589 發表于 2019-5-25 18:49 | 只看該作者
想下載來看看
回復

使用道具 舉報

35#
ID:541328 發表于 2019-5-26 20:34 | 只看該作者
初始密碼是131420嗎,我仿真怎么沒用?也不會出來錯誤提示
回復

使用道具 舉報

36#
ID:541328 發表于 2019-5-26 20:51 | 只看該作者
1174051618 發表于 2019-2-20 15:57
老鐵,你的三次密碼輸入錯誤之后,led燈并不能亮呀,你可以仿真一下

老鐵,這個密碼是不是131420?我用了沒顯示open
回復

使用道具 舉報

37#
ID:548131 發表于 2019-5-27 10:14 | 只看該作者
太厲害了
回復

使用道具 舉報

38#
ID:549117 發表于 2019-5-28 11:03 | 只看該作者
太棒了
回復

使用道具 舉報

39#
ID:552579 發表于 2019-6-1 17:15 | 只看該作者
不懂,嗨喲仔細看看
回復

使用道具 舉報

40#
ID:560907 發表于 2019-6-12 14:44 | 只看該作者
學習學習
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人国内精品久久久久一区 | 欧美一区二区三区国产精品 | 国产欧美一区二区精品忘忧草 | 国内精品视频 | 亚洲国产一区二区视频 | 精品视频在线免费观看 | 国产精品天堂 | 欧美一二三 | 久久er99热精品一区二区 | 国产亚洲www | 国产激情片在线观看 | 成人h动漫亚洲一区二区 | 人人叉 | 日本欧美在线观看视频 | 99re6在线视频精品免费 | 免费h在线 | 亚洲自拍偷拍欧美 | 欧美一区二区免费在线 | 怡红院免费的全部视频 | 国产精品一区2区 | 国产 欧美 日韩 一区 | 一级黄色片日本 | 国产亚洲一区二区精品 | 天天躁日日躁aaaa视频 | 成人黄色av网址 | av在线一区二区三区 | 精品视频在线播放 | 久久五月婷| 粉嫩国产精品一区二区在线观看 | 成人在线视 | 欧美精品乱码久久久久久按摩 | 日韩另类 | 午夜免费 | 国产精品美女久久久久aⅴ国产馆 | 91精品国产色综合久久不卡98 | 国产视频1区2区 | 九九热精品视频 | 国产乱码精品一区二区三区忘忧草 | 欧美一二三四成人免费视频 | 在线视频一区二区 | 国产高清在线精品一区二区三区 |