版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 基于單片機的藍牙接收發(fā)射模塊設計</p><p><b> 畢業(yè)論文</b></p><p><b> 目錄</b></p><p><b> 第一章 引言3</b></p><p> 1.1 本設計的背景3</p><p&
2、gt; 1.2 本設計的系統(tǒng)方案3</p><p> 1.2.1 系統(tǒng)各模塊的選擇4</p><p> 第二章 單片機數據傳輸系統(tǒng)的組成框圖4</p><p> 2.1 單片機數據發(fā)送模塊框圖4</p><p> 2.2 PC數據接收模塊框圖4</p><p> 第三章 單片機數據傳輸系統(tǒng)硬件設計
3、5</p><p> 3.1 發(fā)送與接收模塊的單片機最小系統(tǒng)5</p><p> 3.2 發(fā)送與接收模塊的無線通信模塊——BC04-B藍牙模塊5</p><p> 3.2.1 藍牙技術協(xié)議簡介5</p><p> 3.2.2 藍牙技術的核心協(xié)議6</p><p> 3.2.3 HCI協(xié)議6<
4、/p><p> 3.2.4 BC04-B藍牙模塊部分電路7</p><p> 3.3 18B20數字溫濕度傳感器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單片機數據傳輸系統(tǒng)的電源部分9</p><p> 3.6 MAX232串口電路10</p><p> 3.7單片機顯示電路10</p><p> 第四章 單片機數據傳輸系統(tǒng)的軟件設計11</p><p> 4.1單片機數據采集系統(tǒng)的程序流程圖11</p><p> 4.2藍牙數據收發(fā)系
6、統(tǒng)的程序流程圖12</p><p> 第五章 單片機數據傳輸系統(tǒng)調試13</p><p><b> 第六章 總結14</b></p><p><b> 參考文獻14</b></p><p><b> 附錄14</b></p><p>&
7、lt;b> 第一章 引言</b></p><p> 1.1 本設計的背景</p><p> 藍牙技術是近年來發(fā)展迅速的短距離無線通信技術,可以用來替代數字設備間短距離的有線電纜連接。使用全球通用的2.4GHz頻段,即ISM(Industrial、Scientific and Medical)頻段,使得藍牙設備可工作于世界上任何地方;采用了跳頻技術,提高了抗干擾性;藍
8、牙模塊具有低成本、低功耗和低輻射的優(yōu)點;具備認證和加密機制,實現了較高的安全性;應用范圍廣泛,可應用于無線設備、圖像處理設備、安全產品、消費娛樂、汽車產品、家用電器、醫(yī)療健身、建筑、玩具等多種領域;支持點對點和點對多點傳輸,多個藍牙設備可組成微微網,具備明顯的網絡特性。</p><p> 1.2 本設計的系統(tǒng)方案</p><p> 1.2.1 系統(tǒng)的功能實現</p>&l
9、t;p> 通過溫濕度及距離傳感器采集環(huán)境的溫濕度、距離信號,將信號處理然后通過無線傳輸到距離十多米的地方進行顯示,實現實時監(jiān)測環(huán)境的溫度、距離等信息,具有很大的應用前景。</p><p> 本設計以單片機和藍牙模塊BC04-B為主,設計了基于藍牙無線傳輸的數據采集系統(tǒng),整個裝置由前端數據采集、傳送部分以及末端的數據接受部分組成(如PC機)。前端數據采集部分由位于現場的傳感器、單片機、串口通信等構成,傳送
10、部分主要利用自帶微帶天線的藍牙模塊進行數據的無線傳輸;末端通過藍牙模塊、串口通信傳輸將數據送到上位PC機進一步處理。PC機可以根據指令來控制數據的獲取。</p><p> 1.2.1 系統(tǒng)各模塊的選擇</p><p> 1.18B20數字溫濕度傳感器,內部包含一個電容式感濕元件和NTC測溫元件,還有A/D轉換模塊,實現溫濕度數字信號輸出。同時18B20又是單總線形式,與單片機相連減少了
11、I/O口的使用。</p><p> 超聲波測距模塊,利用單片機發(fā)送觸發(fā)信號,產生40HZ的聲波信號,經過物體遮擋住返回的時間,可以計算距離。</p><p> 3.采用STC89C52單片機控制單元[2],產品較為普遍,價格便宜,易于控制。對STC89C52用C語言編寫程序,可讀性較好。</p><p> 4.無線通信采用全球廣泛使用的藍牙技術,本設計采用BC
12、04-B藍牙模塊,該模塊可實現二十米的無線數據傳輸。</p><p> 5.LCD1602液晶顯示器為工業(yè)字符型液晶,能夠顯示32個字符,可實現對數據進行簡單顯示。</p><p> 第二章 單片機數據傳輸系統(tǒng)的組成框圖</p><p> 數據傳輸系統(tǒng)分為發(fā)送和接收兩個模塊:發(fā)送模塊主要由溫濕度采集模塊、距離采集模塊、單片機控制模塊、藍牙發(fā)送模塊、顯示模塊和電
13、源模塊等組成;接收模塊主要由藍牙接收模塊、PC控制、串口調試模塊組成。具體框圖如下:</p><p> 2.1 單片機數據發(fā)送模塊框圖</p><p> 信號采集發(fā)送過程[3]為18B20、超聲波測距模塊[4]將信號傳給STC89C52單片機,單片機將信號處理,并進行超溫濕度、距離報警。處理后的信號經串口發(fā)送給BC04-B藍牙發(fā)射模塊發(fā)射出去,采用2.4GHZ全球免費波段。</p
14、><p> 2.2 PC數據接收模塊框圖</p><p> 信號接收過程為藍牙適配器接收模塊接收信號,將信號通過串口傳給PC機,通過串口調試助手顯示出來。PC可以通過串口調試助手給單片機機發(fā)送指令,控制數據的獲取。</p><p> 第三章 單片機數據傳輸系統(tǒng)硬件設計</p><p> 3.1 發(fā)送模塊的單片機最小系統(tǒng)</p>
15、;<p> 本系統(tǒng)采用MCS-51系列STC89C52單片機芯片[5]作為發(fā)送與接收模塊的控制單元,芯片具有如下特點:</p><p><b> 抗干擾性強;</b></p><p><b> 低價格;</b></p><p> 低功耗:掉電模式耗電低于0.1uA,正常工作模式為4mA~7mA,掉電模
16、式可由外部中斷喚醒,適用于電池供電系統(tǒng);</p><p> 通過MAX232電平轉換芯片即可進行下載,編程方式靈活,可用C語言進行編寫,可讀性強,8KB的內部ROM增強編程方便性。</p><p> 發(fā)送與接收模塊的控制單元電路原理圖如圖3.1:</p><p> 圖3.1 STC89C52單片機最小系統(tǒng)</p><p> 圖3.1中
17、間部分為STC89C52芯片,該芯片采用40腳雙列直插DIP封裝,第40腳接+5V電源,第20腳接地,左上部分為復位電路,接單片機的第9腳,但按下鍵時即對系統(tǒng)進行復位。左下為晶振電路,采用11.0592MHZ的晶振。第31腳接高電平。</p><p> 3.2 發(fā)送與接收模塊的無線通信模塊——BC04-B藍牙模塊</p><p> 3.2.1 藍牙技術的協(xié)議簡介</p>
18、<p> 藍牙無線通信的協(xié)議標準是由SIG制定的,它規(guī)定了藍牙應用產品應遵循的標準和需要達到的要求。目前頒布的藍牙規(guī)范有1.0、1.1、2.0、2.1等幾個版本。</p><p> 協(xié)議棧由上至下可分為3個部分:傳輸協(xié)議、中介協(xié)議和應用協(xié)議。傳輸協(xié)議負責藍牙設備間的相互位置確認,以及建立和管理藍牙設備間的物理和邏輯鏈路,包括LMP、L2CAP、HCI;中介協(xié)議為高層應用協(xié)議或程序在藍牙邏輯鏈路上工作
19、提供了支持,為應用層提供了各種標準接口,包括:RFCOMM、SDP、IrDA、PPP、TCP/IP、UDP、TSC和AT指令集等;應用協(xié)議是指那些位于藍牙協(xié)議棧之上的應用軟甲和其中涉及的協(xié)議,包括開發(fā)驅動和其他藍牙應用程序等。</p><p> 3.2.2 藍牙技術的核心協(xié)議</p><p> 藍牙技術的核心協(xié)議分為四個部分,如下:</p><p> ?。?)基
20、帶協(xié)議(Baseband)</p><p> 基帶和鏈路控制層確保網絡內部藍牙設備單元之間由射頻構成的物理連接。</p><p> (2)連接管理協(xié)議(LMP)</p><p> 負責藍牙網絡內各設備之間連接的建立。</p><p> ?。?)邏輯鏈路控制和適配協(xié)議(L2CAP)</p><p> 是一個為高層
21、傳輸層和應用層協(xié)議屏蔽基帶協(xié)議的適配協(xié)議,為高層應用傳輸提供了更加有效和更有利于實現的數據分組格式。</p><p> (4)服務發(fā)現協(xié)議(SDP)</p><p> 發(fā)現服務在藍牙技術框架中起到了至關重要的作用,它是所有用戶模式的基礎,是為實現網絡中藍牙設備之間相互查詢及訪問提供的服務。在藍牙系統(tǒng)中,客戶只有通過服務發(fā)現協(xié)議,才能獲得設備信息、服務信息以及服務特征,從而在設備單元之間
22、建立不同的SDP層連接[3]。</p><p> 3.2.3 HCI協(xié)議</p><p> HCI(Host Controller Interface)協(xié)議,即主機控制接口協(xié)議,屬于藍牙協(xié)議棧的一部分,是藍牙規(guī)范定義的一個符合標準的接口,它適用于藍牙通訊模塊的硬件部分。此定義描述了位于HCI驅動程序(主機的一部分,也即藍牙通訊模塊的使用者)和主機控制器固件(藍牙通訊模塊本身的一部分)之
23、間的接口。HCI固件通過訪問基帶命令、硬件狀態(tài)寄存器、控制寄存器以及時間寄存器實現對藍牙硬件的HCI指令。</p><p> HCI傳輸層是藍牙主機與藍牙主控制器之間的物理接口。目前,藍牙HCI傳輸層的物理接口由通用串行總線(USB)、串行端口(RS232)、通用異步收發(fā)器(UART)和個人計算機存儲卡。</p><p> 本系統(tǒng)采用UART方式在藍牙設備和主控制器之間傳輸數據。UAR
24、T傳輸層發(fā)目標在于可以在同一PCB電路板上兩UART之間的串行接口上使用藍牙HCI協(xié)議。UART傳輸層假定UART通信不存在線路故障,圖1為UART傳輸層。</p><p> 圖1 UART傳輸層</p><p> UART傳輸層采用了RS232的接口參數配置,如表1:</p><p> 表1 RS232接口參數配置</p><p>
25、 其中,RTS/CTS流控制用于防止臨時UART緩沖區(qū)溢出,當CTS為1時,允許藍牙主機/主機控制器發(fā)送,當CTS為0時,禁止藍牙主機/主機控制器發(fā)送。流完成響應時間則定義了從設置RTS為0到字節(jié)流真正結束時的最大時間。</p><p> UART信號線采取置空調制解調器模式,RS232信號處于連接狀態(tài),即本地TXD連接到遠端RXD,本地RTS連接到遠端CTS,反之亦然。</p><p>
26、; UART傳輸層同時具備糾錯功能。如果當藍牙主機與主機控制器在RS232通信上失去同步,則必須復位。RS232通信失去同步意味著已檢測到HCI分組指示器或者HCI分組長度超出了范圍。如果藍牙主機與主機控制器在UART通信失去同步,那么主控制器將發(fā)送硬件故障時間,以將同步錯誤告訴藍牙主機。主控制器需要從藍牙主機接受一個RESET指令以執(zhí)行撫慰,從而實現重新同步。</p><p> 3.2.4 BC04-B藍牙
27、模塊部分電路</p><p> BC04-B藍牙模塊[8,9,10]主要性能參數:</p><p> 頻率:2.4GHz ISM band</p><p><b> 調制方式: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藍牙模塊部分電路圖如圖3.2.1:</p><p> 圖3.2.1 HC-06藍牙模塊部分電路</p><
29、;p> 圖3.2左邊部分為藍牙芯片,其TX與RX引腳分別接STC89C52的RXD(P3.0)和TXD(P3.1),PIO1接LED燈,當LED常亮時表示藍牙數據開始傳輸。右上部分為電源+5V轉為+3.3V電路。BC04-B藍牙模塊實物如圖3.2.2:</p><p> 圖3.2.2 BC04-B藍牙模塊</p><p> 3.3 18B20數字溫濕度傳感器</p>
30、<p> 3.3.1 18B20簡介</p><p> DHT21數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合傳感器。該傳感器響應快、抗干擾能力強、性價比高等優(yōu)點。單總線串行接口,使系統(tǒng)變得簡單快捷。超小的體積、極低的功耗。主要性能如下:</p><p> (1)供電電壓范圍:+3.0V~+5.5V; </p><p> ?。?)測溫
31、范圍:-55~+125℃。固有測溫分辨率為0.5℃。當在-10℃~+85℃范圍內,可確保測量誤差不超過0.5℃,在-55~+125℃范圍內,測量誤差也不超過2℃; </p><p> ?。?)通過編程可實現9~12位的數字讀數方式.</p><p> 18B20引腳圖如圖3.3.1。本設計將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單片機數據傳輸系統(tǒng)的電源部分</p><p> 發(fā)射與接收模塊的電源均用+7.
34、2V的干電池經7805穩(wěn)壓輸出+5V的電源,+5V電源在經過ASM1117穩(wěn)壓輸出+3.3V。其電路原理圖如圖3.5.1。圖中J3的2腳位+7.2V,1腳為地;S4為撥動開關,電容C11、C12、C13、C14均為7805輸入輸出端的濾波電容;D17為發(fā)光二極管,即電源指示燈;D19為1N4007保護二極管,當輸入端短路時,給輸出電容C14一個放電回路,防止7805被擊穿損壞。</p><p> 圖3.5.1
35、 +5V電源部分</p><p> BC04-B藍牙模塊供電電源由+5V電源在經過ASM1117穩(wěn)壓輸出+3.3V供電。其電路原理圖如圖3.5.2</p><p> 圖3.5.2 +3.3V電源部分</p><p> 3.6 MAX232串口電路</p><p> MAX232串口電路主要用于STC89C52單片機程序的燒寫以及用
36、于擴展與上位機的通信。計算機串口采用的是RS232C負邏輯電平,“1”表示-12V,“0”表示+12V,與單片機的的TTL電平不同,因此通過MAX232串口電路實現與計算機進行通信。其電路圖如圖3.7,圖中的5個電容均為0.1μF的瓷片電容,起到降低芯片的噪聲干擾。MAX232的11腳接STC89C52單片機的TXD(P3.1),12腳接單片機的RXD(P3.0);右下為串口母頭,用于與計算機的通信,第3腳(計算機數據輸出端)為從計算機
37、輸出至單片機端口,第2腳(計算機數據輸入端)為從單片機輸入至計算機,5腳為地線,其余引腳在此不用。</p><p> 圖3.6 MAX232串口電路</p><p> 3.7單片機顯示電路</p><p> 接收模塊顯示電路采用LCD1602液晶顯示。LCD1602能顯示16個字符×2行,即32個字符。LCD液晶模塊內部的字符發(fā)生存儲器(CGROM)
38、已經存儲了160個不同的字符,這些字符有阿拉伯數字、英文字母的大小寫、常用符號和日文假名等,每一個字符都有一個固定的ASCII代碼。其引腳說明如表3.8。</p><p> 表3.8 LCD1602引腳說明</p><p> LCD1602在本設計中的電路連接圖如圖3.8,1腳和3腳接地,2腳接電源+5V,4腳接STC89C52</p><p> 圖3.7 L
39、CD1602電路連接圖</p><p> 單片機的P2.5,5腳接P2.6,6腳接P2.7,714腳接P0口,15腳串接一個10K的電阻然后接到電源+5V。</p><p> 第四章 單片機數據傳輸系統(tǒng)的軟件設計</p><p> 單片機數據傳輸系統(tǒng)軟件部分分為數據采集和接收發(fā)送數據兩個模塊[,在此僅分析主程序與各子程序的流程。涉及的子程序為18B20溫濕度子
40、程序,超聲波測距子程序,藍牙收發(fā)數據子程序,LCD1602液晶顯示子程序。</p><p> 4.1單片機數據采集系統(tǒng)的程序流程</p><p> 圖4.1 系統(tǒng)軟件主程序流程圖</p><p> 4.2藍牙數據收發(fā)系統(tǒng)的程序流程</p><p> 圖4.2 藍牙收發(fā)程序流程圖</p><p> 第五章 單片
41、機數據傳輸系統(tǒng)調試</p><p> 系統(tǒng)主要由發(fā)送模塊和接收模塊組成。用萬用表分別檢測無短路或斷路情況,測得電源部分7805輸出端+5V,電源指示燈亮,單片機等各芯片電壓正常。藍牙模塊接上電源LED指示燈正常點亮。</p><p> 先對溫度采集電路進行調試,通過下載軟件將HEX文件燒寫進入單片機,發(fā)現藍牙能夠正常傳輸數據,測得環(huán)境的溫度能在PC機上正常顯示,溫度精確到0.1℃,濕度
42、精確到0.1%,溫度的測量范圍為-20.0℃+120.0℃。</p><p> 其次距離采集電路進行調試,下載軟件將HEX文件燒寫進入單片機,發(fā)現藍牙能夠正常傳輸數據,PC機顯示實時距離值。</p><p> 然后整體系統(tǒng)調試,測得結果在空曠地帶,單片機數據傳輸距離可達30多米;在有障礙物的時候,數據傳輸距離也可達10幾米。</p><p><b>
43、 第六章 總結</b></p><p> 基于藍牙技術的數據傳輸系統(tǒng)的設計,以其低成本、低功耗、便攜式、高精度的設計理念,實現對環(huán)境的溫度、距離等數據的實時采集,讓人們的生產生活安排的更加合理有序。藍牙技術是全球廣泛使用的無線通信技術,能夠實現短距離快速傳輸大容量的數據,是短距離數據通信的首選技術,其不斷成熟的技術,更是給無線通信領域帶來光明的前景,BC04-B藍牙模塊,可傳輸十幾米的距離,較好的完
44、成了設計任務。</p><p><b> 參考文獻</b></p><p> [1]郭堅. 基于STC89C52單片機的多路數據采集控制系統(tǒng)設計[J].裝備制造,2010,(4):234.</p><p> [2]張發(fā)海. 基于單片機STC89C52的LED數碼管溫度顯示及報警器的實現[J].科技信息,2009,(35):87-88.&l
45、t;/p><p> [3]何國泉. 基于藍牙的無線接入點設計[J].微型機與應用,2010,29(18):58-60.</p><p> [4]伍春. 基于藍牙的無線傳感器網絡節(jié)點設計與實現[J].計算機應用與軟件,2010,27(4):74-76,101.</p><p> [5]付蔚. 基于藍牙芯片的無線通信模塊設計與開發(fā)[J].微計算機信息,2009,25(
46、102):178-179,175.</p><p> [6]喻宗泉.藍牙技術基礎[M].北京:機械工業(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;//溫度正負標志</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)//寫數據//</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()//初始化設置//</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復位*/</p><p><b> { </b></p><p> unsigned char x=0;</p><p> DQ = 1; //DQ復位</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()/*讀數據*/</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)/*寫數據*/</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()/*讀取溫度值并轉換*/</p><p><b> {</b></p><p> uchar a,b;</p>&
73、lt;p> ds1820rst(); </p><p> ds1820wr(0xcc);//*跳過讀序列號*/</p><p> ds1820wr(0x44);//*啟動溫度轉換*/</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);//溫度值擴大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;//百位數</p><p> disdata[1]=tvalue%1000/100+0x30;//十位數</p><p> disdata[2]=tvalue%100/10+0x30;//個位數</p><p> disdata[3]=tval
80、ue%10+0x30;//小數位</p><p> disdata[4]=0x00;</p><p> if(tflag==0)</p><p> flagdat=0x20;//正溫度不顯示符號</p><p><b> else</b></p><p> flagdat=0x2d;//
81、負溫度顯示負號:-</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);//顯示小數點 </p><p> wr_com(0xcd);</p><p> wr_dat(disdata[3]);//顯示小數位</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ā)送的數據寫入緩沖區(qū) </p><p> while(!TI); //等待發(fā)送完成 </p><p> TI = 0;
99、 //清零發(fā)送標志位</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);//當RX為零時等待</p><p> TR0=1; //開啟計數</p><p> while(R);//當RX為1計數并等待</p><p> T
102、R0=0;//關閉計數</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 //串口中斷函數</p><p><b> { </b></p><p> uchar
109、 Rcv = 0; </p><p> if(RI) //查詢接收標志位(有數據發(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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文---單片機串行通信發(fā)射機
- 畢業(yè)論文----單片機串行通信發(fā)射機
- [畢業(yè)論文]單片機串行通信發(fā)射機
- 畢業(yè)論文——單片機串行通信發(fā)射部分設計
- 基于單片機的串行通信發(fā)射機設計【畢業(yè)論文】
- 基于單片機的串行通信發(fā)射機設計【畢業(yè)論文】
- 基于單片機的油汀機控制模塊設計與實現——畢業(yè)論文
- 畢業(yè)論文-- 基于單片機的plc工控模塊的研究設計
- 單片機畢業(yè)論文
- 單片機畢業(yè)論文
- 單片機畢業(yè)論文
- 單片機畢業(yè)論文
- 單片機秒表設計畢業(yè)論文
- 基于單片機的串行通信發(fā)射機設計【畢業(yè)論文+文獻綜述+開題報告】
- 基于單片機的簡易低頻信號發(fā)射源的設計畢業(yè)論文
- 基于單片機的簡易低頻信號發(fā)射源的設計畢業(yè)論文
- 基于avr單片機液晶模塊界面設計【畢業(yè)論文】
- 單片機課設報告基于單片機的液晶顯示畢業(yè)論文
- 單片機畢業(yè)論文8
- 單片機畢業(yè)論文--基于單片機的led顯示屏設計
評論
0/150
提交評論