數(shù)字溫度傳感器課程設(shè)計(jì)論文_第1頁(yè)
已閱讀1頁(yè),還剩21頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p><b>  課題要求:4</b></p><p><b>  1.原理分析4</b></p><p><b>  2.方案選擇4</b></p><p><b>  3.元器件選擇

2、5</b></p><p><b>  3.1單片機(jī)5</b></p><p>  3.2溫度傳感器7</p><p><b>  3.3 顯示屏8</b></p><p><b>  3.4 蜂鳴器9</b></p><p>&l

3、t;b>  3.5其他元件9</b></p><p>  4.proteus原理圖繪制9</p><p><b>  4.1設(shè)計(jì)步驟9</b></p><p>  4.2 設(shè)計(jì)過(guò)程9</p><p>  4.2.1單片機(jī)系統(tǒng)模塊10</p><p>  4.2.2晶體振

4、蕩模塊10</p><p>  4.2.3揚(yáng)聲器報(bào)警模塊11</p><p>  4.2.4溫度傳感器模塊12</p><p>  4.2.5液晶顯示模塊13</p><p><b>  5.綜合調(diào)試16</b></p><p><b>  6.總結(jié)17</b>&

5、lt;/p><p><b>  附錄118</b></p><p><b>  附錄221</b></p><p><b>  附錄323</b></p><p><b>  附錄424</b></p><p>  基于數(shù)字溫度

6、傳感器的數(shù)字溫度計(jì)設(shè)計(jì)報(bào)告</p><p><b>  課題要求:</b></p><p>  利用數(shù)字溫度傳感器DS18B20與單片機(jī)結(jié)合來(lái)測(cè)量溫度。利用數(shù)字溫度傳感器DS18B20測(cè)量溫度信號(hào),計(jì)算后在LED數(shù)碼管上顯示相應(yīng)的溫度值。其溫度測(cè)量范圍為?55℃~125℃,精確到0.5℃。數(shù)字溫度計(jì)所測(cè)量的溫度采用數(shù)字顯示,控制器使用單片機(jī)AT89C51,測(cè)溫傳感器使

7、用DS18B20,,實(shí)現(xiàn)溫度顯示。</p><p><b>  1. 原理分析 </b></p><p>  采用AT89C51單片機(jī)作為控制核心對(duì)溫度傳感器DS18B20控制,讀取溫度信號(hào)并進(jìn)行計(jì)算處理,并送數(shù)碼管顯示。</p><p>  采用數(shù)字溫度芯片 DS18B20 測(cè)量溫度,輸出信號(hào)全數(shù)字化。便于單片機(jī)處理及控制,省去傳統(tǒng)的測(cè)溫方法

8、的很多外圍電路。且該芯片的物理化學(xué)性很穩(wěn)定,它能用做工業(yè)測(cè)溫元件,此元件線(xiàn)形較好。在0—100攝氏度時(shí),最大線(xiàn)形偏差小于1攝氏度。DS18B20的最大特點(diǎn)之一采用了單總線(xiàn)的數(shù)據(jù)傳輸,由數(shù)字溫度計(jì) DS18B20 和微控制芯片AT89C51 構(gòu)成的溫度測(cè)量裝置,它直接輸出溫度的數(shù)字信號(hào),可直接與計(jì)算機(jī)連接。這樣,測(cè)溫系統(tǒng)的結(jié)構(gòu)就比較簡(jiǎn)單,體積也不大。采用AT89C51 單片機(jī)控制,軟件編程的自由度大,可通過(guò)編程實(shí)現(xiàn)各種各樣的算術(shù)算法和邏輯

9、控制而且體積小,硬件實(shí)現(xiàn)簡(jiǎn)單,安裝方便。用 AT89C51 芯 片 控 制 溫 度 傳 感 器DS18B20 進(jìn)行實(shí)時(shí)溫度檢測(cè)并顯示,能夠?qū)崿F(xiàn)快速測(cè)量環(huán)境溫度,并可以根據(jù)需要設(shè)定上下限報(bào)警溫度。該系統(tǒng)擴(kuò)展性非常強(qiáng),它可以在設(shè)計(jì)中加入時(shí)鐘芯片 DS1302以獲取時(shí)間數(shù)據(jù),在數(shù)據(jù)處理同時(shí)顯示時(shí)間,并可以利用 AT24C16 芯片作為存儲(chǔ)器件,以此來(lái)對(duì)某些時(shí)間點(diǎn)的溫度數(shù)據(jù)進(jìn)行存儲(chǔ),利用鍵盤(pán)來(lái)進(jìn)行調(diào)時(shí)和溫度查詢(xún),獲得的數(shù)據(jù)可以通過(guò) MAX232

