基于單片機的溫度顯示報警器(共40頁)_第1頁
基于單片機的溫度顯示報警器(共40頁)_第2頁
基于單片機的溫度顯示報警器(共40頁)_第3頁
基于單片機的溫度顯示報警器(共40頁)_第4頁
基于單片機的溫度顯示報警器(共40頁)_第5頁
已閱讀5頁,還剩39頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、目 錄 TOC o 1-3 h z u HYPERLINK l _Toc430813900 第1章 緒 論3 HYPERLINK l _Toc430813902 1.1設計內容以及詳細功能3 HYPERLINK l _Toc430813903 1.2設計目的3 HYPERLINK l _Toc430813904 第2章 方案論證4 HYPERLINK l _Toc430813905 2.1溫度傳感器的選擇4 HYPERLINK l _Toc430813906 2.2顯示器的選擇5 HYPERLINK l _Toc430813907 2.3單片機的選擇5 HYPERLINK l _Toc4308

2、13908 第3章 硬件電路的設計6 HYPERLINK l _Toc430813909 3.1 主控制器6 HYPERLINK l _Toc430813910 3.1.1 STC89C52的介紹6 HYPERLINK l _Toc430813911 3.1.2 DS18B20的介紹7 HYPERLINK l _Toc430813912 3.2 單片機最小系統設計10 HYPERLINK l _Toc430813913 3.2.1 時鐘電路10 HYPERLINK l _Toc430813914 3.2.2 復位電路11 HYPERLINK l _Toc430813915 3.3 DS18B2

3、0與單片機接口電路的設計12 HYPERLINK l _Toc430813916 3.4 顯示電路的設計13 HYPERLINK l _Toc430813917 3.4.1 LED數碼管主要技術參數13 HYPERLINK l _Toc430813918 3.4.2 LED數碼管的引腳說明13 HYPERLINK l _Toc430813919 第4章 系統程序的設計15 HYPERLINK l _Toc430813921 4.1主程序15 HYPERLINK l _Toc430813922 4.2讀出溫度子程序15 HYPERLINK l _Toc430813923 4.3 溫度轉換命令子程

4、序16 HYPERLINK l _Toc430813924 4.4計算溫度子程序17 HYPERLINK l _Toc430813925 4.5 溫度數據的計算處理方法17 HYPERLINK l _Toc430813926 結 論19 HYPERLINK l _Toc430813927 參考文獻20 HYPERLINK l _Toc430813928 附錄21第1章 緒 論1.1設計(shj)內容以及詳細功能采用(ciyng)89C51單片機和溫度傳感器DS18B20設計一種(y zhn)數字溫度計,測量精度為0.1,由按鍵設定報警上下限值TH和TL,采用點陣字符型液晶模塊作為數字溫度計的顯

5、示器。當實測溫度超過設定溫度限制范圍時,發出聲光報警信號。1.2設計目的隨著電子技術的發展,人們的生活日趨數字化,多功能的數字溫度計可以給我們的生活帶來很大的方便;支持“一線總線”接口的溫度傳感器簡化了數字溫度計的設計,降低了成本;以美國MAXIM/DALLAS半導體公司的單總線溫度傳感器DS18B20為核心,以ATMEL公司的AT89S51為控制器設計的DS18B20溫度控制器結構簡單、測溫準確、具有一定控制功能的智能溫度控制器。本課題研究的重要意義在于生產過程中隨著科技的不斷發展,現代社會對各種信息參數的準確度和精確度的要求都有了幾何級的增長,而如何準確而又迅速的獲得這些參數,就需要受制于

6、現代信息基礎的發展水平。在三大信息信息采集(即傳感器技術)、信息傳輸(通信技術)和信息處理(計算機技術)中,傳感器屬于信息技術的前沿尖端產品,尤其是數字溫度傳感器技術,在我國各領域已經應用的非常廣泛可以說是滲透到社會的每一個領域,與人民的生活和環境的溫度息息相關。第2章 方案(fng n)論證若采用一般溫度傳感器采集溫度信號,則需要設計信號調理(tio l)電路、A/D 轉換及相應(xingyng)的接口電路,才能把傳感器輸出的模擬信號轉換成數字信號送到計算機去處理。這樣,由于各種因素會造成檢測系統較大的偏差;又因為檢測環境復雜及各種干擾的影響,會使檢測系統的穩定性和可靠性下降 。所以溫度檢測

