無線數(shù)顯溫度計的設計_第1頁
無線數(shù)顯溫度計的設計_第2頁
無線數(shù)顯溫度計的設計_第3頁
無線數(shù)顯溫度計的設計_第4頁
無線數(shù)顯溫度計的設計_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

無線數(shù)顯溫度計的設計摘要當今社會,遠距離的溫度數(shù)據(jù)采集已經很有必要。而且溫度測量的準確度及結構的簡化程度也對生產效益有很大影響。在工農業(yè)生產現(xiàn)場,甚至在日常生活中,也會有許多需要進行溫度的測量以及范圍性監(jiān)控的地方。眾所周知,可能會有種種外界環(huán)境條件的限制,例如高溫、礦井等等人類難以接觸的環(huán)境或者需要非接觸測溫。傳統(tǒng)的溫度計已經不能滿足測量要求。這個時候我們就需要一個可以遠程測量和數(shù)字顯示的溫度計。本設計提出了一種遠距離測量溫度數(shù)據(jù)的思路,采用無線模塊NRF24L01、AT89S52單片機和數(shù)字式的溫度傳感器構成一個遠距離測溫系統(tǒng)。系統(tǒng)通過簡單的通信協(xié)議,實現(xiàn)無線數(shù)據(jù)傳輸。它是可以實現(xiàn)遠程控制的無線測溫系統(tǒng),并且能夠實現(xiàn)在百米范圍內對環(huán)境溫度0.2-99.9進行準確檢測?;跀?shù)字化的要求,本系統(tǒng)采用LCD1602實現(xiàn)溫度顯示。關鍵詞:溫度測量,無線收發(fā),單片機,傳感器TheDesignofWirelessDigitalThermometerAuthor:LiuLixiangTutor:LiHongxiaAbstractWiththesocialprogressanddevelopment,andproductionneeds,theuseofwirelesscommunicationtechnologytemperatureremotedataacquisitionwayalreadymoreandmorebeextensivedapplicationinvariousfields.Andthedegreeofaccuracyandsimplifythestructureoftemperaturemeasurementhasgreatinfluenceonproductionefficiency.Inthefieldofindustrialandagriculturalproduction,andevenindailylife,therewillbemanyneedfortemperaturemeasurementandmonitoringoflocal.Wealsoknowthatmaylimitofvariousenvironmentalconditions,suchashightemperature,mineandsoondifficultforhumanstocontactwiththeenvironment.Thetraditionalthermometerhasbeenunabletomeetthemeasurementrequirements.Thisiswhenweneedaremotemeasurementanddigitaldisplaythermometer.ThedesignproposedawirelesstemperaturemeasurementsolutionsandatemperaturemeasurementsystembyusingthewirelessRFchipNRF24L01,lowpowerconsumptionMCUanddigitaltemperaturesensorDS18B20.Thesystemthroughasimplecommunicationprotocol,wirelessdatatransmission.Itisremotecontrolwirelesstemperaturemeasurementsystemcanbeachieved,andcanrealizetheenvironmenttemperature0.2-99.9accuratedetectionintherangeof100meters.ThissystemusesLCD1602toachievetemperaturedisplay.KeywordS:Temperaturemeasurement,Wirelesstransceiver,MCU,Sensor目錄TOC\o"1-5"\h\z\o"CurrentDocument"1緒論11.1課題背景、目的、意義11.2無線溫度采集系統(tǒng)發(fā)展狀況11.3本課題的研究內容2\o"CurrentDocument"2方案的確定與關鍵器件選擇32.1系統(tǒng)方案的初步構想32.2關鍵器件的確定42.2.1傳感器的確定42.2.2短距離無線通信模塊的確定4\o"CurrentDocument"3各模塊電路設計53.1發(fā)射模塊的電路設計53.1.1溫度數(shù)據(jù)測量電路設計53.1.2控制電路設計63.1.3信號發(fā)射電路設計83.2接收模塊的電路設計113.2.1信號接收電路設計113.2.2數(shù)據(jù)顯示電路設計12\o"CurrentDocument"4軟件設計156.1軟件調試206.2硬件調試216.3焊接調試21\o"CurrentDocument"結論23\o"CurrentDocument"致謝23\o"CurrentDocument"參考文獻25\o"CurrentDocument"附錄:系統(tǒng)程序261緒論1.1課題背景、目的、意義伴隨著社會生活的提高。人們的要求越來越高,現(xiàn)代的工作、科研、社會生產需要的單片機精密性、智能化程度也是在不斷提升的。而單片機在巨大的市場需求刺激下也飛速發(fā)展,逐漸的從功能單一到功能多樣化,以及拓展運用的不斷開發(fā)也越來越豐富。單片機的確給人帶來了很大的進步。溫度測量技術與單片機的結合正是其中一個具有代表性的應用。溫度數(shù)據(jù)采集在各種工農業(yè)生產中具有極其重要的實用性。而現(xiàn)在使用的常規(guī)意義上的溫度計大多精度上都不是很高。而且這些溫度測量裝置有太多的限制性,不能數(shù)字化的顯示出溫度值,所以通常都會有數(shù)值上的讀取誤差。另外傳統(tǒng)溫度計采用的水銀等熱容量都比較大,也就是說測溫時間會有些長。最后傳統(tǒng)溫度計在實際應用中在很多地方通常都是鞭長莫及。本課題設計的無線數(shù)顯溫度計。首先我采用的是數(shù)字顯示,與非數(shù)字顯示的溫度測量系統(tǒng)相比較,數(shù)字顯示的系統(tǒng)在數(shù)據(jù)讀取方面更為便利,測量的溫度更為準確??v觀溫度計的發(fā)展歷程,溫度計的精確性越來越高,而無論是生活中還是工業(yè)生產中,對溫度計的要求也越來越高。像是在人類不能接觸的環(huán)境或者需要采取分區(qū)采樣的環(huán)境。這些都是實際應用中常規(guī)溫度計無法或難以完成的任務。無線通信技術的發(fā)展使得溫度采集更加簡單易行,方便快捷。所以本設計有一定的社會使用性。1.2無線溫度采集系統(tǒng)發(fā)展狀況近年來,無線溫度采集系統(tǒng)被引用于各個領域,已經成為我們生活中不可或缺的一部分。當前對無線式的溫度采集的研究也也來越多,越來越被更多人關注和重視。各式各樣的無線溫度采集系統(tǒng)被廣泛的應用于不同的環(huán)境。而無論是哪種溫度采集系統(tǒng),溫度傳感器都是必不可少的選擇。現(xiàn)代意義的溫度傳感器,技術方面已經極為成熟。生產和生活中的應用也已經十分常見。而數(shù)字式的溫度傳感器可以直接將環(huán)境溫度轉化為數(shù)字信號,而且并不需要中間的數(shù)字模擬轉換電路以及信號放大的電路等外圍模塊。因此大大的簡化了系統(tǒng)的組成。1.3本課題的研究內容本設計研究的內容主要通過溫度傳感器DS18B20實現(xiàn)對外部溫度的采集,利用兩塊無線傳輸模塊NRF24L01分別作為發(fā)射和接收芯片,并通過單片機控制,最終把溫度以數(shù)字形式顯示在LCD液晶顯示屏上。我們這里將整個系統(tǒng)分為兩個模塊,由溫度傳感器和52單片機以及一片NRF24L01組成的采集溫度跟發(fā)射系統(tǒng);有另外一片NRF24L01,52單片機以及LCD液晶顯示屏組成的接收跟溫度顯示系統(tǒng)。本設計的主要內容有:(1)作為溫度傳感器的DS18B20采集外部環(huán)境的溫度,并且能滿足設計要求的測溫范圍。(2)作為無線收發(fā)模塊的兩片NRF24L01能分別在設計要求的距離內發(fā)射跟接收信號。(3)用LCD液晶顯示屏顯示出數(shù)字式溫度。(4)溫度顯示至少能精度到小數(shù)點后一位。2方案的確定與關鍵器件選擇2.1系統(tǒng)方案的初步構想本設計準備采用由溫度傳感器,無線通信模塊以及顯示電路構成無線測溫系統(tǒng)。系統(tǒng)的結構對系統(tǒng)的功能影響很大,本系統(tǒng)要最終能用溫度傳感器實現(xiàn)溫度數(shù)據(jù)的采集、并在經過單片機的簡單處理之后能通過無線通信模塊實現(xiàn)無線數(shù)據(jù)的收發(fā),并能夠數(shù)字化的顯示出外部環(huán)境的溫度。因此我將本設計的系統(tǒng)分為幾個模塊,分別實現(xiàn)以上幾個功能。發(fā)射模塊:本部分的工作原理是由數(shù)字溫度傳感器測溫并把數(shù)據(jù)傳輸?shù)街醒肟刂茊卧兄醒肟刂茊卧幚碓偻ㄟ^無線收發(fā)電路向外發(fā)送信號。具體結構圖如圖2.1所示。數(shù)字溫度傳感中央控制單元>ATR9S52圖2.1發(fā)射模塊結構框圖數(shù)字溫度傳感接收模塊:接收模塊在本設計中將運用另一片NRF24L01作為信號的接收芯片,同樣以單片機作為主控單元,最后用LCD1602顯示出數(shù)字化的溫度值。本部分的工作原理:NRF24L01接收發(fā)射模塊中發(fā)射的信號然后將接收到的信號傳輸?shù)絾纹瑱C中,單片機經過數(shù)據(jù)的處理,最終在液晶顯示屏LCD1602顯示出溫度值。具體結構圖如圖2.2所示。圖2.2接收模塊結構圖2.2關鍵器件的確定2.2.1圖2.2接收模塊結構圖在選擇溫度傳感器上,傳統(tǒng)的模擬式傳感器具有很多優(yōu)點,例如測量裝換速度快,溫度測量的范圍較快等[1]。但是傳統(tǒng)的模擬式傳感器輸出的模擬信號需要先進過取樣、放大和模數(shù)轉換電路的處理,最后才能將轉換的數(shù)字信號交由處理控制系統(tǒng)處理。這樣電路的設計將會極為復雜,元器件數(shù)量難以下降,也會隨之影響產品的可靠性。另外模擬信號轉換為數(shù)字信號的過程中精度不能保證。而直接采用數(shù)字式的溫度計則不需要數(shù)模轉換電路,直接輸出的是數(shù)字溫度信號,所以數(shù)字式的溫度傳感器的輸出信號更加穩(wěn)定,準確度更高,抗干擾能力更強??紤]到以上的情況,本次設計采用是溫度傳感器。2.2.2短距離無線通信模塊的確定無線通信模塊的的開發(fā),在近年來已經被世界上的各個芯片生產廠家研究和利用起來。無線通信芯片通常都呈現(xiàn)模塊化,大部分功能都集中在芯片內部,而且大部分的外部電路及其器件都是自己配置好的,所有的高頻元件:電感、電容、晶振振蕩器等都集成在芯片內部。然而在與單片機的配合應用上,通過查閱資料,我了解的幾種無線芯片中NRF24L01可以直接接單片機串口使用,數(shù)據(jù)無需曼徹斯特編碼,可直接傳輸串口數(shù)據(jù),效率高發(fā)射電流為9mA,接收電流為11mA最大輸出功率+10dBm速率為20Kbps約10個外圍元件數(shù)量需要外接天線的數(shù)量(分別為收發(fā)用)是一個,綜合以上的各個條件都極為符合本次的設計需要。因此我在本次設計中用NRF24L01做為系統(tǒng)的無線通信模塊。12345678