10、 芯片與計(jì)算機(jī)的 </p><p><b> ?、?方案選擇 </b></p><p>  按照系統(tǒng)設(shè)計(jì)功能的要求,確定系統(tǒng)由3個(gè)大的模塊組成:主控制器、測(cè)溫電路和顯示電路。由AT89C51單片機(jī)組成硬件設(shè)計(jì),AT89C51的EA接高電平,其外圍電路提供能使之工作的晶振脈沖、復(fù)位按鍵,四個(gè)I/O分別接8路的單列IP座方便與外圍設(shè)備連接。 當(dāng)AT89C51芯片接到來(lái)自

11、溫度傳感器的信號(hào)時(shí),其內(nèi)部程序?qū)⒏鶕?jù)信號(hào)的類(lèi)型進(jìn)行處理,并且將處理的結(jié)果送到顯示模塊,發(fā)送控制信號(hào)控制各模塊。 </p><p><b>  ⒊ 元器件選擇 </b></p><p><b>  3.1單片機(jī)</b></p><p>  AT89C51芯片:</p><p>  AT89C51是一個(gè)

12、低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含4K的可反復(fù)擦寫(xiě)的FLASH只讀存儲(chǔ)器和128 BYTES的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器,40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口。AT89C51可以按照常規(guī)方法進(jìn)行編程,也可以在線(xiàn)編程。器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲(chǔ)單元,其將通用的

13、微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫(xiě)的Flash存儲(chǔ)器可有效地降低開(kāi)發(fā)成本。內(nèi)置功能強(qiáng)大的微型計(jì)算機(jī)的AT89C51提供了高性?xún)r(jià)比的解決方案。</p><p><b>  主要特性:</b></p><p>  ·與MCS-51 兼容</p><p>  ·4K字節(jié)可編程FLASH存儲(chǔ)器</p>

14、<p>  ·壽命:1000寫(xiě)/擦循環(huán)</p><p>  ·數(shù)據(jù)保留時(shí)間:10年</p><p>  ·全靜態(tài)工作:0Hz-24MHz</p><p>  ·三級(jí)程序存儲(chǔ)器鎖定</p><p>  ·128×8位內(nèi)部RAM</p><p>  

15、·32可編程I/O線(xiàn)</p><p>  ·兩個(gè)16位定時(shí)器/計(jì)數(shù)器</p><p><b>  ·5個(gè)中斷源</b></p><p><b>  ·可編程串行通道</b></p><p>  ·低功耗的閑置和掉電模式</p><

16、p>  ·片內(nèi)振蕩器和時(shí)鐘電路</p><p><b>  管腳說(shuō)明:</b></p><p>  VCC: 供電電壓。</p><p><b>  GND: 接地。</b></p><p>  P0: P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門(mén)電流。當(dāng)P1口的管腳

17、第一次寫(xiě)1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。</p><p>  P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門(mén)電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于

18、內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。</p><p>  P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出

19、地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫(xiě)時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。</p><p>  P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門(mén)電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</

20、p><p>  P3.0 RXD(串行輸入口)</p><p>  P3.1 TXD(串行輸出口)</p><p>  P3.2 /INT0(外部中斷0)</p><p>  P3.3 /INT1(外部中斷1)</p><p>  P3.4 T0(計(jì)時(shí)器0外部輸入)</p><p>  P3.5 T

21、1(計(jì)時(shí)器1外部輸入)</p><p>  P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通)</p><p>  P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)</p><p>  P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。</p><p>  /EA/VPP: 當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部

22、程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。</p><p>  XTAL2:來(lái)自反向振蕩器的輸出。</p><p><b>  振蕩器特性:</b

23、></p><p>  XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過(guò)一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無(wú)任何要求,但必須保證脈沖的高低電平要求的寬度。</p><p><b>  3.2溫度傳感器</b></

24、p><p><b>  DS18B20:</b></p><p>  DS18B20 封裝圖</p><p>  DS18B20是美國(guó)DALLAS半導(dǎo)體公司繼DS1820之后最新推出的一種改進(jìn)型智能溫度傳感器。與傳統(tǒng)的熱敏電阻相比,它能夠直接讀出被測(cè)溫度并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式??梢苑謩e在93.75 ms和75

