基于BP網(wǎng)絡(luò)的智能壓力器_第1頁
基于BP網(wǎng)絡(luò)的智能壓力器_第2頁
基于BP網(wǎng)絡(luò)的智能壓力器_第3頁
基于BP網(wǎng)絡(luò)的智能壓力器_第4頁
基于BP網(wǎng)絡(luò)的智能壓力器_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

摘要由于目前社會高速發(fā)展,智能已經(jīng)成為各個關(guān)鍵領(lǐng)域最重要的突破方向了。因此,對智能化技術(shù)的研究是非常必要的。然而壓力監(jiān)控是工業(yè)生產(chǎn)里必不可少的環(huán)節(jié),為了提升壓力檢測的精度,本文研究并設(shè)計了一種基于BP神經(jīng)網(wǎng)絡(luò)的壓力監(jiān)控系統(tǒng)。系統(tǒng)以單片機為核心,利用BP網(wǎng)絡(luò)的溫度補償算法進行壓力信號的采集與處理。該系統(tǒng)的硬件設(shè)計包括基于單片機,壓力測量傳感器的電路設(shè)計,電源電路設(shè)計的最低系統(tǒng)設(shè)計;軟件設(shè)計包括C語言基于單片機的方案設(shè)計,基于C#上位機軟件設(shè)計。最終經(jīng)過聯(lián)合調(diào)試,系統(tǒng)達到了設(shè)計目標。關(guān)鍵詞:壓力傳感器;溫度補償;BP神經(jīng)網(wǎng)絡(luò)ABSTRACTWiththerapiddevelopmentofsociety,intelligencehasbecomethemostimportantbreakthroughdirectioninallkeyareas.Therefore,theresearchofintelligenttechnologyisverynecessary.However,pressuremonitoringisanindispensablelinkinindustrialproduction.Inordertoimprovetheaccuracyofpressuredetection,thispaperstudiesanddesignsapressuremonitoringsystembasedonBPneuralnetwork.Thesystemtakessinglechipcomputerasthecore,andusesBPnetworktemperaturecompensationalgorithmtocollectandprocesspressuresignals.ThehardwaredesignofthesystemincludesthecircuitdesignbasedonMCU,pressuremeasuringsensorandthelowestsystemdesignofpowersupplycircuit.ThesoftwaredesignincludestheschemedesignofClanguagebasedonMCUandthesoftwaredesignofC#hostcomputer.Finally,afterjointdebugging,thesystemachievesthedesigngoal.Keywords:PressureSensors;TemperatureCompensation;BPNeuralNetwork目錄TOC\o"1-3"\h\u摘要 (2)在公式中:i是第i個輸出層神經(jīng)元;j是第j個隱含層神經(jīng)元;是節(jié)點輸出;Wij是節(jié)點連接權(quán)重;f是傳輸函數(shù);是神經(jīng)元閾值。式(1)代表連接到隱藏層的隱藏層神經(jīng)元的總和,i是第i個輸出層神經(jīng)元,即j的總和[14]。權(quán)重修正:(3)在公式中:η是學習因素(按照輸出誤差動態(tài)調(diào)整);h是動量因子;Ei是計算誤差。4基于BP神經(jīng)網(wǎng)絡(luò)的壓力傳感器數(shù)據(jù)處理BP神經(jīng)網(wǎng)絡(luò)的學習過程由四個步驟組成:①輸入模式通過中間層從輸入層向前傳輸?shù)捷敵鰧?;②輸出層通過中間層到輸入層校正輸出誤差,并逐層修改連接;③前向傳播和反向傳播交替執(zhí)行網(wǎng)絡(luò)存儲器訓(xùn)練;④網(wǎng)絡(luò)學習融合。在學習過程中,標準的BP算法使用了擁有一個統(tǒng)一的學習速度。每一步的長度正比于它的方向的斜率。權(quán)重更新的基本公式是[15]:在公式中,η是步長參數(shù)(學習率);Wij(n)是第n個加權(quán)校正;是誤差平方和負重的負梯度。由于BP只使用局部梯度信息,則η值必須很小,所以算法會跳過最小值,這會導(dǎo)致學習收斂速度變慢,為了加快收斂,常用的方法是增加一個動量因子,其權(quán)重更新公式為:在公式中,μ是動量因子,用于抑制局部振蕩,以滿足加快訓(xùn)練速度和避免局部最小值等要求,提出了一種改進BP算法的方法:①對每個權(quán)重使用不同的學習率η,通過指數(shù)衰減函數(shù)δ(k)表示。這樣可以使學習速率η增加更加漸進的區(qū)域快于較陡的區(qū)域;②在學習過程中,學習率可以根據(jù)誤差函數(shù)E梯度信息進行自適應(yīng)調(diào)整,以改善網(wǎng)絡(luò),總結(jié)提高網(wǎng)絡(luò)收斂性能的能力;③使用算法中的動量項,動量項與學習率相同;④防止學習率或動量過大,設(shè)定上限;⑤使用參數(shù)λ和概率P來控制網(wǎng)絡(luò)學習過程的記憶和恢復(fù),也就是說,如果誤差增加的數(shù)量大于λ,學習率和動量系數(shù)減小,并且搜索是最佳點重新學習。為了避免波動,搜索是通過概率P隨機執(zhí)行的。使用人工神經(jīng)網(wǎng)絡(luò)進行溫度補償是神經(jīng)網(wǎng)絡(luò)的基本特征,這使得傳感器具有復(fù)雜的非線性映射、自組織、自學習和自適應(yīng)能力。神經(jīng)網(wǎng)絡(luò)方法不需要建立包括要消除的非目標參數(shù)的功能分析公式,而只需要訓(xùn)練樣本,您可以通過學習和培訓(xùn)了解輸入和輸出的內(nèi)部聯(lián)系。神經(jīng)網(wǎng)絡(luò)所需的學習樣本由多維校準實驗數(shù)據(jù)提供,網(wǎng)絡(luò)模塊通過軟件編程實現(xiàn)。神經(jīng)網(wǎng)絡(luò)校正壓力傳感器的框圖如圖4-1所示。傳感器模塊為:輸入壓力P和溫度,輸出周期T和溫度t;網(wǎng)絡(luò)模塊時:輸入周期T和溫度t,通過BP網(wǎng)絡(luò)的學習和訓(xùn)練,消除溫度t的影響,輸出T'或P'。TTT壓力傳感器神經(jīng)網(wǎng)絡(luò)ttT'或P‘溫度傳感器圖4-1溫度誤差補償原理圖這種設(shè)計選擇具有單個隱藏層一個神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和仿真由神經(jīng)網(wǎng)絡(luò)工具箱和MATLAB7.8環(huán)境中的相應(yīng)程序?qū)崿F(xiàn)。由于神經(jīng)網(wǎng)絡(luò)的隱藏層使用對數(shù)sigmoid函數(shù),因此其輸出范圍為(0,1),它來自:(7)(8)對實驗數(shù)據(jù)進行歸一化,使得處理后的值之間的范圍在(0,1)內(nèi)。歸一化的神經(jīng)網(wǎng)絡(luò)的輸入和輸出標準樣品數(shù)據(jù)表為:表4-1神經(jīng)網(wǎng)絡(luò)的輸入輸出標準樣本數(shù)據(jù)表實際溫度℃175075100125溫度讀數(shù)Hz00.2780.5020.7331.000實際壓力MPa0.05壓力讀數(shù)Hz10.7890.5760.30900.16310.7850.5660.30100.27510.7650.5230.24200.38610.7360.4780.18200.50010.7250.4750.18600.61310.6740.3730.03700.72510.6990.36500.1470.83810.7470.38100.1860.95010.7830.38400.156在基于BP神經(jīng)網(wǎng)絡(luò)的溫度補償實驗中,輸入向量的維數(shù),目標向量的維數(shù)為0.005,訓(xùn)練誤差為0.005,訓(xùn)練次數(shù)為5000,訓(xùn)練的權(quán)重和閾值通過實驗獲得,以獲得獲得BP神經(jīng)網(wǎng)絡(luò)的溫度補償模型。仿真后所得的數(shù)據(jù)為:表4-2仿真后得到的數(shù)據(jù)表實際溫度℃175075100125溫度讀數(shù)Hz00.2780.5020.7331.000實際壓力MPa0.386壓力讀數(shù)Hz1.03920.71290.52070.2015-0.03410.5000.93920.73020.51010.2533-0.11430.6130.96590.73750.46030.07330.02060.7250.94240.71420.48240.0450-0.37160.8380.93830.78390.48880.0792-0.0587補償仿真曲線為:虛線為補償前的曲線,實線為補償后曲線虛線為補償前的曲線,實線為補償后曲線圖4-2BP神經(jīng)網(wǎng)絡(luò)實現(xiàn)溫度補償?shù)膱D形5壓力處理與顯示系統(tǒng)設(shè)計5.1主控制器電路設(shè)計中央控制單芯片是STC89C52單片機其在該設(shè)計中使用的單芯片。作為在計算機中的特別重要的分支之一,隨著科學的進步,單片機的產(chǎn)生是不可避免的現(xiàn)象,必須經(jīng)歷的階段。由計算機所需要的模塊部分,小的單芯片微型計算機得到了繼承,它可以說是:麻雀較小,完整。單片機所繼承了用作隨機儲存的存儲器RAM以及內(nèi)部資源定時器,還是一些豐富的外部接口IO口,用作輸入輸出的功能,這些分立的模塊全部集成在一個小小的芯片上,可謂神奇和不可置信。在控制方面,單片機得到了廣闊的發(fā)展空間,很多工業(yè)上所需要的功能和方式都非常適合單片機這類芯片進行大展身手。單片機的結(jié)構(gòu)和大部分的指令功能是工業(yè)設(shè)計的福音。它還有另外一個名字:單片微型控制器。這個名字在國外可謂是名聲赫赫,當然現(xiàn)在國內(nèi)也是得到了廣泛的應(yīng)用。圖5-1單片機最小系統(tǒng)電路有各種系列在市場上的單芯片微型計算機,它們的功能是不同的。作為用于當前處理器,微處理器51系列的單片機,其另一系列的51單芯片應(yīng)用被廣泛使用,其中大部分是8位處理器內(nèi)核。以目前的市場來講,51系類的單片機和其他系列的15位處理器或者說32位處理器相比,處理速度是有著很大的差距,但是,它的處理速度在一般小型工程上來講完全足夠了,況且它相對而言比較便宜的價格也是它應(yīng)用廣泛的主要原因。就對比著STM32這款16位的處理器而言,處理速度比他低了很多,但是STM32的價格也是51單片機的兩倍還要多,在兩款單片機都可以滿足工程所需處理速度的需要,那么首選的當然是價格低廉的51單片機。在51MCU的升級版,52系列MCU已新添加的內(nèi)部數(shù)據(jù)存儲器RAM。在一些程序功能,數(shù)據(jù)讀取和寫入操作是可行的。當在對AT89C1單片機進行數(shù)據(jù)存放時,只能將存放的數(shù)據(jù)所占內(nèi)存下降到一百多B,當然,其中包括程序中進行計算的運算結(jié)果和中間傳遞變量。當所用存放數(shù)據(jù)的內(nèi)存需要更多時,這個系列的單片機還有一些內(nèi)存容量為1K的稍大的RAM。對于52系列單芯片微型計算機,它被廣泛應(yīng)用于市場。進行數(shù)據(jù)交互所需要的外圍設(shè)備接口的IO端口是:P0,P1,P2,P3。這些接口的8位處理速度是并行接口,這意味著在進行數(shù)據(jù)傳遞時,它們不僅可以進行輸出,也可以根據(jù)程序進行輸入,輸入輸出的實現(xiàn),導(dǎo)致現(xiàn)在單片機可以承擔一些協(xié)方面的東西。常用的協(xié)議有:串口協(xié)議,單總線協(xié)議。單片機很強大,但也不是無所不能的,有一部分功能它也是不具備的,如:EPROM/EEPROM的功能是它本身不具備的。但是可以根據(jù)協(xié)議進行外部擴展,一般采用IIC協(xié)議進行外部擴展ROM,所需芯片為:AT24C02。就現(xiàn)在的科技來看,對這些單片機的研究和應(yīng)用,是可以慢慢將ROM這類的儲存器進行集成到單片機里面的。這也就可以減少程序開發(fā)者的麻煩,將自動化產(chǎn)業(yè)進一步推進和進步,而且使程序運行的更穩(wěn)健和快速。對于一些設(shè)計規(guī)范,特別是51系列單片機,目前,最大允許12MHz的是MCU的市場上的外部振蕩。當然,隨著單片機芯片的不斷優(yōu)化和發(fā)展,其性能也在不間斷提高和進步,尤其對于STC89C52系列的單片機來說,振蕩頻率最大可以提高到40MHz了,以至于當設(shè)計的系統(tǒng)實用這些提高的芯片后,處理速度將大大提高和運行指令時間將大大減少,這樣的話,采用STC89C52單片機的系統(tǒng)性能也就顯著加強。5.2顯示電路設(shè)計圖5-2OLED顯示電路如上圖所示,OLED液晶顯示需要占用單片機的6個引腳,分別是4個數(shù)據(jù)引腳和電源、地引腳,外加一個可調(diào)電阻進行設(shè)置液晶背光的亮度,通過IIC協(xié)議和單片機進行通信,顯示需要顯示的信息,本系統(tǒng)要顯示采集到的壓力值信息。5.3壓力采集電路設(shè)計圖5-3壓力檢測電路該傳感器檢測電路的功能是將電阻應(yīng)變片的電阻變化轉(zhuǎn)換為電壓輸出。該芯片通過需要其他示例芯片,如一個電壓源,一個片上的手表振動器等的外圍線集成在一起。在本系統(tǒng)中選擇的是5891抵抗應(yīng)變傳感器。因為相應(yīng)的電壓信號較小,所以很需要放大器放大信號。提高了設(shè)備的性能和可信度,對傳感器信號進行了過濾處理。選擇開關(guān)時,您可以選擇通道A或通道B。萬次輸入信號分別在±20mV和±40mV里提供的穩(wěn)定的電源由外部傳感器和芯片內(nèi)的A/D變換器提供電源。器具的自動復(fù)位的結(jié)果將簡化開關(guān)的初始化,內(nèi)部低噪聲放大器的編程將相比于用芯片內(nèi)部寄存器編程的不同的示例的芯片連接。5.4上位機軟件設(shè)計圖5-4壓力檢測電路上位機軟件采用C#進行設(shè)計,功能是讀取串口發(fā)送給上位機的壓力數(shù)據(jù),并將數(shù)據(jù)進行展示,完成后的軟件設(shè)計界面如上圖所示。6系統(tǒng)測試根據(jù)傳統(tǒng)的調(diào)整步驟,在軟件之前執(zhí)行調(diào)試,并且在啟動檢測之前進行電源故障檢測。整臺機器在一臺機器上單獨測試,啟動檢測,模塊化功能實現(xiàn)和交換機調(diào)試按順序進行。在執(zhí)行這些測試之前,需要單獨調(diào)試電源。該系統(tǒng)的測試過程主要分為兩個部分:硬件測試和軟件測試。6.1硬件測試硬件調(diào)試的目的是為了包管硬件體系的精確性。因為如果連接到電網(wǎng)后出現(xiàn)了錯誤的環(huán)境,可能會導(dǎo)致爆炸和其他環(huán)境傷害,危及個人安全。連接到電網(wǎng)后的調(diào)試需要額外的確認,以便在第一次檢查后進行相應(yīng)的調(diào)試。設(shè)備調(diào)試被細分為電前和電后調(diào)試,用于防止短路、開路電路和粘連。張力配置使用數(shù)字表。每個試點的電壓常數(shù),特別是電容器極性,不得因主圖焊接出錯,必須簡要描述在復(fù)本中描述的細元素的基本測量參數(shù)和組織精度。任何電路都不能與電源分離。在沒有軟件的情況下,系統(tǒng)只能測量系統(tǒng)電源電路的輸入和輸出,每個模塊的結(jié)果都是正常的。6.2軟件測試電源電路緊張測量輸出電壓是否正常。信號處理的時間可能會更短,電壓會以數(shù)字形式被伏特計測量。將數(shù)據(jù)丟失與理論值進行比較,結(jié)果可能不準確,正如輸出電流穩(wěn)定,讀寫操作正常。輸出電壓模塊的精度,按下或不按下鍵鏈中的按鈕,電平不跳等等。系統(tǒng)實現(xiàn)或比較的結(jié)果被縮短了,所以軟件領(lǐng)域的代碼很少。同樣,觀察輸出精度,針對變化的延遲,延遲時間如果太短,每個模塊元件檢測準確輸入和輸出功率,以及每個模塊的讀寫水平之間的聯(lián)系不是那么久,相關(guān)系統(tǒng)軟件測試,如果應(yīng)力處理參數(shù)的變化,發(fā)現(xiàn)自己。6.3測試結(jié)果制作完成的系統(tǒng)整體如圖6-1所示。該系統(tǒng)的實際測試是如下,并測試壓力傳感器的一部分,如圖6-2所示。圖6-1系統(tǒng)整體結(jié)構(gòu)圖圖6-2系統(tǒng)主測試結(jié)果圖可以看到上位機已經(jīng)準確顯示出了此時的壓力值,通過對整個系統(tǒng)的運行進行測試,這驗證了設(shè)計思路的正確性,也驗證了系統(tǒng)的硬件的可行性。調(diào)試時,設(shè)計目標是實現(xiàn)準確的。7結(jié)論本設(shè)計制作的是通過單片機控制的智能壓力器,用單片機作為壓力器的控制中心,利用BP神經(jīng)網(wǎng)絡(luò)算法進行傳感器信號的數(shù)據(jù)融合,來解決壓力傳感器中存在的壓力和溫度之間的交叉干擾問題,從而實現(xiàn)智能化功能。作為現(xiàn)代社會的新發(fā)明,智能可以說是未來要發(fā)展的一個方向,他能夠通過人類事先預(yù)設(shè)模式自動運作,不用人為進行干預(yù),就可以達到我們所要求的目標。本設(shè)計在硬件設(shè)計方面較為簡單,體積小,攜帶方面,具有很好的市場前景,實現(xiàn)經(jīng)濟利益的同時,也能促進科技發(fā)展。我國作為世界上人口最多的國家,在未來各方面的發(fā)展都來離不開智能化,所以BP網(wǎng)絡(luò)算法作為智能壓力器的一種重要手段,在將來的各類智能發(fā)展中都會有不可替代的作用。通過構(gòu)建BP網(wǎng)絡(luò)的智能壓力器系統(tǒng),到完成整個設(shè)計,我覺得能夠大大提高我們的設(shè)計以及實踐能力,這也是適應(yīng)社會未來智能化自動化的趨勢。雖然在這次的整個設(shè)計過程中也遇到了許多困難,從一開始的開題報告到軟件設(shè)計以及后面的論文撰寫都是花費大量心思去完成的,這里離不開同學以及老師的幫助。雖然很辛苦,但是大學生涯最后一次的設(shè)計也讓我受益匪淺,成長了許多。相信這會對我未來的發(fā)展道路有著深遠的影響。參考文獻[1]張朋,陳明,秦波,何鵬舉.基于BP神經(jīng)網(wǎng)絡(luò)的振動筒壓力傳感器溫度補償[J].傳感技術(shù)報,2007,20(10):2213-2217.[2]韋兆碧,劉曄,馬志瀛,胡光輝,時德鋼.基于RBF網(wǎng)絡(luò)的光纖位移傳感器溫度補償研究[J].電工電能新技術(shù),2004,23(2):42-45.[3]于化景,付華.基于模糊神經(jīng)網(wǎng)絡(luò)融合的溫度控制方法[J].遼寧工程技術(shù)大學學報,2003,22(5):649-650.[4]楊德旭,何鳳宇,魏利華.基于BP神經(jīng)網(wǎng)絡(luò)溫度補償技術(shù)的研究[J].農(nóng)機化研究,2008,1(1):71-73.[5]孟彥京,汪寧,佟明,楊雅莉.小波神經(jīng)網(wǎng)絡(luò)在壓力傳感器溫度補償中的應(yīng)用[J].陜西科技大學學報,2009,2(4):84-97.[6]張雪君.電容式壓力傳感器溫度補償?shù)腞BF神經(jīng)網(wǎng)絡(luò)[J].北京:傳感器技術(shù),2001,20(5):9-11.[7]MukherjeeS,NayarSK.AutomaticgenerationofRBFnetworksusingwavelets[J].PatternRecognition,1996,29(8):1369-1383.[8]劉君華.智能傳感器系統(tǒng)[M].西安:西安電子科技大學出版社,2004:1-50.[9]欒桂冬.傳感器及其應(yīng)用[M].西安:西安電子科技大學出版社,2002:1-50.[10]崔淑琴.智能壓力傳感器的研究與設(shè)計[D].哈爾濱:哈爾濱理工大學,2005:2-50.[11]張文竹.智能差壓傳感器的研制[D].哈爾濱:黑龍江大學,2003:2—10.[12]胡少春.智能壓力檢測系統(tǒng)測試儀與PC機數(shù)據(jù)處理軟件的設(shè)計[D].西安:西安科技大學,2003:2-20.[13]陳嶺麗,馮志華.檢測技術(shù)和系統(tǒng)[M].北京:清華大學出版社,2006:77—133.[14]李戎.壓力傳感器的現(xiàn)狀及發(fā)展趨勢[J].西安工業(yè)學院學報,2002,22(3):241-243.[15]MarkBeale,NeuralNetworkToolbox[M].北京:機械工業(yè)出版社,2004.附錄1神經(jīng)網(wǎng)絡(luò)程序:clearallx=[00.2780.5020.7331.000;0.3860.5000.6130.7250.838];y=[10.7360.4780.1820;10.7250.4750.1860;10.6740.3730.0370;10.6990.36500.147;10.7470.38100.186];net=newff(x,y,6);net.trainparam.goal=0.005;net.trainparam.epochs=5000;[net,tr]=train(net,x,y);iw1=net.IW{1};b1=net.b{1};lw2=net.LW{2};b2=net.b{2};savenetkohlernet;x1=[00.2780.5020.7331.000];y1=sim(net,x)y1=1.03920.71290.52070.2015-0.03410.93920.73020.51010.2533-0.11430.96590.73750.46030.07330.02060.94240.71420.48240.0450-0.37160.93830.78390.48880.0792-0.0587y2=[1.03920.71290.52070.20150.4253];y3=[0.8950.6830.4430.1550];plot(x1,y2,'-',x1,y3,'--')+附錄2單片機程序:#include"REG51.h"#include"oled.h"#include"bmp.h"#include<INTRINS.H>sfrP1M1=0x91;sfrP1M0=0x92;sbitALERT_PIN=P2^0;#defineALERT_ONALERT_PIN=0#defineALERT_OFFALERT_PIN=1typedefunsignedcharuchar;typedefunsignedint uint;unsignedchargucYaliVol=0;unsignedchargucYaliVolYuzhi=30;unsignedchargucWorkMode=0;//默認自動模式unsignedintgui1msCount=0;unsignedintgui10msCount=0;unsignedintgui1sCount=0;unsignedintgui2sCount=0;typedefunsignedcharBYTE;typedefunsignedshortWORD;BYTEBUF[8];//接收數(shù)據(jù)緩存區(qū)unsignedcharge,shi,bai,qian,wan;//顯示變量intdis_data;//變量//voidDelay5us();voidDelay5ms();//*********************************************************voidconversion(uinttemp_data)//數(shù)據(jù)轉(zhuǎn)換出個,十,百,千,萬{wan=temp_data/10000;temp_data=temp_data%10000;//取余運算 qian=temp_data/1000;temp_data=temp_data%1000;//取余運算bai=temp_data/100;temp_data=temp_data%100;//取余運算shi=temp_data/10;temp_data=temp_data%10;//取余運算ge=temp_data; }voidDelay5us(){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();}voidDelay5ms(){WORDn=560;while(n--);}voidTimer0()interrupt1{TH0=(65536-922)/256;//觸發(fā)中斷時重新裝填計時TL0=(65536-922)%256;gui1msCount++;if(0==gui1msCount%1000){gui1sCount++;}}voidTimer1()interrupt3{}voidSendData(unsignedcharDat){unsignedchari=0;SBUF=Dat;while(1){if(TI){TI=0;break;}}}//DS1302引腳定義sbitRST=P1^4;sbitIO=P1^3;sbitSCK=P1^2;//DS1302地址定義#defineds1302_sec_add 0x80 //秒數(shù)據(jù)地址#defineds1302_min_add 0x82 //分數(shù)據(jù)地址#defineds1302_hr_add 0x84 //時數(shù)據(jù)地址#defineds1302_date_add 0x86 //日數(shù)據(jù)地址#defineds1302_month_add 0x88 //月數(shù)據(jù)地址#defineds1302_day_add 0x8a //星期數(shù)據(jù)地址#defineds1302_year_add 0x8c //年數(shù)據(jù)地址#defineds1302_control_add 0x8e //控制數(shù)據(jù)地址#defineds1302_charger_add 0x90 #defineds1302_clkburst_add 0xbe//初始時間定義uchartime_buf[8]={0x20,0x19,0x3,0x20,0x00,0x31,0,0x02};//初始時間2019年6月1號23點59分55秒星期二voidserial()interrupt4using3{if(RI){RI=0;}}voidDelay_xms(uintx){uinti,j;for(i=0;i<x;i++)for(j=0;j<112;j++);}typedefunsignedintU16;typedefunsignedcharU8;U8U8FLAG;U8U8temp;U8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8U8comdata;voidDelay(U16j){U8i;for(;j>0;j--){for(i=0;i<27;i++);}}voidDelay_10us(void){U8i;i--;i--;i--;i--;i--;i--;}#defineNOP()_nop_()/*定義空指令*/#define_Nop()_nop_()/*定義空指令*/sbitSCL=P1^1;//I2C時鐘sbitSDA=P1^0;//I2C數(shù)據(jù)bitack;/*應(yīng)答標志位*//*******************************************************************起動總線函數(shù)函數(shù)原型:voidStart_I2c();功能:啟動I2C總線,即發(fā)送I2C起始條件.********************************************************************/voidStart_I2c(){SDA=1;/*發(fā)送起始條件的數(shù)據(jù)信號*/_Nop();SCL=1;_Nop();/*起始條件建立時間大于4.7us,延時*/_Nop();_Nop();_Nop();_Nop();SDA=0;/*發(fā)送起始信號*/_Nop();/*起始條件鎖定時間大于4μs*/_Nop();_Nop();_Nop();_Nop();SCL=0;/*鉗住I2C總線,準備發(fā)送或接收數(shù)據(jù)*/_Nop();_Nop();}/*******************************************************************結(jié)束總線函數(shù)函數(shù)原型:voidStop_I2c();功能:結(jié)束I2C總線,即發(fā)送I2C結(jié)束條件.********************************************************************/voidStop_I2c(){SDA=0;/*發(fā)送結(jié)束條件的數(shù)據(jù)信號*/_Nop();/*發(fā)送結(jié)束條件的時鐘信號*/SCL=1;/*結(jié)束條件建立時間大于4μs*/_Nop();_Nop();_Nop();_Nop();_Nop();SDA=1;/*發(fā)送I2C總線結(jié)束信號*/_Nop();_Nop();_Nop();_Nop();}/*******************************************************************字節(jié)數(shù)據(jù)發(fā)送函數(shù)函數(shù)原型:voidSendByte(UCHARc);功能:將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對此狀態(tài)位進行操作.(不應(yīng)答或非應(yīng)答都使ack=0)發(fā)送數(shù)據(jù)正常,ack=1;ack=0表示被控器無應(yīng)答或損壞。********************************************************************/voidSendByte(unsignedcharc){unsignedcharBitCnt;for(BitCnt=0;BitCnt<8;BitCnt++)/*要傳送的數(shù)據(jù)長度為8位*/{if((c<<BitCnt)&0x80)SDA=1;/*判斷發(fā)送位*/elseSDA=0;_Nop();SCL=1;/*置時鐘線為高,通知被控器開始接收數(shù)據(jù)位*/_Nop();_Nop();/*保證時鐘高電平周期大于4μs*/_Nop();_Nop();_Nop();SCL=0;}_Nop();_Nop();SDA=1;/*8位發(fā)送完后釋放數(shù)據(jù)線,準備接收應(yīng)答位*/_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();if(SDA==1)ack=0;elseack=1;/*判斷是否接收到應(yīng)答信號*/SCL=0;_Nop();_Nop();}/*******************************************************************字節(jié)數(shù)據(jù)接收函數(shù)函數(shù)原型:UCHARRcvByte();功能:用來接收從器件傳來的數(shù)據(jù),并判斷總線錯誤(不發(fā)應(yīng)答信號),發(fā)完后請用應(yīng)答函數(shù)應(yīng)答從機。********************************************************************/unsignedcharRcvByte(){unsignedcharretc;unsignedcharBitCnt;retc=0;SDA=1;/*置數(shù)據(jù)線為輸入方式*/for(BitCnt=0;BitCnt<8;BitCnt++){_Nop();SCL=0;/*置時鐘線為低,準備接收數(shù)據(jù)位*/_Nop();_Nop();/*時鐘低電平周期大于4.7μs*/_Nop();_Nop();_Nop();SCL=1;/*置時鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/_Nop();_Nop();retc=retc<<1;if(SDA==1)retc=retc+1;/*讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中*/_Nop();_Nop();}SCL=0;_Nop();_Nop();return(retc);}/********************************************************************應(yīng)答子函數(shù)函數(shù)原型:voidAck_I2c(bita);功能:主控器進行應(yīng)答信號(可以是應(yīng)答或非應(yīng)答信號,由位參數(shù)a決定)********************************************************************/voidAck_I2c(bita){if(a==0)SDA=0;/*在此發(fā)出應(yīng)答或非應(yīng)答信號*/elseSDA=1;_Nop();_Nop();_Nop();SCL=1;_Nop();_Nop();/*時鐘低電平周期大于4μs*/_Nop();_Nop();_Nop();SCL=0;/*清時鐘線,鉗住I2C總線以便繼續(xù)接收*/_Nop();_Nop();}/*******************************************************************ADC發(fā)送字節(jié)[命令]數(shù)據(jù)函數(shù)*******************************************************************/bitISendByte(unsignedcharsla,unsignedcharc){Start_I2c();//啟動總線SendByte(sla);//發(fā)送器件地址if(ack==0)return(0);SendByte(c);//發(fā)送數(shù)據(jù)if(ack==0)return(0);Stop_I2c();//結(jié)束總線return(1);}/*******************************************************************ADC讀字節(jié)數(shù)據(jù)函數(shù)*******************************************************************/unsignedcharIRcvByte(unsignedcharsla){unsignedcharc;Start_I2c();//啟動總線SendByte(sla+1);//發(fā)送器件地址if(ack==0)return(0);c=RcvByte();//讀取數(shù)據(jù)0Ack_I2c(1);//發(fā)送非就答位Stop_I2c();//結(jié)束總線return(c);}#definePCF85910x90//PCF8591地址unsignedintguiAlertCount=0;unsignedcharguiWarningFlag=0;voidYaliPro(){ISendByte(PCF8591,0x40);gucYaliVol=IRcvByte(PCF8591);//ADC3模數(shù)轉(zhuǎn)換4 可調(diào)0-5vbatteryPowergucYaliVol=255-gucYaliVol;if(gucYaliVol>gucYaliVolYuzhi){guiWarningFlag=1;}else{guiWarningFlag=0;}SendData(gucYaliVol);}voidAlertProcess(void){guiAlertCount++;if(1==guiWarningFlag){if(0==guiAlertCount%2){ALERT_ON;}else{ALERT_OFF;}}else{ALERT_OFF;}}intmain(void){ u8t;unsignedintui1msCount=0;unsignedintui1sCount=0;floattemp;unsignedcharucReadFlag=0;unsignedlongulTmp=0; OLED_Init(); //初始化OLED P2=0xff;P1=0; OLED_Clear();OledShow();

溫馨提示

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

評論

0/150

提交評論