欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機的指紋自動存包柜系統設計論文

  [復制鏈接]
跳轉到指定樓層
樓主

基于單片機的自動存包系統設計



圖5.1  實物圖
摘 要

近年來,隨著生活水平的提高,人們對于社會消費品的質量和數量的要求也在逐漸增加。為了更好的為廣大顧客服務,在一些商場、影院、超市等公共場合通常設置有自動存包柜,本次便是針對這一現象進行設計 。

本文詳細介紹了國內自動存包控制系統的發展現狀,發展中所面臨的問題。并詳細介紹了本系統采用的AT89S52單片機做控制器,可以同時管理四個存包柜。柜門鎖是由繼電器控制,當顧客需要存包的時候,可以自行到存包柜前按“開門”鍵,需要顧客向光學指紋識別系統輸入個指紋,然后通過繼電器進行開門(用亮燈表示),顧客即可存包,并需將柜門關上。當顧客需要取包時,要將只要將之前輸入的指紋放置于指紋識別器前方,指紋識別器采集到指紋信息輸出相應的高低電平信號傳給單片機,系統比較密碼一致后,發出開箱信號至繼電器將柜門打開,顧客即可將包取出。 它具有功能實用、操作簡便、安全可靠、抗干擾性強等特點。


目 錄

摘 要

Abstract

第1章 緒 論

1.1  題目來源及意義

1.2  自動存包柜課題的發展與現狀

1.3  本課題的目標與任務

第2章 系統方案論證與器件的選擇

2.1  主控模塊方案選擇

2.1.1  采用DSP+FPGA方案

2.1.2  采用51單片機方案

2.1.3  采用61單片機方案

2.2  輸入端方案的選擇

2.2.1  機設條碼式電子存包柜方案

2.2.2  非接觸IC卡電子存包柜方案

2.2.3  指紋識別電子存包柜方案

2.3  輸出端方案的選擇

2.3.1  光電開關與電磁閥方案

2.3.2  繼電器控制方案

2.4  方案總結

第3章              系統硬件設計

3.1              系統硬件總體設計

3. 2    系統硬件各單元設計

3.2.1  控制單元設計

3.2.2  指紋識別設計

3.2.3   輸出電路設計

3. 3  整體電路圖

第4章 系統軟件設計

4.1  系統軟件整體設計

4.2  系統軟件各部分設計

4.2.1  鍵輸入程序設計

4.2.2  驅動電路程序設計

第5章 系統調試

5.1  系統硬件調試

5.2  系統軟件調試

5.3  系統聯合調試

總 結

參考文獻

致 謝

附 錄



華科學院本科畢業設計(論文)


第1章  緒 論1.1 題目來源及意義

近年來,隨著生活水平的提高,人們對于社會消費品的質量和數量的要求也在逐漸增加。為了更好的為廣大顧客服務,在一些商場、影院、超市等公共場合通常設置有自動存包柜,它具有功能實用、操作簡便、安全可靠、抗干擾性強等特點。顧客可以根據簡明清晰的操作說明自行的完成取物品的工作,自助式存取可以避免開放式存包帶來的不必要的糾紛,又可以節約人員開支,達到減員增效的目的。同時,存包可以解放顧客的雙手,使顧客放開雙手,更方便的進行購物。

單片機一詞最初是源于"SingleChipMicrocomputer”,簡稱SCM。在單片機誕生時,SCM是一個準確、流行的稱謂,“單片機”一詞準確地表達了這—概念。隨著SCM在技術上、體系結構上不斷擴展其控制功能,單片機已不能用“單片微型計算機”來準確表達其內涵。國際上逐漸采用"MCU"(MicroControllerUnit”)來代替,形成了單片機界公認的、最終統一的名詞。在國內因為“單片機”一詞已約定俗成,故而繼續沿用。

單片機按其內部中央處理器CPU(CentralProcessingUnit)的字長分為1位機、4位機、8位機、16位機等。從1976年8位單片機誕生以來,單片機領域中一直是以8位機為主流機型,預計這種情況還將繼續下去。因此我們以Intel公司的8位機為例來談談單片機的發展歷史。
   1.第一階段——單片機階段(1976午~1978年)。這階段的任務是探索計算機的單芯片集成。以Intel公司的MCS—48為代表,其CPU、存儲器、定時器/計數器、中斷系統、I/O端口、時鐘以及指令系統都是按嵌入式系統要求專門設計的。
   2.第二階段——單片機的完善階段(1978年一1982年)。計算機的單芯片集成探索取得成功后,隨后的任務就是要完善單片機的體系結構。作為這一階段的典型代表是Inlel公司將MCS—48向MCS—5l系列的過渡。它在以下幾個重要方面奠定了單片機的體系結構。
(1)完善的外部總線。有8位數據總線、16位地址總線、控制總線及具有多機通信功能的串行通信接口。
(2)CPU外圍功能單元的集中管理模式。
(3)設置面向工控的位地址空間及位操作方式。
(4)指令系統突出控制功能。
  3.第三階段——微控制器形成階段(1983年一1990年)。這一階段單片機的主要技術發展方向是滿足測控對象要求的外圍電路的增強,如A/D轉換、D/A轉換、高速I/O口、WDT(程序監視定時器)、DMA(高速數據傳輸)等,強化了智能控制的特征。
  4.第四階段--微控制器全面發展階段(1990年以后)。即當前的單片機時代,其顯著特點是百花齊放、技術創新。單片機正在滿足各個方面的需求.從玩具、小家電、工程控制單元到機器人、智能儀表,過程控制,個人信息終端等無所不能。

1.2  自動存包柜課題的發展與現狀

電子存包柜又名自動存包柜、電子寄存柜,是20世紀嵌入式計算機快速發展后在傳統寄存行業的一大應用。從外觀和用途來看,電子存包柜屬于家具類別中的鋼制家具。從實現方式和功能上來看,電子存包柜屬于電子專用設備。電子存包柜主要由以下幾種類型:

(1)機設條碼式電子存包柜   

存物時:按“存”鍵,寄存柜自動打印一張密碼條,機器語音提示:“請取密碼條”。使用者抽出密碼紙,對應的箱門自動打開,存好后關上箱門。取物時:直接將條碼紙在掃描口掃描,對應的箱門會自動打開。語音提示:“請取完物品后關好箱門!

(2)指紋式電子存包柜   

以使用者指紋作為寄存的憑證;當使用者進行存物操作時,須先按一下操作鍵盤中的“存”鍵,然后在指紋采集窗里采集指紋,機器會把該指紋與分配給使用者使用的寄存箱的箱號結合起來,并將信息自動記錄下,同時自動打開該箱,供使用者存物,存完后使用者自己關好箱門;取物時,只需須先按一下操作鍵盤中的“取”鍵,然后在指紋采集窗里采集指紋,寄存柜將指紋數據與先前記錄下的進行比對,正確后才會打開該箱供使用者取物(同時機器會自動記錄當時的時間、指紋以備查詢)。  

(3)非接觸IC卡電子存包柜   

以使用者所持IC卡(即射頻卡)作為寄存的憑證;當使用者進行存物操作時,須先按一下操作鍵盤中的“存”鍵再刷卡(即讓寄存柜讀取卡號),寄存柜先識別是否為該場所的IC卡,若不是則拒絕存物;若是,機器會把該卡號與分配給使用者使用的寄存箱的箱號結合起來,并將信息自動記錄下,同時自動打開該箱,供使用者存物,存完后自己關好箱門;取物時,只需須先按一下操作鍵盤中的“取”鍵再刷卡,寄存柜將讀取的卡號與先前記錄下的進行比對,正確后才會打開該箱供使用者取物(同時機器會自動記錄當時的時間、卡號以備查詢)

4)聯網型非接觸IC卡電子存包柜   

聯網型非接觸IC卡電子存包柜基本功能與非接觸IC卡電子存包柜一致,另外增加了網絡通訊模塊,上位機管理軟件等,以實現寄存狀態聯網監控,分段收費,報表打印等功能。   

現在公共場所應用比較廣泛。因此,研制出一種能自動存包的裝置有很重大的意義,我所研究的就是這方面的課題。

1.3  本課題的目標與任務

本系統采用的單片機做控制器,可以同時管理多個存包柜。柜門鎖由繼電器控制,當顧客需要存包的時候,可以自行到存包柜前按“開門”鍵,需要顧客向系統輸入個指紋,然后通過繼電器進行開門(用亮燈表示),顧客即可存包,并需將柜門關上。當顧客需要取包時,要將只要將之前輸入的指紋放置于指紋識別器前方,指紋識別器采集到指紋信息輸出相應的高低電平信號傳給單片機,系統比較密碼一致后,發出開箱信號至繼電器將柜門打開,顧客即可將包取出。

相比較條形碼掃描和IC卡的自動存包柜相比,指紋識別的優勢在于在整個存包過程中無附帶的物品,不怕因為丟失而導致無法取包,所以我覺得指紋識別在現今的各類存包柜中有很明顯的發展前景。


第2章   系統方案論證與器件的選擇
2.1  主控模塊方案選擇
2
.1.1  采用DSP+FPGA方案

指紋識別追求的主要指標為高識別率、實時性和大詞匯量;而對于一個指紋識別系統,還應考慮軟硬件設計簡單、價格低廉、外圍控制靈活、人機交互便捷等特點,F在應用于語音識別的芯片主要為DSP(數字信號處理器)芯片:如TI公司的TMS320系列。然而, 將DSP 芯片用于小型語音指紋系統中, 其不足之處是很明顯的:引腳多、價格貴、使用繁瑣;控制功能弱,常需要與單片機或FPGA (現場可編程門陣列)結合, 來實現人機交互;常需要外接A/D 轉換芯片;引腳為3.3 V,與單片機、FPGA、Flash存儲器等連接時,要考慮電平匹配。這些將使整個系統結構龐大,設計繁瑣。

2.1.2  采用51單片機方案

采用 MCS-51 系列單片機實現,選用AT89S52芯片作為主要的控制模塊。該芯片中共有四塊用來跟外接電路連接。滿足了我本次設計的基本要求,所我選擇51單片機作為本次設計的方案

2.1.3  采用61單片機方案

1. 電源區:61板采用3節五號電池進行供電,由J10接入,在61板上,前后兩組電容用來耦合濾波,使其供給芯片的電電源接反源更加的干凈平滑。為了獲得標準的3.3v電壓,在板子上加入SPY0029A三端穩壓管。

兩個CE基二極管,是為了防止誤將電源接反造成不必要的損失而設置的,在操作中千萬不要將電源接反,因為反向電壓超過一定的值,二極管將會被損壞,達不到保護的目的。后面的零電阻及其電源、地分成不同的幾路是為減少電磁干擾設置的。