IB

CCCCCCJD心

村NNN田N#D<V12345678

IB

CCCCCCJD心

村NNN田N#D<VDCCGCCCCMNNNNNNNGMM二M54321^-93.1發(fā)射模塊的電路設計3.1.1溫度數(shù)據(jù)測量電路設計DS18B20S是一個能直接輸出數(shù)字信號的溫度傳感器⑵。其引腳排列圖如圖3.1所示。9123-底視[>SlBdO051^205123-PR15KICKAGEie-PlN&SOP圖3.1DS18B20引腳排列圖其引腳定義如下:DQ是單數(shù)據(jù)總線,是作為芯片的數(shù)字信號輸入/輸出端;GND是接地端;VDD是外接供電電源接入端;DS18B20是數(shù)字式的溫度傳感器,在與單片機的連接中只有DQ需要與單片機連接。在實際運用和大多數(shù)需要測溫的仿真實驗,DS18B20也一直應用廣泛。而且數(shù)字式的溫度傳感器直接輸出數(shù)字信號,在與單片機的連接中不需要復雜的外接電路[3]。,具體連接圖如圖3.2所示。三溫度嵬器J1_123;18B2>01R14k7DSU1+5V1P10/T2VCCP11/T2EXAD0/P00P12AD1/P01P13AD2/P02P14AD3/P03P15(MOSI)AD4/P04P16(MISO)AD5/P05P17(SCK)AD6/P06RSTAD7P07P30/RXDEA/VPPP31/TXDALE/PROGP32/INT0PSENP33/INT1A15/P27P34/T0A14/P26P35/TLA13/P25P36/WRA12/P24P37/RDA11/P23XTAL2A10/P22XTAL1A9/P21GNDA8/P20—2_3—4—5―6——78—9—10^11415-J.6_a17尋_d.819_20—40393837363534333231302928272625242322213.1.2控制電路設計AT89S52圖3.2DS18B20與單片機連接圖AT89S52單片機片片內數(shù)據(jù)儲存內含128字節(jié)的RAM[4]。其具體引腳結構如圖3.3所示。(T2)Pl。一(T2ExiplJ一m一Pi4—S—4MISOJPI6—(SCK)PI1—RST—[R.XD1P10—(TXDJP31」———uvnm—■(TDJPi4—'(T]:lPJ5—(WJP3T_1XTAI.2—XTA1.P—GKD——<y-nj翦375360JS34朝910II11羊抻機引1*113上&1427153616251T24IS部19>■?知21—vet—網(wǎng).。3啊—Fn—叩—pgwob—Paa1X1?—EA-VJJD—AI..DPRC1G—PSIzK1—P27CAI5)一PNMAI引—也5(A]3)■—P2.^AI2)—P2女A11卜一胞2(AIQ|i—P2l(A9)1—PMCl(ASji單片機有40個引腳,其中P0到P3總共由有32個外部雙向1/0端口;;中斷系統(tǒng)也包括外部中斷0、外部中斷1、T0、T1、T2等數(shù)個中斷源;我們在實際應用中大多選用12MHZ的晶振;并且單片機還具有看門狗定時器;具有斷電標志POF等等[5]。其引腳定義如下:VCC:電源端。GND:接地端。P0口:P0口是漏極開路型雙向I/O口。P1口:P1口是一個內部帶上拉電阻的8位雙向I/O口。P2口:P2口也是一個內部帶上拉電阻的8位雙向I/O口。P3口:P3口是雙功能端口。作為普通I/O口使用時,同P1、P2口一樣,P3口還具備第二功能。RST:復位輸入。ALE/PROG:地址鎖存控制信號(ALE)在訪問外部程序存儲器時,鎖存低8位地址的輸出脈沖。PSEN:外部程序存儲器選通信號(PSEN)是外部程序存儲器選通信號。EA/VPP:使能端。XTAL1:振蕩器反相放大器的輸入端。XTAL2:振蕩器反相放大器的輸出端。具體的單片機最小系統(tǒng)如圖3.4所示。