25、0 ms內(nèi)完成9位和12位的數(shù)字量,并且從DS18B20讀出的信息或?qū)懭隓S18B20的信息僅需要一根口線(xiàn)(單線(xiàn)接口)讀寫(xiě),溫度變換功率來(lái)源于數(shù)據(jù)總線(xiàn),總線(xiàn)本身也可以向所掛接的DS18B20供電,而無(wú)需額外電源。因而使用DS18B20可使系統(tǒng)結(jié)構(gòu)更趨簡(jiǎn)單,可靠性更高。他在測(cè)溫精度、轉(zhuǎn)換時(shí)間、傳輸距離、分辨率等方面較DS1820有了很大的改進(jìn),給用戶(hù)帶來(lái)了更方便的使用和更令人滿(mǎn)意的效果。 以下是DS18B20的特點(diǎn): </p>

26、;<p>  (1)獨(dú)特的單線(xiàn)接口方式:DS18B20與微處理器連接時(shí)僅需要一條口線(xiàn)即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。 </p><p>  (2)在使用中不需要任何外圍元件。 </p><p>  (3)可用數(shù)據(jù)線(xiàn)供電,電壓范圍:+3.0~ +5.5 V。 </p><p>  (4)測(cè)溫范圍:-55 - +125 ℃。固有測(cè)溫分辨率為

27、0.5 ℃。 </p><p>  (5)過(guò)編程可實(shí)現(xiàn)9-12位的數(shù)字讀數(shù)方式。 </p><p>  (6)用戶(hù)可自設(shè)定非易失性的報(bào)警上下限值。 </p><p>  (7)支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在惟一的三線(xiàn)上,實(shí)現(xiàn)多點(diǎn)測(cè)溫。 </p><p>  (8)負(fù)壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工

28、作。</p><p><b>  3.3 顯示屏 </b></p><p>  LCD1602液晶顯示屏:</p><p>  同時(shí)顯示攝氏溫度與華氏溫度。</p><p><b>  管腳分布:</b></p><p><b>  3.4 蜂鳴器</b>

29、;</p><p><b>  實(shí)現(xiàn)報(bào)警振鈴音。</b></p><p><b>  3.5其他元件</b></p><p>  電容(30pf,10uf)、電阻(4.7k,8.2k)、三極管(8550)、晶振(12MHZ)、按鍵、杜邦線(xiàn)、排針若干,萬(wàn)能板。</p><p> ?、?proteus原

30、理圖繪制 </p><p><b>  4.1設(shè)計(jì)步驟</b></p><p>  1.使用proteus 軟件畫(huà)出原理圖</p><p>  2.使用keil軟件</p><p><b>  1)建立工程</b></p><p>  2)為工程選擇目標(biāo)器件</p>

31、;<p>  3)設(shè)置工程的配置參數(shù)</p><p><b>  4) 打開(kāi)程序文件</b></p><p><b>  5)編輯和鏈接工程</b></p><p>  6)糾正程序中的書(shū)寫(xiě)和錯(cuò)誤并重新建立鏈接</p><p><b>  7)生成hex文件</b>

32、;</p><p>  3.使用proteus軟件進(jìn)行仿真</p><p><b>  4.2 設(shè)計(jì)過(guò)程</b></p><p><b>  硬件接線(xiàn)圖見(jiàn)附錄4</b></p><p>  4.2.1單片機(jī)系統(tǒng)模塊</p><p>  4.2.2晶體振蕩模塊</p>

33、;<p>  晶振電路是提供系統(tǒng)時(shí)鐘信號(hào)。為了各部分的同步應(yīng)當(dāng)引入公用的外部脈沖信號(hào)作為振蕩脈沖。電容選擇在10~30pF之間,因?yàn)殡娙莸拇笮∮绊懻袷幤髡袷幍姆€(wěn)定性和起振的速度。電容C1和C2的作用是穩(wěn)定頻率和快速起振,晶振CYS的振蕩頻率取12MHZ。</p><p>  89C51單片機(jī)的時(shí)鐘信號(hào)通常有兩種方式產(chǎn)生,外部時(shí)鐘和內(nèi)部時(shí)鐘方式,如下圖所示:</p><p> 