2. 程序下載區:I本運作方式是通過控制clock及通過ICE喂食指令方式,老來控制cpu的運行及緩存器資料和內存資料的存取,因此必須透過控制緩存器值得設定來控制目前cpu的動作。  

3. 音頻輸入部分:在61板上,MICP和MICN將隨著MIC產生的波形變化,并在兩個端口處形成兩路反想的波形,再經過兩級運放放大,把放大的語音信號交給ADC轉換為數字量,這個時候我們就可以通過單片機編程對這些數據進行處理,比如說語音數據壓縮、語音識別樣本處理。   

4.J3是語音輸出接口,一個放大,然后輸出,SPY0030A放大,然后輸出。

5.SPCE061A與周邊:這就是整塊板子的大腦,所有控制信息都是從這里發出的,那些周邊器件用來協助SPCE061A單片機正常工作。   

6.鍵控區:采用這幾個按鍵我們可以做一些簡單的試驗,比如說當板子里下載了復讀機的程序,按這幾個按鍵就可以分別用來進行錄音、暫停和播放。  

7.復位區:這里是由幾個簡單的電子元器件組成,當按下這里面的按鍵后,單片機就重新開始工作,也可以說成是單片機里的程序從第一條開始重新運行。  

8.端口區:用于對外掛硬件的控制,或者獲取外部硬件的一些狀態以便SPCE061A來進行處理。


2.2  輸入端方案的選擇2.2.1  機設條碼式電子存包柜方案

存物時:按“存”鍵,寄存柜自動打印一張密碼條,機器語音提示:“請取密碼條”。使用者抽出密碼紙,對應的箱門自動打開,存好后關上箱門。取物時:直接將條碼紙在掃描口掃描,對應的箱門會自動打開。語音提示:“請取完 物品后關好箱門!

設計如下

根據“自動存包”這一目的要求,做如下設計安排:

第一部分:CPU核心控制部分,由單片機8031、復位電路、時鐘電路等構成,是整個系統的核心。

第二部分:鍵盤顯示控制部分。對3個數碼管和2個按鍵進行管理,3個數碼管用于顯示兩位柜號和3位密碼,12個按鍵分別為10個數字鍵和2個功能鍵。通過這些鍵盤,用戶就可以完成所有的操作。

第三部分:執行機構部分。它是通過8051的并行口擴展一片8255A芯片,并通過8255A控制20個燈的狀態(亮滅)來模擬柜子的存包取包的過程。

軟件部分主要采用我們自己設定的一種與柜號相關聯的算法來產生一組3位的隨機密碼,而密碼的產生、核對過程就對應存包、取包的過程。

系統框圖如圖2.1所示

圖2.1 系統框圖

主要核心器件有:AT89C51,打印機,條形碼掃描系統,光電開關,電磁閥等。

主程序模塊

該模塊的功能包括顯示的初始化,判斷是否有空箱,鍵盤掃描,密碼掃描等功能。


  本次設計的流程圖如圖2.2.軟件模擬程序為,首先先檢測所有的空箱數目,然后根據按鍵判斷狀態是要存包還是取包,如果是存包的話,就輸入密碼,然后將包存入箱柜內,然后關門,系統檢測是否關門,如果是的話則進行下一步,否則提示未關門。如果是取包的時候,輸入密碼后,驗證密碼的正確與否,正確的話就看箱柜是否關門,否則提示箱柜未關門。



圖2.2 主程序流程圖

優點:方便,識別度高,

缺點:容易丟失打印條,因為有條形碼掃描和條形碼打印這塊,所以造價成本比較高,所以不適于本次設計的使用。

2.2.2  非接觸IC卡電子存包柜方案

以使用者所持IC卡(即射頻卡)作為寄存的憑證;當使用者進行存物操作時,須先按一下操作鍵盤中的“存”鍵再刷卡(即讓寄存柜讀取卡號),寄存柜先識別是否為該場所的IC卡,若不是則拒絕存物;若是,機器會把該卡號與分配給使用者使用的寄存箱的箱號結合起來,并將信息自動記錄下,同時自動打開該箱,供使用者存物,存完后自己關好箱門;取物時,只需須先按一下操作鍵盤中的“取”鍵再刷卡,寄存柜將讀取的卡號與先前記錄下的進行比對,正確后才會打開該箱供使用者取物(同時機器會自動記錄當時的時間、卡號以備查詢)

優點:識別度高,系統穩定,

缺點:IC卡不易攜帶,而且會出現消磁等問題,所以不適于本次設計。

2.2.3  指紋識別電子存包柜方案

以使用者指紋作為寄存的憑證;當使用者進行存物操作時,須先按一下操作鍵盤中的“存”鍵,然后在指紋采集窗里采集指紋,機器會把該指紋與分配給使用者使用的寄存箱的箱號結合起來,并將信息自動記錄下,同時自動打開該箱,供使用者存物,存完后使用者自己關好箱門;取物時,只需須先按一下操作鍵盤中的“取”鍵,然后在指紋采集窗里采集指紋,寄存柜將指紋數據與先前記錄下的進行比對,正確后才會打開該箱供使用者取物(同時機器會自動記錄當時的時間、指紋以備查詢)

圖4.3  設計框圖

優點:識別度高,沒有多余的東西,方便,容易使用,成本相比較而言較低,所以本次設計運用該方案。


2.3  輸出端方案的選擇2.3.1  光電開關與電磁閥方案

紅外線光電開關(光電傳感器)是利用被檢測物體對紅外光束的遮光或反射,由同步回路選通而檢測物體的有無,其物體不限于金屬,對所有能反射光線的物體均可檢測。

開箱控制電路功能用來打開箱鎖。該系統共控制24個存包柜,其中使用了8255A的PA、PB、PC三口的24跟口線作為輸出,輸出信號經三極管放大后驅動電磁鎖動作,從而將箱鎖打開。同時在箱的門沿上還裝有限位開關,來檢測門的閉合與否。并在適當的時候來進行報警,提醒顧客關好柜門。為了保證安全,鎖簧需要有較強的彈力。電磁鎖的驅動功率需要20W以上,可以采用20V直流電源,產生1A的驅動電流,為加強驅動功率,采用二級直流放大。在這里我們使用DSN-Y電磁鎖,他的技術指標即參數都能夠滿足我們的需要。


2.3.2  繼電器控制方案

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

通過單片機的指令,控制繼電器的導通或者切斷,用燈來模擬箱柜的開關。


2.4  方案總結

通過比較可知,在主控方案選擇中,用單片機方案更加容易的實現我的設計;而在輸入設備中,相比較IC卡和條形碼掃描,我個人認為指紋識別更加方便實用,而且所用資源比較少,性價比更高,所以選擇指紋識別作為本次實驗的方案;而在輸出設備中,我認為繼電器方案能夠更加明顯的顯示我的設計,更加容易的實現,綜上所述,我的方案定為這樣的。


第3章                     系統硬件設計3.1          系統硬件總體設計

自動存包柜的系統框圖如圖3.1。該系統AT89S52單片機為核心,還有顯示屏及按鍵,指紋識別器,繼電器檢測,斷電保護等部分。

以使用者指紋作為寄存的憑證;當使用者進行存物操作時,須先按一下操作鍵盤中的“存”鍵,然后在指紋采集窗里采集指紋,機器會把該指紋與分配給使用者使用的寄存箱的箱號結合起來,并將信息自動記錄下,同時自動打開該箱,供使用者存物,存完后使用者自己關好箱門;取物時,只需須先按一下操作鍵盤中的“取”鍵,然后在指紋采集窗里采集指紋,寄存柜將指紋數據與先前記錄下的進行比對,正確后才會打開該箱供使用者取物(同時機器會自動記錄當時的時間、指紋以備查詢)。


圖 3.1 自動存包柜系統框圖


根據系統框圖,本設計的面板設計圖如圖3.2所示

圖3.2 面板設計圖


3. 2    系統硬件各單元設計3.2.1  控制單元設計

AT89S52 是一種低功耗、高性能CMOS8位微控制器,具有8K在系統可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術制造,與工業80C51產品指令和引腳完 全兼容。片上Flash允許程序存儲器在系統可編程,亦適于常規編程器。在單芯片上,擁有靈巧的8位CPU和在系統可編程Flash,使得AT89S52為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。AT89S52具有以下標準功能:8k字節Flash,256字節RAM, 32 位I/O 口線,看門狗定時器,2個數據指針,三16位定時器/計數器,一個6向量2級中斷結構,全雙工串行口,片內晶振及時鐘電路。另外,AT89S52可降至0Hz靜態邏輯操作,支持2種軟件可選擇節電模式。空閑模式下,CPU停止工作,允許RAM、定時器/計數器、串口、中斷繼續工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。

P0口P0口是一個8位漏極開路的雙向I/O口。作為輸出口,每位能驅動8個TTL邏輯電平。對P0端口寫“1”時,引腳用作高阻抗輸入。當訪問外部程序和數據存儲器時,P0口也被作為低8位地址/數據復用。在這種模式下,P0不具有內部上拉電阻。在flash編程時,P0口也用來接收指令字節;在程序校驗時,輸出指令字節。程校驗時,需要外部上拉電阻。

P1口P1口是一個具有內部上拉電阻的8位雙向I/O 口,p1 輸出緩沖器能驅動4個 TTL邏輯電平。

此外,P1.0和P1.1分別作定時器/計數器2的外部計數輸入(P1.0/T2)和定時器/計數器2的觸發輸入(P1.1/T2EX)。在flash編程和校驗時,P1口接收低8位地址字節。

引腳號第二功能:

P1.0 T2(定時器/計數器T2的外部計數輸入),時鐘輸出

P1.1 T2EX(定時器/計數器T2的捕捉/重載觸發信號和方向控制)

P1.5 MOSI(在系統編程用)

P1.6 MISO(在系統編程用)

P1.7 SCK(在系統編程用)

在該設計中,P1口與顯示屏相連,顯示出單片機做出的運轉。

P2 口P2口是一個具有內部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅動4個TTL邏輯電平。對P2端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用16位地址讀取外部數據存儲器(例如執行MOVX @DPTR)時,P2口送出高八位地址。在這種應用中,P2口使用很強的內部上拉發送1。在使用 8位地址(如MOVX @RI)訪問外部數據存儲器時,P2口輸出P2鎖存器的內容。在flash編程和校驗時,P2口也接收高8位地址字節和一些控制信號。

