基于RFID的智能掛鎖的設計與實現_第1頁
基于RFID的智能掛鎖的設計與實現_第2頁
基于RFID的智能掛鎖的設計與實現_第3頁
基于RFID的智能掛鎖的設計與實現_第4頁
基于RFID的智能掛鎖的設計與實現_第5頁
已閱讀5頁,還剩55頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

摘要物聯網時代家居智能化是大趨勢,鎖更是不可缺少的一部分。密碼鎖具有,便捷、安全性高、忘記帶鑰匙也能開鎖等優點。此設計是一個基于RFID的射頻智能鎖。本設計源于筆者日常生活中經常忘記帶鑰匙,通過市場調查藍牙鎖后,發現藍牙鎖往往需要,先連接藍牙,再開鎖,其間過程需要2至3分鐘,雖然這些藍牙鎖可以實現不帶鑰匙也能開門,但是并不節省時間,于是想設計一款可以更加快速開鎖的智能鎖。本設計由硬件和軟件兩部分組成,主要采用了RFID技術和紅外遙控技術。本設計中硬件實現部分由STC89C52單片機系統、4*4矩陣鍵盤、LCD1602液晶顯示模塊、RC522讀卡模塊等組成;軟件部分使用C語言進行編程。可以實現通過管理員密碼,讀寫卡片、對RFID卡進行管理。本系統有多種開鎖方式,可以使用RFID卡片開鎖,紅外遙控開鎖,藍牙遙控開鎖。關鍵詞:RFID;單片機;智能鎖AbstractIntheeraofInternetofthings,homeintelligentisthegeneraltrend,andlockisanindispensablepart.Thisdesignpasswordlockhastheadvantagesofconvenience,highsecurity,forgettingtotakethekey,etc.ThisdesignisaRFIDBasedRFsmartlock.ThisdesignoriginatesfromthefactthatIoftenforgettotakethekeyinmydailylife.Aftermarketinvestigation,IfoundthattheBluetoothlockoftenneedstobeconnectedfirstandthenunlocked.Theprocesstakes2to3minutes.AlthoughtheseBluetoothlockscanopenthedoorwithoutthekey,itdoesnotsavetime,soIwanttodesignasmartlockthatcanunlockthedoormorequickly.Thisdesigniscomposedofhardwareandsoftware,mainlyusingRFIDtechnologyandinfraredremotecontroltechnology.Inthisdesign,thehardwarepartiscomposedofSTC89C52singlechipmicrocomputersystem,4*4matrixkeyboard,LCD1602liquidcrystaldisplaymodule,rc522cardreadingmodule,andthesoftwarepartisprogrammedwithClanguage.ItcanreadandwritethecardandmanagetheRFIDcardthroughtheadministratorpassword.Thesystemhasavarietyofwaystounlock,RFIDcardcanbeusedtounlock,infraredremotecontrolunlock,Bluetoothremotecontrolunlock.Keywords:RFID;singlechipmicrocomputer;intelligentlock

