單片機(jī)的藍(lán)牙接收發(fā)射模塊設(shè)計報告畢業(yè)論文_第1頁
已閱讀1頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  基于單片機(jī)的藍(lán)牙接收發(fā)射模塊設(shè)計</p><p><b>  畢業(yè)論文</b></p><p><b>  目錄</b></p><p><b>  第一章 引言3</b></p><p>  1.1 本設(shè)計的背景3</p><p&

2、gt;  1.2 本設(shè)計的系統(tǒng)方案3</p><p>  1.2.1 系統(tǒng)各模塊的選擇4</p><p>  第二章 單片機(jī)數(shù)據(jù)傳輸系統(tǒng)的組成框圖4</p><p>  2.1 單片機(jī)數(shù)據(jù)發(fā)送模塊框圖4</p><p>  2.2 PC數(shù)據(jù)接收模塊框圖4</p><p>  第三章 單片機(jī)數(shù)據(jù)傳輸系統(tǒng)硬件設(shè)計

3、5</p><p>  3.1 發(fā)送與接收模塊的單片機(jī)最小系統(tǒng)5</p><p>  3.2 發(fā)送與接收模塊的無線通信模塊——BC04-B藍(lán)牙模塊5</p><p>  3.2.1 藍(lán)牙技術(shù)協(xié)議簡介5</p><p>  3.2.2 藍(lán)牙技術(shù)的核心協(xié)議6</p><p>  3.2.3 HCI協(xié)議6<

4、/p><p>  3.2.4 BC04-B藍(lán)牙模塊部分電路7</p><p>  3.3 18B20數(shù)字溫濕度傳感器8</p><p>  3.3.1 18B20簡介8</p><p>  3.4超聲波測距傳感器及其電路部分8</p><p>  3.4.1超聲波傳感器原理8</p><p&g

5、t;  3.5單片機(jī)數(shù)據(jù)傳輸系統(tǒng)的電源部分9</p><p>  3.6 MAX232串口電路10</p><p>  3.7單片機(jī)顯示電路10</p><p>  第四章 單片機(jī)數(shù)據(jù)傳輸系統(tǒng)的軟件設(shè)計11</p><p>  4.1單片機(jī)數(shù)據(jù)采集系統(tǒng)的程序流程圖11</p><p>  4.2藍(lán)牙數(shù)據(jù)收發(fā)系

6、統(tǒng)的程序流程圖12</p><p>  第五章 單片機(jī)數(shù)據(jù)傳輸系統(tǒng)調(diào)試13</p><p><b>  第六章 總結(jié)14</b></p><p><b>  參考文獻(xiàn)14</b></p><p><b>  附錄14</b></p><p>&

7、lt;b>  第一章 引言</b></p><p>  1.1 本設(shè)計的背景</p><p>  藍(lán)牙技術(shù)是近年來發(fā)展迅速的短距離無線通信技術(shù),可以用來替代數(shù)字設(shè)備間短距離的有線電纜連接。使用全球通用的2.4GHz頻段,即ISM(Industrial、Scientific and Medical)頻段,使得藍(lán)牙設(shè)備可工作于世界上任何地方;采用了跳頻技術(shù),提高了抗干擾性;藍(lán)

8、牙模塊具有低成本、低功耗和低輻射的優(yōu)點(diǎn);具備認(rèn)證和加密機(jī)制,實現(xiàn)了較高的安全性;應(yīng)用范圍廣泛,可應(yīng)用于無線設(shè)備、圖像處理設(shè)備、安全產(chǎn)品、消費(fèi)娛樂、汽車產(chǎn)品、家用電器、醫(yī)療健身、建筑、玩具等多種領(lǐng)域;支持點(diǎn)對點(diǎn)和點(diǎn)對多點(diǎn)傳輸,多個藍(lán)牙設(shè)備可組成微微網(wǎng),具備明顯的網(wǎng)絡(luò)特性。</p><p>  1.2 本設(shè)計的系統(tǒng)方案</p><p>  1.2.1 系統(tǒng)的功能實現(xiàn)</p>&l

9、t;p>  通過溫濕度及距離傳感器采集環(huán)境的溫濕度、距離信號,將信號處理然后通過無線傳輸?shù)骄嚯x十多米的地方進(jìn)行顯示,實現(xiàn)實時監(jiān)測環(huán)境的溫度、距離等信息,具有很大的應(yīng)用前景。</p><p>  本設(shè)計以單片機(jī)和藍(lán)牙模塊BC04-B為主,設(shè)計了基于藍(lán)牙無線傳輸?shù)臄?shù)據(jù)采集系統(tǒng),整個裝置由前端數(shù)據(jù)采集、傳送部分以及末端的數(shù)據(jù)接受部分組成(如PC機(jī))。前端數(shù)據(jù)采集部分由位于現(xiàn)場的傳感器、單片機(jī)、串口通信等構(gòu)成,傳送