在該設計中,P2口與輸出的繼電器相連,在整個系統中的作用就是作為輸出設備的存在。

P3口P3口是一個具有內部上拉電阻的8位雙向I/O 口,p3輸出緩沖器能驅動4個TTL邏輯電平。 P3口亦作為AT89S52特殊功能(第二功能)使用,如下表所示。在flash編程和校驗時,P3口也接收一些控制信號。

端口引腳第二功能:

P3.0 RXD(串行輸入口)

P3.1 TXD(串行輸出口)

P3.2 INTO(外中斷0)

P3.3 INT1(外中斷1)

P3.4 TO(定時/計數器0)

P3.5 T1(定時/計數器1)

P3.6 WR(外部數據存儲器寫選通)

P3.7 RD(外部數據存儲器讀選通)

此外,P3口還接收一些用于FLASH閃存編程和程序校驗的控制信號。

在該設計中,P3口作為輸入端存在,接受系統輸入的信號。

RST復位輸入。當振蕩器工作時,RST引腳出現兩個機器周期以上高電平將是單片機復位。

ALE/PROG當訪問外部程序存儲器或數據存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數據存儲器時將跳過一個ALE脈沖。對FLASH存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過對特殊功能寄存器(SFR)區中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳會被微弱拉高,單片機執行外部程序時,應設置ALE禁止位無效。

PSEN程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當AT89S52由外部程序存儲器取指令(或數據)時,每個機器周期兩次PSEN有效,即輸出兩個脈沖,在此期間,當訪問外部數據存儲器,將跳過兩次PSEN信號。

EA/VPP外部訪問允許,欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH),EA端必須保持低電平

(接地)。需注意的是:如果加密位LB1被編程,復位時內部會鎖存EA端狀態。如EA端為高電平(接Vcc端),CPU則執行內部程序存儲器的指令。FLASH存儲器編程時,該引腳加上+12V的編程允許電源Vpp,當然這必須是該器件是使用12V編程電壓Vpp。

XTAL1振蕩器反相放大器和內部時鐘發生電路的輸入端。

XTAL2振蕩器反相放大器的輸出端。

AT89S52的管腳圖見圖3.3

AT89S52的工作方式

AT89S52的工作方式可以分做復位,掉電和低功耗方式等。
(一)、復位方式

單片機復位后,程序計數器PC和SFR的狀態。復位后,PC初始話為0000H,使單片機能從0000H開始執行程序,故單片機除正常工作的程序運行出錯或操作出錯而導致死機時,需要復位鍵進行重新啟動,復位不影響RAM存放的內容,因為復位操作是在帶電的狀態下將程序存儲器的地址改變,而ALE和PSEN非在復位期間將輸出高電平。

RST是復位信號的輸入端,RST輸入一個有效的高電平舊能使系統復位,當高電平持續24個振蕩脈沖周期的時候,單片機完成了復位的操作,假如晶振的頻率為6MHZ,則復位信號的持續時間不應小于4us。

復位可以是上電復位,按鍵手動復位,和二者混合式。復位信號中的電阻和電容是為了保證RST斷能保證兩個機器周期以上的高電平來完成復位操作而特意設定的。

(二)、掉電和低功耗方式

人們往往在程序運行中發生系統掉電的故障,使RAM和寄存器中的數據內容丟失,使人們丟失珍貴的數據而束手無策,AT89S52有掉電保護功能,是先把有用的數據保存,再用備用電源進行供電。

3.2.2  指紋識別設計

在自動存包柜的設計中輸入部分是十分重要的一個環節,在這里我們需要檢測門的限位,檢測箱內是否有物體,還有相應的錄入密碼,并在顧客需要的時候檢測密碼,并自動打開柜門。還需要顯示是否有空箱以及空箱的位置,來為顧客提供選擇。

(1) 指紋技術設計

指紋識別技術把一個人同他的指紋對應起來,通過比較他的指紋和預先保存的指紋進行比較,就可以驗證他的真實身份。每個人(包括指紋在內)皮膚紋路在圖案、斷點和交叉點上各不相同,也就是說,是唯一的,并且終生不變。依靠這種唯一性和穩定性,我們才能創造指紋識別技術

指紋識別特征

總體特征是指那些用人眼直接就可以觀察到的特征。包括紋形、模式區、核心點、三角點和紋數等。

紋形

指紋專家在長期實踐的基礎上,根據脊線的走向與分布情況一般將指紋分為三大類——環型(loop,又稱斗形)、弓形(arch)、螺旋形(whorl)。

模式區

即指紋上包括了總體特征的區域,從此區域就能夠分辨出指紋是屬于哪一種類型的。有的指紋識別算法只使用模式區的數據,有的則使用所取得的完整指紋。

核心點

位于指紋紋路的漸進中心,它在讀取指紋和比對指紋時作為參考點。許多算法是基于核心點的,即只能處理和識別具有核心點的指紋。

三角點

位于從核心點開始的第一個分叉點或者斷點,或者兩條紋路會聚處、孤立點、折轉處,或者指向這些奇異點。三角點提供了指紋紋路的計數跟蹤的開始之處。

紋數

即模式區內指紋紋路的數量。在計算指紋的紋路時,一般先連接核心點和三角點,這條連線與指紋紋路相交的數量即可認為是指紋的紋數。

局部特征是指指紋上節點的特征,這些具有某種特征的節點稱為細節特征或特征點。

兩枚指紋經常會具有相同的總體特征,但它們的細節特征,卻不可能完全相同。指紋紋路并不是連續的、平滑筆直的,而是經常出現中斷、分叉或轉折。這些斷點、分叉點和轉折點就稱為"特征點",就是這些特征點提供了指紋唯一性的確認信息,其中最典型的是終結點和分叉點,其他還包括分歧點、孤立點、環點、短紋等。特征點的參數包括:方向(節點可以朝著一定的方向)、曲率(描述紋路方向改變的速度)、位置(節點的位置通過x/y坐標來描述,可以是絕對的,也可以是相對于三角點或特征點的)。

  指紋識別器的種類

感應或讀取指紋有多種不同方式,其中電容式傳感技術的基本原理是,它根據活體手指——請注意“活體”一詞——表層上的電阻變化傳導指紋圖像。皮膚的表皮層,包括手指的表皮層的細胞是非活體的。剝掉非活體細胞的表皮層可以看到第一層活體皮膚細胞,這些皮膚細胞具有一定量電阻。它們還在皮膚表層上組成特定形狀——常見的指紋嵴線和溝。細胞中的特定電學品質與細胞的排列方式這二者的結合使得皮膚表面的電阻能夠被測量到且其變化唯一。這就是電容式讀取器的工作方式——它首先讀取手指活體表皮的電阻變化,然后傳導顯示這些變化的手指圖。該圖看起來就像警察展示的標準指紋圖像。電阻變化圖稱作指紋圖像。產生指紋圖像后會對其進行保存,或將其與另一個指紋圖像進行比較,以確定它們是否相同。

指紋識別器的種類:

光學。該技術實質上是對手指表層進行拍照。警察使用印臺獲取指紋,這是光纖圖像的一個示例。它是一種較早的數字技術。

紅外線。其測量手指的溫度。這一因素的使用之一是驗證是否存在活體手指(死的或非常冷的手指不會通過驗證)。

雷達。它是一種光學變異,可發射雷達能量并讀取從呈現的手指上反射的信號。通過雷達可構建圖像并進行比較。

激光。激光的種類有多種。一種是使用激光燈來讀取皮膚表層下的毛細血管。激光有多種優勢。一種是您無法利用從玻璃等物體上盜取的指紋來以假亂真。它不會在意皮膚的外觀,只關注皮膚下毛細血管的排列。另一種是如果手指是死的(切斷的或仍在尸體上),毛細血管便會干癟(無心搏),傳感器根本不會傳導圖像。該技術非常昂貴。

綜上可以看出,光學類的指紋識別器(ZAZ-010-B)性價比最高,所以本次的設計采用光學指紋識別器。

指紋識別系統主要包括:單片機最小系統、指紋采集部分、串口通信電路、外部存儲部分、開關按鈕,供電系統組成。其結構框圖如圖所示。

指紋識別系統單片機采用8051單片機,它是整個控制器的核心部件。MAX232作為接口芯片用于實現指紋傳感器串口的RS-232信號與8051串行口的TTL信號的相互轉換。電源部分包括DC+5V及保護電路。

基于單片機MCS-51的指紋識別系統是由8051處理器、68128RAM和EEPROM芯片等構成,具有指紋錄入、圖像處理、指紋對比、搜索和模版儲存等功能的智能型模塊。它通過與之相配套的指紋傳感器,可構成一個獨立的指紋識別系統,或作為一個完整的外部設備。

該系統控制的核心是單片機8051,因為通過比較DSP芯片,處理速度較快和存儲量較大,但性價比較低。而選取單片機MCS-51主要原因是功耗低、可通過軟件設置省電模式。空閑模式下,CPU暫停工作,而RAM定時計數器,串行口,外中斷系統可繼續工作,128x8bit內部RAM,能滿足設計要求。

指紋識別系統是一個典型的模式識別系統,包括指紋圖像獲取、處理、特征提取和比對等模塊。

通過指紋讀取設備讀取到人體指紋的圖像,然后要對原始圖像進行初步的處理,使之更清晰,再通過指紋辨識軟件建立指紋的特征數據。軟件從指紋上找到被稱為“節點”(minutiae)的數據點,即指紋紋路的分叉、終止或打圈處的坐標位置,這些點同時具有七種以上的唯一性特征。通過計算機模糊比較的方法,把兩個指紋的模板進行比較,計算出它們0配結果。

指紋圖像獲取:通過專門的指紋采集儀可以采集活體指紋圖像。目前,指紋采集儀主要有活體光學式、電容式和壓感式。對于分辨率和采集面積等技術指標,公安行業已經形成了國際和國內標準,但其他還缺少統一標準。根據采集指紋面積大體可以分為滾動捺印指紋和平面捺印指紋,公安行業普遍采用滾動捺印指紋。另外,也可以通過掃描儀、數字相機等獲取指紋圖像。

指紋圖像壓縮:大容量的指紋數據庫必須經過壓縮后存儲,以減少存儲空間。主要方法包括JPEG、WSQ、EZW等。

指紋圖像處理:包括指紋區域檢測、圖像質量判斷、方向圖和頻率估計、圖像增強、指紋圖像二值化和細化等。

紋型是指紋的基本分類,是按中心花紋和三角的基本形態劃分的。紋形從屬于型,以中心線的形狀定名。我國十指紋分析法將指紋分為三大類型,九種形態。一般,指紋自動識別系統將指紋分為弓形紋(弧形紋、帳形紋)、箕形紋(左箕、右箕)