34、 4.2.3揚(yáng)聲器報(bào)警模塊</p><p>  系統(tǒng)設(shè)有一定的溫度范圍,當(dāng)系統(tǒng)檢測(cè)到的溫度不在預(yù)設(shè)的范圍時(shí),則需發(fā)出報(bào)警,警報(bào)系統(tǒng)由PNP三極管和蜂鳴器組成。</p><p>  4.2.4溫度傳感器模塊</p><p>  DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,

35、并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式。</p><p>  4.2.5液晶顯示模塊</p><p><b>  硬件連線(xiàn)圖:</b></p><p><b>  指令:</b></p><p>  1)Clear display 清顯示</p><p&g

36、t;<b>  指令碼:</b></p><p>  清顯示指令將空位字符碼20H 送入全部DDRAM 地址中,使DDRAM 中的內(nèi)容全部清除,顯示消失;地址計(jì)數(shù)器AC=0,自動(dòng)增1 模式;顯示歸位,光標(biāo)或者閃爍回到原點(diǎn)(顯示屏左上角);但并不改變移位設(shè)置模式。</p><p>  2)Return home 歸位</p><p><b&

37、gt;  指令碼:</b></p><p>  歸位指令置地址計(jì)數(shù)器AC=0;將光標(biāo)及光標(biāo)所在位的字符回原點(diǎn);但DDRAM 中的內(nèi)容并不改變。</p><p>  3)Entry mode set 設(shè)置輸入模式</p><p><b>  指令碼:</b></p><p>  I/D:字符碼寫(xiě)入或者讀出DDR

38、AM 后DDRAM 地址指針AC變化方向標(biāo)志:</p><p>  I/D=1,完成一個(gè)字符碼傳送后,光標(biāo)右移,AC自動(dòng)加1;</p><p>  I/D=0,完成一個(gè)字符碼傳送后,光標(biāo)左移,AC自動(dòng)減1;</p><p><b>  S:顯示移位標(biāo)志:</b></p><p>  S=1,將全部顯示向右(I/D=0)或

39、者向左(I/D=1)移位;</p><p>  S=0,顯示不發(fā)生移位;</p><p>  S=1 時(shí),顯示移位時(shí),光標(biāo)似乎并不移位;此外,讀DDRAM 操作以及對(duì)CGRAM 的訪問(wèn),不發(fā)生顯示移位。</p><p>  4)Display on/off control 顯示開(kāi)/關(guān)控制</p><p><b>  指令碼:<

40、/b></p><p>  D:顯示開(kāi)/關(guān)控制標(biāo)志:D=1,開(kāi)顯示;D=0,關(guān)顯示;</p><p>  關(guān)顯示后,顯示數(shù)據(jù)仍保持在DDRAM中,立即開(kāi)顯示可以再現(xiàn);</p><p>  C:光標(biāo)顯示控制標(biāo)志:C=1,光標(biāo)顯示;C=0,光標(biāo)不顯示;</p><p>  不顯示光標(biāo)并不影響模塊其它顯示功能;顯示5X8 點(diǎn)陣字符時(shí),光標(biāo)在第

41、八行顯示,顯示5X10 點(diǎn)陣字</p><p>  符時(shí),光標(biāo)在第十一行顯示;</p><p>  B:閃爍顯示控制標(biāo)志:B=1,光標(biāo)所指位置上,交替顯示全黑點(diǎn)陣和顯示字符,產(chǎn)生閃爍效果,F(xiàn)osc=250kHz</p><p>  時(shí),閃爍頻率為0.4ms左右;通過(guò)設(shè)置,光標(biāo)可以與其所指位置的字符一起閃爍。</p><p>  5)Curso

42、r or display shift 光標(biāo)或顯示移位</p><p><b>  指令碼:</b></p><p>  光標(biāo)或顯示移位指令可使光標(biāo)或顯示在沒(méi)有讀寫(xiě)顯示數(shù)據(jù)的情況下,向左或向右移動(dòng);運(yùn)用此指令可以實(shí)現(xiàn)顯示的查找或替換;在雙行顯示方式下,第一行和第二行會(huì)同時(shí)移位;當(dāng)移位越過(guò)第一行第四十位時(shí),光標(biāo)會(huì)從第一行跳到第二行,但顯示數(shù)據(jù)只在本行內(nèi)水平移位,第二行的顯

