單片機(jī)串行通信課程設(shè)計報告(共27頁)_第1頁
單片機(jī)串行通信課程設(shè)計報告(共27頁)_第2頁
單片機(jī)串行通信課程設(shè)計報告(共27頁)_第3頁
單片機(jī)串行通信課程設(shè)計報告(共27頁)_第4頁
單片機(jī)串行通信課程設(shè)計報告(共27頁)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上單片機(jī)原理及接口技術(shù)課程設(shè)計報告課題名稱兩個單片機(jī)之間的串行通訊接口設(shè)計學(xué)院自機(jī)學(xué)院專業(yè)機(jī)械設(shè)計制造及其自動化班級1班姓名學(xué)號 時間 目錄一、 設(shè)計任務(wù)概述3(1)設(shè)計的目的3(2)課程設(shè)計要求3(3)課程設(shè)計的內(nèi)容4 1、設(shè)計要求: 3 2、設(shè)計方案: 3二、硬件設(shè)計 3 1、51片機(jī)串行通信功能 3 2、MAX232芯 6 3、DS18B20溫度傳感 7 4、整體電路設(shè)計8三、軟件設(shè)計10 1、串行通信軟件實(shí)現(xiàn) 10 2串行通信的傳輸方式103、串行通信工作方式104、程序流程圖 10四、聯(lián)合調(diào)試 12附錄 13一設(shè)計任務(wù)概述(1)設(shè)計的目的單片機(jī)課程設(shè)計作為獨(dú)立

2、的數(shù)學(xué)環(huán)節(jié),是自動化及相關(guān)專業(yè)集中實(shí)踐性環(huán)節(jié)系列之一,是學(xué)習(xí)完單片機(jī)原理及應(yīng)用課程后,并在進(jìn)行相關(guān)課程設(shè)計基礎(chǔ)上進(jìn)行的一次綜合練習(xí)。單片機(jī)課程設(shè)計過程中,我們通過查閱資料、接口設(shè)計、程序設(shè)計、安裝調(diào)試等環(huán)節(jié),完成一個基于MCS-51系列單片機(jī),涉及多種資源應(yīng)用,并具有綜合功能的小應(yīng)用系統(tǒng)設(shè)計。讓我們不僅將課堂上學(xué)到的理論知識與實(shí)際應(yīng)用結(jié)合起來,而且能夠?qū)﹄娮与娐?、電子元器件等方面的知識進(jìn)一步加深認(rèn)識,同時在軟件編程、調(diào)試、相關(guān)儀器設(shè)備和相關(guān)軟件的使用技能等方面得到較全面的鍛煉和提高。讓我們增加了對單片機(jī)的感性認(rèn)識,加深對單片機(jī)理論方面的理解,同時也加深單片機(jī)的內(nèi)部功能模塊的應(yīng)用。使我們了解和掌

3、握單片機(jī)應(yīng)用系統(tǒng)的軟硬件設(shè)計過程、方法及實(shí)現(xiàn),強(qiáng)化單片機(jī)應(yīng)用電路的設(shè)計與分析能力。提高我們在單片機(jī)應(yīng)用方面的實(shí)踐技能和科學(xué)作風(fēng);培育我們綜合運(yùn)用理論知識解決問題的能力。(2)課程設(shè)計要求 通過對課題的分析,進(jìn)行系統(tǒng)功能設(shè)計,選擇器件,劃分軟硬件的功能,用Proteus軟件在PC機(jī)上完成硬件原理圖設(shè)計。用匯編語言,完成軟件設(shè)計。然后使用Proteus仿真軟件在PC機(jī)上進(jìn)行系統(tǒng)仿真,調(diào)試電路和修改調(diào)試程序,直至達(dá)到設(shè)計的要求和取得滿意的效果。(3)課程設(shè)計的內(nèi)容1).A機(jī)控制B機(jī)的兩個LED閃爍,B機(jī)控制A機(jī)的數(shù)碼管加一顯示。2).使用DS18B20溫度傳感器,由B機(jī)測量溫度后由A機(jī)顯示. 二、主