斗形紋和雜形紋等。

圖3.5 指紋形態

指紋形態和細節特征提。褐讣y形態特征包括中心(上、下)和三角點(左、右)等,指紋的細節特征點主要包括紋線的起點、終點、結合點和分叉點。

指紋比對:可以根據指紋的紋形進行粗匹配,進而利用指紋形態和細節特征進行精確匹配,給出兩枚指紋的相似性得分。根據應用的不同,對指紋的相似性得分進行排序或給出是否為同一指紋的判決結果。

當指紋傳感器收到指紋信息,將通過串口給單片機發送命令,單片機同意并接收相應的信息,指紋傳感器采集的指紋轉換成RGB格式,并且數據傳輸到單片機,單片機通過存儲在EEPROM中的固化程序執行大量的模式識別和圖像處理相關計算,當用戶的指紋被確認,單片機將命令執行機構動作,開關開。

AT89S52系列單片機采用的是HMOS工藝:高速度、高密度;

AT89S52系列單片機采用的是CHMOS工藝:高速度、高密度、低功耗;

也就是說AT89S52單片機是一種低功耗單片機。

本系統采用AT89S52作為指紋識別系統的核心處理器,使用單片機內部的4K程序存儲器,接+5V電源。

復位電路則采用簡單RC復位電路,同時又可與一些需要復位的外圍電路相連,達到復位與單片機同步。

/EA/Vpp為訪問內部或外部程序存儲器的選擇信號.由于AT89S52單片機有4K的內部程序存儲器,又外接了128Kx8的EEPROM存儲器,故該引腳必須接+5V高電平./PSEN為外部程序存儲器讀選通控制信號.此電路中無擴展程序存儲器.故該腳懸空.

串口通信接口設計采用MAX232實現TTL與RS-232的轉換,實現與計算機通信。

(2) 箱柜感應設計

光電開關是傳感器大家族中的成員,它把發射端和接收端之間光的強弱變化轉化為電流的變化以達到探測的目的。由于光電開關輸出回路和輸入回路是電隔離的(即電緣絕),所以它可以在許多場合得到應用。

光電開關的工作原理

光電開關(光電傳感器)是光電接近開關的簡稱,它是利用被檢測物對光束的遮擋或反射,由同步回路選通電路,從而檢測物體有無的。物體不限于金屬,所有能反射光線的物體均可被檢測。光電開關將輸入電流在發射器上轉換為光信號射出,接收器再根據接收到的光線的強弱或有無對目標物體進行探測。多數光電開關選用的是波長接近可見光的紅外線光波型。德國SICK公司的部分光電開關的外型如圖3.5。


圖3.6 部分光電開關外形

光電開關的分類

①漫反射式光電開關:它是一種集發射器和接收器于一體的傳感器,當有被檢測物體經過時,物體將光電開關發射器發射的足夠量的光線反射到接收器,于是光電開關就產生了開關信號。當被檢測物體的表面光亮或其反光率極高時,漫反射式的光電開關是首選的檢測模式。

②鏡反射式光電開關:它亦集發射器與接收器于一體,光電開關發射器發出的光線經過反射鏡反射回接收器,當被檢測物體經過且完全阻斷光線時,光電開關就產生了檢測開關信號。

③對射式光電開關:它包含了在結構上相互分離且光軸相對放置的發射器和接收器,發射器發出的光線直接進入接收器,當被檢測物體經過發射器和接收器之間且阻斷光線時,光電開關就產生了開關信號。當檢測物體為不透明時,對射式光電開關是最可靠的檢測裝置。

④槽式光電開關:它通常采用標準的U字型結構,其發射器和接收器分別位于U型槽的兩邊,并形成一光軸,當被檢測物體經過U型槽且阻斷光軸時,光電開關就產生了開關量信號。槽式光電開關比較適合檢測高速運動的物體,并且它能分辨透明與半透明物體,使用安全可靠。

⑤光纖式光電開關:它采用塑料或玻璃光纖傳感器來引導光線,可以對距離遠的被檢測物體進行檢測。通常光纖傳感器分為對射式和漫反射式。

它們的工作光線示意圖如圖3.7所示。

圖 3.7 各種光電開關的示意圖

光電開關的使用注意事項

①紅外線傳感器屬漫反射型的產品,所采用的標準檢測體為平面的白色畫紙。

②紅外線光電開關在環境照度高的情況下都能穩定工作,但原則上應回避將傳感器光軸正對太陽光等強光源。

③對射式光電開關最小可檢測寬度為該種光電開關透鏡寬度的80%。

④當使用感性負載(如燈、電動機等)時,其瞬態沖擊電流較大,可能劣化或損壞交流二線的光電開關,在這種情況下,請將負載經過交流繼電器來轉換使用。

⑤紅外線光電開關的透鏡可用擦鏡紙擦拭,禁用稀釋溶劑等化學品,以免永久損壞塑料鏡。

⑥針對用戶的現場實際要求,在一些較為惡劣的條件下,如灰塵較多的場合,所生產的光電開關在靈敏度的選擇上增加了50%,以適應在長期使用中延長光電開關維護周期的要求。

⑦產品均為SMD工藝生產制造,并經嚴格的測試合格后才出廠,在一般情況下使用均不會出現損壞。為了避免意外性發生,請用戶在接通電源前檢查接線是否正確,核定電壓是否為額定值。

這本設計中我們需要對存包柜中進行檢測,并且實時顯示無物的箱號,顧客門沒有關靠的時候發出報警,所以我們選用漫反射式光電開關。

我們選取FR12-40型,它的工作參數如下:

1.工作電壓: 5 - 12V.
2.動態工作電流:5-20mA.
3.最大輸出電流10mA.
4.12V供電時有效控制距離最大為3.5米.
5.外型尺寸:21x68x37mm

(3)  限位開關介紹

限位開關可以根據運動部件的位置來切換電路。工作時由擋塊和限位開關的輪子或觸桿相撞使限位開關的觸點接通或斷開,常用于控制運動部件的方向、行程長短、位置。還可以用來檢測開關物體是否閉合。我們使用LJ-DFJ型限位開關,它的特點是:
    1、單棒式探頭,工作穩定,感度好。
    2、不受測定物性質的影響,安裝后無須調整,即可穩定投入使用
    3、采用壓電元件內置于棒體和厚管壁的不銹鋼管的探頭,消振管僅9mm長(同類比為最短),抗重荷、安全可靠、壽命長。
    4、依據所測定對象不同,可調整測定感度(高、中、低)
    5、使用15A大容量接點繼電器開關,可直接實行對電機控制。

(4)  鍵盤、顯示器接口電路

該系統中鍵盤的主要功能是用于顧客選擇適當的柜來存包,這里我們用普通的按鍵開關,用4個按鍵來控制4個柜門的關閉,然后一個按鍵為存包鍵,一個為取包鍵,最后一個為復位鍵。剩下的一個為整個系統的開關。如圖3.8

圖3.8 鍵盤設計

3.2.3   輸出電路設計

    在輸出電路中包含了顯示部分,驅動部分,報警部分,下面詳細介紹各部分的功能及工作過程。

(1)  顯示部分設計

隨著儀器、儀表智能化、多功能化的要求,液晶顯示器以其體積小、功耗低、接口方便等優點在顯示器市場中脫穎而出,取代了傳統的LED、CRT等顯示方式而成為現代顯示技術發展的主流。

系統采用液晶顯示器(LCD),液晶顯示器是一種被動式的顯示器,即液晶本身并不發光,而是利用液晶經過處理后能改變光線通過方向的特性,而達到白底黑字或者黑底白字顯示的目的。液晶顯示器在單片機系統中作為輸出器被廣泛使用有以下原因:

  • 顯示質量高
  • 數字接口
  • 體積小、重量輕
  • 功率消耗小

LCD的顯示原理:

在LCD顯示器的上下兩電極間加有液晶材料,液晶分子呈平行排列,具有旋光性,平時呈透明態,當上下電極間加上一定電壓時,液晶分子轉成垂直排列,失去旋光性而呈黑色。

LCD顯示分為筆段型、點陣字符型、點陣圖形型。本設計采用點陣字式LCD顯示器。要使用本顯示器,必須有相應的LCD控制器,驅動器來對LCD顯示器進行掃描、驅動,以及一定空間的ROM和RAM來存儲寫入的命令和顯示字符的點陣,F在人們已經將LCD控制器、驅動器、RAM、ROM和LCD顯示器用PCB連接到一起,稱為液晶顯示模塊LCM(LCD Module)。使用者只要想LCM送入相應的命令和數據就可以實現所需要的顯示,這種模塊與單片機接口簡單,使用靈活方便。

在這里我們選用LCM045型號顯示器,它的基本結構如下:

(1)液晶板

在液晶板上排列著若干5×10點陣的字符顯示位,沒個顯示位可以顯示1個字符。

(2)模塊電路

模塊電路是由控制器HD44780、驅動器HD44100及幾個電阻電容組成的。HD44100是擴展顯示字符位用的。PCB上有14個引腳,其中有8條數據線,3條控制線,其功能見下表可以很容易的很8031相接(如圖3.1)通過送入數據和指令可以對顯示方式和顯示內容做出選擇。

(3)驅動器和控制器

驅動器HD44100是用低功耗CMOS技術制造的大規模LCD驅動IC。它即可以當行驅動,也可以當列驅動,由20×2bit二進制移位寄存器、20×2bit數據寄存器和20×2bit驅動器組成。

表3.1 引線功能

引 角 號

符   號

名   稱

功   能

1

VSS

0V

2

VDD

電路電源

5V±5%

3

VLCD

液晶驅動電壓

見圖3.2.2

4

RS

寄存器選擇

H 數據寄存器

L 指令寄存器

5

R/W

讀/寫

H 讀 L寫

6

E

使能

下降沿觸發

7

·

·

14

DB0

·

·

DB7

8位數據線

數據傳輸

LCD控制器HD44780是用低功耗CMOS技術制造的大規模模點陣LCD控制器(兼帶驅動器)和4位/8位微處理器相連,它能使點陣LCD顯示大小寫英文字母,數字和符號。應用HD44780,用戶能用少量元件就可以組成一個完整點陣LCD系統。

圖3.9 LCD與單片機連接圖

(2)  驅動電路設計