43、示決不會(huì)移進(jìn)第一行;倘若僅執(zhí)行移位操作,地址計(jì)數(shù)器AC的內(nèi)容不會(huì)發(fā)生改變。</p><p>  6)Function set 功能設(shè)置</p><p><b>  指令碼:</b></p><p>  功能設(shè)置指令設(shè)置模塊數(shù)據(jù)接口寬度和LCD 顯示屏顯示方式,即MPU 與模塊接口數(shù)據(jù)總線(xiàn)為4 位或者是8位、LCD 顯示行數(shù)和顯示字符點(diǎn)陣規(guī)格;所

44、以建議用戶(hù)最好在執(zhí)行其它指令設(shè)置(讀忙標(biāo)志指令除外)之前,在程序的開(kāi)始,進(jìn)行功能設(shè)置指令的執(zhí)行;</p><p>  DL:數(shù)據(jù)接口寬度標(biāo)志:DL=1,8 位數(shù)據(jù)總線(xiàn)DB7~DB0;DL=0,4 位數(shù)據(jù)總線(xiàn)DB7~DB4,DB3~DB0 不用,使用此方式傳送數(shù)據(jù),需分兩次進(jìn)行;</p><p>  N:顯示行數(shù)標(biāo)志:N=1,兩行顯示模式;N=0,單行顯示模式;</p><

45、;p>  F:顯示字符點(diǎn)陣字體標(biāo)志:F=1:5X10點(diǎn)陣+光標(biāo)顯示模式;F=0:5X7 點(diǎn)陣+光標(biāo)顯示模式。</p><p>  7)Set CGRAM address CGRAM地址設(shè)置</p><p><b>  指令碼:</b></p><p>  CGRAM 地址設(shè)置指令設(shè)置CGRAM地址指針,它將CGRAM存儲(chǔ)用戶(hù)自定義顯示字符

46、的字模數(shù)據(jù)的首地址ACG5~ACG0送入AC中,于是用戶(hù)自定義字符字模就可以寫(xiě)入CGRAM 中或者從CGRAM中讀出。</p><p>  8)Set DDRAM address DDRAM地址設(shè)置</p><p><b>  指令碼:</b></p><p>  DDRAM 地址設(shè)置指令設(shè)置DDRAM 地址指針,它將DDRAM 存儲(chǔ)顯示字符的

47、字符碼的首地址ADD6~ADD0送入AC中,于是顯示字符的字符碼就可以寫(xiě)入DDRAM 中或者從DDRAM 中讀出;值得一提的是:在LCD 顯示屏一行顯示方式下,DDRAM 的地址范圍為:00H~4FH;兩行顯示方式下,DDRAM的地址范圍為:第一行00H~27H,第二行40H~67H。</p><p>  Read busy flag and address 讀忙標(biāo)志BF和AC</p><p&

48、gt;<b>  指令碼:</b></p><p>  當(dāng)RS=0 和R/W=1 時(shí),在E 信號(hào)高電平的作用下,BF和AC6~AC0被讀到數(shù)據(jù)總線(xiàn)DB7~DB0的相應(yīng)位;</p><p>  BF:內(nèi)部操作忙標(biāo)志,BF=1,表示模塊正在進(jìn)行內(nèi)部操作,此時(shí)模塊不接收任何外部指令和數(shù)據(jù),直到BF=0為止;</p><p>  AC6~AC0:地址計(jì)

49、數(shù)器AC 內(nèi)的當(dāng)前內(nèi)容,由于地址計(jì)數(shù)器AC 被CGROM、CGRAM和DDRAM的公用指針,因此當(dāng)前AC 內(nèi)容所指區(qū)域由前一條指令操作區(qū)域決定;同時(shí),只有BF=0 時(shí),送到DB7~DB0 的數(shù)據(jù)AC6~AC0才有效。</p><p>  10)Write data to CGRAM or DDRAM 寫(xiě)數(shù)據(jù)到CGRAM或DDRAM</p><p><b>  指令碼:</b

50、></p><p>  寫(xiě)數(shù)據(jù)到CGRAM 或DDRAM 指令,是將用戶(hù)自定義字符的字模數(shù)據(jù)寫(xiě)到已經(jīng)設(shè)置好的CGRAM 的地址中,或者是將欲顯示字符的字符碼寫(xiě)到DDRAM 中;欲寫(xiě)入的數(shù)據(jù)D7~D0 首先暫存在DR 中,再由模塊的內(nèi)部操作自動(dòng)寫(xiě)入地址指針?biāo)付ǖ腃GRAM 單元或者DDRAM單元中。</p><p>  11) Read data from CGRAM or DDRA