33PP101P12P123P134P145P156P16733PP101P12P123P134P145P156P167P178REST9P3010P3111P3212qP3313堂P3414P3515P3616qP3718192012MC4P10/T2VCCP11/T2EXAD0/P00P12AD1/P01P13AD2/P02P14AD3/P03P15(MOSI)AD4/P04P16(MISO)AD5/P05P17(SCK)AD6/P06RSTAD7/P07P30/RXDEA/VPPP31/TXDALE/PROGP32/INT0PSENP33/INT1A15/P27P34/T0A14/P26P35/T1—A13/P25P36/WE-A12/P24P37/RDA11/P23XTAL2A10/P22XTAL1A9/P21GNDA8/P20U1AT89S5240—J9P00蟄P0137P0236P0335P0434P05丑P0632P073130_0-2928—CE27_CK23_IRQ22_O21—CSN33P控制電路主控電路采用單片機位主控芯片,配合外圍電路兩個33PF電容、12MHZ的晶振以及復位電路構成。3.1.3信號發(fā)射電路設計NRF24L01是一個集成芯片[6]??梢酝瑫r滿足發(fā)射信號和接收信號的要求。所以在發(fā)射模塊和接收模塊電路中各接入一片NRF24L01以實現(xiàn)兩塊模塊中的無線通信。它的引腳圖如圖3.5所示。呂蘭沼>(_□>nQ>a我>蘭£三*

圖3.5NRF24L01引腳圖呂蘭沼>(_□>nQ>a我>蘭£三*在本設計的實際應用中NRF24L01是已經配置好功能的模塊,其引腳定義如下:VCC:電源端,常用電壓為3.3V。GND:接地端。CE:數(shù)字輸入端,RX或者是TX模式的選擇CSN:數(shù)字輸入端,SPI的片選信號。SCK:數(shù)字輸入端,SPI時鐘。MOSI:數(shù)字輸入端,從SPI中數(shù)據(jù)的輸入腳。MISO:數(shù)字輸入端,從SPI中數(shù)據(jù)的輸出腳。IRQ:數(shù)字輸入端,可屏蔽中斷腳。NRF24L01無線集成模塊式可以直接與單片機的I/O端口相聯(lián)接的[7]。本次設計中,具體接口電路如圖3.6所示。J9用來表示無線模塊NRF24L01。(1)、(2)、數(shù)據(jù)通過(1)、(2)、送入接收模塊中起到接收作用的NRF24L01的地址和數(shù)據(jù)。(3(3)、使能端置“0”,激發(fā)NRF24L01進行發(fā)射。(4)、NRF24L01正式開始ShockBurstTM發(fā)射

圖(4)、NRF24L01正式開始ShockBurstTM發(fā)射前面提到NRF24L01的工作電壓在3.3V到3.6V,而單片機的工作電壓時5.0V。因此單片機不能和無線發(fā)射模塊共用一個電源,通過查閱資料,這里有一個解決方案。通過一個變壓模塊來ASM1117變換到適用于NRF24L01的電壓[8]。ASM1117通過對輸出電壓采樣,然后反饋到調節(jié)電路去調節(jié)輸出級調整管的阻抗,當輸出電壓偏低時,就調節(jié)輸出級的阻抗變小從而減小調整管的壓降,當輸出電壓偏高時,就調節(jié)輸出級的阻抗變大從而增大調整管的壓降,這樣就維持了輸出電壓的穩(wěn)定。ASM1117引腳圖如圖3.7所示。其引腳定義如下:VIN是外接電源輸入端GND/ADJ是接地端;VOUT是輸出電壓端;口s_-rQ<QNQfw圖3.7ASM1117引腳圖口s_-rQ<QNQfwAMS1117是一款正電壓輸出低壓差的三端線性穩(wěn)壓電路。AMS1117及其外圍電路可以滿足多個固定電壓的要求。本設計采用ASM1117及其外圍模塊構成的變壓電路作為NRF24L01的電源輸入。具體的穩(wěn)壓變壓模塊如圖3.8所示。

U3AMS]117-3.U3AMS]117-3.:」1I-5VC7十

^^33uF/25V<|+3.3VC7十

^^33uF/25V圖3.8變壓電路3.2接收模塊的電路設計3.2.1信號接收電路設計接收模塊中的接收芯片仍然是集成芯片NRF24L01,芯片的具體特點在這里就不做重復贅述。在ShockBurstTM收發(fā)模式下,接收數(shù)據(jù)時,自動把CRC校驗碼移去。其接收流程如下:(1)、NRF24L01初始化,寫入地址和接收數(shù)據(jù)的容量。(2)、進入接收狀態(tài),把CE端置高電平。(3)、延時之后。NRF24L01開始等待接收數(shù)據(jù)。(4)、判斷接收到的數(shù)據(jù)是否正確。(5)、NRF24L01通過DR1置高電平通知微處理器。(6)、微控制器把數(shù)據(jù)從NRF24L01移出。(7)、數(shù)據(jù)移完之后,把DR1置“0”,此時,分為兩個狀態(tài),當使能端為“1”,就繼續(xù)等待接收數(shù)據(jù);當使能端為“0”,接收流程停止。在接收模塊電路中NRF24L01與單片機的連接基本不變。具體接口電路如圖3.9所示。J5用來表示無線模塊NRF24L01。P112P123P134P145P156P167P178REST9P3010P3111P3212cP3313nP3414P3515P3616右P3717_H18-19P101201234567891011121314151617181920P10/T2VCCP11/T2EXAD0/P00P12AD1/P01P13AD2/P02P14AD3/P03P15(MOSI)AD4/P04P16(MISO)AD5/P05P17(SCK)AD6/P06RSTAD7/P07P30/RXDEA/VPPP31/TXDALE/PROGP32/INT0PSENP33/INT1A15/P27P34/T0A14/P26P35/T1A13/P25P36/WRA12/P24P37/RDA11/P23XTAL2A10/P22XTAL1A9/P21GNDA8/P204039P0038P0137P02笠P0335P0434P05dP0632P07312502928CE2423IRQAM22MOSI21CSN27SCK26MISOAT89S52+33VCER1K12345678910CSNR3SCKr1K4MOSI"1KMISOR1KIRQANR81KJ5NRF2401+NRF24L01無接?塊圖3.9接收模塊NRF24L01與單片機接口電路+5VP10/T2VCCP11/T2EXAD0/P00P12AD1/P01P13AD2/P02P14AD3/P03P15(MOSI)AD4/P04P16(MISO)AD5/P05P17(SCK)AD6/P06RSTAD7/P07P30/RXDEA/VPP4039P0038P0137P0236P0335P0434P0533P0632P0731I130P31/TXDALE/PROGP32/INT0PSENP33/INT1A15/P27P34/T0A14/P26P35/TLA13/P25P36/WRA12/P24P37/RDA11/P23XTAL2A10/P22XTAL1A9/P21GNDA8/P20O29-28CE27SCK26MI252423IRQ22MO21CSNU1AT89S52+5V3.2.2數(shù)據(jù)顯示電路設計本次設計的數(shù)據(jù)顯示模塊由LCD1602完成。LCD1602液晶也被稱為1602字符型液晶,它是專門用來顯示字母、數(shù)字、符號等的點陣型的一種液晶模塊。LCD1602由若十個5X7或者5X11等點陣字符位組成。考慮本設計只需要顯示數(shù)字型溫度,1602可以很好的完成設局要求。不能顯示圖像的缺點可以忽略不計[9]。其具體的引腳結構如圖3.12所示。其引腳定義如下:第1腳:GND為接地端。第2腳:VCC為高電平輸入端。第3腳:V0引腳用來調整液晶屏的對比度,連接VCC時對比度最弱,連接GND電源時對比度最高。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:RW位讀寫端口,接VCC時為讀。第6腳:E使能端,高電平時讀取信息,負跳變時執(zhí)行指令。第7?14腳:D0?D7為8位雙向數(shù)據(jù)端。15腳背光正極。16腳背光負極。單片機與LCD具體連接電路如圖3.11所示。圖中用J3表示LCD1602。

+5VP^0pii—1—□P112pi口P123piQ4P134+5VP^0pii—1—□P112pi口P123piQ4P134—CP145P156r—iP17—8R^ST913010I1P3111P9c■1CP3212,,■1cP3313¥iaP34141UP3515r、c/P3616wP3^H_oU1P10/T2VCCP11/T2EXAD0/P00P12AD1/P01P13AD2/P02P14AD3/P03P15(MOSI)AD4/P04P16(MISO)AD5/P05,P17(SCK)AD6/P06RSTAD7/P07P30/RXDEA/VPPP31/TXDALE/PROGP32/INT0PSENP33/INT1A15/P27P34/T0A14/P26P35*A13/P25P36/WRA12/P24P37/RDA11/P23XTAL2A10/P22XTAL1A9/P21GNDA8/P2018■19■20■40■3^P00■3^P01■3^P02■3^P03■3^P04■3^P05■3^P06■3^P07■31'+5VR1VCCO~29-28CE27SCK26MI——25——2423~IRQ2kBtKBtAP17DB7P16DB6P15DB5P14DB4P13DB3P12DB2P11DB1P10DB0P32E——P31R/WP30RSV6—VDDVCC60216151413121110987654321602液晶設計中采用LCD1602液晶模塊直接與單片機的P1口連接作為系統(tǒng)的顯示模塊,,P3口的P3.0到P3.2分別連接液晶模塊的使能信號E,數(shù)據(jù)/命令選擇RS,R/W讀寫端口。4軟件設計4.1發(fā)射模塊軟件設計本系統(tǒng)采用DS18B20采集環(huán)境溫度[101將數(shù)字信號傳遞到單片機,單片機讀取外部溫度信號并做出處理,再將處理后的數(shù)據(jù)經無線發(fā)送模塊調制后發(fā)送。無線發(fā)射模塊圖4.1發(fā)射模塊軟件流程

4.2接收模塊軟件設計接收系統(tǒng)電路上電后,主函數(shù)開始初始化液晶和無線模塊然后開始數(shù)據(jù)接收,接收到數(shù)據(jù)后對數(shù)據(jù)進行校驗,看接收到的數(shù)據(jù)是否準確,若果不正確則返回重新校驗,正確就繼續(xù)進行檢測以及對數(shù)據(jù)的緩存和處理[11。最后將處理完的數(shù)據(jù)在LCD上顯示溫度值。無線接收模塊的軟件流程如圖4.2所示。數(shù)據(jù)是否準確數(shù)據(jù)是否收完結束NYY初始化LCD、無線模塊數(shù)據(jù)接收數(shù)據(jù)檢驗數(shù)據(jù)處理Y數(shù)據(jù)是否準確數(shù)據(jù)是否收完結束NYY初始化LCD、無線模塊數(shù)據(jù)接收數(shù)據(jù)檢驗數(shù)據(jù)處理Y數(shù)據(jù)緩存顯示溫度圖4.2接收模塊軟件流程程序流程圖的設計就是對程序流程編寫的設計。只有畫好程序流程圖才能清晰的寫出程序執(zhí)行的過程,這樣才不至于程序編寫混亂。程序流程圖的順序是直觀明了的,這將有利于在接下來的程序編寫時出現(xiàn)錯誤時能及時的找出并改正,從而節(jié)省了大量的時間。通過程序分析圖可以很清楚的知道設計任務,然后進行任務的分析,通過分析各個模塊的控制程序和各程序模塊之間的信號傳遞接口便很容易的設計需要達到這個目標所設計的多種算法,然后通過比較各種算法的優(yōu)缺點和難易程度然后選擇最優(yōu)程序算法。確定程序算法之后便可以設計流程圖,然后再根據(jù)程序流程圖編寫軟件,之后進行軟件運行調試,看是否有錯誤,如果出現(xiàn)錯誤之后要分析是編寫錯誤還是設計的流程圖錯誤,如果流程圖錯誤的話就需要修改程序流程圖,如果程序流程圖沒有錯誤,便要檢查程序編寫過程中是否出現(xiàn)過錯誤,從而修正程序,然后繼續(xù)調試,周而復始,直到把程序能夠在軟件上能夠正確編譯。5總體電路設計發(fā)射模塊的總體電路圖總共由電源模塊、單片機的最小系統(tǒng)、溫度采集模塊DS18B20、無線通信(發(fā)射)模塊組成。電源模塊中,由外部5.0V供電,經由AMS1117穩(wěn)壓降壓為3.3V之后為NRF24L01供電;單片機最小系統(tǒng)中,18,19接外部振蕩電路,9端接復位電路,EA端接:“1”;溫度采集模塊中,DS18B20接在單片機的P1口上;無線通信模塊中,NRF24L01由單片機的P2端口控制。本系統(tǒng)由溫度傳感器DS18B20作為溫度采集模塊,采集的溫度信號傳輸?shù)絾纹瑱C中并經過了單片機的處理之后,將信號傳輸?shù)綗o線模塊NRF24L01中。發(fā)射模塊總體電路圖如圖5.1所示。n7]0LED2丑心K十15CON3+5VPJ0T2V0CpiiTm:PKAD】F9】PJ3FFAECPO:AKKliF130皿1AD+F04P10攻。AD」Kl!n7]0LED2丑心K十15CON3+5VPJ0T2V0CpiiTm:PKAD】F9】PJ3FFAECPO:AKKliF130皿1AD+F04P10攻。AD」Kl!PH{S叫AD泗6KSTP藥EXDfTvppP33TKDALZFEOGpssnrro四IN7]P54T0P主T1ABKJAJ2K4AJ]PliKI心STT.U]電P2]GKDASKfiyT~^3T?m滔二Wg33PO]37KL鑫P0333網(wǎng)5453P0532PO7三或~CErq2-2iJUuo2]CSX43??KKT肝J]十接收模塊總體電路總共由電源模塊、單片機最小系統(tǒng)、無線通信(接收)模塊、LCD顯示電路組成。電源模塊中,由外部5.0V供電,經由AMS1117穩(wěn)壓降壓為3.3V之后為NRF24L01供電;單片機最小系統(tǒng)中,18,19接外部振蕩電路,9端接復位電路,EA端接“1”;LCD顯示電路中,雙向數(shù)據(jù)端口D0到D7接在單片機的P1上,使能端E,讀寫R/W,寄存RS分別接在P3.0到P3.2。無線通信模塊中,NRF24L01由單片機的P2端口控制。本系統(tǒng)中由無線模塊NRF24L01接收從發(fā)射模塊發(fā)射的信號,再經由單片機處理接收到的信號,最后在LCD1602液晶顯示屏上數(shù)字化的顯示溫度值。接收模塊總體電路圖如圖5.2所示。a*E]7睥KATS9S^210IkKTAL2ETALJG-KDP]0THPl:TH13vcc]*外部供電THM]§PIT~mTploTokTITE5UpHpITk?a*E]7睥KATS9S^210IkKTAL2ETALJG-KDP]0THPl:TH13vcc]*外部供電THM]§PIT~mTploTokTITE5UpHpITk?而P]0T3PllT2EXFl:PBPMP]2-;3IO2T;iF]ftS£I3Q::iP]7{SCX)KT肋踏qP31T5DP32i?P33JNT]PJ4T0PJ1T]雙吞AD2KE如此AD4K4亦RCAD§顧ADTKT示VFE,4LE^CGA35PT7A]4K-I5_mpn直】土E4.%】】心A]0K2.WK]-LSKC39TWism】17Kd沛K'i蒙KHS4KC33TO652Ta751樊-2S€EIf?idl!”■嘻24IS22W21CHSelkgk孝Ek防5L15EG5E34E-5+E]jD15E32DK.mDEIE1ODMpin.~PlTTw7CSK七rSCK心頊XELSO四-WR3;曰日日KRT%|】+6.1軟件調試在軟件程序的調試上,在程序的編寫上采用KeilC軟件分別對發(fā)射模塊和接收模塊的程序做編譯測試[12。在軟件編寫方面,采用化整為零的思想,把整個程序劃分為幾個模塊,把這些模塊編寫成H文件,然后在編寫主程序時把它們分別像添加REG52.h”一樣把他們都添加進來,以便程序調用。在編寫顯示程序時第一次遇到了這個問題,怎么樣使顯示內容的時間跳動連續(xù),沒有突變現(xiàn)象。開始時使用程序的定時中斷顯示要顯示的內容,每次到達預定設置的時間時就顯示需要顯示的內容,后來發(fā)現(xiàn)這樣顯示導致有時上一個沒有顯示完成,下一次中斷又到來的情況。最后通過查閱相關的例子,仿照別人的程序,在主程序中讀取所要顯示的內容,然后把要顯示的內容填寫到數(shù)組中,然后在中斷中設置一個標志位,每次中斷的時間為50ms,當標志位計數(shù)到十次,也就是500ms時顯示一次讀取的數(shù)據(jù),而顯示的秒位為1秒變化一次,所以顯示的內容不會出現(xiàn)跳變的現(xiàn)象。發(fā)射模塊程序的編譯結果如圖6.1所示。BuTIdOutputBuildtaiget'Taiget.1'linking...片片*WAELIINGLI:UHRE50LVEDEXTERNAL5YMEOLSYMBOL:?C_5TAETMODULE:STARTUP.□!?j(?C_STARTUP}***WAENINGL2:REFERENCEMMETC-UNRESOLVEDEXTERNALSYMBOL:MODULE:3TARTUP.ohj(?C_STARTU?}ADDRESS:OSOAH一ExogxaxuSize:data=2.Qrrcaiji"-0Etioi(a},2Warn.in.g(3).圖6.1發(fā)射模塊程序編譯結果接收模塊程序的編譯結果如圖6.2所示。BllllflOutpjtxBuildtarget'Taiget.1'己ssentling5TAKTUP.A51...linking...WARMINGLI:UNRESOLVEDEXTERNALSYMBOLSyMEOL:?C_5TARTMODULE:STARTUP.ofcj「:匚_5TARTUP)*女*WARNINGL2:REFEKENCEMABETOUUR.E5OLVEDEXTERNALSYMBOL:?CETARTMODULE:STARTUP.nbj(?CST心TUP}ADDRESS:080AHProgramSize:data=3.0xdata=0code=15r1^iehBO'j.ri-0Ettot(s)f2Warning(s).圖6.2發(fā)射模塊程序編譯結果6.2硬件調試在完成了軟件的編譯以及硬件的焊接工作后,通過單片機程序燒寫軟件將發(fā)射、接收兩部分程序編譯后的hex文件燒寫進AT89S52單片機中。最后進行上電調試。這部分的調試主要是測試的是由發(fā)射模塊發(fā)射的信號,接收模塊能否在一定距離內接收。并且最后把溫度值顯示在LCD液晶顯示屏上。檢測效果圖如圖6.3所示。6.3焊接調試在經過了軟件部分和硬件的調試之后,一個必須面對的過程就是焊接各個元器件,完成了初步的的焊接之后,上電測試過程中,LCD顯示屏一直顯示的不夠明亮,檢查各個模塊電路,沒有發(fā)現(xiàn)明顯焊接錯誤,然后在經過詢問有豐富的焊接經驗的同學,并向他們請教之后發(fā)現(xiàn),LCD顯示屏引腳中V0引腳是影響顯示屏對比度的主要因素,接高電平時對比度在差,接低電平時對比度最高,中間可以接滑動變阻器調節(jié)。然后找到這個引腳,果然這個引腳連到了高電平。經過簡單的電路修改,重新上電測試,然而測試過程仍然不是很順利。雖然在接收模塊上的LCD顯示屏顯示出了數(shù)字化的溫度值,但是在經過對傳感器的溫度變化測試中,發(fā)現(xiàn)顯示電路中,溫度值始終保持不變。既然軟件程序調試過程中能夠編譯成功,并且在LCD上能夠顯示溫度值,說明軟件和硬件都沒有問題。經過簡單的分析,確定問題最大的可能還是出在軟件程序上,這設計到一個程序循環(huán)的過程,是不是程序不能夠完整的循環(huán),導致程序只能運行一次,即發(fā)射模塊只發(fā)射一次溫度信號。有過這個分析之后,重新檢查了程序,果然,在發(fā)射采集的模塊程序中,是沒有循環(huán)的。認識到這個失誤之后,經過改正,再次上電測試后,接收模塊已經能動態(tài)的顯示出環(huán)境中的溫度值。自此,本次設計最終完成。結論設計完成的系統(tǒng)可以準確的以無線發(fā)射的形式在LCD液晶顯示屏上顯示出當前溫度。NRF24L01無線收發(fā)模塊可以實現(xiàn)設計要求的距離內無線信號的傳輸。并達到要求精度。在完成本次設計的過程中,不僅鞏固了單片機的專業(yè)知識和LCD液晶顯示的相關知識,而且學會了無線收發(fā)模塊的簡單使用。本設計雖然完成了基本的設計要求,達到了要求的精度。但是設計中仍然存在這一些不足,不如說受無線收發(fā)芯片的限制導致的無線信號傳輸距離不夠遠的問題,這樣很大程度上局限了該溫度測量系統(tǒng)的使用空間。解決這個問題可以更換無線模塊或者添加天線等方法。但是因為設計條件局限,不能做到更加完美。再比如,本設計還可以進行許多功能擴展,單片機的許多I/O端口沒有被使用,所以可以為本系統(tǒng)添加其他的檢測功能,例如濕度、光照等。使系統(tǒng)更加完善,能夠被應用與更廣闊的環(huán)境中。致謝時光荏苒,轉眼大學時光就要走到盡頭。而作為大學期間最后一個任務的畢業(yè)設計無疑是對我們這幾年學習的專業(yè)知識最好的考卷。在此次畢業(yè)設計即將順利完成之時,我對大學期間所有大學期間教誨過我的所有老師拜師衷心的謝意,是她們孜孜不倦的教誨讓我掌握了許多專業(yè)知識,我才會有能力做此設計。參考文獻丁鎮(zhèn)生.傳感器與傳感技術應用[M].北京:科學出版社,2002:33.何希才.傳感器及其應用電路[M].北京:電子工業(yè)出版社,2001:60.沙占友.智能化集成溫度傳感器原理[M].北京:機械工業(yè)出版社,2002:56.胡漢才.單片機原理及其接口技術[M].北京:清華大學出版社,2004:50.李廣弟.單片機基礎[M].北京:北京航空航天出版社,1992:34.鄭維智,張海濱.短距離無線通信在控制中的應用[J].數(shù)據(jù)通信,2002.42(12):40-41.程海英,陳勇.無線傳感器技術在智能家居系統(tǒng)的應用[J].中國科技信息,2007.20(9):56-58.胡天明,齊建家等基于NRF24L01無線加速度測量系統(tǒng)設計[J].龍黑江工程學院學報(自然科學版),2008.22(59-62).夏大勇,周曉輝.LCD的簡單開發(fā)[J].工業(yè)儀表與自動化裝置,2007.(1):43--46.趙繼文.傳感器與應用電路設計[M].北京:科學出版社,2002:48.CliveSeager.Picaxeinfraredremotecontrol[J].SiliconChip,2004.Vol.17:90-93.Kuhn,Jochen;Vogt,Patrik.Diffractionexperimentswithinfraredremotecontrols[J].PhysicsTeacher,2012.Vol.50:118-119.附錄:系統(tǒng)程序#include<reg52.h>#include<intrins.h>typedefunsignedcharuchar;typedefunsignedcharuint;端口定義〃****************************************Nrf24L01“““““““““““““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小sbitMISO=P2A5;sbitSCK=P2A6;sbitCE=P2A7;sbitCSN=P2A0;sbitMOSI=P2a1;sbitIRQ=P2A2;T““““““““““““““““““““““““““““““““““//************************************LED**********************************“““““““““““““““““小小小小小小小小小小小小小小小小小sbitled=P1A6;〃*****************************************DS1820““““““““““““““““““““““““““““““““““““““““附錄:系統(tǒng)程序端口定義sbitDQ=P1A0;0-9/3““““““““““““““““““““““““““““““““““//***********************************“““““““““““““““““““““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小ucharseg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