10、部分主要利用自帶微帶天線的藍(lán)牙模塊進(jìn)行數(shù)據(jù)的無線傳輸;末端通過藍(lán)牙模塊、串口通信傳輸將數(shù)據(jù)送到上位PC機(jī)進(jìn)一步處理。PC機(jī)可以根據(jù)指令來控制數(shù)據(jù)的獲取。</p><p>  1.2.1 系統(tǒng)各模塊的選擇</p><p>  1.18B20數(shù)字溫濕度傳感器,內(nèi)部包含一個電容式感濕元件和NTC測溫元件,還有A/D轉(zhuǎn)換模塊,實現(xiàn)溫濕度數(shù)字信號輸出。同時18B20又是單總線形式,與單片機(jī)相連減少了

11、I/O口的使用。</p><p>  超聲波測距模塊,利用單片機(jī)發(fā)送觸發(fā)信號,產(chǎn)生40HZ的聲波信號,經(jīng)過物體遮擋住返回的時間,可以計算距離。</p><p>  3.采用STC89C52單片機(jī)控制單元[2],產(chǎn)品較為普遍,價格便宜,易于控制。對STC89C52用C語言編寫程序,可讀性較好。</p><p>  4.無線通信采用全球廣泛使用的藍(lán)牙技術(shù),本設(shè)計采用BC

12、04-B藍(lán)牙模塊,該模塊可實現(xiàn)二十米的無線數(shù)據(jù)傳輸。</p><p>  5.LCD1602液晶顯示器為工業(yè)字符型液晶,能夠顯示32個字符,可實現(xiàn)對數(shù)據(jù)進(jìn)行簡單顯示。</p><p>  第二章 單片機(jī)數(shù)據(jù)傳輸系統(tǒng)的組成框圖</p><p>  數(shù)據(jù)傳輸系統(tǒng)分為發(fā)送和接收兩個模塊:發(fā)送模塊主要由溫濕度采集模塊、距離采集模塊、單片機(jī)控制模塊、藍(lán)牙發(fā)送模塊、顯示模塊和電

13、源模塊等組成;接收模塊主要由藍(lán)牙接收模塊、PC控制、串口調(diào)試模塊組成。具體框圖如下:</p><p>  2.1 單片機(jī)數(shù)據(jù)發(fā)送模塊框圖</p><p>  信號采集發(fā)送過程[3]為18B20、超聲波測距模塊[4]將信號傳給STC89C52單片機(jī),單片機(jī)將信號處理,并進(jìn)行超溫濕度、距離報警。處理后的信號經(jīng)串口發(fā)送給BC04-B藍(lán)牙發(fā)射模塊發(fā)射出去,采用2.4GHZ全球免費(fèi)波段。</p

14、><p>  2.2 PC數(shù)據(jù)接收模塊框圖</p><p>  信號接收過程為藍(lán)牙適配器接收模塊接收信號,將信號通過串口傳給PC機(jī),通過串口調(diào)試助手顯示出來。PC可以通過串口調(diào)試助手給單片機(jī)機(jī)發(fā)送指令,控制數(shù)據(jù)的獲取。</p><p>  第三章 單片機(jī)數(shù)據(jù)傳輸系統(tǒng)硬件設(shè)計</p><p>  3.1 發(fā)送模塊的單片機(jī)最小系統(tǒng)</p>

15、;<p>  本系統(tǒng)采用MCS-51系列STC89C52單片機(jī)芯片[5]作為發(fā)送與接收模塊的控制單元,芯片具有如下特點(diǎn):</p><p><b>  抗干擾性強(qiáng);</b></p><p><b>  低價格;</b></p><p>  低功耗:掉電模式耗電低于0.1uA,正常工作模式為4mA~7mA,掉電模

16、式可由外部中斷喚醒,適用于電池供電系統(tǒng);</p><p>  通過MAX232電平轉(zhuǎn)換芯片即可進(jìn)行下載,編程方式靈活,可用C語言進(jìn)行編寫,可讀性強(qiáng),8KB的內(nèi)部ROM增強(qiáng)編程方便性。</p><p>  發(fā)送與接收模塊的控制單元電路原理圖如圖3.1:</p><p>  圖3.1 STC89C52單片機(jī)最小系統(tǒng)</p><p>  圖3.1中

17、間部分為STC89C52芯片,該芯片采用40腳雙列直插DIP封裝,第40腳接+5V電源,第20腳接地,左上部分為復(fù)位電路,接單片機(jī)的第9腳,但按下鍵時即對系統(tǒng)進(jìn)行復(fù)位。左下為晶振電路,采用11.0592MHZ的晶振。第31腳接高電平。</p><p>  3.2 發(fā)送與接收模塊的無線通信模塊——BC04-B藍(lán)牙模塊</p><p>  3.2.1 藍(lán)牙技術(shù)的協(xié)議簡介</p>