4、要步驟及方案(1)主要步驟1) 對題目進(jìn)行分析2) 確定電路圖需要的元件3) 畫出電路圖4) 寫出運(yùn)行程序5) 加載并調(diào)試修改程序(2)主要方案利用AT89C51芯片、復(fù)位電路、時鐘電路、LED數(shù)碼管等,使A機(jī)控制B機(jī)的兩個LED閃爍,B機(jī)控制A機(jī)的數(shù)碼管加一顯示。使用DS18B20溫度傳感器,由B機(jī)測量溫度后由A機(jī)顯示. 把P1口的高7位與數(shù)碼管相連,綠燈表示通行方向。P2口與LED顯示器相連,用來輸出顯示的數(shù)字。 系統(tǒng)的原理框圖如下:AT89C51晶振電路復(fù)位電路電源LDE顯示器LED數(shù)碼管數(shù)碼驅(qū)動芯片【摘要】串行通信是單片機(jī)的一個重要應(yīng)用。本次課程設(shè)計就是要利用單片機(jī)來完成一個系統(tǒng),實(shí)現(xiàn)

5、雙片單片機(jī)串行通信。通信的結(jié)果實(shí)用數(shù)碼管進(jìn)行顯示。兩個單片機(jī)之間采用RS232進(jìn)行雙機(jī)通信。在通信過程中,使用通信協(xié)議進(jìn)行通信。【關(guān)鍵字】52單片機(jī),串行通信,接口,DS18B20一、總體設(shè)計1.設(shè)計要求:(1單片機(jī)之間進(jìn)行串行通信,發(fā)送端將0f循環(huán)發(fā)送到接收端,并在接收端顯示。(2)使用DS18B20溫度傳感器,由B機(jī)測量溫度后由A機(jī)顯示. 2.設(shè)計方案:本次設(shè)計,對于兩片AT89C51,采用RS232進(jìn)行雙機(jī)通信。發(fā)送方的數(shù)據(jù)由串行口TXD段輸出,經(jīng)過電平轉(zhuǎn)換芯片MAX232將TTL電平轉(zhuǎn)換為RS232電平輸出,經(jīng)過傳輸線將信號傳送到接收端。接收方也使用MAX232芯片進(jìn)行電平轉(zhuǎn)換后,信號

6、到達(dá)接收方串行口的接收端。接受方接收后,在數(shù)碼管上顯示接收的信息及利用LED顯示通信結(jié)果,與此同時由DS18B20測量溫度后由另一單片機(jī)顯示。為提高抗干擾能力,還可以在輸入輸出端加光耦合進(jìn)行光電隔離。軟件部分,通過通信協(xié)議進(jìn)行發(fā)送接收,主機(jī)先送信號給從機(jī),從機(jī)接收信號后發(fā)出應(yīng)答信號并顯示相應(yīng)內(nèi)容.二、硬件設(shè)計151單片機(jī)的串行通信圖1.AT89C51計算機(jī)與外界的信息交換稱為通信,常用的通信方式有兩種:并行通信和串行通信。51單片機(jī)用4個接口與外界進(jìn)行數(shù)據(jù)輸入與數(shù)據(jù)輸出就是并行通信,并行通信的特點(diǎn)是傳輸信號的速度快,但所用的信號線較多,成本高,傳輸?shù)木嚯x較近。串行通信的特點(diǎn)是只用兩條信號線(一

7、條信號線,再加一條地線作為信號回路)即可完成通信,成本低,傳輸?shù)木嚯x較遠(yuǎn)。51單片機(jī)的串行接口是一個全雙工的接口,它可以作為UART(通用異步接受和發(fā)送器)用,也可以作為同步移位寄存器用。51片機(jī)串行接口的結(jié)構(gòu)如下:(1)數(shù)據(jù)緩沖器(SBUF)接受或發(fā)送的數(shù)據(jù)都要先送到SBUF緩存。有兩個,一個緩存,另一個接受,用同一直接地址99H,發(fā)送時用指令將數(shù)據(jù)送到SBUF即可啟動發(fā)送;接收時用指令將SBUF中接收到的數(shù)據(jù)取出。(2)串行控制寄存器(PCON)SCON用于串行通信方式的選擇,收發(fā)控制及狀態(tài)指示,各位含義如下:SM0SM1SM2RENTB8RB8TIRISM0,SM1:串行接口工作方式選擇