目錄第一章緒論 11.1選題意義與目的 11.2選題背景與現狀 21.3本文結構 2第二章智能鎖開發技術 42.1開發工具 42.1.1軟件開發工具 42.1.2硬件制作工具 42.2技術介紹 42.2.1RFID 42.2.2紅外遙控 52.2.3單片機C語言 6第三章智能鎖方案設計 73.1智能鎖總體方案設計 73.2硬件設計 73.2.1STC89C52RC單片機介紹 73.2.2LCD1602液晶介紹 83.2.3RC522射頻模塊介紹 93.2.4HC-05藍牙模塊介紹 103.2.5紅外一體接收頭介紹 103.2.6智能鎖原理圖 113.3軟件設計 113.3.1液晶顯示部分代碼 123.3.2射頻模塊代碼 133.3.3主函數 173.3.4重置密碼 203.3.5掃描按鍵函數 233.4本章小結 27第四章智能鎖功能實現 294.1RFID智能鎖硬件制作 294.1.1焊接 294.1.2程序燒錄 294.2密碼開鎖 304.3RFID卡片開鎖 334.4紅外遙控開鎖 364.5藍牙開鎖 364.6本章小結 37結論 38參考文獻 39致謝 40第一章緒論1.1選題意義與目的隨著時光洪流滾滾,科技蓬勃發展,人類進入第四次工業革命。在第四次工業革命中,計算機科學無疑是其中不可缺少的重要部分。計算機科學可能乍一聽離我們的日常生活很遠,其實不然。人工智能、大數據、智能家居早已悄然走進你我的生活,走進千家萬戶。在我們的日常生活中,智能音響、智能電視、智能手機早已不是什么新鮮事,本課題源自我本身生活中發現的小小不便。鎖在我們生活中是不可缺少的重要部分,然而,在生活中忘帶鑰匙是一件會遲到卻不會缺席的尷尬事。根據我的調查以及親身體驗,目前市面上的藍牙電子鎖,在開鎖前總要先將藍牙設備與安卓設備進行配對連接,這一個過程動輒兩三分鐘,每每使我焦急萬分。我認為這樣的智能藍牙鎖不夠便捷。電子技術、通信技術、計算機技術飛速發展,特別是互聯網和多媒體通訊技術的蓬勃發展,人們對互聯網、多媒體通信的需求成倍數爆發增長,人們開始不滿足于如今的電子產品,開始追求更加先進、更加智能的產品。多年來人們用數據線進行有線連接,比如一臺計算機就是由主機,鍵盤,顯示器等通過線纜連接而成,當你想將電腦與手機連接在一起,將電腦與網絡連接在一起,當你想接入計算機的設備越來越多,用以連接的線纜也就越多。線纜多就導致了必然的亂,這種情況下利用線纜的信息傳輸已經無法滿足人們的需求了,人們開始變“懶”了。“懶”也是一種動力,由于懶得出力,人們馴化了牲畜,由于懶得挑水,人們建造了水利設施,現如今,人們懶得攜帶、管理這些越來越多的電子產品的線纜,人們開始創造、尋找讓這些線纜消失的方法。既然不想“有線”,那就只好尋求“無線”技術啦。RFID技術就是一種可以進行無線傳輸信息的技術,它是一種可以在短距離內保證可靠的接收和信息安全的無線通信技術。RFID技術在許多方面都有優勢,例如更新的實時性、存儲信息量、使用壽命、工作效率、安全性等方面。本次畢業設計的選題,便是這樣一個基于RFID的智能鎖,本設計集成了多種智能鎖的特點,可實現密碼開鎖,紅外遙控開鎖,RFID接觸式卡片開鎖,藍牙遙控開鎖。1.2選題背景與現狀在國內,鎖具行業的年銷售額約有四百多億,一年大概生產約20億把鎖。我們不僅是生產大國,對鎖也有很大的需求,但是和許多大洋彼岸某發達國家相比,我們市場上大部分仍是按鍵電子鎖,卡片鑰匙式電子鎖已經屬于“高端”鎖具。國內市場缺乏這一類“高端”鎖具,卻不代表沒有人想要購買這種鎖,而在國內市場上買不到的人們就只好出國購買。這種市場現象導致了國人研發的電子智能鎖的知名率和購買率都不盡人意,在國內市場,電子鎖僅占民用鎖不到2%的市場,不過相信隨著國家的快速發展,帶領人們全面建成小康社會,人們的消費觀念會逐漸改變,這種在普通家庭看來“高端”的鎖具也會漸漸走向大眾。如今正處于人們對這種鎖好奇到需求的階段,本設計中這種集合了多種開鎖方式,基于RFID技術開發的智能鎖就十分恰如其分了。不使用鑰匙,而是使用輸入密碼的方式來控制鎖的開關,這種開鎖方式的鎖就是電子密碼鎖。在如今人們的日常生活中,人們也逐漸意識到智能鎖的方便、快捷,希望我們不僅是科技與這些主流國家達到了同一水平,也希望我們的人民對使用科技帶來的便捷的水平也達到一致。在跟隨智能化浪潮的今天,對智能鎖的市場需求一日比一日高,現在智能鎖已經成為鎖具行業的發展潮流。但是在智能鎖的實際使用體驗中,還是存在些許問題。我曾體驗過多種藍牙鎖、但是這種藍牙鎖有著十分明顯的弊端,每次開鎖都需要先連接上藍牙然后再進行開鎖動作,連接藍牙這個過程需要兩至三分鐘,這使得一個本身為了便捷而設計的鎖,失去了它的本來意義。所以我覺得,在當前背景下,設計一款這樣更實用、更便捷的鎖,能讓我們的生活更便利。1.3本文結構根據內容可以將本文分為四個章節,下面介紹各個章節的大致內容:第一章首先引出了本設計的選題意義與目的,物聯網與智能鎖的發展,RFID技術的特點,然后介紹了選題背景與現狀。最后給出了本文的結構。然后第二章先是介紹了本設計開發時使用的工具,例如軟件部分開發時使用了Keil5進行編程編譯工作,隨后原理圖的繪制使用了AltiumDesigner;然后介紹了硬件制作時所使用的工具。隨即介紹在本設計中使用的主要技術,首先是RFID即無線射頻識別技術,然后介紹了紅外遙控技術,最后介紹了本設計中使用的編程語言——C語言。第三章介紹了智能鎖的總體設計方案,即是主要需要實現的功能,然后分別展示了功能實現部分的代碼,然后介紹了在硬件部分的設計以及硬件部分中主要的元器件的原理和使用方法,然后展示了硬件設計的原理圖。最后展示了軟件程序部分的設計思路以及主要實現代碼。第四章首先介紹了如何制作硬件部分,此部分分為焊接和程序燒錄兩部分;最后展示了本設計實現的功能。第二章智能鎖開發技術2.1開發工具2.1.1軟件開發工具本設計中軟件開發部分,使用了Keil5和AltiumDesigner。Keil5是單片機C語言開發軟件;AltiumDesigner是原理圖設計軟件。這兩個軟件都有十分強大的功能,是電子產品開發過程中必不可少的軟件。2.1.2硬件制作工具在智能鎖硬件焊接制作時所需工具有:電子剪鉗、電烙鐵、焊錫、OK線,吸焊器等。2.2技術介紹2.2.1RFIDRFID即無線射頻識別技術通過無線電波不接觸快速信息交換和存儲技術,通過無線通信結合數據訪問技術,然后連接數據庫系統,加以實現非接觸式的雙向通信,從而達到了識別的目的,用于數據交換,串聯起一個極其復雜的系統[1]。射頻識別技術依據其標簽的供電方式可分為三類,即無源RFID,有源RFID,與半有源RFID[2],具體如表2-1。表2-1三種RFID產品比較無源RFID有源RFID半有源RFID通信原理電子標簽通過接受射頻識別閱讀器傳輸來的微波信號,以及通過電磁感應線圈獲取能量來對自身短暫供電主動向射頻識別閱讀器發送信號先利用低頻信號精確定位,再利用高頻信號快速傳輸數據供電方式無供電外接電源供電僅對標簽中保持數據的部分進行供電感應范圍識別距離較短識別距離較遠,可在百米外識別根據閱讀器的密度不同,感應范圍不同產品大小可到厘米級或更小體積較大多部件應用范圍公交卡、二代身份證、食堂餐卡等高速公路ETC在一個高頻信號所能所覆蓋的大范圍中,在不同位置安置多個低頻閱讀器用于激活半有源RFID產品根據這三種RFID產品的特性,可以得出半有源RFID產品不適合電子智能鎖的應用,再對有源RFID卡與無源RFID卡的性能比較如表2-2[3]。在這兩者進行比較后可以得到最適合智能鎖的RFID產品是無源RFID卡片。表2-2有源RFID卡與無源RFID卡的性能比較有源RFID卡無源RFID卡電池一次性電池,無法更換。無非常溫度下工作不能能使用壽命使用壽命受到卡使用情況限制,實際使用情況會造成卡壽命不穩定,理想使用壽命為7~10年,但因每卡每天使用的次數及環境不同,實際中,有些卡只能用幾個月,有些卡可以使用5年以上,無法控制。系統一致性很好,無源卡的使用年限可以保證10年以上,無需維護。物理特征卡的尺寸大,稍厚,稍重外型小巧,輕,薄,安裝方便,適用各種情況使用防拆標簽外露無法做到標簽防拆功能容易做到標簽防拆功能成本較高較低讀寫距離讀寫距離比較遠可達12米讀寫距離比較近幾十厘米以內讀取速度快慢2.2.2紅外遙控紅外遙控早已經不是什么新鮮玩意,但是紅外遙控是一種無線通訊技術,并且可做到不接觸控制,這種技術抗干擾能力強,信息傳輸可靠,不僅功耗低,成本低,還有容易實現等優點,該技術具有抗干擾能力強、信息傳輸可靠、不僅功耗低、成本低,而且易于實現等優點。它被廣泛應用于許多電子設備,尤其是家用電器。幾乎所有的遙控設備都使用紅外遙感技術。近年來,它也被擴展到電腦和電腦的手機系統中,人們可以通過智能手機遙控家用電器。在一般的紅外遙控系統中,主要由發射和接收兩部分組成。2.2.3單片機C語言單片機C語言源于C語言,是在C語言基礎上發展出來的,在單片機上使用的語言。為了讓單片機讀懂,需要將編寫好的程序進行編譯,編譯成HEX文件后才能燒錄進單片機中。2.3本章小結在本章中,介紹了RFID智能鎖開發制作時使用的工具。并對主要使用到的技術:例如RFID技術、紅外遙控技術進行了深入的介紹。通過本章可以了解到本設計使用的開發軟件是keil5以及AD,主要開發語言是C語言,主要使用到的無線通信技術是RFID技術紅外遙控技術。第三章智能鎖方案設計3.1智能鎖總體方案設計在進行智能鎖的開發前,首先要明確目標,本設計的出發點是為了設計一個,有多種開鎖方式且使用RFID技術的電子智能鎖。所以我的目標有以下幾點:(1)RFID接觸卡片開鎖,實現卡片管理,且通過將卡片寫入手機的形式,達成將鑰匙“裝進手機”的目標。(2)紅外遙控開鎖(3)藍牙連接開鎖(4)提高電子智能鎖運行的穩定性。(5)管理員模式,可以修改密碼,增加卡片,刪除卡片。3.2硬件設計在本設計中的硬件部分由STC89C52RC單片機、LCD1602液晶模塊、RC522射頻模塊、HC-05藍牙模塊、紅外一體接收頭等組成。其中RC522射頻模塊負責讀取RFID卡片,并與單片機進行信息交互。而HC-05藍牙模塊負責單片機與智能手機之間的通信。設計先由矩陣鍵盤輸入密碼以控制單片機引腳電平來達到開鎖關鎖。除了通過矩陣鍵盤輸入密碼外還有多種開鎖方式,比如通過RC522射頻模塊預先寫入RFID卡片,通過使用射頻模塊讀取RFID卡片來進行開鎖;或者通過HC-05藍牙模塊與安卓設備連接,通過安卓設備進行遙控開鎖;又或者使用紅外遙控器,以及通過使用紅外遙控器遠程輸入密碼開鎖。3.2.1STC89C52單片機介紹STC89C52屬于CMOS8位微控制器,其具有8K字節系統可編程Flash存儲器。還有具有EEPROM功能,令其在掉電后也不丟失數據。它是是許多嵌入式控制應用系統的選擇,STC89C52引腳如下圖3-1。圖3-1STC89C52RC引腳3.2.2LCD1602液晶介紹液晶顯示器普遍出現在日常家用電器中,在制作電子產品時液晶顯示模塊也是十分常見,在本設計中,將采用LCD1602液晶模塊,這個模塊是屬于字符型液晶顯示模塊,以一種點陣式的LCD,1602則代表它的顯示容量為16×2個字符。在單片機系統中輸出元器件選擇晶液顯示器是因為其顯示質量好。液晶顯示器在輸出時,在點陣中的每一個點得到是否亮起的信號后維持發光,直到收到下一次信號,而陰極射線管顯示器則是不斷刷新每個亮點會不斷閃爍,造成畫面不連續,容易讓人眼花,閱讀效果不好,所以并沒有液晶顯示器的顯示質量好。LCD1602的DDRAM(DisplayDataRAM)就是研究顯示信息數據RAM,用來進行寄存待顯示的字符識別代碼。共80個字節,其地址及相應畫面如圖3-2所示。圖3-2數據地址和屏幕對應的關系DDRAM其實就是電腦的顯存,如果我們平時想要在電腦屏幕上顯示一句話,很簡單只需要使用鍵盤輸入就行,和電腦一樣,想在LCD1602上輸出字符也需要有輸入設備,但是LCD1602總共只有80個字節的顯存,所以也不是每一個寫在顯存上的字符都可以顯示出來。LCD1602各引腳借口說明如表3-1:表3-1LCD1602引腳編號符號引腳說明編號符號引腳說明1VSS電源地9D2數據2VDD電源正極10D3數據3VL液晶顯示偏壓11D4數據4RS數據/命令選擇12D5數據5R/W讀/寫選擇13D6數據6E使能信號14D7數據7D0數據15BLA背光源正極8D1數據16BLK背光源負極LCD1602液晶模塊內部預先寫入了11條控制指令,其讀寫操作皆由對指令編程來實現如表3-2所示:表3-2控制命令表序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標返回000000001*3置輸入模式00000001I/DS4顯示開/關控制0000001DCB5光標或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發生存貯器地址0001字符發生存貯器地址8置數據存貯器地址001顯示數據存貯器地址9讀忙標志或地址01BF計數器地址10寫數到CGRAM或DDRAM)10要寫的數據內容11從CGRAM或DDRAM讀數11讀出的數據內容3.2.3RC522射頻模塊介紹該模塊是用MFRC522芯片為主體設計出的無源RFID讀卡集成電路,將復雜電路集成為一個完整模塊,集成后僅需8個腳即可連接控制,配合單片機進行開發,是本設計開發首選,而且可以保證模塊讀卡穩定、讀卡感應距離遠。因為無源RFID卡片自身沒有電源,而只有一個諧振電路,所以需要讀卡裝置向RFID卡發射電磁波,而這個電磁波的頻率需要和RFID卡的頻率相同,這樣RFID卡內的諧振電路才會產生共振。共振才使得RFID卡片內部電容有電荷,有電荷后才能用這個電荷為RFID卡內的電路提供電壓,實現將卡內數據發出或讀取讀寫器的數據。RC522射頻模塊原理如3-3圖所示。圖3-3RC522射頻模塊原理圖3.2.4HC-05藍牙模塊介紹在本設計中使用HC-05藍牙模塊與智能手機通信,在分類上它屬于串口藍牙模塊。使用它十分方便,幾乎無需了解藍牙部分原理,只需要了解串口如何使用就可以通過此模塊使用藍牙在單片機與智能機之間通信。各引腳接口說明如表3-3:表3-3HC-05藍牙模塊引腳編號引腳名引腳說明1RXD接收端2TXD發送端3AT設置工作模式4VCC模塊供電正極5GND模塊供電負極3.2.5紅外一體接收頭介紹紅外一體接收頭是紅外遙控系統中的接收部分,它的最主要功能就是將接收到的光信號轉換成電流信號再轉換成遙控碼,讓單片機得到讀得懂的數據,從而可以達到相應的功能。如圖3-4紅外發射及接收示意圖展示了紅外遙控的過程圖3-4紅外發射及接收示意圖3.2.6智能鎖原理圖本設計原理圖如圖3-5使用AltiumDesigner繪制。圖3-5智能鎖原理圖3.3軟件設計按下自鎖開關開機后單片機系統開始運行,首先初始化中斷系統、初始化LCD1602液晶顯示、初始化RC522射頻模塊、初始化EEPROM芯片、調用刷卡識別函數,然后判斷鎖定標志是否為1,如是1代表三次輸入密碼錯誤,則開啟鎖定報警功能;如鎖定標志不為1,則關閉鎖定報警模塊,判定鎖定標志后調用掃描按鍵函數,判定是否輸入正確密碼解除鎖定報警或是輸入功能按鍵執行相應操作。圖3-6主要程序流程3.3.1液晶顯示部分代碼本部分是液晶顯示部分控制代碼,通過本部分代碼定義了對液晶顯示屏的基本操作,例如液晶顯示屏顯示的位置以及寫入指令和數據的方法。#defineyi0x80//第一行的初始位置#defineer0x80+40//第二行初始位置voiddelay(uintxms)//延時函數{ uintx,y; for(x=xms;x>0;x--) for(y=110;y>0;y--);}voidwrite_1602com(ucharcom)//寫入指令{ lcd1602_rs=0;//數據/指令選擇置為指令 lcd1602_rw=0;//讀寫選擇置為寫 P0=com;//送入數據 delay(1); lcd1602_en=1; delay(1); lcd1602_en=0;}voidwrite_1602dat(uchardat)//寫數據{ lcd1602_rs=1;//數據/指令選擇置為數據 lcd1602_rw=0;//讀寫選擇置為寫 P0=dat;//送入數據 delay(1); lcd1602_en=1; delay(1); lcd1602_en=0;}voidlcd_init(){//初始化 write_1602com(0x38);//設置液晶工作模式 write_1602com(0x01);//清顯示 write_1602com(0x0c);//開顯示不顯示光標 write_1602com(0x06);//整屏不移動,光標自動右移}3.3.2射頻模塊代碼通過本部分代碼對射頻模塊進行控制,如果輸入管理員密碼就進入管理員模式,這個模式下可以對卡片進行刪除、保存等操作。進入此模式后按A鍵進行卡位切換,預先設置了6個空卡位,切換到空卡位上后可以按C鍵存儲卡片;切換到已存儲的卡位上按B鍵可以刪除卡片。else {//如果通過矩陣鍵盤輸入管理員密碼131420進入管理員模式 if((InputData[0]==1)&&(InputData[1]==3)&&(InputData[2]==1)&&(InputData[3]==4)&&(InputData[4]==2)&&(InputData[5]==0)) { TwoAlam(); Delay400Ms(); TwoAlam(); N=0; chushihua=1; }voiddisplay_id(unsignedcharxdata*SrcBuf){ charxdata*pDisplayChar; unsignedcharxdataTmp,i; pDisplayChar=DisplayBuf; for(i=0;i<4;i++) { Tmp=((*SrcBuf)>>4)&0x0F; if((Tmp>=0)&&(Tmp<=9) ) { *pDisplayChar++='0'+Tmp; } else { *pDisplayChar++='A'+Tmp-10; } Tmp=(*SrcBuf)&0x0F; if((Tmp>=0)&&(Tmp<=9) ) { *pDisplayChar++='0'+Tmp; } else { *pDisplayChar++='A'+Tmp-10; } SrcBuf++; } *pDisplayChar++='\0';//向1602寫入數據 if(chushihua==1) {write_1602com(0xc0); write_1602dat('I'); write_1602dat('D'); write_1602dat(current_id+0x30); write_1602dat(':'); write_1602dat(DisplayBuf[0]); write_1602dat(DisplayBuf[1]); write_1602dat(DisplayBuf[2]); write_1602dat(DisplayBuf[3]); write_1602dat(DisplayBuf[4]); write_1602dat(DisplayBuf[5]); write_1602dat(DisplayBuf[6]); write_1602dat(DisplayBuf[7]); write_1602dat(''); write_1602dat('');write_1602dat('');write_1602dat('');write_1602dat(''); }}voiddisplay_no_id(){write_1602com(0xc0); write_1602dat('I'); write_1602dat('D'); write_1602dat(current_id+0x30); write_1602dat(':'); write_1602dat(DisplayBuf_c[0]); write_1602dat(DisplayBuf_c[1]); write_1602dat(DisplayBuf_c[2]); write_1602dat(DisplayBuf_c[3]); write_1602dat(DisplayBuf_c[4]); write_1602dat(DisplayBuf_c[5]); write_1602dat(DisplayBuf_c[6]); write_1602dat(DisplayBuf_c[7]); write_1602dat(''); write_1602dat('');write_1602dat('');write_1602dat('');write_1602dat('');}voidctrl(void){ucharj,i; if(PcdRequest(PICC_REQIDL,&CardRevBuf[0])!=MI_OK)//尋天線區內未進入休眠狀態的卡,返回卡片類型2字節 { if(PcdRequest(PICC_REQIDL,&CardRevBuf[0])!=MI_OK)//尋天線區內未進入休眠狀態的卡,返回卡片類型2字節 { if(chushihua==1) { read_eeprom_j(current_id); display_no_id(); } return; } } if(PcdAnticoll(&CardRevBuf[2])!=MI_OK)//防重復,返回卡的序列號4字節 { if(chushihua==1) { read_eeprom_j(current_id); display_no_id(); } return; } if(PcdSelect(&CardRevBuf[2])!=MI_OK)//選卡 { if(chushihua==1) { read_eeprom_j(current_id); display_no_id(); } return; } display_id(&CardRevBuf[2]); if(CorrectCont==0&&pass==0) { for(j=0;j<6;j++) { read_eeprom_j(j); if(DisplayBuf[0]==DisplayBuf_c[0]&&DisplayBuf[1]==DisplayBuf_c[1]&&DisplayBuf[2]==DisplayBuf_c[2]&&DisplayBuf[3]==DisplayBuf_c[3]&&DisplayBuf[4]==DisplayBuf_c[4]&&DisplayBuf[5]==DisplayBuf_c[5]) { CorrectCont=1; write_1602com(er); for(j=0;j<16;j++) { write_1602dat(LockOpen[j]); } TwoAlam(); //操作成功提示音 ErrorCont=0; KEY=0; //開鎖 pass=1; //置正確標志位 TR0=1; //開啟定時 for(j=0;j<6;j++) //將輸入清除 { InputData[i]=0; } return; } } }}3.3.3主函數此部分代碼為主函數代碼,對LCD1602進行初始化、對RC-522射頻模塊進行初始化、對eeprom進行初始化。然后設置共六個功能鍵的功能,還設置了蜂鳴器響的模式。voidmain(){ unsignedcharKEY,NUM; unsignedchari,j; P1=0xFF; EA=1; TMOD=0x21; IT1=1; EX1=1; TH0=0;//T0賦初值 TL0=0; TR0=0;//t0開始計時 TH1=0Xfd; TL1=0Xfd; //9600 ET1=0; TR1=1; SM0=0; //設置串口的工作模式 SM1=1; //方式1 REN=1; //允許串口接收數據 ES=1; //串口中斷應許 Delay400Ms(); //啟動等待,等LCM講入工作狀態 lcd_init(); //LCD初始化 write_1602com(yi);//日歷顯示固定符號從第一行第0個位置之后開始顯示 init_rc522();//射頻模塊初始化 init_eeprom();//eeprom初始化 read_eeprom(); for(i=0;i<16;i++) { write_1602dat(name[i]);//向液晶屏寫日歷顯示的固定符號部分 } write_1602com(er);//時間顯示固定符號寫入位置,從第2個位置后開始顯示 for(i=0;i<16;i++) { write_1602dat(start_line[i]);//寫顯示時間固定符號,兩個冒號 } write_1602com(er+9); //設置光標位置 write_1602com(0x0f); //設置光標為閃爍 Delay5Ms();//延時片刻(可不要) N=0;//初始化數據輸入位數 while(1) { ctrl(); if(key_disable==1) Alam_KeyUnable(); else ALAM=1;//關報警 KEY=keynum(); if(KEY!=0||IrOK==1) { if(key_disable==1) { second=0; } else { NUM=coding(Im[2],KEY); { switch(NUM) {//按鍵功能 case('A'):if(chushihua==1)//A鍵在管理卡片模式切換卡位 { current_id++; if(current_id>5) current_id=0; } break; case('B'): if(chushihua==1)//B鍵在管理卡片模式刪除卡片 write_eeprom_jj(current_id) ; break; case('C'):if(chushihua==1)//C鍵在管理卡片模式存儲卡片 write_eeprom_j(current_id) ; break; case('D'):chushihua=0;ResetPassword(); break;//D鍵在管理模式中重置密碼 case('*'):chushihua=0;Cancel(); break;//*取消當前輸入 case('#'):chushihua=0;Ensure(); break; //#確認鍵 default: { chushihua=0; //DisplayListChar(0,1,Input); write_1602com(er); for(i=0;i<16;i++) { write_1602dat(Input[i]); } operation=0; if(N<6) //判斷輸入密碼,小于等于6位進行保存 { OneAlam(); //按鍵提示音 //DisplayOneChar(6+N,1,'*'); for(j=0;j<=N;j++) { write_1602com(0x80+46+j); write_1602dat('*'); } InputData[N]=NUM; N++; } else //輸入密碼位數大于6后,忽略輸入 { N=6; break; } } } } } } }}3.3.4重置密碼通過鍵盤掃描按鍵D鍵可以進行密碼重置。具體操作是在開機后按D鍵,連續輸入兩次密碼,中間不關鎖,此時液晶屏上會顯示“SetNewWordEnable”。然后可以輸入新密碼,輸入后按D鍵,液晶屏上出現“inputagain”重復以上動作一次,新密碼設置成功。voidResetPassword(){ unsignedchari; unsignedcharj; if(pass==0) { pass=0; DisplayChar(); ThreeAlam(); } else { if(ReInputEn==1) { if(N==6) { ReInputCont++; if(ReInputCont==2) { for(i=0;i<6;) { if(TempPassword[i]==InputData[i]) //將兩次輸入的新密碼作對比 i++; else { //DisplayListChar(0,1,Error); write_1602com(er); for(j=0;j<16;j++) { write_1602dat(Error1[j]); } ThreeAlam(); //錯誤提示 pass=0; ReInputEn=0; //關閉重置功能, ReInputCont=0; DisplayChar(); break; } } if(i==6) { //DisplayListChar(0,1,ResetOK); write_1602com(er); for(j=0;j<16;j++) { write_1602dat(ResetOK[j]); } TwoAlam(); //操作成功提示write_eeprom(); ReInputEn=0; } ReInputCont=0; CorrectCont=0; } else { OneAlam(); //DisplayListChar(0,1,again); //顯示再次輸入一次 write_1602com(0x80+40); for(j=0;j<16;j++) { write_1602dat(again[j]); } for(i=0;i<6;i++) { TempPassword[i]=InputData[i]; //將第一次輸入的數據暫存起來 } } N=0; //輸入數據位數計數器清零 } } }}3.3.5掃描按鍵函數本段包括了按鍵輸入檢測,然后返回按鍵數值,將輸入密碼顯示時用“*”代替。unsignedcharkeynum(){ unsignedcharrow,col,i; if(flag_REC==1) // { flag_REC=0; if(buff[0]=='O'&&buff[1]=='N') switch(buff[2]) { case'1': return(0x11); break; case'2': return(0x21); break; case'3': return(0x41); break; case'4': return(0x12); break; case'5': return(0x22); break; case'6': return(0x42); break; case'7': return(0x14); break; case'8': return(0x24); break; case'9': return(0x44); break; case'A': return(0x84); break; case'B': return(0x18); break; case'C': return(0x48); break; case'D': return(0x88); break; case'E': return(0x28); break; } } P1=0xf0; if((P1&0xf0)!=0xf0) { Delay5Ms();Delay5Ms(); if((P1&0xf0)==0xf0) { row=P1^0xf0;//確定行線 i=0; P1=a[i]; while(i<4) { if((P1&0xf0)==0xf0) { col=~(P1&0xff); //確定列線 break; } else { i++; P1=a[i]; } } } else { return0; } while((P1&0xf0)==0xf0); return(row|col); //行線與列線組合后返回 } elsereturn0; }//蜂鳴器響一聲,輸入提示voidOneAlam(){ ALAM=0; Delay5Ms();ALAM=1;}//兩聲提示,操作成功voidTwoAlam(){ ALAM=0; Delay5Ms();ALAM=1;Delay5Ms(); ALAM=0; Delay5Ms();ALAM=1;}//三聲提示,密碼錯誤voidThreeAlam(){ ALAM=0; Delay5Ms();ALAM=1;Delay5Ms(); ALAM=0; Delay5Ms();ALAM=1;Delay5Ms(); ALAM=0; Delay5Ms();ALAM=1;}//輸入位數顯示,用“*”代替真實數字voidDisplayOne(){ write_1602com(yi+5+N); write_1602dat('*');}3.3.6取消鍵此部分代碼設置了取消鍵的功能。voidCancel(){ unsignedchari; unsignedcharj; //DisplayListChar(0,1,start_line); write_1602com(er); for(j=0;j<16;j++) { write_1602dat(start_line[j]); } TwoAlam(); //提示音 for(i=0;i<6;i++) { InputData[i]=0; } KEY=1; //關閉鎖 ALAM=1; //報警關 operation=0; //操作標志位清零 pass=0; //密碼正確標志清零 ReInputEn=0; //重置輸入充許標志清零// ErrorCont=0; //密碼錯誤輸入次數清零 CorrectCont=0; //密碼正確輸入次數清零 ReInputCont=0; //重置密碼輸入次數清零 s3_keydown=0; key_disable=0; N=0; //輸入位數計數器清零}3.4本章小結在本章中介紹了本設計中主要的元器件,以及主要程序設計的思路。對本設計的原理圖進行了展示,然后展示了液晶顯示部分的代碼,通過此部分代碼定義了對液晶顯示屏的基本操作,例如液晶顯示屏顯示的位置以及寫入指令和數據的方法。然后展示了射頻模塊的代碼,通過此部分代碼對射頻模塊進行控制,對卡片進行刪除、保存等操作。然后展示了主函數部分代碼,此部分代碼對LCD1602進行初始化、對RC-522射頻模塊進行初始化、對eeprom進行初始化。然后設置共六個功能鍵的功能,還設置了蜂鳴器響的模式。接下來展示了重置密碼功能部分的代碼,此代碼通過鍵盤掃描按鍵D鍵可以進行密碼重置。然后展示了掃描按鍵函數部分代碼,此部分代碼包括了按鍵輸入檢測,然后返回按鍵數值,將輸入密碼顯示時用“*”代替。最后展示了取消鍵部分的代碼,此部分代碼設置了取消鍵的功能。通過本章可以了解到本設計住主要部分由STC89C52單片機、LCD1602、RC522射頻模塊、HC-05藍牙模塊、紅外一體接收頭組成,并且介紹了這些元器件,通過這些模塊來實現主要功能;還對代碼進行了介紹。第四章智能鎖功能實現4.1RFID智能鎖硬件制作4.1.1焊接在焊接中,需準備所需元器件,根據原理圖將元器件焊接。在焊接中需注意觀察元器件不要焊錯腳;錫點要適中,不要過大或過小;注意不要讓OK線內的銅線露出來以免相鄰線路接觸導致短路;電烙鐵不要停留過長時間,以免元器件過熱導致損壞;焊接時應盡量注意美觀。將元器件焊接到覆銅洞洞板上。焊接完成如圖4-1。圖4-1焊接完成4.1.2程序燒錄將rfidlock.uvproj進行編譯,編譯成功如圖4-2,編譯后得到rfidlock.hex文件。圖4-2編譯完成圖編譯完成后得到HEX格式文件,將其使用下載器和下載軟件燒錄到STC89C52RC單片機中。圖4-3單片機下載器4.2密碼開鎖密碼開鎖功能是該電子鎖的最基礎功能,通過矩陣鍵盤輸入密碼進行開鎖,通過輸入管理員密碼,進行更改密碼等操作,為了使開鎖結果更為直觀,在本設計中,我用一個發光二極管來代替了電磁鎖,即是說,發光二極管亮,便代表開鎖成功。如圖4-4為智能鎖未通電時及發光二極管位置。圖4-4智能鎖未通電如圖4-5按下自鎖開關為智能鎖通電,進入待輸入密碼狀態。圖4-5智能鎖通電如圖4-3通過矩陣鍵盤輸入正確密碼,發光二極管亮起,繼電器吸合,開鎖成功,液晶屏顯示“open”。圖4-6密碼鎖開啟按D鍵重置密碼,重復輸入兩次原密碼,液晶屏顯示“SetNewWordEnable”,如圖4-7.圖4-7設置新密碼輸入新密碼后按D鍵,液晶屏上顯示“inputagain”,重復以上動作,液晶屏顯示“ResetPasswordOk”,新密碼設置完成。圖4-8密碼設置完成4.3RFID卡片開鎖為演示方便,準備了兩種外觀不同的RFID卡片,如圖4-9。(1) 開鎖圖右邊的白卡已經寫入到智能鎖中,圖左邊的藍卡未寫入。所以此時可以用白卡開鎖,而藍卡不行如圖4-10與圖4-11。開鎖時將RFID卡片放至智能鎖右側RC522讀卡模塊上。圖4-9RFID卡片圖4-10白卡開鎖圖4-11藍卡無法開鎖(2) 添加卡片.通過輸入管理密碼進入卡片管理模式,輸入密碼后可以看到有六個卡位,為ID0-ID5,按A鍵可以切換卡位,如圖4-12,ID2為空,把藍卡放在RC522模塊上按C鍵將卡片存入卡位中,如圖4-13。圖4-12ID2圖4-13寫入ID2(3) 刪除卡片圖4-9中白卡預先寫入在ID3中,進入管理模式,切換到ID3按B鍵刪除卡片,如圖4-14,刪除后白卡不能開鎖,如圖4-15.圖4-14ID3圖4-15白卡無法開鎖4.4紅外遙控開鎖通用紅外遙控系統由發射和接收兩大部分組成,本設計中,發射部分上的鍵位如圖4-16標注,數字鍵與矩陣鍵盤相同,通過使用發射器輸入密碼即可開鎖,與密碼開鎖部分相同,在此不多展示。圖4-16紅外發射器4.5藍牙開鎖本設計中,智能鎖通過HC-05藍牙模塊與安卓設備連接,連接后,通過安卓APP輸入密碼即可開鎖,與密碼開鎖部分相同,在此不多展示。安卓設備連接智能鎖如圖4-17。圖4-17藍牙連接成功4.6本章小結在本章中主要介紹了RFID智能鎖硬件部分制作,以及展示了本設計的各個功能的實現,包括了如何使用密碼開鎖、RFID卡片開鎖、紅外遙控開鎖、藍牙開鎖這些開鎖功能的實現;以及RFID卡片的管理、密碼修改功能。?結論通過幾個月的努力,學習了很多單片機開發的知識。在一開始選題時,我還沒意識到這是多么大的一個挑戰,不僅是知識儲備上的挑戰,更是自我管理、自我學習、自我監督能力的挑戰。紙上得來終覺淺,終究是要親自動手做了才知道有多難,在此對這幾個月以來的開發學習進行一個總結。雖然所做的項目并沒做到自己最開始預期的效果,當然作為一個悲觀主義者,在項目開始時,我就做過最壞的打算。在剛開始開發時需要前期自學許多知識,曾一度悔恨為啥自己給自己挖坑,但是事已至此覆水難收,雖然這是一個難題,但也是對我的挑戰。在項目開發其中,我有過犯過許多錯誤,比如在焊接過程中,由于自己沒有看清楚元器件,導致我一個10KΩ的排阻焊接反了,后續雖然使用吸焊器將排阻拆下來,但是由于焊接錫點粘住了銅座,導致銅座也被錫焊器一起吸了下來。沒有銅座,讓接下來的焊接十分困難、無論點多少錫都沒有辦法焊在洞洞板上,最后智能在電烙鐵低溫狀態時焊接,其過程十分令人心煩。然而心煩沒有任何幫助,在有了這次教訓以后、焊接中沒再出過什么大問題。還有在燒錄程序過程中,剛開始時我在單片機上焊了接口進行燒錄,剛開始使用了一個串口轉usb的模塊嘗試燒錄程序,但是多次燒錄失敗,我檢查了焊點并沒問題,實在找不到原因我才打算更換另一種燒錄方式。然后我使用了一個成品燒錄下載板,才成功燒錄。但是禍不單行,由于設計中使用了排針和母座可以將主要元器件進行插拔方便調試,在STC燒錄完成后將它插進母座時掰斷了一個引腳,當時沒有多余的元器件,但是引腳斷就無法插進母座的卡口中,好在只有一個引腳斷了,于是靈機一動,將斷了的引腳上焊上了一節從別的元器件上剪下來的引腳才總算解決了。積沙成塔,一點一滴小小的錯誤解決完堆積成一個沙丘,當我犯過各種各樣的錯誤后才能不犯錯誤、少犯錯誤,每一次失敗都是為后來做鋪墊,我不會氣餒,下一次也會抱著這種心態繼續努力,只要成功了,我的付出就是值得的。參考文獻[1]李成淵.射頻識別技術的應用與發展研究[J].無線互聯科技,2016(20):146-148.[2]陸鋅渤.淺析射頻識別技術[J].中國新通信,2018,20(1):67-68.[3]RFID行業前沿資訊.RFID工作原理(圖)及標簽分類(按供電方式)[OL],/s/blog_6857047c0101cg5t.html,2013.[4]李洪明.漫談紅外遙控[J].電子世界,2000(01):53.[5]吳媛媛,葉茂森.紅外遙控技術淺析[J].廣西輕工業,2009(01):72-73.[6]譚浩強.C程序設計(第四版):清華大學出版社,2010年:7-10致謝幾個月來,在畢業設計的選題、開題、開發等等過程中,終于感受到了大學終于要結束了,這是我作為學生完成的最后一樣作業,雖然不夠完美,但已經是我能交出的最好的答卷。在幾個月里的時間里,很感謝劉翠蓮導師對我的指導,特別是在開題報告的撰寫內容與格式的指導上,以及中期報告的完成乃至最后的論文的確定都提供了莫大的幫助。非常感謝劉老師這幾個月來的辛勤付出,每次學校的通知安排總是第一時間告知我們,獻上感激之情與尊敬之意。也辛苦導師不厭其煩的為我審批、訂正。也要感謝老師容忍我總是“拖后腿”,跟不上其他同學的進度。同時也要感謝我電子工程專業的同學,在開發過程中為我提供的指導與幫助。為我犧牲自己的學習時間,拖慢了自己的論文進度,在此向她致謝。