51、M 從CGRAM或DDRAM中讀數(shù)據(jù)</p><p><b>  指令碼:</b></p><p>  從CGRAM 或DDRAM 中讀數(shù)據(jù)指令,是從地址計(jì)數(shù)器AC指定的CGRAM或者DDRAM單元中,讀出數(shù)據(jù)D7~D0;讀出的數(shù)據(jù)D7~D0 暫存在DR中,再由模塊的內(nèi)部操作送到數(shù)據(jù)總線(xiàn)DB7~DB0 上。 </p><p><b>

52、  5.綜合調(diào)試 </b></p><p>  系統(tǒng)程序主要包括主程序、讀出溫度子程序、溫度轉(zhuǎn)換子程序、計(jì)算溫度 子程序、顯示等等,由余琳玲同學(xué)編寫(xiě)。程序于附錄</p><p>  硬件方面主要由黃學(xué)然和劉星調(diào)試焊接,一開(kāi)始存在少許不易發(fā)現(xiàn)的焊點(diǎn)虛焊漏焊現(xiàn)象,導(dǎo)致顯示屏無(wú)顯示,后改正后可以得出正常顯示溫度,證明我們的課程設(shè)計(jì)實(shí)驗(yàn)初步取得成功。</p><p&

53、gt;<b>  6.總結(jié) </b></p><p>  本次課程設(shè)計(jì)經(jīng)過(guò)我們小組三個(gè)同學(xué)的齊心協(xié)力最終獲得了成功,此次實(shí)驗(yàn)中我們還有不少需要改善的地方,比如這個(gè)溫度計(jì)不能快速的反應(yīng)溫度變化,不能做到接觸測(cè)量(由于DS18B20焊接在電路板上),同時(shí)焊接技藝還沒(méi)有達(dá)到極致,美觀上略有欠缺。</p><p>  我們?cè)诜抡嬲{(diào)試中也獲得不少感悟:</p>&

54、lt;p>  畫(huà)圖的時(shí)候應(yīng)仔細(xì)連線(xiàn),線(xiàn)一旦連錯(cuò),程序無(wú)法正常運(yùn)行。程序燒寫(xiě)到單片機(jī),實(shí)物運(yùn)行不能顯示正常結(jié)果,要認(rèn)真檢查仿真圖的連線(xiàn)正確與否以及焊接電路是否出現(xiàn)虛焊、漏焊,元器件是否錯(cuò)放。</p><p><b>  附錄1</b></p><p><b>  C語(yǔ)言程序</b></p><p>  #include

55、<reg51.h></p><p>  #include<intrins.h></p><p>  #include"18b20.h" //18b20頭文件</p><p>  #include"1602.h" //18b20頭文件</p><p><b>  //宏定

56、義</b></p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int</p><p><b>  //定義變量</b></p><p>  uint bw,sw,gw;</p><p>  uc

57、har table[]="0123456789";</p><p>  uchar alarm[]=" Alarm ";</p><p>  uchar j; //1602顯示的字符個(gè)數(shù)</p><p>  long int tem,tem1; //tem為攝氏溫度,tem1為華氏溫度,baojing為警報(bào)溫度

58、值</p><p>  long int baojing=38; </p><p>  sbit speaker=P1^0;</p><p>  void beep(); //函數(shù)聲明蜂鳴器函數(shù)</p><p>  void display(void)//18b20顯示攝氏溫度</p><p><

59、b>  {EX0=0;</b></p><p>  tem=duqu_wendu();</p><p>  if(tem>baojing)</p><p><b>  { beep();</b></p><p><b>  }</b></p><p>

60、  bw=tem/10;</p><p>  sw=tem%10;</p><p>  write1602(0x80+0x00);</p><p>  read1602(table[bw]);</p><p>  write1602(0x80+0x01); </p><p>  read1602(table[sw]

61、);</p><p>  write1602(0x80+0x02);</p><p>  read1602(0xdf);</p><p>  write1602(0x80+0x03);</p><p>  read1602('C'); </p><p>  write1602(0x80+0x04);&l

62、t;/p><p>  read1602(' ');</p><p><b>  EX0=1;</b></p><p><b>  }</b></p><p>  void display1(void)//18b20顯示華氏溫度</p><p><b> 

63、 { EX0=0;</b></p><p>  tem1=duqu_wendu()*1.8+32;</p><p>  if(tem1>(baojing*1.8+32))</p><p><b>  {beep();</b></p><p><b>  }</b></p&g

64、t;<p>  bw=tem1/100;</p><p>  sw=(tem1%100)/10;</p><p>  gw=tem1%10;</p><p>  write1602(0x80+0x0b);</p><p>  read1602(table[bw]);</p><p>  write1602

65、(0x80+0x0c); </p><p>  read1602(table[sw]);</p><p>  write1602(0x80+0x0d);</p><p>  read1602(table[gw]);</p><p>  write1602(0x80+0x0e);</p><p>  read1602

66、(0xdf);</p><p>  write1602(0x80+0x0f);</p><p>  read1602('F'); </p><p><b>  EX0=1;</b></p><p><b>  }</b></p><p>  void disp

67、laybaojing(void)//顯示報(bào)警溫度值</p><p><b>  { </b></p><p>  bw=baojing/100;</p><p>  sw=baojing/10;</p><p>  gw=baojing%10;</p><p>  write1602(0x80+

68、0x4b);</p><p>  read1602(table[bw]);</p><p>  write1602(0x80+0x4c); </p><p>  read1602(table[sw]);</p><p>  write1602(0x80+0x4d);</p><p>  read1602(table

69、[gw]);</p><p>  write1602(0x80+0x4e);</p><p>  read1602(0xdf);</p><p>  write1602(0x80+0x4f);</p><p>  read1602('C'); </p><p><b>  }</b>