8、位,這兩位組合成00,01,10,11對應(yīng)于工作方式0、1、2、3。串行接口工作方式特點(diǎn)見下表SM0SM1工作方式功能波特率 0008位同步移位寄存器(用于I/O擴(kuò)展)fORC/1201110位異步串行通信(UART)可變(T1溢出率*2SMOD/32)10211位異步串行通信(UART)fORC/64或fORC/3211311位異步串行通信(UART)可變(T1溢出率*2SMOD/32)SM2:多機(jī)通信控制位。REN:接收允許控制位。軟件置1允許接收;軟件置0禁止接收。TB8:方式2或3時,TB8為要發(fā)送的第9位數(shù)據(jù),根據(jù)需要由軟件置1或清0。RB9:在方式2或3時,RB8位接收到的第9位數(shù)

9、據(jù),實(shí)際為主機(jī)發(fā)送的第9位數(shù)據(jù)TB8,使從機(jī)根據(jù)這一位來判斷主機(jī)發(fā)送的時呼叫地址還是要傳送的數(shù)據(jù)。TI:發(fā)送中斷標(biāo)志。發(fā)送完一幀數(shù)據(jù)后由硬件自動置位,并申請中斷。必須要軟件清零后才能繼續(xù)發(fā)送。RI:接收中斷標(biāo)志。接收完一幀數(shù)據(jù)后由硬件自動置位,并申請中斷。必須要軟件清零后才能繼續(xù)接收。(3)輸入移位寄存器接收的數(shù)據(jù)先串行進(jìn)入輸入移位寄存器,8位數(shù)據(jù)全移入后,再并行送入接收SBUF中。(4)波特率發(fā)生器波特率發(fā)生器用來控制串行通信的數(shù)據(jù)傳輸速率的,52系列單片機(jī)用定時器T1作為波特率發(fā)生器,T1設(shè)置在定時方式。波特率時用來表示串行通信數(shù)據(jù)傳輸快慢程度的物理量,定義為每秒鐘傳送的數(shù)據(jù)位數(shù)。(5)電

10、源控制寄存器PCON其最高位為SMOD。(6)波特率計算當(dāng)定時器T1工作在定時方式的時候,定時器T1溢出率=(T1計數(shù)率)/(產(chǎn)生溢出所需機(jī)器周期)。由于是定時方式,T1計數(shù)率= fORC/12。產(chǎn)生溢出所需機(jī)器周期數(shù)=模M-計數(shù)初值X。2.MAX232芯片用89C51串行接口通信,如果兩臺單片機(jī)之間的距離很近(不超過1.5m),可以采用直接將兩臺單片機(jī)的串行接口直接相連,利用其自身的TTL電平(0-5V)直接傳輸數(shù)據(jù)信息。如果傳輸距離較遠(yuǎn)(超過1.5m),由于傳輸線的阻抗與分布電容,會產(chǎn)生電平損耗和波形畸變,以至于檢測不出數(shù)據(jù)或數(shù)據(jù)出錯。此時可利用 RS232標(biāo)準(zhǔn)總線接口,將單片機(jī)輸出的TT