18、<p>  藍(lán)牙無線通信的協(xié)議標(biāo)準(zhǔn)是由SIG制定的,它規(guī)定了藍(lán)牙應(yīng)用產(chǎn)品應(yīng)遵循的標(biāo)準(zhǔn)和需要達(dá)到的要求。目前頒布的藍(lán)牙規(guī)范有1.0、1.1、2.0、2.1等幾個版本。</p><p>  協(xié)議棧由上至下可分為3個部分:傳輸協(xié)議、中介協(xié)議和應(yīng)用協(xié)議。傳輸協(xié)議負(fù)責(zé)藍(lán)牙設(shè)備間的相互位置確認(rèn),以及建立和管理藍(lán)牙設(shè)備間的物理和邏輯鏈路,包括LMP、L2CAP、HCI;中介協(xié)議為高層應(yīng)用協(xié)議或程序在藍(lán)牙邏輯鏈路上工作

19、提供了支持,為應(yīng)用層提供了各種標(biāo)準(zhǔn)接口,包括:RFCOMM、SDP、IrDA、PPP、TCP/IP、UDP、TSC和AT指令集等;應(yīng)用協(xié)議是指那些位于藍(lán)牙協(xié)議棧之上的應(yīng)用軟甲和其中涉及的協(xié)議,包括開發(fā)驅(qū)動和其他藍(lán)牙應(yīng)用程序等。</p><p>  3.2.2 藍(lán)牙技術(shù)的核心協(xié)議</p><p>  藍(lán)牙技術(shù)的核心協(xié)議分為四個部分,如下:</p><p>  (1)基

20、帶協(xié)議(Baseband)</p><p>  基帶和鏈路控制層確保網(wǎng)絡(luò)內(nèi)部藍(lán)牙設(shè)備單元之間由射頻構(gòu)成的物理連接。</p><p>  (2)連接管理協(xié)議(LMP)</p><p>  負(fù)責(zé)藍(lán)牙網(wǎng)絡(luò)內(nèi)各設(shè)備之間連接的建立。</p><p>  (3)邏輯鏈路控制和適配協(xié)議(L2CAP)</p><p>  是一個為高層

21、傳輸層和應(yīng)用層協(xié)議屏蔽基帶協(xié)議的適配協(xié)議,為高層應(yīng)用傳輸提供了更加有效和更有利于實現(xiàn)的數(shù)據(jù)分組格式。</p><p> ?。?)服務(wù)發(fā)現(xiàn)協(xié)議(SDP)</p><p>  發(fā)現(xiàn)服務(wù)在藍(lán)牙技術(shù)框架中起到了至關(guān)重要的作用,它是所有用戶模式的基礎(chǔ),是為實現(xiàn)網(wǎng)絡(luò)中藍(lán)牙設(shè)備之間相互查詢及訪問提供的服務(wù)。在藍(lán)牙系統(tǒng)中,客戶只有通過服務(wù)發(fā)現(xiàn)協(xié)議,才能獲得設(shè)備信息、服務(wù)信息以及服務(wù)特征,從而在設(shè)備單元之間

22、建立不同的SDP層連接[3]。</p><p>  3.2.3 HCI協(xié)議</p><p>  HCI(Host Controller Interface)協(xié)議,即主機(jī)控制接口協(xié)議,屬于藍(lán)牙協(xié)議棧的一部分,是藍(lán)牙規(guī)范定義的一個符合標(biāo)準(zhǔn)的接口,它適用于藍(lán)牙通訊模塊的硬件部分。此定義描述了位于HCI驅(qū)動程序(主機(jī)的一部分,也即藍(lán)牙通訊模塊的使用者)和主機(jī)控制器固件(藍(lán)牙通訊模塊本身的一部分)之

23、間的接口。HCI固件通過訪問基帶命令、硬件狀態(tài)寄存器、控制寄存器以及時間寄存器實現(xiàn)對藍(lán)牙硬件的HCI指令。</p><p>  HCI傳輸層是藍(lán)牙主機(jī)與藍(lán)牙主控制器之間的物理接口。目前,藍(lán)牙HCI傳輸層的物理接口由通用串行總線(USB)、串行端口(RS232)、通用異步收發(fā)器(UART)和個人計算機(jī)存儲卡。</p><p>  本系統(tǒng)采用UART方式在藍(lán)牙設(shè)備和主控制器之間傳輸數(shù)據(jù)。UAR

24、T傳輸層發(fā)目標(biāo)在于可以在同一PCB電路板上兩UART之間的串行接口上使用藍(lán)牙HCI協(xié)議。UART傳輸層假定UART通信不存在線路故障,圖1為UART傳輸層。</p><p>  圖1 UART傳輸層</p><p>  UART傳輸層采用了RS232的接口參數(shù)配置,如表1:</p><p>  表1 RS232接口參數(shù)配置</p><p> 