70、;</p><p>  void xianshi() //1602顯示 alarm</p><p><b>  { </b></p><p><b>  int i;</b></p><p>  write1602(0x80+0x40);</p><p>  for(i=

71、0;i<=9;i++)</p><p><b>  {</b></p><p>  read1602(alarm[i]);</p><p>  delayms(5);</p><p><b>  }</b></p><p><b>  }</b>&

72、lt;/p><p>  void beep(void) //蜂鳴器子程序</p><p><b>  { </b></p><p><b>  uchar i;</b></p><p>  for(i=0;i<=100;i++)</p><p><b>  

73、{</b></p><p>  speaker=1;</p><p>  delayus(80);</p><p>  speaker=0;</p><p>  delayus(80);</p><p><b>  }</b></p><p><b>

74、  }</b></p><p>  void startinterrupt(void)</p><p><b>  { </b></p><p>  TMOD=0x01; //T0模式1定時(shí)</p><p>  TH0=0xD8; //裝入初值,定時(shí)20ms</p><p><

75、;b>  TL0=0xF0;</b></p><p>  IT0=1; //外部中斷0為邊沿觸發(fā)方式</p><p>  EA=1; //中斷允許總控制位</p><p>  EX0=1; //外部中斷0允許</p><p><b>  EX1=1;</b></p><

76、p>  ET0=1; //定時(shí)器0允許中斷</p><p><b>  ET1=1;</b></p><p>  TR0=1; //啟動(dòng)定時(shí)器0</p><p><b>  }</b></p><p>  void main()</p><p><b>

77、;  { </b></p><p>  inte1602();//1602初始化</p><p>  xianshi();</p><p>  displaybaojing();</p><p>  delayms(1000);</p><p>  startinterrupt(); </p&g

78、t;<p>  while(1){}</p><p><b>  }</b></p><p>  void timeer(void) interrupt 1 //定時(shí)器0處理函數(shù)</p><p><b>  {</b></p><p><b>  TR0=0;</b

79、></p><p>  TH0=0xD8; //裝入初值,定時(shí)20ms</p><p><b>  TL0=0xF0;</b></p><p>  display();//18B20顯示 </p><p>  display1();</p><p>  TR0=1; //啟動(dòng)定時(shí)器計(jì)

80、數(shù)</p><p><b>  }</b></p><p>  附錄2 /*******18b20時(shí)序*********/</p><p>  #include<intrins.h></p><p>  #define uchar unsigned char</p><p>  #d

81、efine uint unsigned int</p><p>  sbit DQ=P3^6;</p><p>  uint temp;</p><p>  float f_temp;//單精度實(shí)行</p><p><b>  //延時(shí)函數(shù)</b></p><p>  void delayus(u