//0??9段碼ucharseg1[10]={0x40,0x4F,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};uchardatatemp_data[2]={0x00,0x00};集數(shù)據(jù)緩沖區(qū)uchardispaly[20];//溫度采//顯示緩沖區(qū)/3“““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““//**************************************************************************uintbdata0-9uchar//溫度采//顯示緩uintbdatasta;//NRF24L01狀態(tài)標志sbitRX_DR=staA6;sbitTX_DS=staA5;sbitMAX_RT=staA4;//??!-?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?RTilI'AT/?1、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?〃*************************************NRF24L01****************************““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小#defineTXADRWIDTH//本機地址寬度設置#defineRXADRWIDTH//接收方地址寬度設置#defineTX#defineTXADRWIDTH//本機地址寬度設置#defineRXADRWIDTH//接收方地址寬度設置#defineTXPLOADWIDTH20//4字節(jié)數(shù)據(jù)長度#defineRX_PLOAD_WIDTH20//4字節(jié)數(shù)據(jù)長度uintconstTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//本地地uintconstRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//接收地詳細請對照,〃*****************************Nrf24L01寄存器指令,■A1C、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?、L?Page18******************************

詳細請對照,#defineREAD_REG0x00//讀寄存器指令#defineWRITE_REG0x20//寫寄存器指令#defineRD_RX_PLOAD0x61//讀取接收數(shù)據(jù)指令#defineWR_TX_PLOAD0xA0//寫待發(fā)數(shù)據(jù)指令#defineFLUSH_TX0xE1//沖洗發(fā)送FIFO指令#defineFLUSH_RX0xE2//沖洗接收FIFO指令#defineREUSE_TX_PL0xE3//定義重復裝載數(shù)據(jù)指令#defineNOP0xFF//保留〃****************************Spi(nRF24L01)寄存器地址,詳細請對照,24**********************#defineCONFIG0x00//配置收發(fā)狀態(tài),CRC校驗模式以及收發(fā)狀態(tài)響應方式#defineEN_AA0x01//自動應答功能設置#defineEN_RXADDR0x02//可用信道設置#defineSETUP_AW0x03//收發(fā)地址寬度設置#defineSETUP_RETR0x04//自動重發(fā)功能設置#defineRF_CH0x05//工作頻率設置#defineRF_SETUP0x06//發(fā)射速率、功耗功能設置#defineSTATUS0x07//狀態(tài)寄存器#defineOBSERVE_TX0x08//發(fā)送監(jiān)測功能#defineCD0x09//地址檢測#defineRX_ADDR_P00x0A//頻道0接收數(shù)據(jù)地址#defineRX_ADDR_P10x0B//頻道1接收數(shù)據(jù)地址#defineRX_ADDR_P20x0C//頻道2接收數(shù)據(jù)地址#defineRX_ADDR_P30x0D//頻道3接收數(shù)據(jù)地址