25、 其中,RTS/CTS流控制用于防止臨時UART緩沖區(qū)溢出,當(dāng)CTS為1時,允許藍(lán)牙主機(jī)/主機(jī)控制器發(fā)送,當(dāng)CTS為0時,禁止藍(lán)牙主機(jī)/主機(jī)控制器發(fā)送。流完成響應(yīng)時間則定義了從設(shè)置RTS為0到字節(jié)流真正結(jié)束時的最大時間。</p><p>  UART信號線采取置空調(diào)制解調(diào)器模式,RS232信號處于連接狀態(tài),即本地TXD連接到遠(yuǎn)端RXD,本地RTS連接到遠(yuǎn)端CTS,反之亦然。</p><p>

26、;  UART傳輸層同時具備糾錯功能。如果當(dāng)藍(lán)牙主機(jī)與主機(jī)控制器在RS232通信上失去同步,則必須復(fù)位。RS232通信失去同步意味著已檢測到HCI分組指示器或者HCI分組長度超出了范圍。如果藍(lán)牙主機(jī)與主機(jī)控制器在UART通信失去同步,那么主控制器將發(fā)送硬件故障時間,以將同步錯誤告訴藍(lán)牙主機(jī)。主控制器需要從藍(lán)牙主機(jī)接受一個RESET指令以執(zhí)行撫慰,從而實現(xiàn)重新同步。</p><p>  3.2.4 BC04-B藍(lán)牙

27、模塊部分電路</p><p>  BC04-B藍(lán)牙模塊[8,9,10]主要性能參數(shù):</p><p>  頻率:2.4GHz ISM band</p><p><b>  調(diào)制方式:GFSK</b></p><p>  發(fā)射功率等級:class2</p><p>  靈敏度:≦-80dBm<

28、/p><p>  通信速率:2Mbps</p><p><b>  供電電源:3.3V</b></p><p>  工作溫度:-20 ~+55℃</p><p>  HC-06藍(lán)牙模塊部分電路圖如圖3.2.1:</p><p>  圖3.2.1 HC-06藍(lán)牙模塊部分電路</p><

29、;p>  圖3.2左邊部分為藍(lán)牙芯片,其TX與RX引腳分別接STC89C52的RXD(P3.0)和TXD(P3.1),PIO1接LED燈,當(dāng)LED常亮?xí)r表示藍(lán)牙數(shù)據(jù)開始傳輸。右上部分為電源+5V轉(zhuǎn)為+3.3V電路。BC04-B藍(lán)牙模塊實物如圖3.2.2:</p><p>  圖3.2.2 BC04-B藍(lán)牙模塊</p><p>  3.3 18B20數(shù)字溫濕度傳感器</p>

30、<p>  3.3.1 18B20簡介</p><p>  DHT21數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器。該傳感器響應(yīng)快、抗干擾能力強(qiáng)、性價比高等優(yōu)點(diǎn)。單總線串行接口,使系統(tǒng)變得簡單快捷。超小的體積、極低的功耗。主要性能如下:</p><p>  (1)供電電壓范圍:+3.0V~+5.5V; </p><p>  (2)測溫

31、范圍:-55~+125℃。固有測溫分辨率為0.5℃。當(dāng)在-10℃~+85℃范圍內(nèi),可確保測量誤差不超過0.5℃,在-55~+125℃范圍內(nèi),測量誤差也不超過2℃; </p><p> ?。?)通過編程可實現(xiàn)9~12位的數(shù)字讀數(shù)方式.</p><p>  18B20引腳圖如圖3.3.1。本設(shè)計將1腳接電源+5V,2接STC89C52的I/O口P2.3腳接地。</p><p

32、><b>  圖3.3.1</b></p><p>  3.4超聲波測距傳感器及其電路部分</p><p>  3.4.1超聲波傳感器原理</p><p>  (1)采用IO觸發(fā)測距,給至少10us的高電平信號;</p><p>  (2)模塊自動發(fā)送8個40khz的方波,自動檢測是否有信號返回;</p>

33、;<p>  (3)有信號返回,通過IO輸出一高電平,高電平持續(xù)的時間就是 超聲波從發(fā)射到返回的時間.測試距離=(高電平時間*聲速(340M/S))/2;  </p><p>  圖3.4.5 超聲波發(fā)送接收原理圖</p><p>  3.5單片機(jī)數(shù)據(jù)傳輸系統(tǒng)的電源部分</p><p>  發(fā)射與接收模塊的電源均用+7.

34、2V的干電池經(jīng)7805穩(wěn)壓輸出+5V的電源,+5V電源在經(jīng)過ASM1117穩(wěn)壓輸出+3.3V。其電路原理圖如圖3.5.1。圖中J3的2腳位+7.2V,1腳為地;S4為撥動開關(guān),電容C11、C12、C13、C14均為7805輸入輸出端的濾波電容;D17為發(fā)光二極管,即電源指示燈;D19為1N4007保護(hù)二極管,當(dāng)輸入端短路時,給輸出電容C14一個放電回路,防止7805被擊穿損壞。</p><p>  圖3.5.1