11、L電平轉(zhuǎn)換為RS232標(biāo)準(zhǔn)電平(邏輯1為-15-5V;邏輯0為+5-+15V)。用RS232可將傳輸距離提高到15m,如果想遠(yuǎn)距離傳輸,可以采用RS422或者RS485。電平轉(zhuǎn)換芯片MAX232是美信公司(MAXIM)生產(chǎn),專用于進(jìn)行將TTL電平轉(zhuǎn)換為RS232電平的芯片,MAX232內(nèi)部有泵電源,能將+5V電源電壓在芯片內(nèi)提高到RS232電平所需的+10V或者-10V電平。圖2.電平轉(zhuǎn)換芯片MAX2323.DS18B20溫度傳感器數(shù)字溫度傳感器DS18B20介紹   1、DS18B20的主要特性 1.1、適應(yīng)電壓范圍更寬,電壓范圍:3.05.5V,在寄生電源方式下可由數(shù)

12、據(jù)線供電 1.2、獨(dú)特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊 1.3、 DS18B20支持多點(diǎn)組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測溫 1.4、DS18B20在使用中不需要任何外圍元件,全部 傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi) 1.5、溫范圍55125,在-10+85時精度為±0.5 1.6、可編程 的分辨率為912位,對應(yīng)的可分辨溫度分別為0.5、0.25、0.125和0.0625,可實(shí)現(xiàn)高精度測溫 1.7、在9位分辨率時最多在 93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨

13、率時最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快 1.8、測量結(jié)果直接輸出數(shù)字溫度信號,以"一 線總線"串行傳送給CPU,同時可傳送CRC校驗碼,具有極強(qiáng)的抗干擾糾錯能力 1.9、負(fù)壓特性:電源極性接反時,芯片不會因發(fā)熱而燒毀, 但不能正常工作。2、DS18B20的外形和內(nèi)部結(jié)構(gòu)DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM 、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的外形及管腳排列如下圖1: DS18B20引腳定義: (1)DQ為數(shù)字信號輸入/輸出端; (2)GND為電源地; (3)VDD為外接供電電源輸入端(在寄生電源接線方式

14、時接地)。   圖2: DS18B20內(nèi)部結(jié)構(gòu)圖 3、DS18B20工作原理 DS18B20的讀寫時序和測溫原理與DS1820相同,只是得到的溫度值的位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時的延時時間由2s 減為750ms。 DS18B20測溫原理如圖3所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計數(shù)器1。高溫度系數(shù)晶振 隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號作為計數(shù)器2的脈沖輸入。計數(shù)器1和溫度寄存器被預(yù)置在55所對應(yīng)的一個基數(shù)值。計數(shù)器1對 低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計數(shù),當(dāng)計數(shù)器1的預(yù)置值減到0時,溫度寄存器的值將加1,計數(shù)

15、器1的預(yù)置將重新被裝入,計數(shù)器1重 新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計數(shù),如此循環(huán)直到計數(shù)器2計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即 為所測溫度。圖3中的斜率累加器用于補(bǔ)償和修正測溫過程中的非線性,其輸出用于修正計數(shù)器1的預(yù)置值。 4.整體電路設(shè)計最終設(shè)計電路如下圖3所示,發(fā)送方的數(shù)據(jù)由串行口TXD段輸出,經(jīng)過電平轉(zhuǎn)換芯片MAX232將TTL電平轉(zhuǎn)換為RS232電平輸出,經(jīng)過傳輸線將信號傳送到接收端。接收方也使用MAX232芯片進(jìn)行電平轉(zhuǎn)換后,信號到達(dá)接收方串行口的接收端。接受方接收后,通過P1口在數(shù)碼管上顯示接收的信息。 A機(jī)控制B機(jī)LED,B機(jī)控制A機(jī)數(shù)碼管加

16、一顯示 B機(jī) DS18B20溫度傳感器檢測溫度送A 機(jī)顯示三、軟件設(shè)計1.串行通信軟件實(shí)現(xiàn)(1)串行口工作于方式1;用定時器1產(chǎn)生9600bit/s的波特率,工作于方式2。(2)功能:將本機(jī)ROM中數(shù)碼表TAB16中的16個數(shù)發(fā)送到從機(jī),并保存在從機(jī)內(nèi)部ROM中,從機(jī)收到這16個數(shù)據(jù)后送到一個數(shù)碼管循環(huán)顯示。(3)通信協(xié)議:主機(jī)首先發(fā)送連絡(luò)信號(信號),從機(jī)接收到之后返回一個連絡(luò)信號(BBH)表示從機(jī)已準(zhǔn)備好接收。(4)通信過程使用第九位發(fā)送奇偶校驗位。(5)從機(jī)接收到一個數(shù)據(jù)后,立即進(jìn)行奇偶校驗,若數(shù)據(jù)沒有錯誤,則返回00H,否則返回FFH。(6)主機(jī)發(fā)送一個數(shù)據(jù)后,等待從機(jī)返回數(shù)據(jù);若為0

