【《基于52單片機(jī)的自動(dòng)IC卡供水裝置設(shè)計(jì)》8800字】_第1頁
【《基于52單片機(jī)的自動(dòng)IC卡供水裝置設(shè)計(jì)》8800字】_第2頁
【《基于52單片機(jī)的自動(dòng)IC卡供水裝置設(shè)計(jì)》8800字】_第3頁
【《基于52單片機(jī)的自動(dòng)IC卡供水裝置設(shè)計(jì)》8800字】_第4頁
【《基于52單片機(jī)的自動(dòng)IC卡供水裝置設(shè)計(jì)》8800字】_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

緒論課題研究背景與現(xiàn)狀我國是世界上人口最多的國家之一,而我國的用水量也排再世界用水量的前幾,所以我國正面臨著淡水資源短缺的重要問題,解決水資源短缺有兩種方法,一種是通過宣傳節(jié)約用水,加強(qiáng)環(huán)境保護(hù),來保障水資源安全,減少人為浪費(fèi),二是通過加強(qiáng)管理手段,來實(shí)現(xiàn)淡水資源的合理分配和淡水資源的平衡供給,所以為了解決我國水資源的短缺問題,早在在二十一世紀(jì)初黨和國家就提出了要建設(shè)一個(gè)完善的供水系統(tǒng),而由于在當(dāng)時(shí)技術(shù)手段的限制,我國居民的自來水供給檢測(cè)統(tǒng)計(jì),都是通過查水表的方式來進(jìn)行用水量的統(tǒng)計(jì)的,而這種傳統(tǒng)的抄表計(jì)費(fèi)手段太過繁瑣,而且由于全程都是人為操作,不僅浪費(fèi)大量的人力物力,而且存在太多的可操作性,一旦出現(xiàn)差錯(cuò),很難追究到問題所在。但是隨著科技的進(jìn)步和發(fā)展,尤其是電子技術(shù)的進(jìn)步,已經(jīng)開始出現(xiàn)各類新型的檢測(cè)計(jì)費(fèi)模式,不僅簡便而且公正公平,如IC卡識(shí)別的方法,這種方式尤其是校園已經(jīng)開始廣泛應(yīng)用,打卡取水,用多少取多少,取水簡單快捷,也減少了大量的浪費(fèi),本設(shè)計(jì)作為一款基于51單片機(jī)和RFID技術(shù)的新型IC卡取水計(jì)費(fèi)系統(tǒng),具有自動(dòng)計(jì)費(fèi)計(jì)量,顯示報(bào)警,自動(dòng)控制的優(yōu)點(diǎn),解決了傳統(tǒng)抄表計(jì)費(fèi)的繁瑣方式,而且系統(tǒng)管理較為方便,具有較好的設(shè)計(jì)意義。供水計(jì)費(fèi)裝置的發(fā)展經(jīng)歷很多個(gè)階段,首先在上個(gè)世紀(jì)就廣泛應(yīng)用的傳統(tǒng)機(jī)械計(jì)費(fèi)水表,其通過水的轉(zhuǎn)動(dòng)帶動(dòng)水表轉(zhuǎn)動(dòng)來達(dá)到計(jì)費(fèi)的目的,而這種水表精度低,事故率高,一旦裝上,很難進(jìn)行更改,而且沒有無線通信功能,對(duì)于供水人員來說,無論是計(jì)費(fèi)統(tǒng)計(jì),還是維修管理都極其繁瑣,隨著科技的發(fā)展,為了方便供水管理,國外開始出現(xiàn)智能電子水表,其具有遠(yuǎn)程通信功能,可以將計(jì)費(fèi)計(jì)量數(shù)據(jù)進(jìn)行傳輸,方便管理者進(jìn)行統(tǒng)計(jì)管理,而近些年開始廣泛應(yīng)用的IC卡取水系統(tǒng),也是智能水表的一種新型檢測(cè)方式,雖然國內(nèi)的供水計(jì)費(fèi)系統(tǒng)起步較晚,但是發(fā)展較快,我國各地的供水管理者都在進(jìn)行技術(shù)革新,如上海自來水廠,已經(jīng)開始使用新型智能網(wǎng)絡(luò)供水管理系統(tǒng),所有供水設(shè)備全部聯(lián)網(wǎng),統(tǒng)一管理控制,用戶取水自動(dòng)扣費(fèi),取得了很好的使用效果。設(shè)計(jì)內(nèi)容針對(duì)用水問題,本文設(shè)計(jì)了一種完善的供水系統(tǒng),本文利用STC89C52單片機(jī)控制器、RFID-RC522模塊、水流量模塊、按鍵、LCD1602液晶、蜂鳴器、繼電器、電磁閥、指示燈設(shè)計(jì)了一款自動(dòng)IC供水系統(tǒng),該系統(tǒng)是以STC89C52單片機(jī)為系統(tǒng)的核心控制器,實(shí)現(xiàn)了IC卡識(shí)別進(jìn)行自動(dòng)供水,具有自動(dòng)計(jì)費(fèi)計(jì)量,顯示報(bào)警,自動(dòng)控制的優(yōu)點(diǎn),相比于以往的抄表計(jì)費(fèi)方式,本文設(shè)計(jì)的供水系統(tǒng)不僅計(jì)費(fèi)效率高,而且節(jié)約了大量的人力物力,避免了以往抄表計(jì)費(fèi)的繁瑣方式。系統(tǒng)設(shè)計(jì)本次設(shè)計(jì)的自動(dòng)IC供水系統(tǒng)主要有以下幾個(gè)部分組成:STC89C52單片機(jī)控制器、RFID-RC522模塊、水流量模塊、按鍵、LCD1602液晶、蜂鳴器、繼電器、電磁閥、指示燈以及電源。其中STC89C52單片機(jī)為系統(tǒng)的核心控制器,通過水流量模塊來實(shí)現(xiàn)用水量的統(tǒng)計(jì),利用RFID-RC522模塊進(jìn)行用水的控制和數(shù)據(jù)記錄進(jìn)行扣費(fèi)。LCD1602液晶來顯示信息,顯示水流量和IC計(jì)費(fèi)信息等,蜂鳴器進(jìn)行聲音提示,繼電器實(shí)現(xiàn)對(duì)電磁閥的開合控制,保證供水功能正常。系統(tǒng)模塊圖如圖2-1所示。圖2-1整體的設(shè)計(jì)框圖單片機(jī)選型方案一:分析本次設(shè)計(jì)需要實(shí)現(xiàn)的功能,發(fā)現(xiàn)STC89C52單片機(jī)可以滿足要求。“STC89C52單片機(jī)是Intel推出的一款MCS-51系列的基本產(chǎn)品,是8位單片機(jī),STC89C52單片機(jī)是基于MCS-51系列的指令系統(tǒng)和結(jié)構(gòu),可以完全兼容MCS-51的。STC89C52單片機(jī)采用了CMOS的高密技術(shù),具有低功耗的特點(diǎn)[1]”。與傳統(tǒng)的89C51單片機(jī)相比,STC89C52單片機(jī)是一款增強(qiáng)型單片機(jī)。方案二:還可以選擇選擇PIC系列單片機(jī),這是一家非常具有實(shí)力的半導(dǎo)體公司,PIC單片機(jī)的抗干擾性被許多的電子行業(yè)所看中,早期的PIC單片機(jī)是由匯編語言開發(fā),匯編指令比較適合做底層開發(fā),這種精簡指令集現(xiàn)在在開發(fā)中運(yùn)用慢慢變少。但是PIC單片機(jī)價(jià)格偏高,和其他的單片機(jī)相比,性價(jià)比較低。比較兩個(gè)方案,兩個(gè)單片機(jī)都可以滿足本次設(shè)計(jì)的需求,可以實(shí)現(xiàn)自動(dòng)供水的功能,考慮開發(fā)難度和芯片的價(jià)格還是選擇的是利用STC89C52最為本次的控制核心。顯示器的選型方案一:“選擇使用LCD1602液晶,LCD1602是一種字符型液晶顯示模塊??梢燥@示16*2個(gè)字符[2]”。LCD1602的驅(qū)動(dòng)程序也更為簡單,可以直接控制單片機(jī)將相應(yīng)的數(shù)字、英文等字符通過數(shù)據(jù)口發(fā)送至液晶控制IC,這種顯示屏的價(jià)格便宜,深受電子開發(fā)人員的喜愛。但是LCD1602顯示屏只能顯示一些字符,并不能更新和加載字庫。雖然顯示的內(nèi)容比較單一。但是可以靠數(shù)字和英文字母表達(dá)想要顯示的結(jié)果,因此選用LCD1602液晶屏作為該設(shè)計(jì)的顯示器件。方案二:選用四位數(shù)碼管來進(jìn)行時(shí)間和分?jǐn)?shù)的顯示數(shù)碼管顯示的原理簡單,每個(gè)數(shù)碼管的內(nèi)部都是有LED組成,將單個(gè)數(shù)碼管的段選對(duì)應(yīng)的LED燈分別為a,b,c,d,e,f,g,dp,將這些LED燈對(duì)應(yīng)連接在一起,公共極則相互獨(dú)立。在對(duì)數(shù)碼管控制時(shí)分別控制不同的位選線來控制單個(gè)數(shù)碼管的顯示。以很快的速度進(jìn)行刷新顯示,可達(dá)到四個(gè)數(shù)碼管同時(shí)顯示的效果。另外數(shù)碼管的成本也很低,數(shù)碼管種類繁多,有很多選擇。但是數(shù)碼管顯示的內(nèi)容比較單一,不能準(zhǔn)確的顯示出要表達(dá)的信息。對(duì)比這兩個(gè)方案,發(fā)現(xiàn)雖然數(shù)碼管成本低,但是為了更好的顯示出需要表達(dá)的信息,所以最終選擇了第一個(gè)方案。硬件系統(tǒng)設(shè)計(jì)本設(shè)計(jì)中所用的到的硬件主要STC89C52單片機(jī)、RFID-RC522模塊、水流量模塊、按鍵、LCD1602液晶、蜂鳴器、繼電器、以及電源。這個(gè)模塊的正常工作,是保證整體系統(tǒng)的順利運(yùn)行的前提。每各模塊都起到了不同的作用,保證系統(tǒng)的完整性。下面對(duì)各個(gè)硬件電路進(jìn)行詳細(xì)的說明。STC89C52介紹單片機(jī)就是單片微型計(jì)算機(jī),單片機(jī)就是利用外圍電路(包括各種外圍傳感器)收集外界非電信號(hào),通過中央處理器(CPU)進(jìn)行信號(hào)處理,并輸出相應(yīng)執(zhí)行指令?!癝TC89C52單片機(jī)作為一個(gè)一種低功耗、高性能CMOS8位微控制器,具有以8k字節(jié)Flash,內(nèi)置4KBEEPROM,MAX810復(fù)位電路,看門狗定時(shí)器,512字節(jié)RAM,32位I/O口線,3個(gè)16位定時(shí)器/計(jì)數(shù)器,4個(gè)外部中斷,豐富的全雙工串行口[3]”。STC89C52芯片引腳如下圖3-1所示。圖3-1STC89C52單片機(jī)引腳圖時(shí)鐘電路時(shí)鐘電路作為單片機(jī)的重要組成部分,一般是由晶振和電容組合而成。其工作原理主要為晶振提供時(shí)鐘振蕩給單片機(jī),其中晶振常選擇11.0592MHZ和12MHZ的無源晶振、電容的大小為20pf-40pf。晶振的兩端分別與單片機(jī)的XTAL1和XTAL2引腳相連。單片機(jī)的時(shí)鐘電路就是一個(gè)振蕩器給單片機(jī)芯片一個(gè)時(shí)鐘節(jié)拍,單片機(jī)執(zhí)行指令需要根據(jù)時(shí)鐘電路產(chǎn)生的節(jié)拍進(jìn)行。單片機(jī)的時(shí)鐘電路如圖3-2所示。圖3-2時(shí)鐘電路復(fù)位電路復(fù)位電路是單片機(jī)最小系統(tǒng)中重要的一部分,外界輸入電源通過限流電阻給電容充電,當(dāng)電容兩端電壓逐漸接近電源電壓VCC,低于電源電壓VCC時(shí)供電芯片復(fù)位引腳出現(xiàn)近似低電平,相當(dāng)于芯片對(duì)外復(fù)位,接近電源電壓VCC時(shí)芯片復(fù)位引腳出現(xiàn)近似高電平,相當(dāng)于芯片對(duì)外終止復(fù)位,這樣一個(gè)復(fù)位周期完成。復(fù)位電路如下圖3-3所示。圖3-3復(fù)位電路IC卡識(shí)別電路設(shè)計(jì)本次自動(dòng)供水系統(tǒng)中,對(duì)于RFID射頻模塊采用的是RFID-RC522,RFID-RC522作為讀卡電路,成本低,設(shè)計(jì)簡單。RFID-RC522模塊供電為+3.3V,具有SPI接口,與單片機(jī)連接,可以通過SPI接口和單片機(jī)進(jìn)行數(shù)據(jù)通信。RFID-RC522利用調(diào)制解調(diào)實(shí)現(xiàn)數(shù)據(jù)的準(zhǔn)確讀寫,RFID-RC522的雙向數(shù)據(jù)傳輸速率可以達(dá)到424kbit/s。RFID-RC522模塊電路圖如下圖3-4所示。圖3-4RFID-RC522模塊電路圖水閥控制電路本次IC自動(dòng)供水系統(tǒng)的水閥開關(guān)是由繼電器和電磁閥來實(shí)現(xiàn),繼電器實(shí)現(xiàn)了電磁閥供電的通斷。繼電器使用的是+5V直流繼電器,由于單片機(jī)的IO口驅(qū)動(dòng)能力有限,可以選擇三極管來進(jìn)行驅(qū)動(dòng)。三極管共有三個(gè)引腳,分別為基極、集電極、發(fā)射機(jī)。使用一個(gè)1K的電阻對(duì)三級(jí)管的基極進(jìn)行限流?;鶚O通過電阻接單片機(jī)的P36引腳。當(dāng)P36引腳為低電平時(shí),三極管的集電極和發(fā)射機(jī)導(dǎo)通,從而是線圈通電吸合。當(dāng)P36引腳為低高電平,繼電器線圈失電斷開。水閥控制電路如下圖3-5所示。圖3-5水閥控制電路圖水流檢測(cè)電路本次自動(dòng)IC供水系統(tǒng)中具有水流量檢測(cè)的功能,該功能是根據(jù)霍爾效應(yīng)實(shí)現(xiàn),水流傳感器是由水流帶動(dòng)渦輪,從而產(chǎn)生脈沖實(shí)現(xiàn)。由于渦輪轉(zhuǎn)動(dòng),在垂直于電流方向施加磁場,使金屬薄片的兩端出現(xiàn)電位差,從而產(chǎn)生霍爾效應(yīng)。當(dāng)電機(jī)轉(zhuǎn)動(dòng)帶動(dòng)小磁鐵,每當(dāng)經(jīng)過霍爾元件就可以產(chǎn)生脈沖,單片機(jī)根據(jù)該脈沖就能實(shí)現(xiàn)轉(zhuǎn)速的大小?;魻杺鞲衅鞴灿腥齻€(gè)引腳,分別為VCC、GND和信號(hào)引腳,信號(hào)引腳接單片機(jī)的外部中斷1引腳。電路如下圖3-6所示。圖3-6水流檢測(cè)電路圖顯示電路設(shè)計(jì)LCD1602模塊共有16個(gè)引腳,分別為供電的引腳VCC和GND,供電的電平范圍為5V-3.3V,其內(nèi)部自帶負(fù)壓電路,無需負(fù)壓,D0到D8為LCD的數(shù)據(jù)傳輸接口,V0為LCD的驅(qū)動(dòng)電壓輸入端,RS為一個(gè)指令還是數(shù)據(jù)的選擇引腳,當(dāng)將RS拉高時(shí),LCD模塊進(jìn)入指令控制選擇模式,RS引腳拉低時(shí),LCD模塊進(jìn)入數(shù)據(jù)控制選擇模式。R/W引腳是讀寫控制引腳,A、K引腳為背光電源的正負(fù),可以用于調(diào)整背光亮度,在本設(shè)計(jì)中無需調(diào)節(jié),所以直接接入VCC和GND供電即可。如下圖3-7為LCD1602顯示模塊的引腳連接電路圖:圖3-7顯示電路圖蜂鳴器電路本次對(duì)于聲音提示采用了蜂鳴器來實(shí)現(xiàn),由于單片機(jī)的IO口輸出電流較小,一般不采用單片機(jī)IO口直接驅(qū)動(dòng)的方法。通常采用三極管進(jìn)行驅(qū)動(dòng),本次系統(tǒng)中采用8550三極管,8550三級(jí)管的引腳為基極,發(fā)射極和集電極。使用一個(gè)2K的限流電阻和單片機(jī)的P24腳相連,來控制三級(jí)管的基極。三級(jí)管的發(fā)射極和電源相連,集電極和蜂鳴器正極相連,然后再將蜂鳴器的負(fù)極接地。如果三級(jí)管的基極為低,此時(shí)三級(jí)管為導(dǎo)通狀態(tài),蜂鳴器的正極就和電源接通。蜂鳴器通電就可以發(fā)出警報(bào),來提示用戶水量不足。如圖3-9所示是蜂鳴器電路設(shè)計(jì)。圖3-9蜂鳴器報(bào)警電路圖軟件系統(tǒng)設(shè)計(jì)開發(fā)環(huán)境簡介本次系統(tǒng)的軟件設(shè)計(jì)主要是對(duì)于程序的編寫,程序的編寫是在KEIL4軟件平臺(tái)進(jìn)行,KEIL軟件具有豐富的函數(shù)庫,并且集成了各種調(diào)試的小工具。還能通過軟件實(shí)現(xiàn)邏輯分析儀的使用,可以通過波形觀察時(shí)序情況,為了設(shè)計(jì)提供了便捷的功能。本次系統(tǒng)在軟件設(shè)計(jì)時(shí),有一個(gè)重要的方式就是通過流程圖表現(xiàn)出來程序的運(yùn)行邏輯。KEIL4界面如下圖4-1所示。圖4-1程序編輯界面圖系統(tǒng)運(yùn)行程序流程圖系統(tǒng)通電之后,對(duì)單片機(jī)的IO口引腳、定時(shí)器和串口等進(jìn)行初始化。初始化時(shí),其中各個(gè)模塊也要進(jìn)行初始狀態(tài)的設(shè)置。當(dāng)初始化完成后,系統(tǒng)會(huì)先進(jìn)行按鍵掃描,判斷是否有按鍵按下,如果有,則對(duì)按鍵作出相應(yīng)的處理。再進(jìn)行IC卡讀取讀取,當(dāng)有IC靠近時(shí),讀取出IC卡里面的數(shù)據(jù),IC卡滿足用水條件,則繼電器吸合,是電磁閥吸合,從而讓水閥打開,開始供水,同時(shí)蜂鳴器進(jìn)行聲音提示,在用水器件LCD1602液晶對(duì)IC的數(shù)據(jù)和水流量等信息進(jìn)行顯示,系統(tǒng)的主程序工作流程圖如下圖4-2所示。圖4-2系統(tǒng)運(yùn)行流程圖按鍵消抖子程序流程圖本次設(shè)計(jì)的自動(dòng)IC供水系統(tǒng)中,對(duì)于按鍵消抖問題,本次設(shè)計(jì)選擇的是軟件消抖,通過在程序中添加延時(shí),達(dá)到按鍵消抖的目的。在系統(tǒng)上電運(yùn)行后,首先進(jìn)行按鍵掃描,判斷是否有按鍵按下,如果檢測(cè)到有按鍵按下先不進(jìn)行處理,程序延時(shí)10ms,之后再次判斷按鍵狀態(tài),如果仍檢測(cè)到按鍵按下,確定按鍵按下,再進(jìn)行對(duì)應(yīng)的任務(wù)處理函數(shù)。按鍵子程序流程圖如下圖所示4-3所示。圖4-3按鍵消抖處理流程圖液晶顯示程序本設(shè)計(jì)的自動(dòng)IC供水系統(tǒng)使用LCD1602液晶來作為顯示器,先調(diào)用初始化函數(shù),初始化函數(shù)中進(jìn)行的操作包括通過寫數(shù)據(jù)子令函數(shù)設(shè)置光標(biāo)的位置和移動(dòng)方向,設(shè)置輸入方式等基礎(chǔ)的初始化操作,然后將地址指針指向00H進(jìn)行清屏,再調(diào)用顯示函數(shù),設(shè)置數(shù)據(jù)寫操作,同步地址,然后通過并行傳輸,完成想要顯示數(shù)據(jù)的傳輸和顯示,即可完成顯示操作。液晶的程序流程如圖4-4所示:圖4-4LCD1602液晶的讀寫流程圖硬件焊接在硬件電路設(shè)計(jì)和軟件設(shè)計(jì)的工作完成后,就可以對(duì)實(shí)際電路進(jìn)行焊接,在電路焊接的過程中為了減少后面調(diào)試的工作量和難度,所以要盡可能的減少前面焊接出現(xiàn)的錯(cuò)誤。電路的焊接是電子設(shè)計(jì)人員的基本功。在焊接前對(duì)硬件電路進(jìn)行最終的檢查,確定沒有問題后再進(jìn)行電路焊接。焊接工作,不是將各個(gè)引腳焊接起來就行了,更重要的是要保證系統(tǒng)的穩(wěn)定性。硬件實(shí)物圖如下圖5-1所示。硬件實(shí)物圖如下圖5-1所示硬件調(diào)試(1)電路的檢查完成焊接工作后,進(jìn)行硬件調(diào)試。焊接完成后不要著急給系統(tǒng)供電,先對(duì)焊接的電路連線進(jìn)行檢測(cè),觀察是否有線路連接錯(cuò)誤,尤其注意不要出現(xiàn)電源反接和短路。同時(shí)還要觀察是否有虛焊的情況。小心檢查各個(gè)元?dú)饧沤^元器件沒有焊接好的情況。(2)上電觀察先調(diào)好電源所需要的電壓值,然后給系統(tǒng)上電。在上電之后,如果電路出現(xiàn)了異常情況應(yīng)該立即斷電。如出現(xiàn)元器件發(fā)熱、冒煙等,在找出問題之后再給電路上電。(3)電路調(diào)試調(diào)試過程可以借助萬用表和示波器等工具來進(jìn)行檢測(cè)。可以用萬用表檢測(cè)出線路的導(dǎo)通的情況,先將萬用表打到蜂鳴器檔位,來檢測(cè)電源的正極和負(fù)極是否有短路。再檢測(cè)電源芯片的輸入和輸出端電壓是否正常,確定電源芯片的正常工作。軟件調(diào)試(1)軟件部分調(diào)試軟件在線調(diào)試時(shí),點(diǎn)擊停止運(yùn)行時(shí),會(huì)自動(dòng)跳轉(zhuǎn)到停止運(yùn)行的那一條指令,重復(fù)幾次操作,可以觀察程序進(jìn)入了錯(cuò)誤中斷。當(dāng)程序?qū)崿F(xiàn)所有功能后,就是對(duì)系統(tǒng)進(jìn)行穩(wěn)定性測(cè)試。進(jìn)過長時(shí)間的運(yùn)行,系統(tǒng)正常工作,則表示本次設(shè)計(jì)的實(shí)物制作完成。軟件調(diào)試界面如下圖5-2所示。圖5-2程序調(diào)試界面圖(2)實(shí)物演示在給系統(tǒng)上電后,LCD屏上顯示如圖5-3所示:上面一行顯示為是IC卡的卡號(hào),下面一行顯示的是剩余的水量和IC卡內(nèi)的剩余余額,當(dāng)水量和余額都不為零時(shí),此時(shí)用戶可以使用IC卡取水。圖5-3實(shí)物圖當(dāng)RFID-RC522電路模塊讀取到IC卡的數(shù)據(jù)時(shí),LCD屏上顯示如圖5-4所示:上面一行為IC卡的卡號(hào),下面一行顯示的是剩余的水量和IC卡內(nèi)的剩余余額,此時(shí)IC卡上的余額可以充值到水表里。用戶可以通過按鍵取水,LCD屏上顯示顯示用戶用水的計(jì)費(fèi)。當(dāng)水量不足時(shí),繼電器斷開,水閥關(guān)閉,蜂鳴器開始鳴叫。圖5-4實(shí)物圖總結(jié)生活中用水問題一直備受人們關(guān)注,節(jié)約用水,減少水資源尤其是淡水資源的浪費(fèi),通過加強(qiáng)管理手段,實(shí)現(xiàn)水資源的合理分配和管理來實(shí)現(xiàn)水資源的供給平衡。針對(duì)水資源的合理利用,本次設(shè)計(jì)的自動(dòng)IC供水系統(tǒng)研究完成了硬件電路的設(shè)計(jì),軟件設(shè)計(jì)、和實(shí)物的制作。本文的自動(dòng)IC供水系統(tǒng)的芯片采用的是STC89C52芯片,其他硬件模塊有RFID-RC522模塊、水流量模塊、按鍵、LCD1602液晶、蜂鳴器、繼電器、以及電源。軟件設(shè)計(jì)部分用KELI4進(jìn)行編寫,分為供水模塊、按鍵消抖模塊和LCD顯示屏模塊幾個(gè)模塊。供水模塊編寫的主要是當(dāng)IC卡靠近時(shí),實(shí)現(xiàn)繼電器的吸合,從而是水閥打開,進(jìn)行供水,實(shí)現(xiàn)基本的供水功能。按鍵消抖模塊的編寫主要功能是當(dāng)系統(tǒng)檢測(cè)到按鍵按下時(shí),對(duì)其先不做處理,讓其延時(shí)10ms,再判斷其狀態(tài),實(shí)現(xiàn)一個(gè)簡單的按鍵消抖功能。LCD顯示屏模塊主要實(shí)現(xiàn)了是當(dāng)IC卡靠近RFID-RC522讀卡電路模塊時(shí),單片機(jī)通過SPI接口讀出IC卡的數(shù)據(jù),在LCD屏上進(jìn)行顯示。本次設(shè)計(jì)基本實(shí)現(xiàn)了預(yù)期的功能,系統(tǒng)實(shí)現(xiàn)了自動(dòng)供水的功能,當(dāng)雖然本次設(shè)計(jì)完成了預(yù)期的所有功能,但是本次設(shè)計(jì)的系統(tǒng)也存在一定的問題。其中就包括電源供電的問題。本次的系統(tǒng)采用的是鋰電池供電,本次的設(shè)計(jì)只是驗(yàn)證功能,并沒有注重功耗的問題。為了保證系統(tǒng)長期穩(wěn)定的工作,所以后期還需要對(duì)系統(tǒng)的功耗進(jìn)行適當(dāng)?shù)母倪M(jìn)。參考文獻(xiàn)劉康,吳昕韜,張建青.基于單片機(jī)的IC卡尋回系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].信息技術(shù)與信息化,2021(02):14-15.周喜,王會(huì)珍,趙娟萍.基于RFID技術(shù)的門禁管理系統(tǒng)設(shè)計(jì)[J].科學(xué)技術(shù)創(chuàng)新,2021(03):66-67.陳胡,李宏遠(yuǎn),劉人菊,郝曉曦.自助式人體體征指標(biāo)檢測(cè)系統(tǒng)設(shè)計(jì)[J].新技術(shù)新工藝,2020(12):38-42.周碧茜,王青,范祥祥.基于射頻識(shí)別技術(shù)的垃圾分類訓(xùn)練裝置設(shè)計(jì)[J].湖州師范學(xué)院學(xué)報(bào),2020,42(10):64-69.李濤.基于單片機(jī)和射頻技術(shù)的機(jī)井雙控系統(tǒng)設(shè)計(jì)[J].機(jī)電信息,2020(27):112-113.張馳,何佳嚀,劉譞,何英昊.基于單片機(jī)的RFID主控系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn)[J].電子測(cè)試,2019(23):28-30.趙瑞華,竇占廣,王若鳴,劉冰.基于STM32和IC卡的智能儲(chǔ)物柜的設(shè)計(jì)與開發(fā)[J].中外企業(yè)家,2019(32):113-114.葉冉.基于51單片機(jī)的高低位水箱供水電氣控制系統(tǒng)設(shè)計(jì)[J].機(jī)電信息,2018(15):31-32.王曉東.恒壓供水單片機(jī)控制系統(tǒng)的設(shè)計(jì)[J].數(shù)字技術(shù)與應(yīng)用,2016(02):7-8.劉順,蘇紅蓮.基于單片機(jī)的變頻恒壓供水控制系統(tǒng)設(shè)計(jì)[J].四川水泥,2015(12):148.劉作鵬.基于單片機(jī)技術(shù)對(duì)家用無塔供水系統(tǒng)控制的改進(jìn)設(shè)計(jì)方法研究[J].湖北成人教育學(xué)院學(xué)報(bào),2015,21(06):93-96.吳寧,尚坡利.基于單片機(jī)的企業(yè)恒溫恒壓供水系統(tǒng)的設(shè)計(jì)[J].自動(dòng)化與儀器儀表,2015(10):117-118.附錄原理圖:程序:/********************************************************************************************//IC卡智能水表//應(yīng)用程序C////V2.012017-10-1//MCS-5111.0592MHZC語言//元件:STC89C52,RC522,LCD1602//功能:自動(dòng)供水/顯示計(jì)費(fèi)/水量預(yù)警*********************************************************************************************/#include"reg52.h"#include"main.h"#include"mfrc522.h"#include<intrins.h>//函數(shù)處理頭文件 #include<string.h>//字符串處理頭文件#include<stdio.h>//輸入輸出函數(shù)頭文件/********************************************************************************************///數(shù)值類別typedefsignedcharint8;//typedefunsignedcharuint8;//無符號(hào)8位整型變量typedefsignedintint16;//typedefunsignedintuint16;///********************************************************************************************///定義特殊寄存器sfrwdt_contr=0xe1; //定義看門狗地址sfrisp_data=0xe2; //ISP數(shù)據(jù)寄存器sfrisp_addrh=0xe3; //ISP地址高8位sfrisp_addrl=0xe4; //定義ISP地址低8位sfrisp_cmd=0xe5; //ISP命令模式寄存器sfrisp_trig=0xe6; //定義ISP命令觸發(fā)寄存器sfrisp_contr=0xe7; //定義ISP控制模式寄存器unsignedcharcodedata1[16]={0xC8,0x00,0x00,0x00,0x37,0xFF,0xFF,0xFF,0xC8,0x00,0x00,0x00,0x01,0xFE,0x01,0xFE};//200//M1卡的某一塊寫為如下格式,則該塊為錢包,可接收扣款和充值命令//4字節(jié)金額(低字節(jié)在前)+4字節(jié)金額取反+4字節(jié)金額+1字節(jié)塊地址+1字節(jié)塊地址取反+1字節(jié)塊地址+1字節(jié)塊地址取反unsignedchardata2[4]={0x00,0x00,0x00,0x01};//存值減值金額unsignedcharcodeDefaultKey[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};//密碼unsignedcharTYPE_DATA[2];//類型unsignedcharID_DATA[4];//ID地址unsignedcharvalue_DATA[4];//卡里面的值 unsignedcharg_ucTempbuf[20];//unsignedcharcodedis0[]={"Total:"};unsignedcharcodedis1[]={""};unsignedcharcodedis2[]={"CardID:"};unsignedcharcodedis3[]={"Met:"};unsignedcharcodedis4[]={"Card:"};unsignedcharcodedis6[]={"0123456789ABCDEF"};unsignedinttt=0,keyfalg,falg_pro;unsignedcharmc;uint16tot=0,mon=0,card=0;uint8a=0,b=0,c=0,d=0;/********************************************************************************************///EEPROM驅(qū)動(dòng)開始/**********************************************************************************函數(shù)名稱:eepromEraseSector(uint16address)*功能:EEPROM擦除程序*入口參數(shù):address*出口參數(shù):無**********************************************************************************///擦除片內(nèi)EEPROM的一個(gè)扇區(qū)//擦除只能以扇區(qū)為最小單位進(jìn)行,沒法只擦除一個(gè)字節(jié)//一個(gè)扇區(qū)是512個(gè)字節(jié)//本函數(shù)參數(shù)里面的地址落在哪個(gè)扇區(qū),則該扇區(qū)內(nèi)數(shù)據(jù)都將被擦除//例如:STC89C51RC片內(nèi)EEPROM第一扇區(qū)開始地址為0x2000,結(jié)束地址為0x21ff//如果調(diào)用eepromEraseSector(0x2001),則第一扇區(qū)內(nèi)數(shù)據(jù)都將被擦除//擦除成功后,該扇區(qū)內(nèi)各字節(jié)都將變?yōu)?xffvoideepromEraseSector(uint16address){ uint8i; isp_addrl=address; isp_addrh=address>>8; isp_contr=0x01; isp_contr=isp_contr|0x81; isp_cmd=0x03;//送擦除扇區(qū)命令 isp_trig=0x46; isp_trig=0xb9;//觸發(fā)寄存器 for(i=0;i<3;i++); isp_contr=0x00; isp_cmd=0x00; isp_trig=0x00; isp_addrl=0x0; isp_addrh=0x0; }/***********************************************************************************函數(shù)名稱:eepromWrite(uint16address,uint8write_data)*功能:EEPROM寫程序*入口參數(shù):address,write_data*出口參數(shù):無***********************************************************************************///注意:字節(jié)編程是指將eeprom的1寫成1或0,將0寫成0,而無法將0寫成1voideepromWrite(uint16address,uint8write_data){ uint8i; isp_data=write_data; isp_addrl=address; isp_addrh=address>>8; isp_contr=0x01; isp_contr=isp_contr|0x81; isp_cmd=0x02;//送寫數(shù)據(jù)命令 isp_trig=0x46; isp_trig=0xb9;//觸發(fā)寄存器 for(i=0;i<3;i++); isp_contr=0x00; isp_cmd=0x00; isp_trig=0x00; isp_addrl=0x0; isp_addrh=0x0;}/************************************************************************************函數(shù)名稱:eepromRead(uint16address)*功能:EEPROM讀程序*入口參數(shù):address*出口參數(shù):z************************************************************************************///讀取STC單片機(jī)內(nèi)部EEPROM的一個(gè)字節(jié)//主要不同的STC單片機(jī)EEPROM起始地址不同//例如:STC89c52RC的片內(nèi)EEPROM起始地址為0x2000uint8eepromRead(uint16address){ uint8i,z; isp_addrl=address; isp_addrh=address>>8; isp_contr=0x01; isp_contr=isp_contr|0x81; isp_cmd=0x01;//送讀數(shù)據(jù)命令 isp_trig=0x46; isp_trig=0xb9;//觸發(fā)寄存器 for(i=0;i<3;i++); isp_contr=0x00; isp_cmd=0x00; isp_trig=0x00; isp_addrl=0x0; isp_addrh=0x0; z=isp_data; return(z); }voidwreeprom(void){ a=tot/256; b=tot%256; c=mon/256; d=mon%256; eepromEraseSector(0x2000); eepromWrite(0x2000,a); eepromWrite(0x2001,b); eepromWrite(0x2002,c); eepromWrite(0x2003,d); eepromWrite(0x2020,0x00);}voideeprominit(void){ unsignedchartest; test=eepromRead(0x2020); while(test==0xff);}//中斷程序/**********************************************************************************函數(shù)名稱:int0_1_int()*功能:外部中斷0/1初始化**********************************************************************************/voidint0_1_int(void){// IT0=1;//下降沿觸發(fā)// EX0=1;//TF0中斷開 IT1=1;//下降沿觸發(fā) EX1=1;//TF1中斷開 EA=1;//開中斷 } /**********************************************************************************函數(shù)名稱:int1_fun()interrupt2*功能:外部中斷1服務(wù)子程序*********************************************************************************/voidint1_fun()interrupt2{ mc++; if(mc>=10){ mc=0; if(mon>0){mon--;tot++;} wreeprom(); } } voidmain(){ unsignedcharstatus; int0_1_int(); InitializeSystem();//初始化 PcdReset(); //復(fù)位RC522 PcdAntennaOff();//關(guān)閉天線 PcdAntennaOn();//開啟天線 a=eepromRead(0x2000);//從eeprom讀 b=eepromRead(0x2001);//從eeprom讀 c=eepromRead(0x2002);//從eeprom讀 d=eepromRead(0x2003);//wreeprom if(a==0xff&b==0xff&c==0xff&d==0xff){ a=0,b=0,c=0,d=0; eepromEraseSector(0x2000); eepromWrite(0x2000,a); eepromWrite(0x2001,b);//寫入eeprom eepromWrite(0x2002,c);//寫入eeprom eepromWrite(0x2003,d); }//寫入eeprom tot=a*256+b; mon=c*256+d; eeprominit(); while(1) { if(key1==0){ dcf=1;//開蓋檢測(cè)到開啟時(shí)關(guān)閥門、報(bào)警 dcfzsd=1; fmq=0; kgbj=0; }else{ fmq=1; kgbj=1; } if(key4==0){ tot=0; mon=0; wreeprom(); } status=PcdRequest(PICC_REQALL,g_ucTempbuf); if(status!=MI_OK){ TYPE_DATA[0]=0; TYPE_DATA[1]=0; ID_DATA[0]=0; ID_DATA[1]=0; ID_DATA[2]=0; ID_DATA[3]=0; value_DATA[0]=0; value_DATA[1]=0; value_DATA[2]=0; value_DATA[3]=0; falg_pro=0; card=0; }//讀不到卡,顯示清0; if(status==MI_OK){ TYPE_DATA[0]=g_ucTempbuf[0]; TYPE_DATA[1]=g_ucTempbuf[1]; status=PcdAnticoll(g_ucTempbuf); if(status==MI_OK){ status=PcdSelect(g_ucTempbuf); if(status==MI_OK){ if(falg_pro==0){ falg_pro=1;//聲音提示標(biāo)志 pro(); } ID_DATA[0]=g_ucTempbuf[0]; ID_DATA[1]=g_ucTempbuf[1]; ID_DATA[2]=g_ucTempbuf[2]; ID_DATA[3]=g_ucTempbuf[3]; // if(key2==0){ init_k();//初始化卡 pro(); } if(key2!=0&mon<900&card>0){ writek();//寫卡 } readk();//讀卡 PcdHalt();//命令卡片進(jìn)入休眠狀態(tài) } } } if(key3==0){ Delay(40); if(mon>0){ mon--; tot++; } wreeprom(); }//寫入eeprom} if(mon>0&key1!=0){ dcf=0;//有余額時(shí)開閥 dcfzsd=0; }else{ dcf=1; dcfzsd=1; } if(mon<10){ qqbj=0;//余額低于10時(shí)報(bào)警燈亮; }else{ qqbj=1; } if(mon<10&mon>0){ fmq=0; }else{ fmq=1; } if(falg_pro){ LCD1206b(); }else{ LCD1206a(); };//顯示處理 }}///////////////////////////////////////////////////////////////////////系統(tǒng)初始化/////////////////////////////////////////////////////////////////////voidInitializeSystem(void){P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF; fmq=0; lcd_init(); //初始化LCD Delay(1); fmq=1;}voidDelay(unsignedinttime){unsignedinti,k;for(i=0;i<255;i++)for(k=0;k<time;k++)_nop_(); }////////////////////////顯示處理函數(shù)////////////////////////////////bitlcd_bz() //測(cè)試LCD忙碌狀態(tài){ bitresult; rs=0; rw=1; ep=1; _nop_(); _nop_(); _nop_(); _nop_(); result=(bit)(P0&0x80); ep=0; returnresult;}lcd_wcmd(unsignedcharcmd){ while(lcd_bz()); rs=0; rw=0; ep=0; _nop_(); _nop_(); P0=cmd; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0;}lcd_pos(unsignedcharpos){ //設(shè)定顯示位置 lcd_wcmd(pos|0x80);}lcd_wdat(unsignedchardat) { //寫入字符顯示數(shù)據(jù)到LCD while(lcd_bz()); rs=1; rw=0; ep=0; P0=dat; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0;}lcd_init(void) //LCD初始化設(shè)定{ lcd_wcmd(0x38);Delay(1); // lcd_wcmd(0x0c);Delay(1); // lcd_wcmd(0x06);Delay(1); // lcd_wcmd(0x01);Delay(1); //清除LCD的顯示內(nèi)容}LCD1206a(){ unsignedchari; TYPE_DATA[0]=0x04; lcd_pos(0x00); i=0; switch(TYPE_DATA[0]) { case0x04: lcd_wdat(dis0[0]); lcd_wdat(dis0[1]); lcd_wdat(dis0[2]); lcd_wdat(dis0[3]); lcd_wdat(dis0[4]); lcd_wdat(dis0[5]); break; case0x02: lcd_wdat(dis1[0]); break; case0x08: lcd_wdat(dis2[0]); break; case0x44: lcd_wdat(dis3[0]); break; } lcd_wdat(dis6[tot/10000]); lcd_wdat(dis6[tot%10000/1000]); lcd_wdat(dis6[tot%10000%1000/100]); lcd_wdat(dis6[tot%10000%1000%100/10]); lcd_wdat(dis6[tot%10000%1000%100%10]); lcd_wdat(dis1[0]); lcd_wdat(dis1[0]); lcd_wdat(dis1[0]); lcd_wdat(dis1[0]); lcd_wdat(dis1[0]); lcd_pos(0x40); lcd_wdat(dis3[0]); lcd_wdat(dis3[1]); lcd_wdat(dis3[2]); lcd_wdat(dis3[3]); lcd_wdat(dis6[mon%10000%1000/100]); lcd_wdat(dis6[mon%10000%1000%100/10]); lcd_wdat(dis6[mon%10000%1000%100%10]); lcd_wdat(dis4[0]); lcd_wdat(dis4[1]); lcd_wdat(dis4[2]); lcd_wdat(dis4[3]); lcd_wdat(dis4[4]); lcd_wdat(dis4[5]); lcd_wdat(dis6[card%10000%1000/100]); lcd_wdat(dis6[card%10000%1000%100/10]); lcd_wdat(dis6[card%10000%1000%100%10]);}LCD1206b(){ unsignedchari; TYPE_DATA[0]=0x04; lcd_pos(0x00); //設(shè)置顯示位置為第一行的第0個(gè)字符 i=0; switch(TYPE_DATA[0]) { case0x04: lcd_wdat(dis2[0]); lcd_wdat(dis2[1]); lcd_wdat(dis2[2]); lcd_wdat(dis2[3]); lcd_wdat(dis2[4]); lcd_wdat(dis2[5]); lcd_wdat(dis2[6]); lcd_wdat(dis2[7]); break; lcd_wdat(dis2[6]); break; lcd_wdat(dis2[7]); break; case0x02: lcd_wdat(dis1[0]); break; case0x08: lcd_wdat(dis2[0]); break; case0x44: lcd_wdat(dis3[0]); break; } lcd_wdat(dis6[ID_DATA[0]%100/10]); lcd_wdat(dis6[ID_DATA[0]%10]); lcd_wdat(dis6[ID_DATA[1]%100/10]); lcd_wdat(dis6[ID_DATA[1]%10]); lcd_wdat

溫馨提示

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

評(píng)論

0/150

提交評(píng)論