35、 +5V電源部分</p><p>  BC04-B藍(lán)牙模塊供電電源由+5V電源在經(jīng)過ASM1117穩(wěn)壓輸出+3.3V供電。其電路原理圖如圖3.5.2</p><p>  圖3.5.2 +3.3V電源部分</p><p>  3.6 MAX232串口電路</p><p>  MAX232串口電路主要用于STC89C52單片機(jī)程序的燒寫以及用

36、于擴(kuò)展與上位機(jī)的通信。計算機(jī)串口采用的是RS232C負(fù)邏輯電平,“1”表示-12V,“0”表示+12V,與單片機(jī)的的TTL電平不同,因此通過MAX232串口電路實現(xiàn)與計算機(jī)進(jìn)行通信。其電路圖如圖3.7,圖中的5個電容均為0.1μF的瓷片電容,起到降低芯片的噪聲干擾。MAX232的11腳接STC89C52單片機(jī)的TXD(P3.1),12腳接單片機(jī)的RXD(P3.0);右下為串口母頭,用于與計算機(jī)的通信,第3腳(計算機(jī)數(shù)據(jù)輸出端)為從計算機(jī)

37、輸出至單片機(jī)端口,第2腳(計算機(jī)數(shù)據(jù)輸入端)為從單片機(jī)輸入至計算機(jī),5腳為地線,其余引腳在此不用。</p><p>  圖3.6 MAX232串口電路</p><p>  3.7單片機(jī)顯示電路</p><p>  接收模塊顯示電路采用LCD1602液晶顯示。LCD1602能顯示16個字符×2行,即32個字符。LCD液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)

38、已經(jīng)存儲了160個不同的字符,這些字符有阿拉伯?dāng)?shù)字、英文字母的大小寫、常用符號和日文假名等,每一個字符都有一個固定的ASCII代碼。其引腳說明如表3.8。</p><p>  表3.8 LCD1602引腳說明</p><p>  LCD1602在本設(shè)計中的電路連接圖如圖3.8,1腳和3腳接地,2腳接電源+5V,4腳接STC89C52</p><p>  圖3.7 L

39、CD1602電路連接圖</p><p>  單片機(jī)的P2.5,5腳接P2.6,6腳接P2.7,714腳接P0口,15腳串接一個10K的電阻然后接到電源+5V。</p><p>  第四章 單片機(jī)數(shù)據(jù)傳輸系統(tǒng)的軟件設(shè)計</p><p>  單片機(jī)數(shù)據(jù)傳輸系統(tǒng)軟件部分分為數(shù)據(jù)采集和接收發(fā)送數(shù)據(jù)兩個模塊[,在此僅分析主程序與各子程序的流程。涉及的子程序為18B20溫濕度子

40、程序,超聲波測距子程序,藍(lán)牙收發(fā)數(shù)據(jù)子程序,LCD1602液晶顯示子程序。</p><p>  4.1單片機(jī)數(shù)據(jù)采集系統(tǒng)的程序流程</p><p>  圖4.1 系統(tǒng)軟件主程序流程圖</p><p>  4.2藍(lán)牙數(shù)據(jù)收發(fā)系統(tǒng)的程序流程</p><p>  圖4.2 藍(lán)牙收發(fā)程序流程圖</p><p>  第五章 單片

41、機(jī)數(shù)據(jù)傳輸系統(tǒng)調(diào)試</p><p>  系統(tǒng)主要由發(fā)送模塊和接收模塊組成。用萬用表分別檢測無短路或斷路情況,測得電源部分7805輸出端+5V,電源指示燈亮,單片機(jī)等各芯片電壓正常。藍(lán)牙模塊接上電源LED指示燈正常點(diǎn)亮。</p><p>  先對溫度采集電路進(jìn)行調(diào)試,通過下載軟件將HEX文件燒寫進(jìn)入單片機(jī),發(fā)現(xiàn)藍(lán)牙能夠正常傳輸數(shù)據(jù),測得環(huán)境的溫度能在PC機(jī)上正常顯示,溫度精確到0.1℃,濕度

42、精確到0.1%,溫度的測量范圍為-20.0℃+120.0℃。</p><p>  其次距離采集電路進(jìn)行調(diào)試,下載軟件將HEX文件燒寫進(jìn)入單片機(jī),發(fā)現(xiàn)藍(lán)牙能夠正常傳輸數(shù)據(jù),PC機(jī)顯示實時距離值。</p><p>  然后整體系統(tǒng)調(diào)試,測得結(jié)果在空曠地帶,單片機(jī)數(shù)據(jù)傳輸距離可達(dá)30多米;在有障礙物的時候,數(shù)據(jù)傳輸距離也可達(dá)10幾米。</p><p><b> 

43、 第六章 總結(jié)</b></p><p>  基于藍(lán)牙技術(shù)的數(shù)據(jù)傳輸系統(tǒng)的設(shè)計,以其低成本、低功耗、便攜式、高精度的設(shè)計理念,實現(xiàn)對環(huán)境的溫度、距離等數(shù)據(jù)的實時采集,讓人們的生產(chǎn)生活安排的更加合理有序。藍(lán)牙技術(shù)是全球廣泛使用的無線通信技術(shù),能夠?qū)崿F(xiàn)短距離快速傳輸大容量的數(shù)據(jù),是短距離數(shù)據(jù)通信的首選技術(shù),其不斷成熟的技術(shù),更是給無線通信領(lǐng)域帶來光明的前景,BC04-B藍(lán)牙模塊,可傳輸十幾米的距離,較好的完