17、0H,則繼續(xù)發(fā)送下一個數(shù)據(jù),若為FFH,則重新發(fā)送數(shù)據(jù)。(7) 通過通信協(xié)議進(jìn)行發(fā)送接收,A機(jī)向B機(jī)發(fā)送操作代碼A、B、C或停止發(fā)送,對應(yīng)的開關(guān)K1按一下兩機(jī) LED1都亮,按第二下兩機(jī)LED2都亮,再按下時,LED1、LED2全亮,再按則四燈全滅。(8)K2控制B機(jī)向A機(jī)發(fā)送字符,根據(jù)按鍵次數(shù)逐次加1至9,10為關(guān)閉狀態(tài),同時B機(jī)接收A機(jī)命令,受K1控制LED燈的亮、滅。( 9) 由B機(jī)DS18B20測量溫度后A機(jī)顯示測量的溫度值.2串行通信的傳輸方式串行通信的傳送方向通常有三種(1)單向(或單工)配置,只允許數(shù)據(jù)向一個方向傳送;(2)半雙向(或半雙工)配置,允許數(shù)據(jù)向兩個方向中的任一方向傳

18、送,但每次只能有一個站點(diǎn)發(fā)送;(3)全雙向(全雙工)配置,允許同時雙向傳送數(shù)據(jù),因此,全雙工配置是一對單向配置,它要求兩端的通信設(shè)備都具有完整和獨(dú)立的發(fā)送和接受能力。3、串行通信工作方式方式1接收時,數(shù)據(jù)從引腳RXD(P3.0)端輸入。接收是在SCON寄存器中REN位置1的前提下,并檢測到起始位(RXD上檢測到10的跳變,即起始位)而開始的。接收時,定時信號有兩種:一種是接收移位時鐘(RX時鐘),它的頻率和傳送波特率相同,也是由定時器T1的溢出信號經(jīng)過16或32分頻而得到的;另一種是位檢測器采樣脈沖,它的頻率是RX時鐘的16倍,亦即在一位數(shù)據(jù)期間有16位檢測器采樣脈沖,為完成檢測,以16倍于波

19、特率的速率對RXD進(jìn)行采樣。4程序流程圖(1) 發(fā)送端程序流程圖主程序開始從機(jī)應(yīng)答程序初始化主機(jī)發(fā)送信號K1按下主機(jī)發(fā)送數(shù)據(jù)輸出完成?清除標(biāo)志位未應(yīng)答未完成(2)接收方程序流程圖主程序開始接收完成?程序初始化K2按下,接收數(shù)據(jù)未完成發(fā)送信號接收完成?未完成清除標(biāo)志位重新接收顯示四、 聯(lián)合調(diào)試在protues上進(jìn)行仿真實(shí)驗。首先使用KeilC將編寫完成的程序編譯生成HEX文件,將HEX文件燒錄到兩片單片機(jī)中,進(jìn)行仿真實(shí)驗,結(jié)果如下圖所示,可以看到,接收端已將接受到的數(shù)據(jù)完整的顯示了出來。附錄A機(jī)控制B機(jī)LED#include<reg52.h>#define uchar unsigne

20、d char#define uint unsigned int sbit LED1=P10; sbit LED2=P13;sbit K1=P17;uchar Operation_No;/操作代碼/數(shù)碼管代碼uchar code DSY_CODE=0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F; /延時void DelaysMS(uint ms) uchar i; while(ms-)for(i=0;i<120;i+); /向串口發(fā)送字符void Putc_to_SerialPort(uchar c) SBUF=c; while(TI=