存包柜由若干個獨立分隔的鐵殼箱體組成。每個箱體的門都是由一個電磁線圈控制的,當單片機接受到密碼檢測信號,并且密碼正確,就會給電磁線圈一個信號使電磁線圈的電,吸動鎖扣,箱門就自動打開。當箱門關閉的時候,鎖扣被推上,箱門就可靠的鎖住。在這里我們使用DSN-Y電磁鎖。

DSN型電磁鎖的結構原理:

DSN電磁縮是由電氣和機械兩部組成。電氣部分:開鎖指示燈、電源按鈕、電磁鐵線圈。機械部分:外殼、鎖栓、復位彈簧、開鎖鈕、解鎖機構、電磁鐵機構。它的接線原理圖如圖3.10

圖 3.10電磁鎖接線原理圖

工作原理:

H(開鎖指示燈) R(限流電阻) S(電源按鈕)L(電磁鐵線圈) KA(閉鎖接點)

當閉鎖接點接通后,按下電源按鈕,指示燈亮,電磁鐵的線圈通電,鐵芯往下吸解除鎖栓受控,用手撥動開鎖鈕帶動鎖栓即可開鎖。完成上述開鎖合,鎖栓自動復位并保持鎖定位置。當閉鎖接點不接通,則不能開鎖。在特殊情況下,如電磁鐵失壓(無電源)或應急解鎖可用專用鎖匙實現開鎖。驅動電路連接圖如圖3.19

圖3.11 電磁鎖驅動電路

(3)  報警電路設計

顧客在存包的時候很容易出現存完包或則是取完包忘記關門的現象,我們在這里設計一個自動報警裝置,可以在適當的時候提醒顧客關好柜門。LM555是美國國家半導體公司的時基電路。我國和世界各大集成電路生產商均有同類產品可供選用,是使用極為廣泛的一種通用集成電路。LM555功能強大、使用靈活、適用范圍寬,可用來產生時間延遲和多種脈沖信號,被廣泛用于各種電子產品中。
    LM555 時基電路有雙極型和 CMOS 型兩種。LM555屬于雙極型。優點是輸出功率大,驅動電流達 200mA。而另一種 CMOS 型的優點是功耗低、電源電壓低、輸入阻抗高,但輸出功率要小得多,輸出驅動電流只有幾毫安。

LM555的引腳圖如圖3.12

圖3.12  LM555引腳圖

電路特點
   LM555 時基電路內部由分壓器、比較器、觸發器、輸出管和放電管等組成,是模擬電路和數字電路的混合體。其中

6 腳為閥值端(TH),是上比較器的輸入。

2 腳為觸發端(TR),是下比較器的輸入。

3 腳為輸出端(OUT),有 0 和 1 兩種狀態,它的狀態由輸入端所加的電平決定。

7 腳為放電端(DIS),是內部放電管的輸出,它有懸空和接地兩種狀態,也是由輸入端的狀態決定。

4 腳為復位端(R),叫上低電平(< 0.3V)時可使輸出端為低電平。

5 腳為控制電壓端(CV ),可以用它來改變上下觸發電平值。

8 腳為電源(VCC),1 腳為地(GND)。
  這個特殊的 R-S 觸發器有兩個特點:(1)兩個輸入端的觸發電平要求一高一低:置零端 R 即閥值端 TH 要求高電平,而置位端 S 即觸發端 TR 則要求低電平。(2)兩個輸入端的觸發電平,也就是使它們翻轉的閥值電壓值也不同,當CV 端不接控制電壓是,對 TH(R) 端來講,> 2/3VCC 是高電平 1,< 2/3VCC 是低電平 0;而對 TR(S)端來講,> 1/3VCC 是高電平 1,< 1/3VCC 是低電平 0。如果在控制端 CV 加上控制電壓 VC,這時上觸發電平就變成 VC 值,而下觸發電平則變成 1/2VC。可見改變控制端的控制電壓值可以改變上下觸發電平值。


(4)  開箱電路設計

開箱控制電路功能用來打開箱鎖。該系統共控制4個存包柜,其中使用了AT89S52的P2.0-P2.3接線口作為輸出,輸出信號經三極管放大后驅動電磁鎖動作,從而將箱鎖打開。同時在箱的門沿上還裝有限位開關,并用燈來顯示門的閉合與否。并在適當的時候來進行報警,并用燈來顯示提醒顧客關好柜門。如圖3.14

圖3.14  箱柜設計圖

電磁繼電器一般由鐵芯、線圈、銜鐵、觸點簧片等組成的。

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

磁簧繼電器是以線圈產生磁場將磁簧管作動之繼電器,

為一種線圈傳感裝置。因此磁簧繼電器之特征、小型尺寸、輕量、反應速度快、短跳動時間等特性。

當整塊鐵磁金屬或者其它導磁物質與之靠近的時候,發生動作,開通或者閉合電路。由永久磁鐵和干簧管組成。永久磁鐵、干簧管固定在一個不導磁也不帶有磁性的支架上。以永久磁鐵的南北極的連線為軸線,這個軸線應該與干簧管的軸線重合或者基本重合。由遠及近的調整永久磁鐵與干簧管之間的距離,當干簧管剛好發生動作(對于常開的干簧管,變為閉合;對于常閉的干簧管,變為斷開)時,將磁鐵的位置固定下來。這時,當有整塊導磁材料,例如鐵板同時靠近磁鐵和干簧管時,干簧管會再次發生動作,恢復到沒有磁場作用時的狀態;當該鐵板離開時,干簧管即發生相反方向的動作。磁簧繼電器結構堅固,觸點為密封狀態,耐用性高,可以作為機械設備的位置限制開關,也可以用以探測鐵制門、窗等是否在指定位置。

3. 3  整體電路圖

圖3.15  整體電路圖


第4章 系統軟件設計

為了使本系統的整個程序清晰明白,便于調試和修改,程序設計時把系統的各種功能分為若干部分,對于每一部分功能編制相對獨立的程序塊,各程序在運行的時候各負其責。

4.1  系統軟件整體設計

該模塊的功能包括顯示的初始化,判斷是否有空箱,鍵盤掃描,密碼掃描等功能。

主要核心器件有:AT89C51,打印機,條形碼掃描系統,光電開關,電磁閥等。

主程序模塊

該模塊的功能包括顯示的初始化,判斷是否有空箱,鍵盤掃描,密碼掃描等功能。

以使用者指紋作為寄存的憑證;當使用者進行存物操作時,須先按一下操作鍵盤中的“存”鍵,然后在指紋采集窗里采集指紋,機器會把該指紋與分配給使用者使用的寄存箱的箱號結合起來,并將信息自動記錄下,同時自動打開該箱,供使用者存物,存完后使用者自己關好箱門;取物時,只需須先按一下操作鍵盤中的“取”鍵,然后在指紋采集窗里采集指紋,寄存柜將指紋數據與先前記錄下的進行比對,正確后才會打開該箱供使用者取物(同時機器會自動記錄當時的時間、指紋以備查詢)


  本次設計的流程圖如圖4.1.軟件模擬程序為,首先先檢測所有的空箱數目,然后根據按鍵判斷狀態是要存包還是取包,如果是取包的話,就輸入密碼,然后將包存入箱柜內,然后關門,系統檢測是否關門,如果是的話則進行下一步,否則提示未關門。如果是取包的時候,輸入密碼后,驗證密碼的正確與否,正確的話就看箱柜是否關門,否則提示箱柜未關門。


圖4.1 主程序流程圖

4.2  系統軟件各部分設計421鍵輸入程序設計

鍵盤采用掃描工作方式,輸入程序功能有以下4個方面:

(1)判斷鍵盤上有無鍵閉合,其方法為掃描口PA0~7輸出全“0”,讀PC口的狀態,若PC0~3為全“1”(鍵盤上行線全為高電平)則鍵盤上沒有閉合鍵若PC0~3不全為“1”,則有鍵處于閉合狀態。

(2)去除鍵的機械抖動,其方法為判斷出鍵盤上有鍵閉合后,延遲一段時間再判別鍵盤的狀態,若仍有鍵閉合,則認為鍵上有一個鍵處于穩定的閉合期,否則認為是鍵的抖動。

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PA0

1

1

1

1

1

1

1

0

1

1

1

1

1

1

0

1

……

……

……

……

……

……

……

……

0

1

1

1

1

1

1

1

(3)判別鍵閉合的鍵號,方法對鍵盤的列線進行掃描,掃描口PA0~7依次

表4.1   按鍵圖

輸出:

相應的依次讀PC口的狀態,若PC0~3為全“1”則列線為“0”的這一列上沒有鍵閉合。閉合鍵的鍵號等于為低電平的列號加上為低電平的行的首鍵號。

(4)使CPU對鍵的一次閉合僅做一次處理,采用的方法為等待閉合鍵釋放后在作處理。流程圖見4.2

4.2.2  驅動電路程序設計

    繼電器板負責自動存包柜的開箱控制,利用紅外線檢測箱內是否有物體,并將狀態信息上傳到主機板,做為下一次分配箱時的依據。繼電器接受主機板下達的命令,根據主機指令的箱號,驅動相應的繼電器開門,同時檢測門限位開關的信號,確定門是否開啟。流程圖見圖4.3

圖4.2 鍵盤輸入子程序流程圖

第5章 系統調試5.1  系統硬件調試

自動存包柜電路包括四大部分:指紋輸入部分,箱柜部分,顯示部分已經單片機部分,將他們在一張板上放好,然后通過設計出來的原理圖對這四個部分依次的焊接,使其成功的出現在同一張板上。如圖5.1


圖5.2 連線圖

1、首先是焊接的順序問題。當初板子做好以后,我一口氣就把所有的元件焊上去了,這樣對于沒有調試過的板子,就很難找到原因。所以焊接的順序很重要,應該是應該按功能劃分的器件進行焊接,順序是功能部件的焊接--調試(OK)--另一功能部件的焊接,這樣容易找到問題的所在。

2、如果在調試按功能劃分的器件上出現問題,可以按以下步驟進行:
1)檢查原理圖連接是否正確
2)檢查原理圖與PCB圖是否一致
3)檢查原理圖與器件的DATASHEET上引腳是否一致
4)用萬用表檢查是否有虛焊,引腳短路現象
5)查詢器件的DATASHEET,分析一下時序是否一致,同時分析一下命令字是否正確(注意,命令字的順序很重要,前些日子調試INTEL e28F640這款flash是的時候,在對其擦除和寫操作的時候,就碰到了這樣的問題)
6)有條件的可以用示波器。如我就是通過示波器對SRAM各個引腳進行檢查,發現地址線都是有信號的,而數據線無信號出現,才找到問題所在。
7)飛線。用別的的口線進行控制,看看能不能對其進行正常操作,多試驗,才能找到問題出現在什么地方。