7、系統的設計的關鍵在于:溫度傳感器的選擇。溫度傳感器應用范圍廣泛、使用數量龐大,也高居各類傳感器之首。溫度傳感器的選擇方案一:采用熱敏電阻,可滿足40攝氏度至90攝氏度測量范圍,但熱敏電阻精度、重復性、可靠性較差,對于檢測1攝氏度的信號是不適用的。而且在溫度測量系統中,采用單片溫度傳感器,比如AD590,LM35等.但這些芯片輸出的都是模擬信號,這樣就使得測溫裝置的結構較復雜. 方案二:采用數字溫度芯片DS18B20測量溫度,輸出信號全數字化。便于單片機處理及控制,省去傳統的測溫方法的很多外圍電路。且該芯片的物理化學性很穩定,它能用做工業測溫元件,此元件線形較好。在0100攝氏度時,最大線形偏差

8、小于1攝氏度。DS18B20的最大特點之一采用了單總線的數據傳輸,由數字溫度計DS1820和微控制器AT89C51構成的溫度測量裝置,它直接輸出溫度的數字信號,可直接與計算機連接。這樣,測溫系統的結構就比較簡單,體積也不大,且由于AT89C51可以帶多個DSB1820,因此可以非常容易實現多點測量.輕松的組建傳感器網絡。采用溫度芯片DS18B20測量溫度,可以體現系統芯片化這個趨勢。部分功能電路的集成(j chn),使總體電路更簡潔,搭建電路和焊接電路時更快。而且,集成塊的使用,有效地避免外界的干擾,提高測量電路的精確度。所以集成芯片的使用將成為電路發展的一種趨勢。本方案應用這一溫度芯片,也是

9、順應這一趨勢。顯示器的選擇(xunz)方案(fng n)一:采用傳統的七段數碼LED顯示器。LED雖然價格便宜,且能夠滿足一般的要求顯示0-9字符,但是現代的許多儀表、各種電子產品顯示要求很高,在這些產品中已經逐漸被LCD所取代。方案二:采用LCD液晶屏進行顯示。LCD液晶顯示器是一種低壓、微功耗的顯示器件,只要23伏就可以工作,工作電流僅為幾微安,是任何顯示器無法比擬的,同時可以顯示大量信息,除數字外,還可以顯示文字、曲線,比傳統的數碼LED顯示器顯示的界面有了質的提高。在儀表和低功耗應用系統中得到了廣泛的應用。優點為:(1)由于數碼管價格便宜且容易驅動。(2) 功率消耗小,相比而言數碼管顯

10、示器的主要功耗在內部電極和驅動IC上,因而耗電量比其他器件要小很多。雖然LCD液晶屏的功能強大,但數碼管的足以實現溫度的顯示,所以在本設計中采用數碼管顯示。單片機的選擇(xunz)對于單片機的選擇,可以考慮使用8031與8051系列,由于8031沒有內部RAM,系統又需要大量內存存儲數據,因而(yn r)不適用。STC89C52是STC公司生產的一種低功耗高性能CMOS8位微控制器,具有8k在系統可編程Flash儲存器。其使用經典的MCS-51內核,但做了很多的改進使得芯片(xn pin)具有傳統51單片機不具備的功能。在芯片上,擁有靈巧的8位CPU和在系統可編程Flash,使得STC89C5

11、2為眾多嵌入式控制應用系統提供高靈活超有效的解決方案。所以這次選擇STC89C52。第3章 硬件電路的設計3.1 主控制器STC89C52RC單片機是宏晶科技推出的新一代高速/低功耗/超強抗干擾的單片機,指令代碼完全兼容傳統8051單片機,12時鐘/機器周期和6時鐘/機器周期可以任意選擇。3.1.1 STC89C52的介紹STC89C52引腳如圖3-1-1所示:圖3-1-1 STC89C52引腳圖3.1.2 DS18B20的介紹(jisho)許多情況下需要測量(cling)溫度參數。通常測溫系統的主要器件是熱敏電阻,由于它體積小、重復性好、測量方法簡單,所以在測溫系統中廣泛應用。但采用熱敏電阻