44、成了設(shè)計任務(wù)。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]郭堅. 基于STC89C52單片機(jī)的多路數(shù)據(jù)采集控制系統(tǒng)設(shè)計[J].裝備制造,2010,(4):234.</p><p>  [2]張發(fā)海. 基于單片機(jī)STC89C52的LED數(shù)碼管溫度顯示及報警器的實現(xiàn)[J].科技信息,2009,(35):87-88.&l

45、t;/p><p>  [3]何國泉. 基于藍(lán)牙的無線接入點(diǎn)設(shè)計[J].微型機(jī)與應(yīng)用,2010,29(18):58-60.</p><p>  [4]伍春. 基于藍(lán)牙的無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)計與實現(xiàn)[J].計算機(jī)應(yīng)用與軟件,2010,27(4):74-76,101.</p><p>  [5]付蔚. 基于藍(lán)牙芯片的無線通信模塊設(shè)計與開發(fā)[J].微計算機(jī)信息,2009,25(

46、102):178-179,175.</p><p>  [6]喻宗泉.藍(lán)牙技術(shù)基礎(chǔ)[M].北京:機(jī)械工業(yè)出版,2006.40-95.</p><p><b>  附錄 </b></p><p><b>  系統(tǒng)PCB:</b></p><p><b>  系統(tǒng)程序:</b>&l

47、t;/p><p>  #include<REG52.H></p><p>  #include<math.h></p><p>  #include<stdio.h></p><p>  #include<intrins.h></p><p>  #define uchar

48、unsigned char</p><p>  #define uint unsigned int</p><p>  sbit DQ=P2^2;</p><p>  sbit RS=P3^5;</p><p>  sbit RW=P3^6;</p><p>  sbit EN=P3^4;</p><

49、;p>  sbit R=P2^7;</p><p>  sbit T=P2^6;</p><p>  unsigned int time=0;</p><p>  unsigned long S=0;</p><p>  bit flag =0;</p><p>  unsigned char dis

50、buff[4] ={ 0,0,0,0,};</p><p>  unsigned char code str1[]={"range temp "};</p><p>  float RxBuf,disdata[5];</p><p>  uint tvalue;//溫度值</p><p>  uchar tf

51、lag;//溫度正負(fù)標(biāo)志</p><p>  unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M

52、9;,};</p><p>  uchar Tx,Ax;</p><p>  /*************************lcd1602程序**************************/</p><p>  void delay1ms(unsigned int ms)//延時1毫秒(不夠精確的)</p><p><b&

53、gt;  { </b></p><p>  unsigned int i,j;</p><p>  for(i=0;i<ms;i++)</p><p>  for(j=0;j<100;j++);</p><p><b>  }</b></p><p>  void wr_c

54、om(unsigned char com)//寫指令//</p><p><b>  { </b></p><p>  delay1ms(1);</p><p><b>  RS=0;</b></p><p><b>  RW=0;</b></p><p&g

55、t;<b>  EN=0;</b></p><p><b>  P0=com;</b></p><p>  delay1ms(1);</p><p><b>  EN=1;</b></p><p>  delay1ms(1);</p><p><b

56、>  EN=0;</b></p><p><b>  }</b></p><p>  void wr_dat(unsigned char dat)//寫數(shù)據(jù)//</p><p><b>  { </b></p><p>  delay1ms(1);;</p><

57、p><b>  RS=1;</b></p><p><b>  RW=0;</b></p><p><b>  EN=0;</b></p><p><b>  P0=dat;</b></p><p>  delay1ms(1);</p>

58、<p><b>  EN=1;</b></p><p>  delay1ms(1);</p><p><b>  EN=0;</b></p><p><b>  }</b></p><p>  void lcd_init()//初始化設(shè)置//</p>

59、<p><b>  {</b></p><p>  // BLK=0;</p><p>  delay1ms(15);</p><p>  wr_com(0x38);</p><p>  delay1ms(5);</p><p>  wr_com(0x08);delay1ms(5);

60、</p><p>  wr_com(0x01);delay1ms(5);</p><p>  wr_com(0x06);delay1ms(5);</p><p>  wr_com(0x0c);delay1ms(5);</p><p><b>  }</b></p><p>  void displ

61、ay(unsigned char *p)//顯示//</p><p><b>  {</b></p><p>  while(*p!='\0')</p><p><b>  {</b></p><p>  wr_dat(*p);</p><p><b&g

62、t;  p++;</b></p><p>  //delay1ms(1);</p><p><b>  }</b></p><p><b>  }</b></p><p>  init_play()//初始化顯示</p><p><b>  { <