5.2  系統軟件調試

第一步:建立工程項目文件

雙擊桌面軟件快捷圖標

第二步:建立源文件

在界面中打開文件下拉菜單,在打開的選項中點“新建”,產生一個新建空白文件。在新建空白文件中輸入源程序文件

圖5.3  程序軟件圖

在確認源程序無錯時點保存,這時界面上彈出提示“另存為”菜單,選擇好保存路徑,也就是剛才保存建立工程項目文件的目錄路徑,輸入文件名,如y2.asm(要有后綴,匯編程序是*.asm),然后點擊保存。

這時僅僅是完成了匯編程序的建立而已,但y2.asm匯編程序與y2.Uv2工程項目文件現在還沒建立任何關系,此時應把y2.asm源程序文件添加到y2.Uv2工程中,構成一個完整的工程項目。

第三步:將源程序文件添加到工程項目中

在左側Project Windows窗口內右擊  Source Group1,在彈出下拉菜單中選種 Add Files to Group‘Source Group1’(向工程中添加源文件)命令,

在彈出的菜單欄中點文件類型一欄下拉菜單,選Asm Source Files(*.a*:*.src:*.a*)即(匯編程序),文件框中選擇將剛才創建的源程序文件y2.asm然后點Add,這時在文件名框后出現剛才選中y2.asm文件,在點擊CLOSE完成源程序文件向工程項目的添加。


第四步:為添加到工程項目的程序文件進行編譯和鏈接

在界面上點工程(Project)選項,在下拉菜單中選擇(Options For Target ‘Target ‘),命令為目標設置工具選項。

在“目標”(Target)選項卡片外代碼內存,片外Xdata內存都為空白。  在“輸出”選項卡中選擇創建HEX文件。在“C51”選項卡上勾選中斷向量在0X0000。

在“調試”(Debug)選項卡選擇使用模擬仿真,對于匯編程序不需要勾選運行到,然后點確定其余選項卡內容則不需要改變設置。在打開工程(Project)下拉菜單,選擇創建目標(Build target)點擊左鍵。此時會出現“編譯正確”,無錯誤,無警告提示。

(如果在建立工程項目在提示’Y’或’N’時,選中了‘Y’,在創建目標時時就會出現如下3個警告提示,但不影響影響程序運行)。

圖5.4  系統面板

接下來選擇重建全部目標文件(Rebuild all target files)命令,對項目工程文件進行重新編譯,鏈接,此后會出現提示,“編譯正確,鏈接成功”,提示。(如果在前邊建立工程項目在提示’Y’或’N’時,選中了‘Y’,在創建目標時時就會出現如下3個警告提示,但不影響程序運行。也可以省去上一步“創建目標”,直接運行這一步即可)。

接下來打開調試下拉菜單,選擇Start/Step Debug Session Crtl+F5,進行調試,也就是將程序下載到仿真器里,然后可以進行運行程序。

運行程序有全速運行,單步跟蹤運行,單步運行,執行返回。在這里選用單步運行命令運行程序,每執行一次此命令,是以語句為基本執行單元,但指令用黃色箭頭標出,每執行一步箭頭都會移動,執行過的指令呈現綠色。

在右下角內存視窗輸入的D:0X0050可以看到50H~59H單元被寫入的數據,同時左側。

Project Windows窗口內可以看到相關寄存器的變化。

選擇調試下拉菜單可以點Start/Step Debug Session Crtl+F5則停止調試。


5.3  系統聯合調試

1. 開啟箱柜,插上電源,提示空余的箱柜為4個

圖5.5  開啟系統

2. 按下存包鍵,提示要求輸入指紋

圖5.6  請輸入指紋

3. 輸入一次指紋后提醒再次輸入,確認指紋信號

圖5.7   再次輸入

4.兩次輸入正確后會打開一個箱柜,并提示隨手關門

圖5.8  箱柜開啟

5.關門后顯示剩余箱柜

圖5.9  剩余箱柜數

6.取包時按下取包鍵提示輸入指紋

7.指紋輸入正確后打開箱柜,并提示隨手關門

圖5.10  請隨手關門

8.關門后顯示剩余的空箱數,然后重復上述的步驟。


總 結

在大學的學習過程中,畢業設計是一個重要的環節,是我們步入社會參與實際項目的規劃建設的一次極好的演示.畢業設計是四年學習的總結和提高,和做科研開發工作一樣,要有嚴謹求實的科學態度。畢業設計有一定的學術價值和實用價值,能反映出作者所具有的專業基礎知識和分析解決問題的能力。此次畢業設計是我們從大學畢業生走向未來工作重要的一步。從最初的選題,開題到分析制作直到完成設計。其間,查找資料,老師指導,與同學交流,反復修改方案,每一個過程都是對自己能力的一次檢驗和充實。在畢業設計期間,盡可能多的閱讀文獻資料是很重要的,一方面是為畢業設計做技術準備,另一方面是學習做畢業設計的方法。一次優秀的設計對啟發我們的思維,掌握設計的規范、流程、具體操作都很有幫助。

我設計的是自動存包系統,我的設計方案是采用AT89S52單片機做控制器,可以同時管理四個存包柜。柜門鎖是由繼電器控制,當顧客需要存包的時候,可以自行到存包柜前按“開門”鍵,需要顧客向光學指紋識別系統輸入個指紋,然后通過繼電器進行開門(用亮燈表示),顧客即可存包,并需將柜門關上。當顧客需要取包時,要將只要將之前輸入的指紋放置于指紋識別器前方,指紋識別器采集到指紋信息輸出相應的高低電平信號傳給單片機,系統比較密碼一致后,發出開箱信號至繼電器將柜門打開,顧客即可將包取出。

我覺得我設計的這個課題,優點在于比現在市面上的存包系統更加的實用,更加的方便,而我覺得能夠改進的地方是指紋識別系統的辨識度,精確度。

在本次畢業設計也暴露出自己專業基礎的很多不足之處。比如缺乏綜合應用專業知識的能力,對材料的不了解,對具體設計涉及到的規范要求的不熟悉等等,需要在做的過程中需要去不斷的翻閱相關的資料和書籍,這降低了自己的速度和設計的進程,但這個過程對我來說是對自己知識的不足處的一個很好的補充和對已學過知識的一個鞏固。這個過程雖然是有一定的難度但還是通過自己的慢慢的摸索和老師的指導下從熟悉到上手,經過這次努力對自己的信心很好的提高。通過這樣的一個自己從開始到結束全程自己參與的設計來說對知識的了解和掌握是純理論的學習遠遠達不到的效果。這次實踐是對自己大學四年所學的一次大檢閱,使我明白自己知識還很淺薄,雖然馬上要畢業了,但是自己的求學之路還很長,以后更應該在工作中學習,努力使自己 成為一個可以參與工作能獨立完成設計的人。

這次畢業設計我做的基于單片機的自動存包系統。首先查找了很多的資料,對于各類的文獻進行收集,然后用了一個星期對總的資料進行整理和刪選,選擇對自己設計有用的資料匯編成冊作為后期設計的輔助資料參考和借鑒。接下來的幾個星期指導老師給了我們具體的要求與任務,并指導我們具體的設計工作流程。通過對前期詳細的分析使自己蠻快的有了自己設計的思路,規劃設計出了自己的方案,然后和老師的交流進行改進自己的設計方案和設計的不足。通過幾輪的修改以及老師的交流使自己慢慢的完善自己的設計方案。接下去的幾周是對原理圖的設計,設計上還是比較輕松,掌握起來比較自如。然后就是購買所需的零件,對照總圖進行焊接,應進行調試。最后一周是對整個設計的總結。通過這規劃也讓自己明白了以前做的設計過于理想化,在設計過程中對現狀和現實的根據太少,很多都是按照自己的理想去做,而實際的設計更多的是從現狀和現實出發 使規劃更合理、更實用、更有發展。

整個畢業設計期間,指導教師認真嚴格的要求我們,我們因為是獨立的完成一個設計,需要老師的指導,我們認真的聽取老師的意見,同時也發表自己對方案的見解,每一個星期我與指導老師都會見一次面,這樣我們可以很好的交換意見,更好的完善方案。我們嚴格按照學校的有關規定執行,對畢業設計內容及工作量進行討論并確定,指導來時非常并注重對我解決實際工作問題的能力、獨立查閱文獻能力、計算機及軟件應用能力等的培養。指導王老師平時加強畢業設計的輔導,我們還可隨時找老師進行答疑,老師為方便我們聯系,把電話號碼和Email地址留給了我們,如果有什么事就可以及時得到解決,這樣問題不致堆積、也不會因此拖了進度。在畢業設計期間,如果沒有老師的細心指導,而是自己一個人獨自做設計,也不與任何人交流,這是完全不行的,設計其實也是一個團隊的工作,如果不能與他人進行良好的溝通與交流,做出的設計也只是只有自己一個人會欣賞,而別人卻不一定會認可你的設計,所以在這次畢業設計過程中,我懂得了一個道理,團結得力量,只有更好得與他人,進行溝通與交流,吸取別人的建議,工作才會更加的順利。

我們全部學生對畢業設計都是十分重視的,也不會因為有要找工作而拖延進度的,老師對我能認真對待畢業設計的態度也較滿意。設計期間,我們自覺獨立進行設計,有問題時學生之間會進行討論、爭論,師生之間也常進行研討,通過這種方式,我們覺得收獲很大。我們經常能夠主動走進圖書館查閱有關資料,與其他同學進行資料的討論。我通過畢業設計,普遍感到自己應用基礎知識及專業知識解決問題的能力有了很大的提高,以前所學的許多課程覺得很零散,也不知道有什么用及怎么用,現在也都找到了用武之地。今后走上社會,我主要還是靠在學校學到的只是技能來養活自己,并回報社會,回報父母,所以通過這次的畢業設計,我也了解到了自己的很多不足,在今后的工作與學習中,我會不斷的提高與改進。

通過這次畢業設計我收獲良多,獲得了許多珍貴的知識,學到了在許多書本上不可能收錄的東西。