12、的測溫系統需要AD轉換,而且測量精度不高。本文采用Dallas公司生產的一種新型溫度傳感器DS18B20,它集溫度測量、AD轉換于一體,其測量范圍寬(-55+125),精度高(0.0625),DS18B20是一款具有單總線結構的器件。由DS18B20組建的溫度測量單元體積小,便于攜帶、安裝。同時,DS18B20的輸出為數字量,可以直接與單片機連接,無需后級AD轉換,控制簡單。由于DS18B20具有單總線特性,便于擴展,可在一根總線上掛接多個(du )DS18B20來組建溫度測量網絡。圖3-1-2 DS18B20的實物(shw)管腳分布圖(1)引腳功能(gngnng)說明GND是地址(dzh)信

13、號;DQ是數據輸入/輸出引腳,開漏單總線接口引腳,當被用在寄生電源下,也可以向器件提供電源;VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。 (2)DS18B20內部結構及功能圖3-1-3 DS18B20內部結構DS18B20采用3腳PR35封裝或8腳SOIC封裝,其內部結構如3.1-3圖所示,主要包括:寄生電源,溫度傳感器,64位ROM和單總線接口,存放中間數據(shj)的高速暫存器RAM,用于存儲用戶設定溫度上下限值的TH和TL觸發器,存儲與控制邏輯,8位循環冗余校驗碼(CRC)發生器等7部分。如上圖3-1-3所示(3)DS18B20的測溫原理(yunl) 如圖3-1-4所示,圖中

14、低溫度系數振蕩器的振蕩頻率受溫度影響很小,用于產生固定頻率的脈沖信號送給(sn i)減法計數器1;高溫度系數振蕩器隨溫度變化其振蕩頻率明顯改變,所產生的信號作為減法計數器2的脈沖輸入。預置斜率累加器低溫度系數振蕩器減法計數器1預置減到0溫度寄存器計數比較器高溫度系數振蕩器減法計數器2減到0 圖3-1-4 DS18B20測溫原理圖圖中還隱含著計數門,當計數門打開時,DS18B20就對低溫度系數振蕩器產生(chnshng)的時鐘脈沖進行計數,進而完成溫度測量。計數門的開啟時間由高溫度系數振蕩器來決定,每次測量前,首先將-55 所對應的一個基數分別置入減法計數器1和溫度寄存器中,減法計數器和溫度寄存

15、器被預置在-55 所對應的一個基數值。減法計數器1對低溫度(wnd)系數振蕩器產生的脈沖信號進行減法計數,當減法計數器1的預置減到0時,溫度寄存器的值將加1,減法計數器1的預置值將重新被裝入,并重新開始對低溫度系數振蕩器產生的脈沖信號進行計數。如此循環,直到(zhdo)減法計數器2計數到0時,停止溫度計數器值的累加,此時溫度寄存器中的數值就是所測溫度值。圖3-1-4中的斜率累加器用于補償和修正測溫過程的非線形性,直到溫度寄存器達到被測溫度值。另外,DS18B20單線通信功能是分時完成的,有嚴格的時隙概念,因此讀/寫時序很重要。系統對DS18B20的各種操作必須按協議進行。操作協議為:初始化DS