63、/b></p><p>  lcd_init();</p><p>  wr_com(0x80);</p><p>  display(str1);</p><p><b>  }</b></p><p>  /******************************ds1820程序**

64、*************************************/</p><p>  void delay_18B20(unsigned int i)//延時1微秒</p><p><b>  {</b></p><p>  while(i--);</p><p><b>  }</b>

65、</p><p>  void ds1820rst()/*ds1820復(fù)位*/</p><p><b>  { </b></p><p>  unsigned char x=0;</p><p>  DQ = 1; //DQ復(fù)位</p><p>  delay_18B20(4);

66、 //延時</p><p>  DQ = 0; //DQ拉低</p><p>  delay_18B20(100); //精確延時大于480us</p><p>  DQ = 1; //拉高</p><p>  delay_18B20(40); </p><p><b> 

67、 } </b></p><p>  uchar ds1820rd()/*讀數(shù)據(jù)*/</p><p><b>  { </b></p><p>  unsigned char i=0;</p><p>  unsigned char dat = 0;</p><p>  for (i=8

68、;i>0;i--)</p><p><b>  { </b></p><p>  DQ = 0; //給脈沖信號</p><p><b>  dat>>=1;</b></p><p>  DQ = 1; //給脈沖信號</p><p><b>

69、  if(DQ)</b></p><p>  dat|=0x80;</p><p>  delay_18B20(10);</p><p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b></p>

70、;<p>  void ds1820wr(uchar wdata)/*寫數(shù)據(jù)*/</p><p><b>  {</b></p><p>  unsigned char i=0;</p><p>  for (i=8; i>0; i--)</p><p><b>  { </b>

71、</p><p><b>  DQ = 0;</b></p><p>  DQ = wdata&0x01;</p><p>  delay_18B20(10);</p><p><b>  DQ = 1;</b></p><p>  wdata>>=1;&

72、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p>  read_temp()/*讀取溫度值并轉(zhuǎn)換*/</p><p><b>  {</b></p><p>  uchar a,b;</p>&

73、lt;p>  ds1820rst(); </p><p>  ds1820wr(0xcc);//*跳過讀序列號*/</p><p>  ds1820wr(0x44);//*啟動溫度轉(zhuǎn)換*/</p><p>  ds1820rst(); </p><p>  ds1820wr(0xcc);//*跳過讀序列號*/ </p&

74、gt;<p>  ds1820wr(0xbe);//*讀取溫度*/ </p><p>  a=ds1820rd();</p><p>  b=ds1820rd();</p><p><b>  tvalue=b;</b></p><p>  tvalue<<=8;</p><

75、p>  tvalue=tvalue|a;</p><p>  if(tvalue<0x0fff)</p><p><b>  tflag=0;</b></p><p><b>  else</b></p><p><b>  {</b></p><

76、;p>  tvalue=~tvalue+1;</p><p><b>  tflag=1;</b></p><p><b>  }</b></p><p>  tvalue=tvalue*(0.625);//溫度值擴(kuò)大10倍,精確到1位小?</p><p>  tvalue=tvalue-15

77、;</p><p>  return(tvalue);</p><p><b>  }</b></p><p>  /*******************************************************************/</p><p>  void show()//溫度值顯示</

78、p><p>  { uchar flagdat; </p><p>  time=TH0*256+TL0;</p><p><b>  TH0=0;</b></p><p><b>  TL0=0;</b></p><p>  S=(time*1.7)/100; /

79、/算出來是CM </p><p>  disdata[0]=tvalue/1000+0x30;//百位數(shù)</p><p>  disdata[1]=tvalue%1000/100+0x30;//十位數(shù)</p><p>  disdata[2]=tvalue%100/10+0x30;//個位數(shù)</p><p>  disdata[3]=tval

80、ue%10+0x30;//小數(shù)位</p><p>  disdata[4]=0x00;</p><p>  if(tflag==0)</p><p>  flagdat=0x20;//正溫度不顯示符號</p><p><b>  else</b></p><p>  flagdat=0x2d;//

81、負(fù)溫度顯示負(fù)號:-</p><p>  if(disdata[0]==0x30)</p><p><b>  {</b></p><p>  disdata[0]=0x20;//如果百位為0,不顯示</p><p>  if(disdata[1]==0x30)</p><p><b> 

82、 { </b></p><p>  disdata[1]=0x20;//如果百位為0,十位為0也不顯示</p><p><b>  }</b></p><p><b>  }</b></p><p>  disbuff[0]=S%1000/100;</p><p>

83、;  disbuff[1]=S%1000%100/10;</p><p>  disbuff[2]=S%1000%100%10;</p><p>  disbuff[3]=S%10000%1000 %100;</p><p>  wr_com(0xc0);</p><p>  wr_dat(ASCII[disbuff[0]]);//顯示百位

84、</p><p>  wr_com(0xc1);</p><p>  wr_dat(ASCII[10]);</p><p>  wr_com(0xc2);</p><p>  wr_dat(ASCII[disbuff[1]]);</p><p>  wr_com(0xc3);</p><p> 

85、 wr_dat(ASCII[disbuff[2]]);</p><p>  wr_com(0xc4);</p><p>  wr_dat(ASCII[12]); </p><p>  wr_com(0xc8);</p><p>  wr_dat(flagdat);//顯示符號?</p><p>  wr_com(0

86、xc9);</p><p>  wr_dat(disdata[0]);//顯示百位</p><p>  wr_com(0xca);</p><p>  wr_dat(disdata[1]);//顯示十位 </p><p>  wr_com(0xcb);</p><p>  wr_dat(disdata[2]);//顯示

87、個位 </p><p>  wr_com(0xcc);</p><p>  wr_dat(0x2e);//顯示小數(shù)點(diǎn) </p><p>  wr_com(0xcd);</p><p>  wr_dat(disdata[3]);//顯示小數(shù)位</p><p><b>  }</b></p&g

88、t;<p>  void StartModule() //啟動模塊</p><p><b>  {</b></p><p>  T=1; //啟動一次模塊</p><p><b>  _nop_(); </b></p><

89、;p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b> 

90、 _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b

91、></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p>

92、<p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_();</b></p><p><b>  _nop_(); </b></p><p><b>

93、;  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_();</b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </

94、b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  T=0;</b></p><p><b>  }</b></p><p>  v

95、oid UART_Init(void) //串口初始化</p><p><b>  { </b></p><p>  PCON = 0x00; </p><p>  SCON = 0x50; //串口工作方式為1,允許接收. </p><p>  TMOD = 0x21; // T1 定時方式2 c <

96、;/p><p>  TH1 = 0xfd; //波特率 9600bps @ fosc = 11.0592MHz </p><p>  TL1 = 0xfd; //啟動T1 </p><p><b>  TH0 =0;</b></p><p><b>  TL0 =0;</b></p

97、><p>  ES = 1; //開串口中斷.</p><p><b>  ET0 =1;</b></p><p><b>  TR1=1; </b></p><p>  EA = 1; //開總中斷.</p><p><b>  }</b&g

98、t;</p><p>  void Send(uchar dat)</p><p>  { </p><p>  SBUF = dat; //待發(fā)送的數(shù)據(jù)寫入緩沖區(qū) </p><p>  while(!TI); //等待發(fā)送完成 </p><p>  TI = 0;

99、 //清零發(fā)送標(biāo)志位</p><p><b>  }</b></p><p>  /////////////////</p><p>  /********************主程序***********************************/</p><p>  void main()</p>

100、<p><b>  { </b></p><p>  UART_Init();</p><p>  init_play();//初始化顯示</p><p><b>  while(1)</b></p><p><b>  {</b></p><

101、p>  read_temp();//讀取溫度</p><p>  StartModule();</p><p>  while(!R);//當(dāng)RX為零時等待</p><p>  TR0=1; //開啟計數(shù)</p><p>  while(R);//當(dāng)RX為1計數(shù)并等待</p><p>  T

102、R0=0;//關(guān)閉計數(shù)</p><p>  show();//顯示</p><p>  delay1ms(80);//80M</p><p>  if(Tx==1)</p><p><b>  {</b></p><p>  Send('t'); </p>

103、;<p>  Send('e'); </p><p>  Send('m'); </p><p>  Send('p'); </p><p>  Send('='); </p><p>  Send(disdata[1]);</p><p>

104、  Send(disdata[2]);</p><p>  Send('.');</p><p>  Send(disdata[3]);</p><p><b>  Tx=0;</b></p><p>  Send(' ');</p><p><b> 

105、 }</b></p><p>  if(Ax==1)</p><p><b>  {</b></p><p>  Send('r'); </p><p>  Send('a'); </p><p>  Send('n'); </

106、p><p>  Send('g'); </p><p>  Send('e'); </p><p>  Send('='); </p><p>  Send(ASCII[disbuff[0]]);</p><p>  Send('.'); </p>

107、<p>  Send(ASCII[disbuff[1]]);</p><p>  Send(ASCII[disbuff[2]]);</p><p>  Send(' ');</p><p><b>  Ax=0;</b></p><p><b>  }</b><

108、/p><p><b>  }</b></p><p><b>  }</b></p><p>  void Uart_INT(void) interrupt 4 //串口中斷函數(shù)</p><p><b>  { </b></p><p>  uchar

109、 Rcv = 0; </p><p>  if(RI) //查詢接收標(biāo)志位(有數(shù)據(jù)發(fā)送過來時置為1) </p><p><b>  { </b></p><p><b>  RI = 0;</b></p><p>  Rcv = SBUF;</p><p

110、>  RxBuf=Rcv;</p><p>  if(RxBuf=='g'){ Tx=1;}</p><p>  if(RxBuf=='o'){ Ax=1;}</p><p><b>  }</b></p><p><b>  }</b></p&g

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論