參考文獻
[1]李群芳,張士軍,黃建. 單片微型計算機與接口技術. 北京:電子工業出版社,2010.11
[2]高峰. 單片微機應用系統設計及實用技術. 北京:機械工業出版社,2004
[3]韋元華,舟子. 條形碼技術與應用. 北京:中國紡織出版社,2003.6
[4]薛文達,謝文和. 傳感器應用技術. 江蘇:東南大學出版社,1998
[5]張成海,張佚. 現代自動識別技術與應用. 北京:清華大學出版社,2002
[6] 張毅剛,姜守達. 新編MCS-51單片機應用設計. 哈爾濱:哈爾濱工業大學出版社,2003.7
[7]何立民,MCS—51系列單片機應用系統設計.北京:航空航天大學出版社,1989.4
[8]閻石. 數字電子技術. 吉林:高等教育出版社出版,2000
[9]胡榮等. Protel電路設計教程.北京:清華大學出版社,2001
[10]Adel S.Sedra and Kenneth.Smith[M]:Microelectronic Circuits,4rd ed,Oxford University Press.Inc,1998.20~58.
[11] 趙亮. 單片機應用系統設計與產品開發[M]. 北京:人民郵電出版社.2004
[12] 李華. MCS-51系列單片機實用接口技術. 北京航空航天大學出版社. 1993
[13] 彭為,黃科,雷道仲.單片機典型系統設計實例精講[M].電子工業出版社,2006.
[14] 張友德.單片微型機原理、應用于實驗[M].3版.上海:復旦大學出版社,2000.
[15] 黃根春,陳小橋,張望先.電子設計教程[M].北京:電子工業出版社,2007.
[17] INTEGRATED CIRCUITS DATA HANDBOOK 80C51-based 8-bit microcontrollers PHILIPS,1992
[18] Adel S.Sedra,Kenneth C.Smith:Microelectronics Circuits,3rd Edition,Holt Rinehart and Winston,Inc.,1991
[19] Yeager Brent.How to troubleshoot your electronic scale[J].. Powder and Bulk Engineering. 1995
[20]Meehan Joanne,Muir Lindsey.SCM in Merseyside SMEs:Benefits and barriers[J].. TQM Journal. 2008




致 謝

值此論文完成之際,首先感謝我的指導老師王玉杰老師在論文完成過程中給予我的幫助和鼓勵。

在畢業設計過程中我學到了許多知識,其中認真嚴謹,實事求是,堅持不懈是我在這次設計中最大的收益。我想這是一次意志的磨練,是對我實際能力的一次提升,會對我未來的學習和工作有很大的幫助。也為將來的人生之路做好了一個很好的鋪墊。

當我初涉設計時,各種問題層出不窮,后來就慢慢的進入了狀態,思路也逐漸的清晰了,歷經了幾個月的奮戰,緊張而又充實的畢業設計終于落下了帷幕。回想這段日子的經歷和感受,我感慨萬千,在這次畢業設計的過程中,我擁有了無數難忘的回憶和收獲。

最后再次對所有幫助過我的老師和同學表示感謝。



附 錄

附錄1