#defineRX_ADDR_P40x0E//頻道4接收數(shù)據(jù)地址#defineRX_ADDR_P50x0F//頻道5接收數(shù)據(jù)地址#defineTX_ADDR0x10//發(fā)送地址寄存器#defineRX_PW_P00x11//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P10x12//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P20x13//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P30x14//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P40x15//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P50x16//接收頻道0接收數(shù)據(jù)長度#defineFIFO_STATUS0x17//FIFO棧入棧出狀態(tài)寄存器設置//************************************NRF24L01函數(shù)申明““““““““““““““““““““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小voidDelay(unsignedints);voidinerDelay_us(unsignedcharn);voidinit_NRF24L01(void);uintSPI_RW(uintuchar);ucharSPI_Read(ucharreg);voidSetRX_Mode(void);uintSPI_RW_Reg(ucharreg,ucharvalue);uintSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars);uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars);unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf);voidnRF24L01_TxPacket(unsignedchar*tx_buf);//************************************DS18B20““““““““““““““““““““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小voiddelay1(uinti);voidds_reset(void);voidwrite_byte(ucharvalue);ucharread_byte(void);voidread_temp();voidwork_temp();/**************************************************************************““““““““““““““““小小小小小小小小小小小小小小小小/*延時函數(shù)/**************************************************************************““““““““““““““““/****************/voidinerDelay_us(unsignedcharn){for(;n>0;n--)_nop_();}/3“““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““//**************************************************************************““““““““““““““小小小小小小小小小小小小小小/*NRF24L01初始化/3“““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““//**************************************************************************“““““““““““““/*************/voidinit_NRF24L01(void){inerDelay_us(100);CE=0;//chipenableCSN=1;//SpidisableSCK=0;//SpiclocklineinithighSPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//寫本地地址SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//寫接收端地址SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//頻道0自動ACK應答允許SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//允許接收地址只有頻道0,如果需要多頻道可以參考Page21SPI_RW_Reg(WRITE_REG+RF_CH,0);//設置信道工作為2.4GHZ,收發(fā)必須一致SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//設置接收數(shù)據(jù)長度,本次設置為4字節(jié)SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);//設置發(fā)射速率為1Mkbps,發(fā)射功率為最大值0dB}/**************************************************************************““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小/*函數(shù):uintSPI_RW(uintuchar)/*功能:NRF24L01的SPI寫時序,詳細看時序圖,Page19/**************************************************************************““““““““““““““““““““““““““/**************************/uintSPI_RW(uintuchar){uintbit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr++)//output8-bit{