82、int us)</p><p><b>  {</b></p><p>  while(us--);</p><p><b>  }</b></p><p>  //18B20初始化</p><p>  void inte_18b20(void)</p><

83、;p><b>  {</b></p><p>  unsigned char x=0; </p><p><b>  DQ=1;</b></p><p>  delayus(8);</p><p><b>  DQ=0;</b></p><p&g

84、t;  delayus(80);</p><p><b>  DQ=1;</b></p><p>  delayus(14);</p><p><b>  x=DQ;</b></p><p>  delayus(20);</p><p><b>  DQ=1;<

85、;/b></p><p><b>  }</b></p><p>  //18B20寫(xiě)一字節(jié)</p><p>  void write_18b20(uchar dat)</p><p><b>  {</b></p><p>  uchar i=0;</p>

86、;<p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p><b>  DQ=0; </b></p><p>  DQ=dat&0x01;</p><p>  delayus(10); </p><p>

87、;<b>  DQ=1;</b></p><p>  dat=dat>>1; //右移以一位℃ = (οF - 32) / 1.8</p><p><b>  }</b></p><p>  delayus(8);</p><p><b>  }</b>&

88、lt;/p><p>  //18B20讀一字節(jié)</p><p>  uint read_18b20()</p><p><b>  {</b></p><p>  uchar i=0,dat=0;</p><p>  for(i=0;i<8;i++)</p><p>&l

89、t;b>  {</b></p><p>  DQ=0;//給脈沖信號(hào)</p><p>  dat=dat>>1;</p><p><b>  DQ=1;</b></p><p><b>  if(DQ)</b></p><p>  dat|=0x

90、80;</p><p>  delayus(8);</p><p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b></p><p>  while(!DQ);</p><p>  inte_

91、18b20();</p><p>  write_18b20(0xcc);</p><p>  write_18b20(0xbe);//讀暫存器</p><p>  a=read_18b20();//讀取溫度低位</p><p>  b=read_18b20();//讀取溫度高位</p><p><b> 

92、 temp=b;</b></p><p><b>  temp<<=8;</b></p><p>  temp=temp|a;</p><p><b>  if(b>127)</b></p><p><b>  {</b></p>&

93、lt;p>  temp=~temp+1;</p><p><b>  }</b></p><p>  f_temp=temp*0.0625;</p><p>  temp=f_temp+0.5;</p><p>  return temp;</p><p><b>  } <

94、/b></p><p>  附錄3 /***********1602時(shí)序***************/</p><p>  #include<intrins.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p

95、><p>  sbit rw=P2^1;// 讀 寫(xiě)選擇段</p><p>  sbit rs=P2^0;//數(shù)據(jù)/命令控制端</p><p>  sbit e=P2^2;//使能型號(hào)段</p><p>  void delayms(uint w)//延時(shí)函數(shù)定義</p><p><b>  {</b

96、></p><p><b>  uchar q;</b></p><p>  while(w--)</p><p>  for(q=0;q<120;q++);</p><p><b>  }</b></p><p>  void write1602(uchar c

97、om)//寫(xiě)命令</p><p><b>  {</b></p><p><b>  rs=0;</b></p><p><b>  rw=0;</b></p><p><b>  e=0;</b></p><p>  // del

98、ayms(1);</p><p><b>  P0=com;</b></p><p>  delayms(1);//while(P0&0X80);</p><p><b>  e=1;</b></p><p>  delayms(1);</p><p><b&

99、gt;  e=0;</b></p><p><b>  }</b></p><p>  void read1602(uchar dat)//寫(xiě)數(shù)據(jù)</p><p><b>  {</b></p><p><b>  rs=1;</b></p><

100、p><b>  rw=0;</b></p><p><b>  e=0;</b></p><p>  //delayms(1);</p><p><b>  P0=dat;</b></p><p>  delayms(1);</p><p>&l

101、t;b>  e=1;</b></p><p>  delayms(1);</p><p><b>  e=0;</b></p><p><b>  }</b></p><p>  void inte1602()//運(yùn)行時(shí)序函數(shù)定義</p><p><b

102、>  {</b></p><p>  rs=0;rw=0;e=0;//關(guān)閉使能信號(hào)</p><p>  write1602(0x38);//</p><p>  write1602(0x0c);</p><p>  write1602(0x06);</p><p>  write1602(0x01);

溫馨提示

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

評(píng)論

0/150

提交評(píng)論