自動存包柜系統(tǒng)設計_第1頁
自動存包柜系統(tǒng)設計_第2頁
自動存包柜系統(tǒng)設計_第3頁
自動存包柜系統(tǒng)設計_第4頁
自動存包柜系統(tǒng)設計_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本科畢業(yè)設計(論文)本科畢業(yè)設計(論文)自動存包柜系統(tǒng)設計學院名稱:專業(yè):班級:姓名:指導教師姓名:指導教師職稱:2011年06月自動存包柜系統(tǒng)設計摘要:隨著社會的發(fā)展、科技的進步以及人們生活水平的逐步提高,各種方便于生活的自動化系統(tǒng)開始進入了人們的生活。本文介紹了利用單片機STC89C52最小系統(tǒng)產生一組6位隨機密碼來控制柜門開關的自動存包柜系統(tǒng)。此系統(tǒng)設計有14個按鍵和6個數(shù)碼管顯示密碼,可以對20個柜子進行控制,每組密碼使用一次有效,客戶通過鍵盤輸入隨機密碼進行存取包。此論文重點描述了自動存包柜的設計思想及軟硬件電路的工作原理、設計過程,并敘述了調試過程以及調試中所出現(xiàn)的問題,并做了相應分析。關鍵詞:自動存包柜;單片機;隨機密碼ThedesignofautomaticstoringabagofcupboardsAbstract:Withthesocialandscientificdevelopmentandimprovementofpeople’slivingstandard,variousremoteautomaticsystemsfortheconvenienceofourlifecomeintobeing.ThispaperintroducesstoringabagofcupboardsthatSTC89C52microcontrollerminimumsystemproducesasetofsixrandompasswordtocontroltheopeningandclosingofcupboards.Thissystemhas14buttonsand6digitaltubethatcanshowthepasswordtocontrol20cabinet,eachgrouppasswordonceusingeffective.Customersneedtoaccessthekeyboardtooperatethebagofstoringandgettingoutofthebag.Thispaperfocusesonthedescriptionofthedesignandpricipleofstoringabagofcupboardsremotecontrolofsinglechip,andaccountsforthesystemdebugginganditsproblemsrelatedandtheanalysisareprovided.Keywords:Storeabagofcupboards,SingleChipMicroComputer,Password目錄TOC前言 1第一章設計任務 21.1設計的內容 21.2技術指標與功能 2第二章總體設計方案 32.1設計方案的論證 32.1.1單片機的選擇 32.1.2鍵盤/顯示部分的選擇 32.1.3顯示器件選擇 42.2自動存包柜電路的原理框圖以及各部分作用 4第三章系統(tǒng)硬件電路的設計 63.1自動存包柜的硬件電路 63.1.1單片機STC89C52的最小系統(tǒng)的連接電路 73.1.2鍵盤控制電路 83.1.3數(shù)碼顯示電路 103.1.4執(zhí)行部分電路 10第四章自動存包柜的軟件設計 134.1自動存包柜軟件設計 134.1.1自動存包柜主程序 134.1.2鍵掃描程序 174.1.374LS165數(shù)據(jù)檢測程序 194.1.4執(zhí)行部分程序 214.1.5顯示程序 23第五章系統(tǒng)調試 255.1硬件調試 255.1.1最小系統(tǒng)板得調試 255.1.2鍵盤顯示電路的調試 255.1.38255A電路的調試 255.2軟件調試 255.2.1查鍵顯程序的調試.. 255.2.2隨機密碼產生及核對程序的調試.. 265.2.3三次容錯的調試.. 265.3整機調試 26第六章測試結果 286.1測試結果 28第七章系統(tǒng)的改進 297.1硬件存在的問題與改進 297.2軟件存在的問題與改進 297.3系統(tǒng)功能擴展分析 30參考文獻 31致謝 32附錄 33附錄一發(fā)送接收電路原理圖 33附錄二程序清單 34附錄三元器件清單 45附錄四英文資料 46前言單片機是20世紀70年代中期發(fā)展起來的一種大規(guī)模集成電路器件。單片機有體積小、功能強、價格低、使用靈活等特點。20世紀80年代以來,國際上單片機的發(fā)展迅速,其產品之多令人目不暇接,單片機應用不斷深入,新技術層出不窮。在國內,盡管開發(fā)和應用單片機的時間不長,但也得到了迅猛的發(fā)展。目前單片機已成功地運用到智能儀表、機電設備、過程控制、數(shù)據(jù)處理、自動檢測與控制和家用電器等各個方面,為我國的國民經(jīng)濟建設作出了重要貢獻[1]。我們在各大超市可以看到的自動存包柜就是應用單片機技術控制的方便顧客存取包的設備。由于它的方便性和安全性,目前,自動存包柜在超市和其它場合得到了廣泛的應用,并且根據(jù)用途和場合,其種類不斷增多,功能也不斷完善,大大的方便了人們的日常生活[2]。就其使用方式而言,自動存包柜主要有兩種:其一為投幣式,即需要付費的,是通過從投幣口投入硬幣或紙幣來控制存取包;其二是密碼式,即通過一組系統(tǒng)產生的隨機密碼或顧客自己設定的密碼來控制柜門的開關,從而達到存取包的目的[3]。這次我們設計的就是利用系統(tǒng)產生一組6位隨機密碼來控制柜門開關的自動存包柜系統(tǒng)。它是利用單片機STC89C52實現(xiàn)的,具有14個按鍵和6個數(shù)碼管顯示6位隨機密碼??蛻敉ㄟ^鍵盤輸入隨機密碼可以進行存取包操作。此系統(tǒng)可以對20個柜子進行控制,每組密碼使用一次有效。整個系統(tǒng)穩(wěn)定可靠,且有容錯功能,使用和安裝都十分方便。第一章設計任務1.1設計的內容設計一個可以同時管理20個存包柜的管理系統(tǒng)。當顧客需要存包的時候,可以自行到存包柜前按“開門”鍵,單片機接收到一脈沖信號,并通過系統(tǒng)I/O口發(fā)出相應的信號,將一空箱打開,顧客即可存包,并將柜門關上。當顧客需要取包時,通過鍵盤輸入隨機碼傳給單片機,系統(tǒng)比較密碼一致后,發(fā)出開箱信號將柜門打開,顧客即可將包取出。要求本系統(tǒng)以STC89C52單片機為核心,自動控制柜門的打開,并且產生此時的隨機碼。取包時,通過隨機碼的輸入開門取包;當顧客發(fā)生密碼丟失的情況,管理員輸入最高密碼101010可將全部柜門打開,即可取包;具有三次容錯功能。20個存包柜可以用20個發(fā)光二極管替代。1.2技術指標與功能工作電壓:5V總共可存包20個,顧客只需按“存包”即可打開柜門,并且產生隨機密碼。取包時,通過產生的隨機密碼輸入之后按“確定”按鈕即可取包,當輸入錯誤之后,按“取消”按鈕重新輸入密碼。當顧客發(fā)現(xiàn)密碼丟失或忘記時,管理員輸入最高密碼“101010”即可將全部柜門打開。(5)具有三次容錯功能,當顧客輸入三次密碼都錯誤,第四次輸入密碼,無法將柜門打開,必須由管理員輸入最高密碼“101010”才可將柜門打開。第二章總體設計方案2.1設計方案的論證2.1.1單片機的選擇本設計所用的單片機可以用C-31,STC89C-52單片機等多種單片機來實現(xiàn)。考慮本設計的要求,需要編寫程序,但是C-31沒有內部存儲器,那么就要用外部擴展,比較麻煩。本設計所編寫的程序比較簡單,功能也比較少,如果用羚羊單片機就過于麻煩,大材小用,本設計所用到的輸入輸出端口也不是很多,所以我們決定用STC89C52單片機來完成本設計,既方便也很實用。2.1.2方案一:利用8155并行擴展口控制芯片(8122芯片可以用作單片機片外256B數(shù)據(jù)存儲器,也可以用作擴展I/O口使用以及用作定時器擴展使用,此處用作擴展I/O口使用,分別為PA、PB、PC口)來管理鍵盤和顯示部分。硬件框圖如圖2-1所示:89C89C5281558個數(shù)碼管14個鍵盤740775452圖2-18155接口電路框圖89C52外擴一片8155H,8155H的RAM地址為7E00H-7EFFH,I/O口地址為7F00H-7F05H,8155H的PA口為輸出口,控制鍵盤的列線Y0-Y7的電位,PA口作為鍵盤掃描口,同時又是8位LED的掃描口,PB口作為顯示器的段數(shù)據(jù)口,8155H的PC口作為輸入口,PC0-3接行線Y0-Y3,稱為鍵輸入口。用反相驅動器75452驅動鍵盤,用同相驅動器7407驅動數(shù)碼管。此方案原理較簡單,但外圍芯片數(shù)較多(四片75452、兩片7407),成本高,而且當我們對其硬件調試時,如果出現(xiàn)問題,會對檢查線路造成困擾。方案二:利用兩片8位并入串出的移位寄存器芯片74LS165來檢測鍵盤信號,利用三極管做數(shù)碼驅動,驅動6個數(shù)碼管顯示6位隨機密碼。硬件框圖如圖2-2所示。圖2-2鍵盤和顯示框圖此套方案中,我覺得所用到的器件都是我們學過的,比較好理解,雖然感覺所用到的元器件很多,但相比方法一來,芯片數(shù)量減少,價格相對也便宜,所以我選擇第二種方法。2.1.3顯示器件選擇在單片機應用系統(tǒng)中,使用的顯示器主要有LED(發(fā)光二極管)以及LCD(液晶顯示器),兩種顯示器配置靈活,與單片機接口方便。但是它們也是各有特點的:LED接口非常簡單,不需要專用的驅動程序,在設計程序時也非常的簡單,而且價格相對便宜;LCD顯示的字比較豐富,也比較清楚,給人的感覺很好,但是它接口復雜,且要自己造字庫,難度不小。故沒必要采用LCD,用LED發(fā)光二極管就夠了。2.2自動存包柜電路的原理框圖以及各部分作用圖2-3自動存包柜電路的原理框圖各部分作用:(1)單片機控制部分:它是系統(tǒng)的核心部分。由89C52單片機、時鐘、復位電路等組成。(2)鍵盤控制部分:這是用戶對自動存包柜進行操作的控制面板。由兩片8位并入串出的移位寄存器芯片74LS165和4*4鍵盤組成。通過它可以實現(xiàn)所有的控制功能。鍵盤功能定義如下表2-1所示:表2-1鍵盤功能定義表鍵符功能0-9用來對隨機密碼的輸入存包客戶需要存包所按的鍵取包客戶需要取包所按的鍵確認對輸入的數(shù)據(jù)進行確認清除對輸入的數(shù)據(jù)進行清除以便重新輸入(3)數(shù)碼顯示部分:這是用戶對自動存包柜進行操作后,能夠顯示6位隨機密碼,由三極管驅動電路驅動數(shù)碼管顯示。由數(shù)碼顯示驅動電路和6個數(shù)碼管組成。(4)執(zhí)行部分:這一部分是通過可編程并行接口8255A芯片給每一位發(fā)送高低電平控制發(fā)光二極管的亮滅(柜門的開關)來模擬的。由可編程并行接口8255A第三章系統(tǒng)硬件電路的設計3.1自動存包柜的硬件電路圖3-1自動存包柜的硬件電路自動存包柜硬件電路可以分成四部分組成,它們分別為單片機部分、鍵盤控制部分(核心芯片為兩片8位并入串出的移位寄存器芯片74LS165)、執(zhí)行部分(核心芯片為可編程并行接口8255芯片)和三極管驅動顯示部分。元件接線說明:(1)單片機部分:1腳P1.0接8255芯片36腳為WR端;2腳P1.1接74LS165(U3)的9腳QH為OUT1端;3腳P1.2接8255芯片的6腳為CS端;4腳P1.3接8255芯片的5腳為RD端;5、6腳P1.4、P1.5分別接8255芯片的9腳和8腳為A1、A0端;7腳P1.6接U3、U4的2腳為CLK端;8腳P1.7接U3、U4的1腳為SH端;9腳接8255的35腳為RST端;10~17腳作為P3口分別接8255的27~34腳為D0~D7端;21~28腳P2.0~P2.7分別接驅動三極管Q1、Q2、Q3、Q4、Q5、Q6的基極;32~39腳P0.0~P0.7分別接限流電阻R1~R7的一端,限流電阻R1~R7另一端依次接接數(shù)碼管的1~8腳為a、b、c、d、、e、f、g、dp端;(2)移位寄存器芯片74LS165部分:U4的3~6腳和11~14腳分別接按鍵的一端為A1~A8;9腳輸出端QH接U3的10腳串行輸出端SER;U3的3~6腳和11~14腳分別接按鍵的一端為B1~B8;(3)可編程并行接口8255芯片部分:PA口只用高四位,PB口和PC口為八位。37~40腳分別接發(fā)光二極管的限流電阻R的一端為PA4~PA7;18~25腳分別接發(fā)光二極管的限流電阻R的一端為PB0~PB7端,10~17腳分別接發(fā)光二極管的限流電阻R的一端為PC0~PC7端;(4)三極管驅動顯示部分:驅動三極管Q1、Q2、Q3、Q4、Q5、Q6的集電極1H、2H、3H、4H、5H、6H分別接數(shù)碼管的9腳;發(fā)射機都接5V電源。3.1.1單片機STC89C最小系統(tǒng)包括單片機的基本供電、時鐘電路和復位電路。單片機由5V電源供電。(1)時鐘和時鐘電路:時鐘電路是計算機的心臟,它控制著計算機的工作節(jié)奏。STC89C52單片機允許的時鐘頻率的典型值12MHz,也可以是6MHz。本設計采用12MHz。單片機時鐘電路圖如圖3-2所示。圖3-2單片機時鐘電路圖3-2中晶振頻率選擇12MHz。接到晶振兩端的瓷片電容作用是使振蕩器起振和對f微調補償,典型值為30pF。當單片機加電以后延遲約10ms的時間振蕩器起振產生時鐘,不受軟件控制(XTAL2輸出幅度為3V左右的正弦波)。(2)復位和復位電路:計算機在啟動運行時都需要復位,使中央處理器CPU和系統(tǒng)中的其它部件都處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。單片機的復位引腳是RST,當振蕩器起振后,該引腳上出現(xiàn)2個周期的高電平,是器件復位,只要RST保持高電平,單片機保持復位狀態(tài)。單片機復位方式有二種:上電復位(如圖3-3)、人工復位(如圖3-4)。本設計采用的是圖3-3上電復位,具體電路如圖3-5所示。圖3-3上電復位電路圖3-4人工復位注:RST與Vss之間的那個電阻在NMOS型單片機種需要接,但是在CMOS型單片機中不接。其中電容選擇22uF的電解電容。圖3-5復位和復位電路3.1由兩片74LS165、14個鍵盤按鈕組成。74LS165是8位并入串出的移位寄存器芯片,是把檢測到的按鍵信號傳輸給單片機。74LS165為8位移位寄存器(并行輸入,互補串行輸出)。當移位/置入控制端(SH/LD)為低電平時,并行數(shù)據(jù)(A-H)被置入寄存器,而時鐘(CLK/CLKINH)及串行數(shù)據(jù)(SER)均無關。當SH/LD為高電平時,并行置數(shù)功能被禁止。CLK和CLKINH在功能上是等價的,可以交換使用。當CLK和CLKINH有一個為低電平并且SH/LD為高電平時,另一個時鐘可以輸入。當CLK和CLKINH有有一個為高電平時,另一個時鐘被禁止。只有在CLK為高電平時CLKINH才可變?yōu)楦唠娖健?65有18個引腳,一般為雙列直插DIP封裝。引腳圖如圖3-6所示。圖3-674LS165管腳圖165芯片的移位/置入控制端SH接單片機的P1.7腳,時鐘CLK接P1.6腳,單片機P1.1腳接165芯片U3的輸出腳QH,U4的輸出端QH接U3的串行數(shù)據(jù)輸入端SER,A1-A8,B1-B8分別接按鍵一端。當鍵有按下時,74LS165芯片檢測到按鍵信號,經(jīng)U3的輸出端QH傳輸給單片機的P1.1腳,單片機根據(jù)鍵盤掃描程序進行處理。鍵盤控制電路如圖3-7所示。圖3-7鍵盤控制電路3.1.3數(shù)碼顯示部分利用7段共陽極數(shù)碼管進行顯示,數(shù)碼管與P0口的P0.0~P0.7相連,并接一個10K*8的排阻,P2口的P2.0~P2.5與6個PNP型三極管的基極相連,6個PNP型三極管作為驅動數(shù)碼管的驅動部分,當單片機選通某一個片選端時,給對應三極管一個高低電平,三極管通過飽和、截止來控制數(shù)碼管的顯示。三極管發(fā)射極接5V電源,集電極分別接數(shù)碼管的1H、2H、3H、4H、5H、6H。采用動態(tài)掃描方式。電路如圖3-6所示。假設當單片機的P2口全為高電平輸出,三極管Q1~Q6中的基極也全為高電平,發(fā)射極為5V也為高電平,三極管Q1~Q6都截止,集電極為低電平輸出,則傳到數(shù)碼管的1H、2H、3H、4H、5H、6H端都為低電平,因為數(shù)碼管是7段共陽極數(shù)碼管,所以6個數(shù)碼管都有顯示。圖3-6數(shù)碼顯示電路3.1.4執(zhí)行部分這一部分是由8255A芯片后接20個發(fā)光二極管來進行模擬實現(xiàn)。發(fā)光二極管燈亮,表示柜中有物,反之則柜中無物。8255A共有40個引腳,一般為雙列直插DIP封裝,40個引腳可分為與CPU連接的數(shù)據(jù)線、地址和控制信號以及與外圍設備連接的三個端口線。8255A的內部結構有以下幾部分組成:(1)并行I/O端口A、B、C8255A的內部有3個8位并行I/O口:A口、B口、C口。3個I/O口都可以通過編程選擇為輸入口或輸出口,但在結構和功能上有所不同。A口:含有一個8位數(shù)據(jù)輸出鎖存/緩沖器和一個8位輸入鎖存器。B口:含有一個8位數(shù)據(jù)輸出鎖存/緩沖器和一個8位輸入鎖存器(不鎖存)。C口:含有一個8位數(shù)據(jù)輸出鎖存/緩沖器和一個8位輸入鎖存器(不鎖存)。當數(shù)據(jù)傳送不需要聯(lián)絡信號時,這3個端口都可以用作輸入口或輸出口。當A口B口需要有聯(lián)絡信號時,C口可以作為A口和B口的聯(lián)絡信號線。管腳圖如圖3-7所示。圖3-78255A管腳圖(2)工作方式控制電路:8255A的三個端口在使用時可分為A、B兩組。A組包括A口8位和C口高4位:B組包括B口8位和C口低4位。兩組的控制電路中分別有控制寄存器,根據(jù)寫入的控制字決定兩組的工作方式,也可對C口每一位置“1”或清“0本設計中,A口高四位接4個發(fā)光二極管,B口、C口分別接8個發(fā)光二極管,每個發(fā)光二極管對應一個柜子,單片機的WR、RD、CS分別與8255A相應端口相接,8255A的A1A0為輸入端口控制信號,2位可構成四種狀態(tài),分別尋址A口、B口、C口和控制寄存器,它與單片機的相應端口相接,來控制A口B口C口的尋址,單片機的D0-D7端口與8255A的D0-D7口相接。單片機89C52通過8255A給每一位發(fā)送高低電平來控制其亮滅(柜門的開關),從而實現(xiàn)存取包。其電路如圖3-8所示。圖3-8執(zhí)行部分電路圖第四章自動存包柜的軟件設計4.1自動存包柜軟件設計4.1.1自動存包柜主程序圖4-1自動存包柜主程序流程圖圖4-1是自動存包柜主程序流程圖:首先初始化程序,然后調用按鍵掃描程序進行掃描。存包,中斷顯示密碼;取包,輸入密碼,判斷密碼是否正確,然后根據(jù)發(fā)光二極管的亮暗來判斷柜中有無物品。(1)自動存包柜部分初始化程序如下:unsignedcharkey_s,key_v;//定義數(shù)碼管顯示段碼unsignedcharcodedis_code[12]={0x03,0x9f,0x25,0x0d,0x99,//定義鍵盤號碼0,1,2,3,40x49,0x41,0x1f,0x01,0x09,0xff,0xfd};//定義鍵盤號碼4,5,6,7,8,9,offucharLED_flag1=0x01;//定義20個發(fā)光二極管……ucharLED_flag20=0x01;sbitK1=P3^6; //定義P3^6為P3口的第7位sbitK2=P3^7; //定義P3^7為P3口的第8位sbitK3=P3^5; //定義P3^5為P3口的第7位(2)中斷初始化程序:voidmain(void){P0=0xff;P2=0xff;TMOD=0x11;//定時器0,1工作模式1,16位定時方式TH0=0xFC;TL0=0x17;TCON=0x01;IE=0x8a;//使能timer0,1中斷TR0=1;}(3)存包過程自動存包柜的作用決定了它必須具有較好的安全性和可靠性,解決這個問題通用的方法是利用密碼核對。即用戶存包后,系統(tǒng)能產生一組密碼,用戶取包時,必須輸入這組密碼,系統(tǒng)核對正確后,取包才能成功,否則,系統(tǒng)不于響應。首先密碼位數(shù)需要清零,存包取密碼(flagy1=0)時,根據(jù)柜號密碼存入數(shù)組中,使相對應的發(fā)光二極管亮,即存包。程序如下:KSLEE[0]=KSLEE[1]=KSLEE[2]=KSLEE[3]=KSLEE[4]=KSLEE[5]=10;//.密碼位數(shù)清零KKSM=5;flagy1=0;//顯示等待存包狀態(tài)KKKSJJ=0;//顯示密碼變量清零while(1){if(MMJSASJ>3)flag_guanli=0;//連續(xù)按鍵三次以上,無法取出包,需要請管理員輸入最高密碼Key_scan();//調用鍵盤檢測程序if(KKS2==2)flagy1=2;//有取包按鍵顯示取包的狀態(tài)if(KKS2==1)//顯示存包密碼顯示狀態(tài){flagy1=1;}MIMA1=KSLEE[1]*10+KSLEE[0];MIMA2=KSLEE[3]*10+KSLEE[2];MIMA3=KSLEE[5]*10+KSLEE[4];if(flagy1==0)//存包取密碼{if(KKSJD==1)PPOP[0]=SUIJI1,PPOP[1]=SUIJI2,PPOP[2]=SUIJI3,LED_flag1=0,KKSJD=0,SUIJI1=SUIJI2=SUIJI3=0;//存1號柜,密碼到數(shù)組1…………if(KKSJD==20)PPOP[57]=SUIJI1,PPOP[58]=SUIJI2,PPOP[59]=SUIJI3,LED_flag20=0,KKSJD=0,SUIJI1=SUIJI2=SUIJI3=0;//存20號柜,密碼到數(shù)組20}KT_LED2=LED_flag1|(LED_flag2<<1)|(LED_flag3<<2)|(LED_flag4<<3)|(LED_flag5<<4)|(LED_flag6<<5)|(LED_flag7<<6);//顯示不同燈的狀態(tài)KT_LED1=LED_flag8|(LED_flag9<<1)|(LED_flag10<<2)|(LED_flag11<<3)|(LED_flag12<<4)|(LED_flag13<<5)|(LED_flag14<<6);KT_LED3=LED_flag15|(LED_flag16<<1)|(LED_flag17<<2)|(LED_flag18<<3)|(LED_flag19<<4)|(LED_flag20<<5);(4)取包過程取包按鍵按下后,顯示取包狀態(tài),輸入密碼之后,需要對所輸入的密碼與原先存在數(shù)組里的密碼進行比較,如果比較之后相同,則發(fā)光二極管燈滅,即柜門打開。如果密碼與所存數(shù)組里的密碼都不一致,燈仍亮,柜門無法打開,需要輸入管理員最高密碼。if(KKS2==3)//等待輸入密碼,然后進行密碼比較{if(flag_guanli)//等待輸入密碼,然后進行密碼比較{MMJSASJ++;if((PPOP[0]==MIMA1)&&(PPOP[1]==MIMA2)&&(PPOP[2]==MIMA3))MMJSASJ=0,LED_flag1=1; //比較1號柜密碼if((PPOP[3]==MIMA1)&&(PPOP[4]==MIMA2)&&(PPOP[5]==MIMA3))MMJSASJ=0,LED_flag2=1;//比較2號柜密碼if((PPOP[6]==MIMA1)&&(PPOP[7]==MIMA2)&&(PPOP[8]==MIMA3))MMJSASJ=0,LED_flag3=1;//比較3號柜密碼…………if((PPOP[54]==MIMA1)&&(PPOP[55]==MIMA2)&&(PPOP[56]==MIMA3))MMJSASJ=0,LED_flag19=1;//比較19號柜密碼if((PPOP[57]==MIMA1)&&(PPOP[58]==MIMA2)&&(PPOP[59]==MIMA3))MMJSASJ=0,LED_flag20=1;//比較20號柜密碼}(5)最高密碼的設置當用戶密碼丟失或忘記之后,請管理員輸入最高密碼的程序如下:flagy1=0;KSLEE[0]=KSLEE[1]=KSLEE[2]=KSLEE[3]=KSLEE[4]=KSLEE[5]=10;//.密碼位數(shù)清零if((MIMA1==10)&&(MIMA2==10)&&(MIMA3==10)) //管理員密碼比較,101010{flag_guanli=1;LED_flag1=LED_flag2=LED_flag3=LED_flag4=LED_flag5=LED_flag6=LED_flag7=LED_flag8=LED_flag9=LED_flag10=0x01;LED_flag11=LED_flag12=LED_flag13=LED_flag14=LED_flag15=LED_flag16=LED_flag17=LED_flag18=LED_flag19=LED_flag20=0x01;}}if(KKS2==4)//取消返回等待存包狀態(tài){flagy1=0; KSLEE[0]=KSLEE[1]=KSLEE[2]=KSLEE[3]=KSLEE[4]=KSLEE[5]=10;//.密碼位數(shù)清零 KKSM=5;}}}(6)三次容錯功能當客戶輸入三次密碼錯誤以后再次輸入密碼時,無法打開柜門即燈無法熄滅,需要請管理員輸入最高密碼“101010”。程序如下:while(1){if(MMJSASJ>3)flag_guanli=0;//連續(xù)按鍵三次以上,無法取出包,需要請管理員輸入最高密碼Key_scan();//調用鍵盤檢測程序if(KKS2==2)flagy1=2;//有取包按鍵顯示取包的狀態(tài)if(KKS2==1)//顯示存包密碼顯示狀態(tài){flagy1=1;}MIMA1=KSLEE[1]*10+KSLEE[0];MIMA2=KSLEE[3]*10+KSLEE[2];MIMA3=KSLEE[5]*10+KSLEE[4];……}4.1.2鍵掃描程序圖4-2鍵掃描程序流程圖掃鍵原理:每個按鍵有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。鍵盤處理程序的任務是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地,另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。我們必須在偵測到有按鍵被按下,就delay一小段時間,使鍵盤以達穩(wěn)定狀態(tài),再去判讀所按下的鍵,就可以讓鍵盤的輸入穩(wěn)定。鍵掃描程序:voidKey_scan()//鍵盤掃描函數(shù)Key_scan(){unsignedcharX,Y,Z;P3=0xff;P3=0x0f;//先對P3置數(shù)行掃描if(P3!=0x0f)//判斷是否有鍵按下{delay(1);//延時10ms,軟件去干擾if(P3!=0x0f)//確認按鍵按下;{X=P3;//保存行掃描時有鍵按下時狀態(tài)P3=0xf0;//列掃描Y=P3;//保存列掃描時有鍵按下時狀態(tài)Z=X|Y;//取出鍵值while(P3!=0xf0);//按鍵防止抖動switch(Z)//判斷鍵值(那一個鍵按下){case0x77:KKS2=4;break;//取消case0x7b:KKS2=3;break;//確定case0x7d:KKS2=2;break;//取包case0x7e:KKS2=1;break;//存包case0xbd:KKS1=9,KKS_flag=0;break;//數(shù)字【5】case0xbe:KKS1=8,KKS_flag=0;break;//數(shù)字【8】case0xd7:KKS1=7,KKS_flag=0;break;//字符【F=】case0xdb:KKS1=6,KKS_flag=0;break;//數(shù)字【3】case0xdd:KKS1=5,KKS_flag=0;break;//數(shù)字【3】case0xde:KKS1=4,KKS_flag=0;break;//數(shù)字【9】case0xe7:KKS1=3,KKS_flag=0;break;//字符【B+】case0xeb:KKS1=2,KKS_flag=0;break;//字符【C-】case0xed:KKS1=1,KKS_flag=0;break;//字符【D*】case0xee:KKS1=0,KKS_flag=0;break;//字符【E/】}}}4.1.374LS165數(shù)據(jù)檢測程序圖4-374LS165數(shù)據(jù)檢測流程圖74LS165數(shù)據(jù)檢測過程:兩片165芯片均為時鐘上升沿有效,SH-LD為移位/置入控制,當SH-LD為低電平時,并行數(shù)據(jù)A-H被移入寄存器;當SH-LD為高電平時,并行置數(shù)被禁止,數(shù)據(jù)傳輸從低位開始傳送,Count_165[1]和Count_165[1]讀取165端口數(shù)據(jù)傳輸給單片機相應端口。74LS165數(shù)據(jù)檢測程序如下:#include<reg52.h>//SFRdeclarations#include<stdio.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsfrWDT_CONTR=0xE1;sbitCLK=P1^3; //時鐘,上升沿有效sbitSO=P1^5; //數(shù)據(jù)輸出sbitSH_LD=P1^4; //移位/置入控制,為低電平時,并行數(shù)據(jù)A-H被移入寄存器;為高時,并行置數(shù)被禁止sbitCLK=P2^3; //時鐘,上升沿有效sbitSO=P3^2; //數(shù)據(jù)輸出sbitSH_LD=P2^2; //移位/置入控制,為低電平時,并行數(shù)據(jù)A-H被移入寄存器;為高時,并行置數(shù)被禁止uintKeyPort(void);//申明進行數(shù)據(jù)傳送voidKey_Data(void);//聲明讀取165端數(shù)據(jù)externvoiddog();//定義uintLedData=0xFFFF;ucharCount_165[2]; //定義輸出uintKeyPort(void)//進行數(shù)據(jù)傳送程序{uchari; uintkey; WDT_CONTR=0x3d; SH_LD=0; _nop_();_nop_(); SH_LD=1; for(i=0;i<16;i++)//低位開始 {CLK=0; key>>=1; if(SO) key|=0x8000; else key&=0x7fff; CLK=1;} returnkey;}voidKey_Data(void)//讀取165端數(shù)據(jù)程序{uintbuff_data;buff_data=KeyPort();Count_165[0]=buff_data&0xff;Count_165[1]=(buff_data>>8)&0xff;}4.1.4執(zhí)行部分程序執(zhí)行部分程序主要由8255A的驅動程序組成,首先對8255A的PA口PB口PC口進行初始化,把狀態(tài)標志字讀到ACC便于進行位操作,若置PA狀態(tài)標志位為高電平輸入,然后調用配置子程序,完成對8255的設置,判斷狀態(tài)標志位是否為高,為高則控制字設置完成,把PA口的數(shù)據(jù)讀到PA_data;若置PA狀態(tài)標志位為低電平輸出,調用配置子程序,完成對8255的設置,判斷狀態(tài)標志位是否為高,為高則控制字設置未完成,需重新設置,將PA_data的內容送到PA口。PB口、PC口也一樣。程序如下所示:#include<config.h>unsignedcharconstcfg_table[8]={0x80,/*10000000b,;c=outb=outa=out*/0x90,/*10010000b,;c=outb=outa=in*/0x82,/*10000010b,;c=outb=ina=out*/0x92,/*10010010b,;c=outb=ina=in*/0x89,/*10001001b,;c=inb=outa=out*/0x99,/*10011001b,;c=inb=outa=in*/0x8B,/*10001011b,;c=inb=ina=out*/0x9B,/*10011011b,;c=inb=ina=in*/};unsignedcharrd_mem(unsignedcharmem_ad){}voidPABC_config(void){a8255_CON=cfg_table[IO_flags];}charrd_PA(void)/*讀PA口*/{unsignedcharPA_data;ACC=IO_flags;/*把狀態(tài)標志字讀到ACC便于進行位操作*/do{IO_flagsA=1;/*置PA狀態(tài)標志位為高--輸入*/IO_flags=ACC;PABC_config();/*調用配置子程序,完成對8255的設置*/ACC=IO_flags;}while(IO_flagsA==0);/*判斷狀態(tài)標志位是否為高*//*控制字設置完成*/PA_data=a8255_PA;/*把PA口的數(shù)據(jù)讀到PA_data*/return(PA_data);/*返回PA_data*/}……voidwd_PA(unsignedcharPA_data)/*寫PA口*/{ACC=IO_flags;/*把狀態(tài)標志字讀到ACC便于進行位操作*/{IO_flagsA=0;/*置PA狀態(tài)標志位為低--輸出*/IO_flags=ACC;/*位操作完成,把ACC的內容寫回狀態(tài)標志字*/PABC_config();/*調用配置子程序,完成對8255的設置*/ACC=IO_flags;}while(IO_flagsA==1)/*判斷狀態(tài)標志位是否為高;為高,設置未完成,需從新設置*/a8255_PA=PA_data;/*將PA_data的內容送到PA口*/}voidset_PC(unsignedcharPC_num){ACC=IO_flags;IO_flagsC=0;ACC=IO_flags;PC_num=PC_num<<1;PC_num=(PC_num|0x01);a8255_CON=PC_num;}voidclr_PC(unsignedcharPC_num){ACC=IO_flags;IO_flagsC=1;ACC=IO_flags;PC_num=PC_num<<1;PC_num=(PC_num&0xFE);a8255_CON=PC_num;}voidmain(void){set_PC(0x01);}端口定義和RAM配置程序:#include<reg52.h>#include<ABSACC.H>#definea8255_PAXBYTE[0x7F7C#definea8255_PBXBYTE[0x7F7D]/*PB口地址*/#definea8255_PCXBYTE[0x7F7E]/*PC口地址*/#definea8255_CONXBYTE[0x7F7FunsignedcharIO_flags;/*用于表示PA、PB、PC的當前輸入輸出狀態(tài)內容不能被其它程序改寫,操作時ACC=IO_flags*/sbitIO_flagsA=ACC^0;/*PA的當前輸入輸出狀態(tài)置位表示輸入,復位表示輸出*/sbitIO_flagsB=ACC^1;/*PB的當前輸入輸出狀態(tài)*/sbitIO_flagsC=ACC^2;/*PC的當前輸入輸出狀態(tài)*/charrd_PA(void);/*讀PA口*/charrd_PB(void);/*讀PB口*/charrd_PC(void);/*讀PC口*/voidwd_PA(unsignedcharPA_data);/*寫PA口*/voidwd_PB(unsignedcharPB_data);/*寫PB口*/voidwd_PC(unsignedcharPC_data);/*寫PC口*/voidPABC_config(void);/*寫8255控制字*/4.1.5顯示程序定時器0中斷服務程序,用于數(shù)碼管的動態(tài)掃描。當flagy1為0,等待存包,顯示“”;當flagy1為1,存包顯示密碼的狀態(tài);當flagy1為2時,顯示輸入密碼的狀態(tài)。if(flagy1==0){SUIJI1++;if(SUIJI1>99)SUIJI1=0,SUIJI2++;//低if(SUIJI2>99)SUIJI2=0,SUIJI3++;//中if(SUIJI3>99)SUIJI3=0;//高}if(flagy1==0) //顯示的是‘’等待存包{if(MMMSW==5)LLL5=0,LLL1=LLL2=LLL3=LLL4=LLL9=LLL6=LLL7=LLL8=1,P0=dis_code[11]; //顯示-if(MMMSW==6)LLL6=0,LLL2=LLL3=LLL4=LLL5=LLL9=LLL7=LLL1=LLL8=1,P0=dis_code[11];//顯示-if(MMMSW==7)LLL7=0,LLL2=LLL3=LLL4=LLL9=LLL5=LLL6=LLL1=LLL8=1,P0=dis_code[11];//顯示-if(MMMSW==8)LLL8=0,LLL2=LLL3=LLL4=LLL9=LLL5=LLL6=LLL7=LLL1=1,P0=dis_code[11];//顯示-if(MMMSW==1)LLL1=0,LLL2=LLL3=LLL4=LLL9=LLL5=LLL6=LLL7=LLL8=1,P0=dis_code[11];//顯示-if(MMMSW==2)LLL2=0,LLL1=LLL3=LLL4=LLL9=LLL5=LLL6=LLL7=LLL8=1,P0=dis_code[11];//顯示-if(MMMSW==3)LLL3=0,LLL1=LLL2=LLL4=LLL9=LLL5=LLL6=LLL7=LLL8=1,P0=KT_LED1; //第1行if(MMMSW==9)MMMSW=0,LLL9=0,LLL1=LLL2=LLL3=LLL4=LLL5=LLL6=LLL7=LLL8=1,P0=KT_LED2; //第2行if(MMMSW==4)LLL4=0,LLL1=LLL2=LLL3=LLL9=LLL5=LLL6=LLL7=LLL8=1,P0=KT_LED3;//第3行KKSM=5;}if(flagy1==1)//顯示存包顯示密碼的狀態(tài),程序與flagy1==0類似,只需改動幾個數(shù)字即可。if(flagy1==2)//顯示輸入密碼的狀態(tài),程序與flagy1==1類似,只需改動幾個數(shù)字即可。第五章系統(tǒng)調試5.1硬件調試5.1.1最小系統(tǒng)板的調試調試最小系統(tǒng)板是為保證CPU能正常工作,主要測試P0、P1、P2口是否正常工作,其測試方法是:對三個口,編寫程序在相應的口輸出高低電平,然后用萬用表對口進行測試,看是否符合程序設計情況。5.1.2鍵盤顯示電路的調試主要測試按鈕接到74LS165的8位輸入引腳上,通過編程之后,應該有信號傳輸給單片機,單片機根據(jù)相應指令進行處理,通過逐個按按鈕,觀察是否能使相對應的數(shù)碼管顯示。為檢測鍵盤是否正常工作,采用的方法是:系統(tǒng)上電后,若鍵盤沒有按下,則相當于斷路,此時測得OUT1口輸出的是高電平.當按下某一個鍵時,相當于短路,此時測得OUT1口的輸出應該是低電平,如果有某個鍵當按下時OUT1口輸出保持高電平不變的話,則說明該按鍵工作不正常。在顯示測試程序中,可以根據(jù)三極管基極的高低電平來判斷數(shù)碼管是否接對。5.1.38255A電路的調試測試8255A是否正常工作的方法是:往8255某一口發(fā)全置1(或0)指令,因為20個小燈是共陽的接法,所以如果8255A正常工作,正確執(zhí)行了指令的話,對應的小燈應該不亮(或亮)。5.2軟件調試5.2.1查鍵顯程序的調試鍵盤采用的是4*4矩陣掃描,鍵盤定義如5-1所示。調試時,當按下某一數(shù)字鍵時,數(shù)碼管應該要將相應的數(shù)字顯示出來。表5-1鍵盤定義表0123456789無定義無定義存包取包確定取消5.2.2接通電源之后,數(shù)碼管顯示的是六位“”。當按下“存包”鍵后,數(shù)碼管應顯示一組六位的隨機密碼,過1s左右,剛才顯示的密碼會自動清除。當按下“取包”鍵,即可輸入密碼后,按照鍵盤上所對應的數(shù)字按下六位密碼,輸入之后按“確定”鍵即可取包。5.2.3三次容錯調試在系統(tǒng)產生的隨機密碼之上設立一個最高級密碼,當用戶輸入密碼出現(xiàn)三次核對不一致時,此時系統(tǒng)只認同一組密碼有效,即最高級密碼。最高級密碼由程序員自己設定和掌握,并且可以隨時進行修改。5.3整機調試1.燈滅表示柜空,燈亮表示柜中已存有東西。2.柜子的編號從00號到19號。3.存包時先按“存包”鍵,數(shù)碼管會顯示一組六位的隨機密碼,作為取包時的核對密碼,過1s左右,先前顯示的六位密碼會自動消除,并且對應的燈會亮,表示存包過程已完成。4.取包時先輸入按“取包”鍵,然后輸入所記的六位隨機密碼,若輸入無誤,按下“確認”鍵后六個數(shù)碼管無顯示,放光二極管熄滅。如果按下“取包”鍵,輸入密碼過程中按錯了數(shù)字鍵,可按“取消”鍵,取消先前的輸入,然后再次按“取包”鍵,輸入密碼即可;當六位密碼輸入完畢,并確認無誤時,按下“確認”鍵,若密碼核對正確,則對應的燈會熄滅,表示取包過程的完成;若密碼核對不一致,則對應的燈不會熄滅,用戶可再次輸入密碼進行核對;若連續(xù)三次輸入密碼不對,用戶將無法取出物品,此時只有去找管理員輸入最高密碼才可將柜門打開。在這里,我編的程序不夠完善,能將全部柜門打開,而不是只將對應的柜門打開,這是我設計中的一個不安全問題之一。還有在設計的過程中,我沒有把實際情況考慮進去,因此我設計的自動存包柜不能隨便打開一個柜門,只能按照順序依次存包,這是設計中的問題之二。第六章測試結果6.1測試結果調試完以后,按照測試步驟,測出的結果如下:按“存包”鍵,數(shù)碼管顯示六位隨機密碼,LED1亮;再按“確定”鍵,數(shù)碼管顯示另外六位隨機密碼,LED2亮;……一直按“存包”鍵20次,可將全部LED燈亮。按“取包”鍵,輸入任何一個隨機密碼,按“確定”鍵可將對應的燈熄滅。當輸入密碼錯誤需要重新輸入時,可按“取消”鍵取消之后再取包。當輸入三次密碼之后再輸入密碼,無法取包,需要找管理員輸入最高密碼打開全部柜門。當忘記密碼或丟失密碼時,可輸入最高密碼打開全部柜門。第七章系統(tǒng)的改進7.1硬件存在的問題與改進到這里,自動存包柜的軟硬件電路就設計完成,只需在一些參數(shù)上作些調整即可實現(xiàn)各項功能。當然,硬件部分的設計并不是很圓滿,設計并不是最簡單有效的,比如說,鍵盤掃描部分,如果用HD7279A芯片來實現(xiàn)對鍵盤和顯示的管理,那么就不需要花時間去設計三極管驅動顯示部分,因為HD7279A是一片具有串行接口、可同時驅動8位共陰極數(shù)碼管和64個按鍵的智能顯示驅動芯片。該芯片管理數(shù)碼管時,不需要外加驅動電路。因而用它來管理6位數(shù)碼管和14個鍵盤時,不需外加驅動電路,只需一片HD7279A芯片即可,從而使得電路更為簡潔,也便于調試,同時它的鍵盤控制器內含去抖電路,能保證鍵盤穩(wěn)定工作。另外,HD7279A管理鍵盤顯示時,可構成鍵盤顯示控制面板模塊,只需要引出CS、CLOCK、DATA、KEY四根線接到89C當時,我看到有顯示部分,就只想到用三極管驅動應該比較簡單,并沒有去查閱更多的相關知識,錯過了最簡便的方法,而且還給我后面編程時留下了隱患,這是我考慮不周到的地方。7.2軟件存在的問題與改進由第六章的測試結果可看出,功能基本達到了任務書上的任務要求,但是還存在一些實際問題。比如:(1)在取出包后,再要存包,系統(tǒng)只能在此燈滅之后再亮起,無法檢測到哪個燈滅就亮哪個燈,即系統(tǒng)只能依次存包,即使中間有包取出仍只能依次存包下去。(2)管理員輸入的最高密碼將全部柜門打開,有安全隱患。(3)當用戶輸入密碼與最高密碼一致時,用戶將全部柜門打開,存在安全隱患。由于我對軟件設計的不熟悉,無法做到功能的齊全,在實際應用中無法投入使用,是本設計中最不足的一點,在今后的時間里我會更加努力,鞏固知識,學習新的內容,完善自己。7.3系統(tǒng)功能擴展分析由于實驗條件的限制以及設計本人的考慮不周,與實際應用中的自動存包柜相差甚遠,功能不全,而且還存在一些問題。在實際應用中,根據(jù)各種需要,可以在此設計基礎上進行擴展。比如:(1)利用電磁鐵或可控硅、電磁耦合器,再加上一些機械裝置就能實現(xiàn)對柜門的開和關進行控制了。(2)接打印機。將產生的隨機密碼打印出來,可避免手抄密碼的麻煩。(3)語音服務。系統(tǒng)產生密碼后,發(fā)出提示用戶記好密碼、致歡迎詞等語音。(4)報警服務。在某些有特殊需要的場合,還可以設置報警裝置。參考文獻[1]雷麗文,朱曉華,蔡征宇.微機原理與接口技術.電子工業(yè)出版社,1996.8[2]童詩白,華成英。模擬電子技術基礎(第三版)。北京:高等教育出版社,2001,408-409。[3]王正元,現(xiàn)代電力電子器件應用導則.北京:機械工業(yè)出版社,1995.8[4]王兆安,黃俊.電力電子技術.第4版.北京:機械工業(yè)出版社,2000[5]張德江,胡貞,微型計算機控制系統(tǒng)。長春:吉林科學技術出版社[6]中國集成電路大全編委會編寫:《中國集成電路大全》北京:國防工業(yè)出版社,1989年。[7]閻石.數(shù)字電子技術.吉林:高等教育出版社出版,2000年[8]陳偉人.單片微型計算機原理及其應用.北京:清華大學出版社,1989[9]徐君毅.單片微型計算機原理及應用.上海:上??茖W技術出版社,1998[10]童詩白,華成英.模擬電子技術基礎.北京:高等教育出版社,2000[11]胡榮等.Protel電路設計教程.北京:清華大學出版社,2001[12]張立,趙永健.現(xiàn)代電力電子技術.北京:科學出版社,1995[13]閻石.數(shù)字電子技術.吉林:高等教育出版社出版,2000年[14]陳偉人.單片微型計算機原理及其應用.北京:清華大學出版社,1989[15]徐君毅.單片微型計算機原理及應用.上海:上海科學技術出版社,1998[16]童詩白,華成英.模擬電子技術基礎.北京:高等教育出版社,2000[17]胡榮等.Protel電路設計教程.北京:清華大學出版社,2001[18]張立,趙永健.現(xiàn)代電力電子技術.北京:科學出版社,1995[19]于海生.微型計算機控制技術.北京:清華大學出版社,1998[20]SheuJK,ChangSJ,KuoCH,etal.White2LightEmissionFromNearUV:InGaN2GaNLEDChipPrecoatedWithBluePGreenPRedPhosphors[J].IEEEPHOTONICSTECHNLOGYIEITERS,2003,15(1):18~20.[13]AT89C2051DataSheet[R].ATMELInc.[21]InfraredRemoteControlTransmitterPT2221A_PT2222ADataShee[R]t.PTCInc.[22]PhilipsSemiconductors.TheI2C-BusSpecificationVersion(2.1)2000.致謝經(jīng)過幾個月的努力,我在翟麗芳老師的耐心幫助和自己的努力下終于完成了此次設計,并按設計要求實現(xiàn)了自動存包柜控制系統(tǒng)的基本要求。這次畢業(yè)設計使我進一步鞏固加深了所學的基本理論、基本技能和專業(yè)知識,使之系統(tǒng)化、綜合化;也培養(yǎng)了我獨立工作并運用所學知識分析和解決實際問題的能力,也培養(yǎng)了我收集加工各種信息與獲取新知識的能力。更使我從中學到到了很多課本上學不到的知識,學會了用單片機開發(fā)產品的完整的過程,明白了設計的概念。通過自己親自去動手和調試,我明白的實踐的重要性,明白了理論結合實踐的含義,同時也大大的提高了自己的動手能力,也明白了不管做任何事都要有恒心和毅力才能把事情做好的道理。這在我以后的工作中都是非常有用的。此次設計我學到了許多,也存在許多的不足之處,比如在查找資料的時候沒有對各部分模塊的多種做法進行比較,沒有采用最簡便的方法,使之后的設計復雜化,而且在編程的過程中,由于對知識的不熟悉,在功能的實現(xiàn)上存在問題,使設計不能完滿的結束,這是我今后必須要注意的,不管是做哪件事情,都必須考慮全面,這樣才能做到最好。在這次設計中,翟麗芳老師在百忙之中不厭其煩的給我講解問題和修正錯誤,在此表示衷心的感謝??!附錄附錄一:自動存包柜的硬件電路圖附錄二:程序清單#include<reg52.h>#include<config.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintexternvoidKey_Data(void);unsignedchardatadis_digit;unsignedcharkey_s,key_v;//定義數(shù)碼管顯示段碼unsignedcharcodedis_code[12]={0x03,0x9f,0x25,0x0d,0x99,//0,1,2,3,40x49,0x41,0x1f,0x01,0x09,0xff,0xfd};//4,5,6,7,8,9,offucharLED_flag1=0x01;ucharLED_flag2=0x01;ucharLED_flag3=0x01;ucharLED_flag4=0x01;ucharLED_flag5=0x01;ucharLED_flag6=0x01;ucharLED_flag7=0x01;ucharLED_flag8=0x01;ucharLED_flag9=0x01;ucharLED_flag10=0x01;ucharLED_flag11=0x01;ucharLED_flag12=0x01;ucharLED_flag13=0x01;ucharLED_flag14=0x01;ucharLED_flag15=0x01;ucharLED_flag16=0x01;ucharLED_flag17=0x01;ucharLED_flag18=0x01;ucharLED_flag19=0x01;ucharLED_flag20=0x01;ucharSUIJI1=0;ucharSUIJI2=0;ucharSUIJI3=0;ucharMIMA1,MIMA2,MIMA3=0;charKKSJD=0;charflagy1=0;ucharKKSL=0;ucharKT_LED1=0xff;ucharKT_LED2=0xff;ucharKT_LED3=0xff;unsignedchardis_buf[8];unsignedchardis_index;unsignedcharsec100;charKSJD=1;//sbitK1=P3^6; //小時增加sbitK2=P3^7; //分鐘增加sbitK3=P3^5; //sbitLLL1=P2^0;sbitLLL2=P2^1;sbitLLL3=P1^6;sbitLLL4=P1^7;sbitLLL5=P2^4;sbitLLL6=P2^5;sbitLLL7=P2^6;sbitLLL8=P2^7;sbitLLL9=P1^5;charMMJSASJ=0;charKKKSJJ=0;charJIOS=0;bitflag_guanli=1;ucharPPOP[60];unsignedcharKKS1;unsignedcharKKS2;externunsignedcharCount_165[2]; charMMMSW=0;chardisp_Pattern; //bitflag_light=0;voiddisplay();voiddelayms(unsignedcharms);unsignedintKKSM=0;bitflag_hhs=1;ucharLLLS1,LLLS2,LLLS3;charKSLEE[6]={0,0,0,0,0,0};bitKKS_flag=1;//延時1msvoidDelay1ms(unsignedintcount){ unsignedinti,j; for(i=0;i<count;i++) for(j=0;j<120;j++);}//延時子程序voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=114;y>0;y--);}//4*4掃描鍵盤voidKey_scan()//鍵盤掃描函數(shù)Key_scan(){unsignedcharX,Y,Z;P3=0xff;P3=0x0f;//先對P2置數(shù)行掃描if(P3!=0x0f)//判斷是否有鍵按下{delay(1);//延時10ms,軟件去干擾if(P3!=0x0f)//確認按鍵按下;{X=P3;//保存行掃描時有鍵按下時狀態(tài)P3=0xf0;//列掃描Y=P3;//保存列掃描時有鍵按下時狀態(tài)Z=X|Y;//取出鍵值while(P3!=0xf0);//按鍵防止抖動switch(Z)//判斷鍵值(那一個鍵按下){case0x77:KKS2=4;break;//取消case0x7b:KKS2=3;break;//確定case0x7d:KKS2=2;break;//取包case0x7e:KKS2=1;break;//存包case0xbd:KKS1=9,KKS_flag=0;break;//數(shù)字【5】case0xbe:KKS1=8,KKS_flag=0;break;//數(shù)字【8】case0xd7:KKS1=7,KKS_flag=0;break;//字符【F=】case0xdb:KKS1=6,KKS_flag=0;break;//數(shù)字【3】case0xdd:KKS1=5,KKS_flag=0;break;//數(shù)字【3】case0xde:KKS1=4,KKS_flag=0;break;//數(shù)字【9】case0xe7:KKS1=3,KKS_flag=0;break;//字符【B+】case0xeb:KKS1=2,KKS_flag=0;break;//字符【C-】case0xed:KKS1=1,KKS_flag=0;break;//字符【D*】case0xee:KKS1=0,KKS_flag=0;break;//字符【E/】}}}}/********************************************************************主函數(shù)說明:入口參數(shù):無返回值:設計:日期:修改:日期:***********************************************************************/voidmain(void){P0=0xff;P2=0xff;TMOD=0x11;//定時器0,1工作模式1,16位定時方式TH0=0xFC;TL0=0x17;TCON=0x01;IE=0x8a;//使能timer0,1中斷TR0=1;KSLEE[0]=KSLEE[1]=KSLEE[2]=KSLEE[3]=KSLEE[4]=KSLEE[5]=10;//.密碼位數(shù)清零KKSM=5;flagy1=0;//顯示等待存包狀態(tài)KKKSJJ=0;//顯示密碼變量清零while(1){if(MMJSASJ>3)flag_guanli=0;Key_scan();//調用鍵盤檢測程序if(KKS2==2)flagy1=2;//有取包按鍵顯示取包的狀態(tài)if(KKS2==1)//顯示存包密碼顯示狀態(tài){flagy1=1;}MIMA1=KSLEE[1]*10+KSLEE[0];MIMA2=KSLEE[3]*10+KSLEE[2];MIMA3=KSLEE[5]*10+KSLEE[4];if(flagy1==0)//取包存密碼{if(KKSJD==1)PPOP[0]=SUIJI1,PPOP[1]=SUIJI2,PPOP[2]=SUIJI3,LED_flag1=0,KKSJD=0,SUIJI1=SUIJI2=SUIJI3=0;//存1號柜,密碼到數(shù)組1if(KKSJD==2)PPOP[3]=SUIJI1,PPOP[4]=SUIJI2,PPOP[5]=SUIJI3,LED_flag2=0,KKSJD=0,SUIJI1=SUIJI2=SUIJI3=0;//存2號柜,密碼到數(shù)組2if(KKSJD==3)PPOP[6]=SUIJI1,PPOP[7]=SUIJI2,PPOP[8]=SUIJI3,LED_flag3=0,KKSJD=0,SUIJI1=SUIJ

溫馨提示

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

最新文檔

評論

0/150

提交評論