16、18B20(發復位脈沖發ROM功能命令發存儲器操作命令處理數據。3.2 單片機最小系統(xtng)設計單片機最小系統(xtng)就是指能使單片機工作的最少的器件構成的系統。因為單片機已經包含了數據存儲器和程序存儲器,所以只要在其外部加上時鐘電路和復位電路就可以構成單片機最小系統。3.2.1 時鐘(shzhng)電路圖3-2-1是時鐘電路的PROTEUS仿真圖。圖3-2-1時鐘電路單片機允許的振蕩晶體可在1.224MHz之間選擇,一般為11.0592MHz。電容C2,C3的取值對振蕩頻率輸出的穩定性、大小及振蕩電路起振速度有一定的影響,可在20100pF之間選擇,典型值位30pF。3.2.2 復

17、位電路計算機每次開始(kish)工作,CPU和系統中的其他部件都必須要有一個確定的初值,即復位狀態。圖3-2-2是單片機復位(f wi)電路仿真圖。圖3-2-2 復位(f wi)電路單片機RST引腳是高電平有效。單片機在上電瞬間C1充電,RST引腳端出現正脈沖,只要RST斷保持兩個機械周期(大約10ms)以上的高電平,單片機就能復位。在單片機工作后,如果還想再次復位,只需按下開關,單片機就能重新變成復位狀態。當晶體振蕩頻率為12MHz時,RC的典型值為C=10F,R=8.2K。3.2.3 最小系統圖3-2-3 單片機最小系統(xtng)3.3 DS18B20與單片機接口(ji ku)電路的設計

18、 DS18B20可以采用兩種供電方式:一種是采用電源供電方式,此時DS18B20的第1引腳接地,第2引腳作為(zuwi)信號線,第3引腳接電源;另外一種是寄生電源供電方式當DS18B20處于寫存儲器操作和溫度A/D轉換操作時,總線上必須有強的上拉,上拉開啟時間最長為500ms。采用寄生電源供電方式時,VDD和GND端接地。由于單線制只有一根線,因此發送接口必須是三態的。3.4 顯示(xinsh)電路的設計3.4.1 LED數碼管主要(zhyo)技術參數 圖3-4-1 數碼管 數碼管使用(shyng)條件: a、段及小數點上加限流電阻; b、使用電壓:段:根據發光顏色決定; 小數點:根據發光顏色

19、決定; c、使用電流:靜態:總電流 80mA(每段 10mA); 動態:平均電流 4-5mA; 峰值電流 100mA; 上面這個只是七段數碼管引腳圖,其中共陽極數碼管引腳圖和共陰極的是一樣的,4位數碼管引腳圖數碼管使用注意事項說明:()數碼管表面不要用手觸摸,不要用手去弄引角;()焊接溫度:度;焊接時間:()表面有保護膜的產品,可以在使用前撕下來。3.4.2 LED數碼管的引腳說明這類數碼管可以分為共陽極與共陰極兩種,共陽極就是把所有LED的陽極連接到共同接點com,而每個LED的陰極分別為a、b、c、d、e、f、g及dp(小數點);共陰極則是把所有LED的陰極連接到共同接點com,而每個LE

20、D的陽極分別為a、b、c、d、e、f、g及dp(小數點),如下圖所示。圖中的8個LED分別與上面那個圖中的ADP各段相對應,通過控制(kngzh)各個LED的亮滅來顯示數字。 圖3-4-2(1) 共陽數碼管內部結構 圖3-4-2(2) 共陰數碼管內部結構第4章 系統程序(chngx)的設計4.1主程序 主程序主要功能是負責溫度的實時顯示(xinsh)、讀出處理DS18B20的測量溫度值。主程序流程圖如圖4-1所示:開始調用顯示子程序顯示當前四路溫度初始化Y讀取并顯示序列號圖4-1 主程序流程圖4.2讀出溫度(wnd)子程序讀出溫度子程序的主要功能是讀出RAM中的9字節。在讀出時須進行CRC校驗

21、,校驗有錯時不進行溫度數據的改寫。讀出溫度子程序流程圖如圖4-2所示: 開始復位DS18B20發跳過ROM命令發出溫度轉換命令轉換完畢復位DS18B20發匹配ROM命令發1個DS18B20序列號讀溫度值存入儲存器指向下一個延時NY圖4-2 讀出溫度(wnd)子程序流程圖4.3 溫度轉換(zhunhun)命令子程序溫度轉換命令子程序主要是發溫度轉換開始命令,當采用12位分辨率時,轉換時間約為750ms。在本程序設計中,采用1s顯示程序延時法等待(dngdi)轉換的完成。溫度轉換命令子程序流程圖如圖4-3所示:發DS18B20復位命令發跳過ROM命令發溫度轉換開始命令結束圖4-3 溫度轉換命令子程

22、序流程圖4.4計算(j sun)溫度子程序 計算溫度子程序將RAM中讀取值進行BCD碼的轉換運算(yn sun),并進行溫度值正負的判定。計算溫度子程序流程圖如圖4-4所示:開始溫度零下?溫度值取補碼置“-”標志位計算小數位溫度BCD值計算小數位溫計算小數位溫度BCD值度BCD值結束置“+”標志NY圖4-4 計算(j sun)溫度子程序流程圖4.5 溫度數據的計算處理方法 從DS18B20讀取出的二進制值必須轉換成十進制值,才能用于字符的顯示。DS18B20的轉換精度為912位,為了提高精度采用12位。在采用12位轉換精度時,溫度寄存器里的值是以0.0625為步進的,即溫度值為寄存器里的二進制

23、值乘以0.0625,就是實際的十進制溫度值。通過觀察表4-5可以發現,一個十進制與二進制間有很明顯的關系,就是把二進制的高字節的低半字節和低字節的高半字節組成一字節,這個字節的二進制化為十進制后,就是溫度值的百、十、個位字節,所以二進制值范圍是0F,轉換成十進制小數就是0.0625的倍數(015倍)。這樣需要4位的數碼管來表示小數部分。實際應用不必這么高的精度,采用(ciyng)1位數碼管來顯示小數,可以精確到0.1。表4-5 二進制與十進制的近似對應(duyng)關系表小數部分二進制值0123456789ABCDEF十進制值0011233455667889結 論該基于DS18B20的多點溫度

24、測量系統具有硬件結構簡單、易于制作、價格低廉、測量值精確和易于操作等許多優點,但由于實驗室條件所限,暫時只做四點的溫度測量。但在實際應用中可根據具體情況進行更多點的擴展和對多點進行控制。隨著現代信息技術的飛速發展和傳統工業改造的逐步(zhb)實現,基于DS18B20的多點溫度測量系統已經廣泛應用于控制、化工等諸多領域。總結這次(zh c)的論文工作,得到以下結論: 1.針對現有測溫系統的特點,提出了一套應用數字式溫度傳感器DS81B20組建溫度測控網絡新型(xnxng)方案,該方案的突出特點是系統的數字化、快速化及其經濟實用性。 2.以單總線為基本結構,采用STC公司的 STC89C52單片機

25、為總線命令,實現與DSl8B20的總線接口,并提供具體電路設計。 3.軟件編程采用模塊化、結構化設計,易于修改和維護。 由于時間和精力的限制,對后續的研究還應在以下方面逐步完善: 1.應用軟件的完善。溫度采集方面,一次命令全部單總線上的DS18B20進行溫度轉換,減少系統所需時間。 2.進一步完善系統的可靠性。由于實際經驗的欠缺,設計上難免有考慮不周之處。當某一個傳感器出現故障時,雖然系統能發現該測溫點故障,但是更換傳感器時涉及到其序列號的修改和應用程序的修改,這些還需要在今后應用時加以完善。 3.可以增加控制部分,以后在該部分進行PID算法控制,以提高控制精度。總之 ,本論文在新型數字溫度測

26、控系統方面做了一定的研究工作。該系統初步完成了溫度測控方案的預定目標,為今后實現數字化與網絡化的溫度測控系統工程提供了一種參考。參考文獻黃智偉. 凌陽單片機課程設計指導(zhdo)北京(bi jn):北京航空航天大學出版社,2007周航慈.單片機程序設計(chn x sh j)基礎北京:北京航空航天大學出版社,1997求實科技.單片機典型模塊設計實例導航北京:人民郵電出版社,2004黃智偉全國大學生電子設計競賽技能訓練北京:北京航空航天大學出版社,2007黃智偉印制電路板(PCB)設計技術與實踐(第二版)北京:電子工業出版社,2012(6) 基于Proteus的51系列單片機設計與仿真(第二版

27、) 陳忠平編著附 錄附錄(fl)1電路原理圖附錄(fl)2 溫度計實物圖附錄(fl)3 溫度計程序(chngx)#include /包含頭文件,一般情況不需要改動,頭文件包含特殊功能(gngnng)寄存器的定義#include intrins.h #define u8 unsigned char#define uchar unsigned char#define uint unsigned int#define u16 unsigned intuchar yushe_wendu=50;/溫度預設值uint wendu; /溫度值全局變量/運行模式 uchar Mode=0; /=1是設置溫度閥

28、值 =2是設置煙霧閥值=0是正常監控模式/管腳聲明sbit LED_wendu= P14; /溫度報警燈sbit baojing= P11; /蜂鳴器接口void delay(uint z) /延時函數大約延時z msuint i,j;for(i=0;iz;i+)for(j=0;j121;j+);void Init_Timer0(void);bit ReadTempFlag;/定義讀時間(shjin)標志/管腳聲明(shngmng)sbit Led_Reg =P15; /紅燈(hn dn)sbit Buzzer =P33; /蜂鳴器sbit DQ = P10; /ds18b20的數據引腳#de

29、fine SMG_NUM 4u8 code DisplayNum16=0 xc0,/00 xf9,/10 xa4,/20 xb0,/30 x99,/40 x92,/50 x82,/60 xf8,/70 x80,/80 x90,/90 x88,/A0 x83,/b0 xc6,/C0 xa1,/d0 x86,/E0 x8e/F;/u8 code DisplayOther=0 xff, /0空0 x7f, /1.0 xbf,/2-0 xa7/3c;/* 名稱(mngchng) : delay_1ms()* 功能(gngnng) : 延時1ms函數* 輸入(shr) : q* 輸出 : 無*/void

30、 delay_ms(uint q)uint i,j;for(i=0;iq;i+)for(j=0;j110;j+);/數碼管位選定義sbit smg_we1 = P20; /東西數碼管2sbit smg_we2 = P21;/東西數碼管1sbit smg_we3 = P22;/南北數碼管2sbit smg_we4 = P23;/南北數碼管1/*數碼(shm)位選函數*/i:0,東西(dngx)數碼管2/1,東西(dngx)數碼管1/2,南北數碼管2/3,南北數碼管1void smg_we_switch(uchar i)switch(i)case 0: smg_we1 = 0; smg_we2 =

31、 1; smg_we3 = 1; smg_we4 = 1; break;case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break;case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break;case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break;/* 名稱 : delay_1ms()* 功能 : 延時1ms函數* 輸入 : q* 輸出 : 無*/void delay_1ms(

32、uint q)uint i,j;for(i=0;iq;i+)for(j=0;j110;j+);/* 名稱(mngchng) : u8 ChangeFor(u8 dat)* 功能 : 交換一個字節位的位置(wi zhi),用于數碼管顯示* 輸入 : 需要(xyo)改變的數* 輸出 : 改變后的數*/#define LED_a0/數碼管段選的a段接在段選IO口的第0位#define LED_b2#define LED_c6#define LED_d4#define LED_e3#define LED_f1#define LED_g7#define LED_dp5u8 ChangeFor(u8 da

33、t)u8 temp=0;if(dat&0 x01)/判斷數據(shj)的第一位是否為1temp|=0 x01LED_a;/如果為1,放到控制(kngzh)數碼管a段的位置if(dat&0 x02)temp|=0 x01LED_b;if(dat&0 x04)temp|=0 x01LED_c;if(dat&0 x08)temp|=0 x01LED_d;if(dat&0 x10)temp|=0 x01LED_e;if(dat&0 x20)temp|=0 x01LED_f;if(dat&0 x40)temp|=0 x01LED_g;if(dat&0 x80)temp|=0 x01=SMG_NUM)i=