MOSI=(uchar&0x80);//output'uchar',MSBtoMOSIuchar=(uchar<<1);//shiftnextbitMOSI=(uchar&0x80);//output'uchar',MSBtoMOSIuchar=(uchar<<1);//shiftnextbitintoMSB..SCK=1;//SetSCKhigh..uchar|=MISO;//capturecurrentMISObitSCK=0;//..thensetSCKlowagainreturn(uchar);//returnreaducharucharreg_val;CSN=0;SPI_RW(reg);//CSNlow,initializeCSN=0;SPI_RW(reg);//Selectregistertoreadfrom..reg_val=SPI_RW(0);//..thenreadregistervalueCSN=1;//CSNhigh,terminateSPIcommunicationreturn(reg_val);//returnregistervalue/**************************************************************************““““““““““““““““““““““““““reg_val=SPI_RW(0);//..thenreadregistervalueCSN=1;//CSNhigh,terminateSPIcommunicationreturn(reg_val);//returnregistervalueuintstatus;CSN=0;//CSNlow,initSPItransactionstatus=SPI_RW(reg);SPI_RW(value);CSN=1;//selectregister//..andwritevaluetoit..//CSNhighagainreturn(status);//returnnRF24L01statusuchar/**************************************************************************““““““““““““““““““““““““““/**************************//*函數(shù):uintSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars)/*功能:用于讀數(shù)據(jù),reg:為寄存器地址,pBuf:為待讀出數(shù)據(jù)地址,uchars:讀出數(shù)據(jù)的個數(shù)/**************************************************************************““““““““““““““““““““““““““/**************************/uintSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars){uintstatus,uchar_ctr;CSN=0;//SetCSNlow,initSPItranactionstatus=SPI_RW(reg);//Selectregistertowritetoandreadstatusucharfor(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)pBuf[uchar_ctr]=SPI_RW(0);//CSN=1;return(status);//returnnRF24L01statusuchar/**************************************************************************“““““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小/*函數(shù):uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars)/*功能:用于寫數(shù)據(jù):為寄存器地址,pBuf:為待寫入數(shù)據(jù)地址,uchars:寫入數(shù)據(jù)的個數(shù)/*********************************************************************************************************/uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars){return(status);uintstatus,uchar_ctr;CSN=0;//SPI使能status=SPI_RW(reg);for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)//SPI_RW(*pBuf++);CSN=1;〃關閉SPIreturn(status);//}/*/**************************************************************************““““““““““““““““““““““““““/**************************//*函數(shù):voidSetRX_Mode(void)/*功能:數(shù)據(jù)接收配置/**************************************************************************““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小voidSetRX_Mode(void){CE=0;SPI_RW_Reg(WRITE_REG+CONFIG,0x0f);//IRQ收發(fā)完成中斷響應,16位CRC,主接收CE=1;inerDelay_us(130);}/**************************************************************************““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小/*函數(shù):unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf)/*功能:數(shù)據(jù)讀取后放如rx_buf接收緩沖區(qū)中/**************************************************************************““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf){unsignedcharrevale=0;sta=SPI_Read(STATUS);〃讀取狀態(tài)寄存其來判斷數(shù)據(jù)接收狀況if(RX_DR)//判斷是否接收到數(shù)據(jù){CE=0;//SPI使能SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//readreceivepayloadfromRX_FIFObufferrevale=1;〃讀取數(shù)據(jù)完成標志}SPI_RW_Reg(WRITE_REG+STATUS,sta);//接收到數(shù)據(jù)后

