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

下載本文檔

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

文檔簡介

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單片機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設計步驟9</b></p><p>  4.2 設計過程9</p><p>  4.2.1單片機系統(tǒng)模塊10</p><p>  4.2.2晶體振

4、蕩模塊10</p><p>  4.2.3揚聲器報警模塊11</p><p>  4.2.4溫度傳感器模塊12</p><p>  4.2.5液晶顯示模塊13</p><p><b>  5.綜合調試16</b></p><p><b>  6.總結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ù)字溫度計設計報告</p><p><b>  課題要求:</b></p><p>  利用數(shù)字溫度傳感器DS18B20與單片機結合來測量溫度。利用數(shù)字溫度傳感器DS18B20測量溫度信號,計算后在LED數(shù)碼管上顯示相應的溫度值。其溫度測量范圍為?55℃~125℃,精確到0.5℃。數(shù)字溫度計所測量的溫度采用數(shù)字顯示,控制器使用單片機AT89C51,測溫傳感器使

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

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

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

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

11、溫度傳感器的信號時,其內部程序將根據(jù)信號的類型進行處理,并且將處理的結果送到顯示模塊,發(fā)送控制信號控制各模塊。 </p><p><b> ?、?元器件選擇 </b></p><p><b>  3.1單片機</b></p><p>  AT89C51芯片:</p><p>  AT89C51是一個

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

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

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

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

16、p>  ·片內振蕩器和時鐘電路</p><p><b>  管腳說明:</b></p><p>  VCC: 供電電壓。</p><p><b>  GND: 接地。</b></p><p>  P0: P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳

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

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

19、地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。</p><p>  P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,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(計時器0外部輸入)</p><p>  P3.5 T

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

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

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

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

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

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

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

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

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

30、理圖繪制 </p><p><b>  4.1設計步驟</b></p><p>  1.使用proteus 軟件畫出原理圖</p><p>  2.使用keil軟件</p><p><b>  1)建立工程</b></p><p>  2)為工程選擇目標器件</p>

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

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

33、;<p>  晶振電路是提供系統(tǒng)時鐘信號。為了各部分的同步應當引入公用的外部脈沖信號作為振蕩脈沖。電容選擇在10~30pF之間,因為電容的大小影響振蕩器振蕩的穩(wěn)定性和起振的速度。電容C1和C2的作用是穩(wěn)定頻率和快速起振,晶振CYS的振蕩頻率取12MHZ。</p><p>  89C51單片機的時鐘信號通常有兩種方式產生,外部時鐘和內部時鐘方式,如下圖所示:</p><p> 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

50、></p><p>  寫數(shù)據(jù)到CGRAM 或DDRAM 指令,是將用戶自定義字符的字模數(shù)據(jù)寫到已經(jīng)設置好的CGRAM 的地址中,或者是將欲顯示字符的字符碼寫到DDRAM 中;欲寫入的數(shù)據(jù)D7~D0 首先暫存在DR 中,再由模塊的內部操作自動寫入地址指針所指定的CGRAM 單元或者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ù)指令,是從地址計數(shù)器AC指定的CGRAM或者DDRAM單元中,讀出數(shù)據(jù)D7~D0;讀出的數(shù)據(jù)D7~D0 暫存在DR中,再由模塊的內部操作送到數(shù)據(jù)總線DB7~DB0 上。 </p><p><b>

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

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

54、lt;p>  畫圖的時候應仔細連線,線一旦連錯,程序無法正常運行。程序燒寫到單片機,實物運行不能顯示正常結果,要認真檢查仿真圖的連線正確與否以及焊接電路是否出現(xiàn)虛焊、漏焊,元器件是否錯放。</p><p><b>  附錄1</b></p><p><b>  C語言程序</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顯示的字符個數(shù)</p><p>  long int tem,tem1; //tem為攝氏溫度,tem1為華氏溫度,baojing為警報溫度

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)//顯示報警溫度值</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定時</p><p>  TH0=0xD8; //裝入初值,定時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; //定時器0允許中斷</p><p><b>  ET1=1;</b></p><p>  TR0=1; //啟動定時器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 //定時器0處理函數(shù)</p><p><b>  {</b></p><p><b>  TR0=0;</b

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

80、數(shù)</p><p><b>  }</b></p><p>  附錄2 /*******18b20時序*********/</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;//單精度實行</p><p><b>  //延時函數(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寫一字節(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;//給脈沖信號</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時序***************/</p><p>  #include<intrins.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p

95、><p>  sbit rw=P2^1;// 讀 寫選擇段</p><p>  sbit rs=P2^0;//數(shù)據(jù)/命令控制端</p><p>  sbit e=P2^2;//使能型號段</p><p>  void delayms(uint w)//延時函數(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)//寫命令</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)//寫數(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()//運行時序函數(shù)定義</p><p><b

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

溫馨提示

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

評論

0/150

提交評論