34、0;/*延時子程序:該延時主要(zhyo)用于ds18b20延時*/void Delay_DS18B20(int num) while(num-) ;/*初始化DS18B20*/void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ復位 Delay_DS18B20(8); /稍做延時 DQ = 0; /單片機將DQ拉低 Delay_DS18B20(80); /精確延時,大于480us DQ = 1; /拉高總線(zn xin) Delay_DS18B20(14); x = DQ; /稍做延時后,如果x=0則初始化成功(chnggng),x=

35、1則初始化失敗 Delay_DS18B20(20);/*讀一個(y )字節*/unsigned char ReadOneChar(void) unsigned char i=0; unsigned char dat = 0; for (i=8;i0;i-) ET0=0; /定時器中斷關閉 DQ = 0; / 給脈沖信號 dat=1; DQ = 1; / 給脈沖信號 if(DQ) dat|=0 x80; Delay_DS18B20(4);ET0=1; /定時器中斷打開 return(dat);/*寫一個字節*/void WriteOneChar(unsigned char dat) unsign

36、ed char i=0; for (i=8; i0; i-) ET0=0; /定時器中斷(zhngdun)關閉 DQ = 0; DQ = dat&0 x01; Delay_DS18B20(5); DQ = 1; dat=1;ET0=1; /定時器中斷(zhngdun)打開 u8 tempflag=0; /負號(f ho)顯示/*讀取溫度*/unsigned int ReadTemperature(void) unsigned char a=0; unsigned char b=0; unsigned int t=0; u8 tt=0; u8 ttt=0; Init_DS18B20(); Wri