RX_DR,TX_DS,MAX_PT都置高為1,通過寫1來清楚中斷標志returnrevale;*//**************************************************************************“““““““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小/*函數(shù):voidnRF24L01_TxPacket(unsignedchar*tx_buf)/*功能:發(fā)送tx_buf中數(shù)據(jù)/**********************************************************************************************************/voidnRF24L01_TxPacket(unsignedchar*tx_buf)CE=0;//StandByCE=0;//StandByI模式SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//裝載接收端地址//裝載SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);//裝載//IRQ收發(fā)完成中斷響應,16SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);位CRC//IRQ收發(fā)完成中斷響應,16CE=1;〃置高CE,激發(fā)數(shù)據(jù)發(fā)送inerDelay_us(10);/**************************************************************************“““““““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小/*以下是DS18B20溫度傳感相關函數(shù)/**********************************************************************************************************/voiddelay1(uinti){for(;i>0;i--);〃****************************************************DS1820復位函數(shù)“““““““““““““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小voidds_reset(void){chartemp=1;while(temp){while(temp){DQ=1;_nop_();_nop_();DQ=0;delay1(80);DQ=1;delay1(9);temp=DQ;}delay1(64);temp=~DQ;}DQ=1;/3“““““““““““““““““““““““““““““““““““““““““““““"T'XCTCCC〃***********************************************DS1820“““““““““““““““““““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小voidwrite_byte(ucharvalue){uchari;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();DQ=value&0x01;delay1(9);value>>=1;}DQ=1;delay1(1);}〃****************************************************DS1820讀函數(shù)“““““““““““““““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小ucharread_byte(void){uchari;ucharvalue1=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();value1>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_();