單片機源程序如下:


  1. #include"Finger.h"
  2. #include"OLED.h"

  3. unsigned char Door_State[4]={0};//4個箱門的存儲情況
  4. unsigned char Door_NUM;
  5. unsigned char   R_Count;//串口接收數據的個數
  6. unsigned char xdata UART_BUFF[MAX_NUMBER+1]={0};
  7. bit Rec_Flag;                                          //串口數據標志位
  8. unsigned char               SaveNumber=0,searchnum=0;
  9. unsigned char   SearchNumber=0;
  10. unsigned int                clk0=0;
  11. unsigned char              modeflag = 0;
  12. //默認為識別模式
  13. //如果為1為錄入指紋模式,每錄入一次SaveNumber++
  14. unsigned char strnum[4]={0};

  15. unsigned char                             FifoNumber=0;
  16. unsigned char xdata  FIFO[MAX_NUMBER+1]={0};
  17. //////////////////////////////////////常用指令定義/////////////////////////////

  18. //Verify  Password   :驗證設備握手口令
  19. unsigned char code VPWD[]=
  20. {16,0x01,              0,7,              0x13,              0x00,0x00,0x00,0x00,              0x00,0x1B};//回送12個            

  21. //設置設備握手口令
  22. unsigned char code STWD[]=
  23. {16,0x01,              0,7,              0x12,              0x00,0x00,0x00,0x00,              0x00,0x1A};//回送12個            

  24. //GetImage           :探測手指并從傳感器上讀入圖像
  25. unsigned char code GIMG[]=
  26. {12,0x01,              0,3,              0x01,              0x00,0x05};                            //回送12個

  27. //Gen Templet1        :根據原始圖像生成指紋特征1
  28. unsigned char code GENT1[]=
  29. {13,0x01,              0,4,              0x02,              1,              0x00,0x08};              //回送12個

  30. //Gen Templet2        :根據原始圖像生成指紋特征2
  31. unsigned char code GENT2[14]=
  32. {13,0x01,              0,4,              0x02,              2,              0x00,0x09}; //回送12個            

  33. //Merge Templet      ;將CharBufferA與CharBufferB中的特征文件合并生成模板,結果存于ModelBuffer。
  34. unsigned char code MERG[]=
  35. {12,0x01,              0,3,              0x05,              0x00,0x09};                            //回送12個            
  36.             
  37. //Search Finger      :以CharBufferA或CharBufferB中的特征文件搜索整個或部分指紋庫
  38. unsigned char code SEAT[]=//回送16個
  39. {17,0x01,   0,8,              0x04,              1,              0,0,    0,0x65,  0x00,0x73};            

  40. //Store Templet      :將ModelBuffer中的文件儲存到flash指紋庫中
  41. unsigned char code STOR[]= //回送12個
  42. {15,0x01,              0,6,              0x06,              2,              0x00,0x00,              0x00,0x0F};

  43. //DEL one templet
  44. unsigned char code DELE_One[]=
  45. {16,0x01,   0,7,  0x0C,    0x00,0x00,              0,1,              0x00,0x15};

  46. //DEL templet      ;清空指紋庫
  47. unsigned char code DELE_All[]=
  48. {12,0x01,              0,3,              0x0D,              0x00,0x11};

  49. void UARTTimer_Init(void)
  50. {
  51.               ET0=1;     //定時器0開中斷
  52.               TL0=0x97;  //17ms的初值
  53.               TH0=0xBD;
  54.               //串口初始化
  55.               SCON=0x50;   //UART方式1:8位UART;   REN=1:允許接收
  56.               PCON=0x00;   //SMOD=0:波特率不加倍
  57.               TMOD=0x21;   //T1方式2,用于UART波特率
  58.               TH1=0xFD;
  59.               TL1=0xFD;   //UART波特率設置:9600
  60.               TR1=1;

  61.               TR0=1;// 開定時器0
  62.             
  63.               IT0=0;//中斷0低電平中斷
  64.               IT1=1;//中斷1低電平中斷
  65.               EX0=1;//開中斷0
  66.               EX1=1;//開中斷1
  67.               EA=1;
  68.               ES=1;            
  69. }


  70. /**********************************
  71.                             串口單字節發送函數
  72. **********************************/
  73. void UART_SendByte(unsigned char send)
  74. {            
  75.               SBUF = send;
  76.               while( TI == 0 );                                                      
  77.               TI = 0;   
  78. }


  79. bit Command(unsigned char *p,unsigned char MaxTime) //命令解析,給模塊發送一個命令
  80. {
  81.                 unsigned char count=0,i=0;
  82.                 unsigned char package=0,checksum=0;            
  83.               bit result=0;
  84.               Rec_Flag = 0;

  85.                 UART_SendByte(0xEF);
  86.                  UART_SendByte(0x01);//數據包頭

  87.               UART_SendByte(0xFF);
  88.                  UART_SendByte(0xFF);
  89.               UART_SendByte(0xFF);
  90.                  UART_SendByte(0xFF);//芯片地址

  91.                 for (i=0; i<p[0]-6;i++) sent="" command="" string
  92.                 {
  93.                   UART_SendByte(p[i+1]);//將數據發送出去
  94.               }

  95.                 result=TURE;//發送完成,結果為真 (真為1)               
  96.                 FifoNumber=0;
  97.                 for (i=MAX_NUMBER+1; i!=0; i--)//清空所有FIFO[]數組里面的內容,寫入0X00
  98.               {
  99.                 FIFO[i-1]=0x00;
  100.               }               
  101.             
  102.                 if (result)  
  103.                  {                           
  104.                    result=FALSE;
  105.                      clk0=0;              //清零CL0計數
  106.                            
  107.                      do /////////////////////////////do的內容////////////////////////////////
  108.                             {
  109.                                           if(Rec_Flag == 1)
  110.                                           {
  111.                                                         Rec_Flag = 0;
  112.                                                       
  113.                                                         if(UART_BUFF[0]==0xEF)
  114.                                                         if(UART_BUFF[1]==0x01)
  115.                                                         {
  116.                                                                       count = R_Count;
  117.                                                                       for(i=0;i<count;i++)
  118.                                                                                     FIFO[i]=UART_BUFF[i];

  119.                                                                       for(i=6;i<count-2;i++)
  120.                                                                                     checksum +=              FIFO[i];//計算校驗和
  121.                                                                       package=FIFO[8];//計算包長度 FIFO[7]*256+FIFO[8];

  122.                                                                       if(count == package+9 && checksum==FIFO[count-1])
  123.                                                                       {
  124.                                                                                     result=TURE;                                                                                                  
  125.                                                                       }
  126.                                                                       else
  127.                                                                                     result=FALSE;//校驗失敗,置結果標志為0            
  128.                                                                       break;                                         
  129.                                                         }
  130.                                           }
  131.           }
  132. /////////////////////////////do的內容----------------結束////////////////////////////////  
  133.                             while (clk0<=MaxTime); //由定時器以及最大接收數據來控制,保證不會在此一直循環
  134.                              
  135.         FifoNumber=count;              //保存接收到的數據個數
  136.               }
  137.               return (result);
  138. }

  139. bit VefPSW(void)//驗證設備握手口令,成功返回1   
  140. {
  141.               unsigned char  count=0;
  142.               while (1)
  143.                  {
  144.                    if(Command(VPWD,20)==TURE && FifoNumber==12 && FIFO[9] == 0x00)
  145.                             {
  146.                                           return (1) ;
  147.                             }            
  148.                    count++;
  149.                                  if (count>=2)//如果不成功,再驗證一次,如果兩次不成功,返回失敗
  150.                   {
  151.                       return(0);  
  152.                             }
  153.               }
  154. }


  155. void Clear_All(void) //清空所有指紋信息,清空前首先驗證和指紋模塊通訊是否正常
  156. {
  157.               if( VefPSW() == 1 )      //驗證成功
  158.               {                                         
  159.                   Command(DELE_All,50); //清空指紋庫               
  160.               }
  161. }
  162. void Clear_One(unsigned char PageID)
  163. {
  164.               unsigned char m;
  165.               if( VefPSW() == 1 )      //驗證成功
  166.               {                           
  167.                             for(m=0; m<11; m++)
  168.                                           FIFO[m] = DELE_One[m];// {16,0x01, 0,7,  0x0C,    0x00,0x00,              0,0,              0x00,0x14};
  169.                             FIFO[6]=PageID;           //把指紋模板存放的PAGE_ID也就是FLASH的位置
  170.                             FIFO[10]=FIFO[10]+PageID;              //校驗和
  171.                             Command(FIFO,50); //清空指紋庫               
  172.               }            
  173. }
  174. unsigned char ImgProcess(unsigned char BUFID)  //發獲取圖像并生成特征文件,存入BUFID中//輸入參數為緩沖區號
  175. {            
  176.     if(Command(GIMG,89) && (FifoNumber==12) && (FIFO[9]==0x00))
  177.     {
  178.                             if(BUFID==1)     
  179.                             {                                                         
  180.                                   if(Command(GENT1,60) && (FifoNumber==12) && (FIFO[9]==0x00))
  181.                       {                                                                                                
  182.                                                         return 1;
  183.                                           }
  184.                             }
  185.                             else if(BUFID==2)
  186.                             {
  187.                                             if(Command(GENT2,60) && (FifoNumber==12) && (FIFO[9]==0x00))
  188.                       {                                                      
  189.                                                         return 1;
  190.                                           }                                          
  191.                             }
  192.                             else
  193.                             {
  194.                               ;
  195.                             }
  196.     }

  197.     return 0;                     
  198. }

  199. bit Searchfinger(void)//搜索指紋(發送搜索命令、以及根據返回值確定是否存在)      
  200. {                           
  201.                  if(Command(SEAT,60) && (FifoNumber==16) && (FIFO[9]==0x00) )
  202.     {
  203.                             SearchNumber=FIFO[11];//搜索到的頁碼
  204.                             //MatchScore=FIFO[12]*0x100+FIFO[13]   可以在此計算得分,從而進行安全級別設定,本程序忽略
  205.                                return 1;
  206.               }   
  207.     else            
  208.     {
  209.                      return 0;
  210.     }
  211. }


  212. unsigned char search(void)//搜索用戶
  213. {
  214.               unsigned char SearchBuf=0,i=0;
  215.                 while (i<20)
  216.     {
  217.                    if ( ImgProcess(1)==1 ) //首先讀入一次指紋 這里表示有指紋按在上面了
  218.                      {
  219.                                    SearchBuf=Searchfinger();//進行指紋比對,如果搜索到,返回搜索到的指紋序號
  220.                                    if(SearchBuf==1)
  221.                                    {
  222.                                                  return SearchNumber;
  223.                                    }
  224.                                    else
  225.                                           {
  226.                                                         return 255; //由于只有162個指紋,如果返回255,表示這個指紋識別失敗
  227.                                           }   
  228.                      }
  229.                             i++;            
  230.     }
  231.    return 0;
  232. }

  233. bit savefingure(unsigned char ID)//保存指紋
  234. {
  235.               unsigned char i=0;
  236.               //現在開始進行存儲指紋模板的操作
  237.             
  238.               for (i=0;i<10;i++)              //保存指紋信息
  239.               {
  240.                             FIFO[i]=STOR[i];//{15,0x01,              0,6,              0x06,              2,              0x00,0x00,              0x00,0x0F};
  241.               }
  242.               FIFO[7]=ID;           //把指紋模板存放的PAGE_ID也就是FLASH的位置
  243.               FIFO[9]=FIFO[9]+ID;              //校驗和
  244.               if (Command(FIFO,70)==1)//不成功返回0              //此處進行存放指紋模板的命
  245.               {
  246.                             return(1);
  247.               }

  248.               return (0) ; //不成功返回0
  249. }



  250. unsigned char enroll(void) //采集兩次指紋,生成1個 指紋模板
  251. {
  252.               unsigned char temp=0,count=0;

  253.               Delay_ms(30);
  254.                 OLED_16x16_hanzi(0,3,"   請錄入指紋   ");

  255.               while(1)
  256.                 {
  257.                               temp=ImgProcess(1); //生成特征1   
  258.                                if ( temp == 1 )//生成特征文件成功            
  259.                     {               
  260.                                           OLED_16x16_hanzi(0,3," 第一次錄入成功 ");                                 
  261.                       break;
  262.                      }
  263.                    else                  
  264.                      {
  265.                       if ( temp == 0 )//采集指紋沒有成功
  266.                         {
  267.                                                         count++;
  268.                           if (count>=40)//如果采集了40次,還不成功,直接采集失敗,直接退出enroll函數----返回0
  269.                                                                       return(0);
  270.             }
  271.         }
  272.                  }

  273.                  count=0;
  274.               SPK_CallTimes(1);
  275.               Delay_ms(2000);//延時2S開始采集下一個特征
  276.               OLED_16x16_hanzi(0,3," 請再次錄入指紋 ");
  277.             
  278.               //開始采集第二個特征
  279.               while(1)
  280.                 {
  281.                                temp=ImgProcess(2); //生成特征2   
  282.                                if (temp==1)//生成特征文件2成功
  283.                     {
  284.                       if (  (Command(MERG,40)&& (FifoNumber==12) && (FIFO[9]==0x00))==0  ) //合并不成功返回0,成功返回1
  285.                                           {
  286.                                                         OLED_16x16_hanzi(0,3," 兩次指紋不吻合 ");
  287.                                                         return(0);
  288.                                           }            
  289.                                           else//特征文件合并生成模板,結果存于ModelBuffer
  290.                                           {
  291.                                                         SPK_CallTimes(2);
  292.                                                         Delay_ms(2000);
  293.                                                         return 1;
  294.                                           }            
  295.         }
  296.                     else  //采集指紋沒有成功   
  297.                      {            
  298.                                 count++;            
  299.                                           if (count>=25)
  300.                                           {
  301.                                                         return(0);
  302.                                           }                           
  303.                    }
  304.                  }
  305. }


  306. //**************延時子程序***************************
  307. void delayms(int ms)
  308. {     
  309.               unsigned char j;
  310.               while(ms--)
  311.               {
  312.               for(j =0;j<120;j++);
  313.               }
  314. }



  315. void Touch_Finger(void)
  316. {
  317.               unsigned char m=0;            
  318.               OLED_16x16_hanzi(0,3,"  正在握手......");
  319.               while(1)
  320.               {
  321.             
  322.                             if(VefPSW())//與模塊握手通過,綠燈亮起。進入識別模式
  323.                             {
  324.                                           OLED_16x16_hanzi(0,3,"    握手成功    ");
  325.                                           SPK_CallTimes(1);
  326.                                           Delay_ms(3000);              //顯示3秒握手狀態
  327.                                           OLED_16x16_hanzi(0,0,"    歡迎使用    ");
  328.                                           OLED_16x16_hanzi(0,3,"                ");
  329.                                           break;
  330.                             }
  331.                   else if(m>10)//開始握手10次,如果沒有一次成功,表示模塊通信不正常。
  332.                             {
  333.                                           m = 10;
  334.                                           OLED_16x16_hanzi(0,3,"    握手失敗    ");
  335.                                           OLED_16x16_hanzi(0,5," 請檢查設備連接 ");
  336.                             }
  337.                             m++;
  338.               }
  339. }
  340. void SPK_CallTimes(unsigned char Ts)
  341. {
  342.               unsigned char m;
  343.               for(m=0; m<ts; m++)=""
  344.               {
  345.                             buzzer = ~buzzer;
  346.                             Delay_ms(100);            
  347.               }
  348.               buzzer = 1;
  349. }
  350. bit Key_Use(unsigned char keynum)
  351. {
  352.               if(keynum==1)
  353.                             if(Key1 == 0)return 1;
  354.               if(keynum==2)
  355.                             if(Key2 == 0)return 1;
  356.               if(keynum==3)
  357.                             if(Key3 == 0)return 1;
  358.               if(keynum==4)
  359.                             if(Key4 == 0)return 1;
  360.               return 0;
  361. }
  362. void  Timer0(void) interrupt 1//定時器0中斷函數
  363. {
  364.               TL0=0x97;
  365.               TH0=0xBD;
  366.               clk0++;   //延時17ms
  367. }


  368. void int1(void) interrupt 2//中斷0,清除所有指紋
  369. {
  370.               while(k2==0);//等待松手
  371.               modeflag = 2;            
  372. }
  373. ……………………

  374. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

完整論文下載(word格式 可編輯):
指紋存包柜.doc (3.11 MB, 下載次數: 140)



評分

參與人數 1黑幣 +8 收起 理由
穿著安踏去拉薩 + 8 樓主真的很厲害。。】墒遣惶疄槭裁春苌.

查看全部評分

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

使用道具 舉報

沙發
ID:422243 發表于 2018-11-7 12:06 | 只看該作者
您好!請問有PCB圖   和電路圖  
回復

使用道具 舉報

板凳
ID:507630 發表于 2019-4-9 11:04 | 只看該作者
樓主這個源程序用什么軟件寫的呢?
回復

使用道具 舉報

地板
ID:507630 發表于 2019-4-9 11:05 | 只看該作者
空箱檢測怎么做的?
回復

使用道具 舉報

5#
ID:507630 發表于 2019-4-9 11:07 | 只看該作者
演示的時候可以先錄入多個指紋再打開各自對應的箱子嗎?
回復

使用道具 舉報

6#
ID:507820 發表于 2019-4-9 14:06 | 只看該作者
感謝樓主提供寶貴的資料
回復

使用道具 舉報

7#
ID:507630 發表于 2019-4-11 11:51 | 只看該作者
馮少 發表于 2018-11-7 12:06
您好!請問有PCB圖   和電路圖

只有一個word文檔
回復

使用道具 舉報

8#
ID:507630 發表于 2019-4-16 12:29 | 只看該作者
樓主還在嗎?請問您的源程序里面用到的finger.h和oled.h的頭文件有嗎?可以發下嗎?
回復

使用道具 舉報

9#
ID:59884 發表于 2019-4-16 16:29 | 只看該作者
謝謝樓主分享!
回復

使用道具 舉報

10#
ID:375715 發表于 2019-4-26 22:25 來自觸屏版 | 只看該作者
挺好的
回復

使用道具 舉報

11#
ID:891841 發表于 2021-4-20 16:22 來自觸屏版 | 只看該作者
szz000 發表于 2019-4-16 12:29
樓主還在嗎?請問您的源程序里面用到的finger.h和oled.h的頭文件有嗎?可以發下嗎?

請問您有這兩個頭文件了嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表