37、teOneChar(0 xCC); /跳過讀序號列號的操作 WriteOneChar(0 x44); /啟動溫度轉換 Init_DS18B20(); WriteOneChar(0 xCC); /跳過讀序號列號的操作 WriteOneChar(0 xBE); /讀取溫度寄存器 a=ReadOneChar(); /讀低8位 b=ReadOneChar(); /讀高8位 t=b; t4);/得到(d do)整數位ttt=(u8)(t%16)*0.0625*10);/得到(d do)小數位;乘以10代表保留一位小數;if(tt&0 x80)tempflag=1; /負號顯示tt=tt+1; /實際溫度

38、值為讀取值的補碼elsetempflag=0; /正號顯示 t= tt*10+ttt; /放大10倍 return(t);/*校準溫度*/u16 check_wendu(void)u16 c;c=ReadTemperature(); /獲取溫度值并減去DS18B20的溫漂誤差return c;/按鍵(n jin)sbit Key1=P15; /設置(shzh)鍵sbit Key2=P33; /加按鍵(n jin)sbit Key3=P34; /減按鍵#define KEY_SET 1/設置#define KEY_ADD2/加#define KEY_MINUS3/減/=/ 函數: u8 Key_

39、Scan()/ 應用: temp=u8 Key_Scan();/ 描述: 按鍵掃描并返回按下的鍵值/ 參數: NONE/ 返回: 按下的鍵值/ 版本: VER1.0/ 日期: 2015-05-29/ 備注: 該函數帶松手檢測,按下鍵返回一次鍵值后返回0,直至第二次按鍵按下/=u8 Key_Scan() static u8 key_up=1;/按鍵按松開標志if(key_up&(Key1=0|Key2=0|Key3=0)delay_ms(10);/去抖動 key_up=0;if(Key1=0)return 1;else if(Key2=0)return 2;else if(Key3=0)retu

40、rn 3;else if(Key1=1&Key2=1&Key3=1)key_up=1; return 0;/ 無按鍵(n jin)按下void main (void)u8 key;wendu=check_wendu(); /初始化時調用溫度讀取函數 防止(fngzh)開機85Cdelay_ms(1000);wendu=check_wendu(); /初始化時調用溫度(wnd)讀取函數 防止開機85CInit_Timer0();while (1) /主循環key=Key_Scan();/按鍵掃描if(ReadTempFlag=1)ReadTempFlag=0;wendu=check_wendu(); /讀取溫度值if(key=KEY_SET)Mode+;switch(Mode)/判斷(pndun)模式的值case 0:/監控(jin kn)模式if(tempflag)dis_smg0 = DisplayOt

溫馨提示

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

評論

0/150

提交評論