ExcelXP的八則快速輸入技巧如果我們在用ExcelXP處理龐大的數據信息時,不注意講究技巧和方法的話,很可能會花費很大的精力。因此如何巧用ExcelXP,來快速輸入信息就成為各個ExcelXP用戶非常關心的話題,筆者向大家介紹幾則這方面的小技巧。1、快速輸入大量含小數點的數字如果我們需要在ExcelXP工作表中輸入大量的帶有小數位的數字時,按照普通的輸入方法,我們可能按照數字原樣大小直接輸入,例如現在要在單元格中輸入0.05這個數字時,我們會把“0.05”原樣輸入到表格中。不過如果需要輸入若干個帶有小數點的數字時,我們再按照上面的方法輸入的話,每次輸入數字時都需要重復輸入小數點,這樣工作量會變大,輸入效率會降低。其實,我們可以使用ExcelXP中的小數點自動定位功能,讓所有數字的小數點自動定位,從而快速提高輸入速度。在使用小數點自動定位功能時,我們可以先在ExcelXP的編輯界面中,用鼠標依次單擊“工具”/“選項”/“編輯”標簽,在彈出的對話框中選中“自動設置小數點”復選框,然后在“位數”微調編輯框中鍵入需要顯示在小數點右面的位數就可以了。以后我們再輸入帶有小數點的數字時,直接輸入數字,而小數點將在回車鍵后自動進行定位。例如,我們要在某單元格中鍵入0.06的話,可以在上面的設置中,讓“位數”選項為2,然后直接在指定單元格中輸入6,回車以后,該單元格的數字自動變為“0.06”,怎么樣簡單吧?2、快速錄入文本文件中的內容現在您手邊假如有一些以純文本格式儲存的文件,如果此時您需要將這些數據制作成ExcelXP的工作表,那該怎么辦呢?重新輸入一遍,大概只有頭腦有毛病的人才會這樣做;將菜單上的數據一個個復制/粘貼到工作表中,也需花很多時間。沒關系!您只要在ExcelXP中巧妙使用其中的文本文件導入功能,就可以大大減輕需要重新輸入或者需要不斷復制、粘貼的巨大工作量了。使用該功能時,您只要在ExcelXP編輯區中,依次用鼠標單擊菜單欄中的“數據/獲取外部數據/導入文本文件”命令,然后在導入文本會話窗口選擇要導入的文本文件,再按下“導入”鈕以后,程序會彈出一個文本導入向導對話框,您只要按照向導的提示進行操作,就可以把以文本格式的數據轉換成工作表的格式了。3、快速輸入大量相同數據如果你希望在不同的單元格中輸入大量相同的數據信息,那么你不必逐個單元格一個一個地輸入,那樣需要花費好長時間,而且還比較容易出錯。你可以通過下面的操作方法在多個相鄰或不相鄰的單元格中快速填充同一個數據,具體方法為:首先同時選中需要填充數據的單元格。若某些單元格不相鄰,可在按住Ctrl鍵的同時,點擊鼠標左鍵,逐個選中;其次輸入要填充的某個數據。按住Ctrl鍵的同時,按回車鍵,則剛才選中的所有單元格同時填入該數據。4、快速進行中英文輸入法切換一張工作表常常會既包含有數字信息,又包含有文字信息,要錄入這樣一種工作表就需要我們不斷地在中英文之間反復切換輸入法,非常麻煩,為了方便操作,我們可以用以下方法實現自動切換:首先用鼠標選中需要輸入中文的單元格區域,然后在輸入法菜單中選擇一個合適的中文輸入法;接著打開“有效數據”對話框,選中“IME模式”標簽,在“模式”框中選擇打開,單擊“確定”按鈕;然后再選中輸入數字的單元格區域,在“有效數據”對話框中,單擊“IME模式”選項卡,在“模式”框中選擇關閉(英文模式);最后單擊“確定”按鈕,這樣用鼠標分別在剛才設定的兩列中選中單元格,五筆和英文輸入方式就可以相互切換了。5、快速刪除工作表中空行刪除ExcelXP工作表中的空行,一般的方法是需要將空行都找出來,然后逐行刪除,但這樣做操作量非常大,很不方便。那么如何才能減輕刪除工作表中空行的工作量呢?您可以使用下面的操作方法來進行刪除:首先打開要刪除空行的工作表,在打開的工作表中用鼠標單擊菜單欄中的“插入”菜單項,并從下拉菜單中選擇“列”,從而插入一新的列X,在X列中順序填入整數;然后根據其他任何一列將表中的行排序,使所有空行都集中到表的底部。刪去所有空行中X列的數據,以X列重新排序,然后刪去X列。按照這樣的刪除方法,無論工作表中包含多少空行,您就可以很快地刪除了。6、快速對不同單元格中字號進行調整在使用ExcelXP編輯文件時,常常需要將某一列的寬度固定,但由于該列各單元格中的字符數目不等,致使有的單元格中的內容不能完全顯示在屏幕上,為了讓這些單元格中的數據都顯示在屏幕上,就不得不對這些單元格重新定義較小的字號。如果依次對這些單元格中的字號調整的話,工作量將會變得很大。其實,您可以采用下面的方法來減輕字號調整的工作量:首先新建或打開一個工作簿,并選中需要ExcelXP根據單元格的寬度調整字號的單元格區域;其次單擊用鼠標依次單擊菜單欄中的“格式”/“單元格”/“對齊”標簽,在“文本控制”下選中“縮小字體填充”復選框,并單擊“確定”按鈕;此后,當你在這些單元格中輸入數據時,如果輸入的數據長度超過了單元格的寬度,ExcelXP能夠自動縮小字符的大小把數據調整到與列寬一致,以使數據全部顯示在單元格中。如果你對這些單元格的列寬進行了更改,則字符可自動增大或縮小字號,以適應新的單元格列寬,但是對這些單元格原設置的字體字號大小則保持不變。7、快速輸入多個重復數據在使用ExcelXP工作表的過程中,我們經常要輸入大量重復的數據,如果依次輸入,無疑工作量是巨大的。現在我們可以借助ExcelXP的“宏”功能,來記錄首次輸入需要重復輸入的數據的命令和過程,然后將這些命令和過程賦值到一個組合鍵或工具欄的按鈕上,當按下組合鍵時,計算機就會重復所記錄的操作。使用宏功能時,我們可以按照以下步驟進行操作:首先打開工作表,在工作表中選中要進行操作的單元格;接著再用鼠標單擊菜單欄中的“工具”菜單項,并從彈出的下拉菜單中選擇“宏”子菜單項,并從隨后彈出的下級菜單中選擇“錄制新宏”命令;設定好宏后,我們就可以對指定的單元格,進行各種操作,程序將自動對所進行的各方面操作記錄復制。8、快速處理多個工作表有時我們需要在ExcelXP中打開多個工作表來進行編輯,但無論打開多少工作表,在某一時刻我們只能對一個工作表進行編輯,編輯好了以后再依次編輯下一個工作表,如果真是這樣操作的話,我們倒沒有這個必要同時打開多個工作表了,因為我們同時打開多個工作表的目的就是要減輕處理多個工作表的工作量的,那么我們該如何實現這樣的操作呢?您可采用以下方法:首先按住“Shift"鍵或“Ctrl"鍵并配以鼠標操作,在工作簿底部選擇多個彼此相鄰或不相鄰的工作表標簽,然后就可以對其實行多方面的批量處理;接著在選中的工作表標簽上按右鍵彈出快捷菜單,進行插入和刪除多個工作表的操作;然后在“文件”菜單中選擇“頁面設置……”,將選中的多個工作表設成相同的頁面模式;再通過“編輯”菜單中的有關選項,在多個工作表范圍內進行查找、替換、定位操作;通過“格式”菜單中的有關選項,將選中的多個工作表的行、列、單元格設成相同的樣式以及進行一次性全部隱藏操作;接著在“工具”菜單中選擇“選項……”,在彈出的菜單中選擇“視窗”和“編輯”按鈕,將選中的工作表設成相同的視窗樣式和單元格編輯屬性;最后選中上述工作表集合中任何一個工作表,并在其上完成我們所需要的表格,則其它工作表在相同的位置也同時生成了格式完全相同的表格。高效辦公Excel排序方法"集中營"排序是數據處理中的經常性工作,Excel排序有序數計算(類似成績統計中的名次)和數據重排兩類。本文以幾個車間的產值和名稱為例,介紹Excel2000/XP的數據排序方法。一、數值排序1.RANK函數RANK函數是Excel計算序數的主要工具,它的語法為:RANK(number,ref,order),其中number為參與計算的數字或含有數字的單元格,ref是對參與計算的數字單元格區域的絕對引用,order是用來說明排序方式的數字(如果order為零或省略,則以降序方式給出結果,反之按升序方式)。例如圖1中E2、E3、E4單元格存放一季度的總產值,計算各車間產值排名的方法是:在F2單元格內輸入公式“=RANK(E2,$E$2:$E$4)”,敲回車即可計算出鑄造車間的產值排名是2。再將F2中的公式復制到剪貼板,選中F3、F4單元格按Ctrl+V,就能計算出其余兩個車間的產值排名為3和1。如果B1單元格中輸入的公式為“=RANK(E2,$E$2:$E$4,1)”,則計算出的序數按升序方式排列,即2、1和3。需要注意的是:相同數值用RANK函數計算得到的序數(名次)相同,但會導致后續數字的序數空缺。假如上例中F2單元格存放的數值與F3相同,則按本法計算出的排名分別是3、3和1(降序時)。2.COUNTIF函數COUNTIF函數可以統計某一區域中符合條件的單元格數目,它的語法為COUNTIF(range,criteria)。其中range為參與統計的單元格區域,criteria是以數字、表達式或文本形式定義的條件。其中數字可以直接寫入,表達式和文本必須加引號。仍以圖1為例,F2單元格內輸入的公式為“=COUNTIF($E$2:$E$4,">"&E2)+1”。計算各車間產值排名的方法同上,結果也完全相同,2、1和3。此公式的計算過程是這樣的:首先根據E2單元格內的數值,在連接符&的作用下產生一個邏輯表達式,即“>176.7”、“>167.3”等。COUNTIF函數計算出引用區域內符合條件的單元格數量,該結果加一即可得到該數值的名次。很顯然,利用上述方法得到的是降序排列的名次,對重復數據計算得到的結果與RANK3.IF函數Excel自身帶有排序功能,可使數據以降序或升序方式重新排列。如果將它與IF函數結合,可以計算出沒有空缺的排名。以圖1中E2、E3、E4單元格的產值排序為例,具體做法是:選中E2單元格,根據排序需要,單擊Excel工具欄中的“降序排序”或“升序排序”按鈕,即可使工作表中的所有數據按要求重新排列。假如數據是按產值由大到小(降序)排列的,而您又想賦予每個車間從1到n(n為自然數)的排名。可以在G2單元格中輸入1,然后在G3單元格中輸入公式“=IF(E3=E2,G3,G3+1)”,只要將公式復制到G4等單元格,就可以計算出其他車間的產值排名。二、文本排序選舉等場合需要按姓氏筆劃為文本排序,Excel提供了比較好的解決辦法。如果您要將圖1數據表按車間名稱的筆劃排序,可以使用以下方法:選中排序關鍵字所在列(或行)的首個單元格(如圖1中的A1),單擊Excel“數據”菜單下的“排序”命令,再單擊其中的“選項”按鈕。選中“排序選項”對話框“方法”下的“筆畫排序”,再根據數據排列方向選擇“按行排序”或“按列排序”,“確定”后回到“排序”對話框(圖2)。如果您的數據帶有標題行(如圖1中的“單位”之類),則應選中“有標題行”(反之不選),然后打開“主要關鍵字”下拉列表,選擇其中的“單位”,選中排序方式(“升序”或“降序”)后“確定”,表中的所有數據就會據此重新排列。此法稍加變通即可用于“第一名”、“第二名”等文本排序,請讀者自行摸索。三、自定義排序如果您要求Excel按照“金工車間”、“鑄造車間”和“維修車間”的特定順序重排工作表數據,前面介紹的幾種方法就無能為力了。這類問題可以用定義排序規則的方法解決:首先單擊Excel“工具”菜單下的“選項”命令,打開“選項”對話框中的“自定義序列”選項卡(圖3)。選中左邊“自定義序列”下的“新序列”,光標就會在右邊的“輸入序列”框內閃動,您就可以輸入“金工車間”、“鑄造車間”等自定義序列了,輸入的每個序列之間要用英文逗號分隔,或者每輸入一個序列就敲回車。如果序列已經存在于工作表中,可以選中序列所在的單元格區域單擊“導入”,這些序列就會被自動加入“輸入序列”框。無論采用以上哪種方法,單擊“添加”按鈕即可將序列放入“自定義序列”中備用(圖3)。使用排序規則排序的具體方法與筆劃排序很相似,只是您要打開“排序選項”對話框中的“自定義排序次序”下拉列表,選中前面定義的排序規則,其他選項保持不動。回到“排序”對話框后根據需要選擇“升序”或“降序”,“確定”后即可完成數據的自定義排序。需要說明的是:顯示在“自定義序列”選項卡中的序列(如一、二、三等),均可按以上方法參與排序,請讀者注意Excel提供的自定義序列類型。談談Excel輸入的技巧在Excel工作表的單元格中,可以使用兩種最基本的數據格式:常數和公式。常數是指文字、數字、日期和時間等數據,還可以包括邏輯值和錯誤值,每種數據都有它特定的格式和輸入方法,為了使用戶對輸入數據有一個明確的認識,有必要來介紹一下在Excel中輸入各種類型數據的方法和技巧。一、輸入文本Excel單元格中的文本包括任何中西文文字或字母以及數字、空格和非數字字符的組合,每個單元格中最多可容納32000個字符數。雖然在Excel中輸入文本和在其它應用程序中沒有什么本質區別,但是還是有一些差異,比如我們在Word、PowerPoint的表格中,當在單元格中輸入文本后,按回車鍵表示一個段落的結束,光標會自動移到本單元格中下一段落的開頭,在Excel的單元格中輸入文本時,按一下回車鍵卻表示結束當前單元格的輸入,光標會自動移到當前單元格的下一個單元格,出現這種情況時,如果你是想在單元格中分行,則必須在單元格中輸入硬回車,即按住Alt鍵的同時按回車鍵。二、輸入分數幾乎在所有的文檔中,分數格式通常用一道斜杠來分界分子與分母,其格式為“分子/分母”,在Excel中日期的輸入方法也是用斜杠來區分年月日的,比如在單元格中輸入“1/2”,按回車鍵則顯示“1月2日”,為了避免將輸入的分數與日期混淆,我們在單元格中輸入分數時,要在分數前輸入“0”(零)以示區別,并且在“0”和分子之間要有一個空格隔開,比如我們在輸入1/2時,則應該輸入“01/2”。如果在單元格中輸入“81/2”,則在單元格中顯示“81/2”,而在編輯欄中顯示“三、輸入負數在單元格中輸入負數時,可在負數前輸入“-”作標識,也可將數字置在()括號內來標識,比如在單元格中輸入“(88)”,按一下回車鍵,則會自動顯示為“-88”。四、輸入小數

溫馨提示

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

評論

0/150

提交評論