21、0); TI=0; /主程序void main() LED1=LED2=1; P0=0x00 SCON=0x50;/串口模式一,允許接收 TMOD=0x20;/T1工作模式2 PCON=0X00;/波特率不倍增 TH1=0xfd; TL1=0xfd; TI=RI=0; TR1=1; IE=0x90;/允許串口中斷 while(1) DelaysMS(100); if(K1=0)/按下K1時選擇操作代碼0,1,2,3 while(K1=0);Operation_No=(Operation_No+1)%4; switch(Operation_No)/根據(jù)操作代碼發(fā)送A/B/C或停止發(fā)送 case

22、0: Putc_to_SerialPort( 'X');LED1=LED2=1; break; case 1: Putc_to_SerialPort( 'A'); LED1=LED1;LED2=1; break; case 2:Putc_to_SerialPort( 'B'); LED2=LED2;LED1=1; break; case 3:Putc_to_SerialPort( 'C'); LED1=LED1;LED2=LED1; break; /甲機(jī)串口接收中斷函數(shù)void Serial_INT()interrupt 4 if

23、(RI) RI=0; if(SBUF>=0&&SBUF<=9)P0=DSY_CODESBUF; elseP0=0x00; B機(jī)控制A機(jī)數(shù)碼管加一顯示#include<reg52.h>#define uchar unsigned char#define uint unsigned int sbit LED1=P10; sbit LED2=P13;sbit K2=P17;uchar NumX=-1; /延時void DelaysMS(uint ms) uchar i; while(ms-)for(i=0;i<120;i+); /主程序void main

24、() LED1=LED2=1; P0=0x00; SCON=0x50;/串口模式一,允許接收 TMOD=0x20;/T1工作模式2 TH1=0xfd;/ 波特率9600 TL1=0xfd; PCON=0X00;/波特率不倍增 RI=TI=0; TR1=1; IE=0x90; while(1) DelaysMS(100);if(K2=0) while(K2=0); NumX=+NumX%11;/產(chǎn)生010范圍內(nèi)的數(shù)字,其中10表示關(guān)閉 SBUF=NumX; while(TI=0); TI=0; void Serial_INT()interrupt 4 if(RI) /如收到則LED則動作 RI=

25、0; switch(SBUF)/根據(jù)所收到的不同命令字符完成不同動作 case 'X': LED1=LED2=1; break; /全滅 case 'A': LED1=0;LED2=1; break;/LED1亮 case 'B': LED2=0;LED1=1; break;/LED2亮 case 'C': LED1=LED2=0; /全亮 B機(jī) DS18B20溫度傳感器檢測溫度送A 機(jī)顯示 A機(jī)程序#include<reg52.h>#define uchar unsigned char#define uint uns

26、igned int #include <intrins.h>#define delayNOP() _nop_();_nop_();_nop_();_nop_();sbit LCD_RS = P20;sbit LCD_RW = P21;sbit LCD_EN = P22;uchar code Temp_Disp_Title="Current Temp : "uchar Current_Temp_Display_Buffer=" TEMP: "uchar code Temperature_Char8 = 0x0c,0x12,0x12,0x0c,0

27、x00,0x00,0x00,0x00;uchar code df_Table= 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;uchar CurrentT = 0;uchar Temp_Value=0x00,0x00;uchar Display_Digit=0,0,0,0;bit DS18B20_IS_OK = 1;int b;sbit DQ = P34; void DelayXus(uint x) uchar i;while(x-) for(i=0;i<200;i+); void Delay(uint x) while(-x);uchar Init_DS18B20()