DQ=1;_nop_();_nop_();_nop_();_nop_();if(DQ)value1l=0x80;delay1(9);DQ=1;return(value1);/3“““““““““““““““““““““““““““““““““““““““““““““““““““//****************************************************““““““““““““““““““““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小voidread_temp()ds_reset();write_byte(0xcc);//跳過讀序號列號的操作write_byte(0xbe);temp_data[0]=read_byte();temp_data[1]=read_byte();ds_reset();write_byte(0xcc);//跳過讀序號列號的操作write_byte(0x44);//啟動溫度轉換/3“““““““““““““““““““““““““““““““““““““““““““““““““““//****************************************************“““““““““““““““““““““““““““““““““““““““““““““小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小voidwork_temp()write_byte(0xcc);//跳過讀序號列號的操作write_byte(0x44);//啟動溫度轉換ucharzheng=0;ucharn=0;if(temp_data[1]>127){temp_data[1]=(256-temp_data[1]);〃負值temp_data[0]=(256-temp_data[0]);n=1;}zheng=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);dispaly[1]=zheng%1000/100;〃百位dispaly[2]=zheng%100/10;〃十位dispaly[3]=zheng%10;〃個位switch(temp_data[0]&0x0f)〃小數(shù)位{case0x0f:dispaly[4]=9;break;case0x0e:dispaly[4]=9;break;case0x0d:dispaly[4]=8;break;case0x0c:dispaly[4]=8;break;case0x0b:dispaly[4]=7;break;case0x0a:dispaly[4]=6;break;case0x09:dispaly[4]=6;break;case0x08:dispaly[4]=5;break;case0x07:dispaly[4]=4;break;case0x06:dispaly[4]=4;break;case0x05:dispaly[4]=3;break;case0x04:dispaly[4]=3;break;case0x03:dispaly[4]=2;br

溫馨提示

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

評論

0/150

提交評論