28、 uchar status;DQ = 1;Delay(8);DQ = 0;Delay(90);DQ = 1;Delay(8);DQ = 1;return status;bit LCD_Busy_Check() bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN=0;return result;void Write_LCD_Command(uchar cmd)while(LCD_Busy_Check();LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;

29、_nop_();_nop_();P0 = cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;void Write_LCD_Data(uchar dat)while(LCD_Busy_Check();LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;void LCD_Initialise() Write_LCD_Command(0x01);DelayXus(5);Write_LCD_Command(0x38);DelayXus(5

30、);Write_LCD_Command(0x0c);DelayXus(5);Write_LCD_Command(0x06);DelayXus(5);void Set_LCD_POS(uchar pos) Write_LCD_Command(pos|0x80); void Display_Temperature(b) uchar i;uchar t = 150, ng = 0;if(Temp_Value1&0xf8)=0xf8)/是負(fù)溫度 Temp_Value1 = Temp_Value1;Temp_Value0 = Temp_Value0+1;if(Temp_Value0=0x00)T

31、emp_Value1+;ng = 1;Display_Digit0 = df_TableTemp_Value0&0x0f;/取低四位CurrentT = (Temp_Value0&0xf0)>>4) | (Temp_Value1&0x07)<<4);Display_Digit3 = CurrentT/100;/百位Display_Digit2 = CurrentT%100/10;/十位Display_Digit1 = CurrentT%10;/各位Current_Temp_Display_Buffer11 = Display_Digit0 + &

32、#39;0'Current_Temp_Display_Buffer10 = '.'Current_Temp_Display_Buffer9 = Display_Digit1 + '0'Current_Temp_Display_Buffer8 = Display_Digit2 + '0'Current_Temp_Display_Buffer7 = Display_Digit3 + '0'if(Display_Digit3 = 0)Current_Temp_Display_Buffer7 = ' 'if(Dis

33、play_Digit2 = 0&&Display_Digit3=0)Current_Temp_Display_Buffer8 = ' 'if(ng) if(Current_Temp_Display_Buffer8 = ' ')Current_Temp_Display_Buffer8 = '-'else if(Current_Temp_Display_Buffer7 = ' ')Current_Temp_Display_Buffer7 = '-'else Current_Temp_Display_Bu

34、ffer6 = '-'Set_LCD_POS(0x00);for(i=0;i<16;i+)Write_LCD_Data(Temp_Disp_Titlei); Set_LCD_POS(0x40);for(i=0;i<16;i+)Write_LCD_Data(Current_Temp_Display_Bufferi); Set_LCD_POS(0x4d);Write_LCD_Data(0x00);Set_LCD_POS(0x4e);Write_LCD_Data('C');/延時void DelaysMS(uint ms) uchar i; while(m

35、s-)for(i=0;i<120;i+); void Read_Temperature() if(Init_DS18B20()=1)DS18B20_IS_OK=0;elseWriteOneByte(0xcc);WriteOneByte(0x44);Init_DS18B20();WriteOneByte(0xcc);WriteOneByte(0xbe);Temp_Value0 = ReadOneByte(); Temp_Value1 = ReadOneByte();DS18B20_IS_OK=1;/主程序void main() SCON=0x50;/串口模式一,允許接收 TMOD=0x20

36、;/T1工作模式2 PCON=0X00;/波特率不倍增 TH1=0xfd; TL1=0xfd; TI=RI=0; TR1=1; IE=0x90;/允許串口中斷 LCD_Initialise(); Read_Temperature(); while(1) if (RI) /RI接受中斷標(biāo)志 RI=0; /清除RI接受中斷標(biāo)志 b=SBUF;/SUBF接受/發(fā)送緩沖器 Display_Temperature(b); B機(jī)程序 #include<reg52.h>#define uchar unsigned char#define uint unsigned int #include <intrins.h>#define delayNOP() _nop_();_nop_();_nop_();_nop_();uchar CurrentT = 0;uchar Temp_Value=0x00,0x00;uchar Display_Digit=0,0,0,0;bit DS18B20_IS_OK = 1;sbit DQ = P34; /延時 void Delay(uint x) while(-x);void DelaysMS(uint ms) uchar i; while(ms-)

溫馨提示

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

最新文檔

評論

0/150

提交評論