基于單片機最小系統(tǒng)的溫度控制系統(tǒng)方案_第1頁
基于單片機最小系統(tǒng)的溫度控制系統(tǒng)方案_第2頁
基于單片機最小系統(tǒng)的溫度控制系統(tǒng)方案_第3頁
基于單片機最小系統(tǒng)的溫度控制系統(tǒng)方案_第4頁
基于單片機最小系統(tǒng)的溫度控制系統(tǒng)方案_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 . . . 1 / 33設 計 報 告基于 51 單片機的溫度控制系統(tǒng)與應用 學 校: 湘南學院 專 業(yè): 電氣工程與其自動化 姓 名: 云燕、曾琳琳、許治豹、馬立強 指導教師: 曾曉華 日 期: 2013 年 5 月 9 日 . . . 2 / 33摘要摘要:在現代工業(yè)的生產生活中,溫度是常用的測量機被控參數。隨著微機測量和控制技術的迅速發(fā)展與廣泛應用,以單片機為核心的溫度采集與控制系統(tǒng)的研發(fā)與應用在很大程度上提高了生產生活中對溫度的控制水平。本水溫控制系統(tǒng)采用美國 ATMEL 公司生產的AT89S51 單片機為核心控制器件,實現水溫 30 度到 100 度的自動控制,以 DS18B20

2、為溫度傳感器的溫度控制系統(tǒng),光電耦合器 MOC3041 和雙向可控硅構成主控制電路。該系統(tǒng)可以實時存儲相關的溫度數據并記錄顯示溫度。硬件控制電路主要包括 AT89S51 單片機最小系統(tǒng),測溫點路,時鐘電路,8 段數碼晶體管顯示電路。系統(tǒng)程序主要包括主程序,讀出溫度子程序,計算溫度子程序,按鍵處理程序,8 段數碼晶體管顯示程序以與數據存儲程序等等。關鍵詞關鍵詞:AT89C52 單片機,DS18B20 溫度傳感器,BTA16-600B 雙向晶閘管,8 段數碼晶體管顯示電路,水溫自動控制。Abstract: in modern industrial production and life, temp

3、erature is a common measuring machine was accused of parameters. With the rapid development of microcomputer measurement and control technology and widely used, with the single chip processor as the core temperature gathering and control system of research and application to a large extent, improve

4、the production control of the temperature level in the life. The water temperature control system adopts the ATMEL company produces the AT89S51 as the core control device to achieve the automatic control water temperature 30 degrees to 100 degrees, the temperature control system based on DS18B20 tem

5、perature sensor, photoelectric coupler MOC3041 and bidirectional thyristor constitute the main control circuit. The system can real-time temperature data storage and record according to temperature. Hardware control circuit mainly includes the AT89S51 minimum system, temperature measuring points, th

6、e clock circuit, section 8 of digital transistor display circuit. System program mainly includes the main program, read temperature subroutine, calculating temperature subroutine, button handler, section 8 of digital transistor display program and data storage and so on.Key words: single chip microc

7、omputer AT89C52, DS18B20 temperature sensor, two-way thyristor BTA16-600 - b, 8 period of digital display circuit, transistor water temperature automatic control. . . . 3 / 33一引言1.在現代的各種工業(yè)生產中,很多地方都需要用到溫度控制系統(tǒng)。而智能化的控制系統(tǒng)是一種發(fā)展的趨勢。本文所闡述的基于 AT89S51 單片機的溫度控制系統(tǒng)。本溫度控制系統(tǒng)適用于溫度-55 度到 125 度之間(傳感器的測溫圍) ,可以調整不同液體的

8、溫度自動控制圍為其常溫到沸點之間;可以根據需求通過搭配不同配件實現不同的功能,既可以實現只加熱和只制冷,或者即可以加熱又可以制冷,廣泛應用于生產生活中等,且該控制系統(tǒng)可移植性好,成本低,電路簡單,方便使用。2.應用領域:家電,生產,化工,人工智能,食品加工,電力系統(tǒng)3.設計要求:(1) 利用數字溫度傳感器檢測溫度,要求線路盡可能簡單 (2) 無競爭冒險,無抖動 (3)實時顯示溫度和實時可調 (4) 溫度可調 (5)可移植性好,通用性強,性價比高4.技術指標:溫度顯示誤差不超過 1 度5.優(yōu)點:結構簡單,低成本,實用性強,可移植性好,可方便的用于家電生產生活化工食品加工等等。具體應用;(1)溫度

9、可調且保溫的熱得快(可與目前市面上的電熱得快兼容), (2)簡易熱水器,控制模塊可用于目前電熱水器的控制模塊的維修與替換。 (3)電冰箱(主電路接壓縮機實現制冷) 。 (5)冷凍 (6)化工產品的恒溫水浴加熱(-30 度到 110 度之間) , (7)蒸餾分離沸點在-30 度-+110 度之間的多種液體,如分離酒精和水(用于作坊式谷物酒精生產等) 。 (8)電氣設備和工作平臺的散熱(主電路接風扇)(9)通過修改程序和增加一個輸出引腳可以同時實現加熱和制冷,如用于飲水機的加熱和制冷(成本較目前市場上的飲水機的控制電路的制造成本要低且結構簡單,易于維護功能更強大) . . . 4 / 33二、系統(tǒng)

10、總體方案設計二、系統(tǒng)總體方案設計1.工作原理:以單片機為核心,通過溫度傳感器 DS18B20 對當前溫度的檢測送到單片機進行處理與系統(tǒng)設定溫度的比較控制主電路雙向晶閘管的導通與關斷,同時送顯示電路顯示當前溫度。通過按鍵輸入電路復位控制電路和設定要達到的溫度并且送顯示電路顯示,電源電路提供控制電路所需要的工作電壓。 圖 1.系統(tǒng)方框圖2 2硬件選型硬件選型2.12.1 單片機單片機(AT89c52 和 AT89S51 無引腳和功能的區(qū)別,方便起見,后文中用 AT89S51 代替 AT89c52)圖 2.單片機的引腳圖2.2.2 2 溫度傳感器溫度傳感器1. .DS18B20 的性能特點:(1)

11、單線結構,只需一根信號線和 CPU 相連。(2). 不需要外部元件,直接輸出串行數據。(3). 可不需要外部電源,直接通過信號線供電,電源電壓圍為 3.3V5V。(4) 測溫精度高,測溫圍為:一 55+125,在-10+85圍,精度為O.5。(5) 測溫分辨率高,當選用 12 位轉換位數時,溫度分辨率可達 00625。(6) 數字量的轉換精度與轉換時間可通過簡單的編程來控制:9 位精度的轉換時間為9375 ms:10 位精度的轉換時間 187.5ms:12 位精度的轉換時間 750ms。 . . . 5 / 33(7).具有非易失性上、下限報警設定的功能,用戶可方便地通過編程修改上、下限的數值

12、。(8) 可通過報警搜索命令識別哪片 DS18820 采集的溫度超越上、下限。 2.DS18B20 引腳圖和簡介(1) 各腳功能描述如下: DQ:數字信號輸入輸出端。GND:電源地端。VDD:外接供電電源輸入端(在寄生電源接線時此腳應接地)(2) DS18820 中的溫度傳感器完成對溫度的測量,輸出格式為:16 位符號擴展的二進制補碼。當測溫精度設置為 12 位時,分辨率為 O0625,即 O0625LSB。其二進制補碼格式: 表 1.其中,S 為符號位,S=1,表示溫度 為負值;S=0,表示溫度為正值。例如+125的數字輸出為 07D0H,-55的數字輸出為 FC90H。一些溫度值對應的數字

13、輸出如圖 7 所示。DS18820 中的低溫觸發(fā)器 TL、高溫觸發(fā)器 TH,用于設置低溫、高溫的報警數值。DS18820 完成一個周期的溫度測量后,將測得的溫度值和 TL、TH 相比較,如果小于 TL,或大于 TH,則表示溫度越限,將該器件的告警標志位置位,并對主機發(fā)出的告警搜索命令作出響應。需要修改上、下限溫度值時,只需使用一個功能命令即可對 TL、TH 寫入,十分方便。2.32.3 雙向晶閘管雙向晶閘管功能特性功能特性:高之突波電流能力變換:(dV / dt)c 10 V / ms 雙向可控硅家庭:類別:離散半導體產品。Triac 類型:標準。配置:單電壓-關閉狀態(tài):600 V目前國家(最

14、高):16觸發(fā)電壓-門(Vgt)從根本上(最高):1.3 V當前-門觸發(fā)耐量減低(Igt)(最高):50個地圖目前持有(Ih)-(最高):50個地圖當前-非代表增兵50、60赫茲(Itsm):160 A,168 A裝式:通過洞包裝/箱:- 220 - 3(垂直領導)參數特性參數特性:控制方式:雙向極數:三極封裝材料:金屬封裝封裝外形:平板形關斷速度:高頻(快速)散熱功能:帶散熱片溫度值得低字節(jié)D7D6D5D4D3D2D1D0溫度值的高字節(jié)SSSSSD10D9D8 . . . 6 / 33頻率特性:高頻功率特性:中功率 圖 3. TO-202AB(BTA16)圖 4.三、硬件模塊設計三、硬件模塊

15、設計1 1、電源電路、電源電路51 單片機的供電電壓為 4.0-5.5V,溫度傳感器的供電電壓為 3-5V,雙向晶閘管的供電電壓為 3-5V,所以選用 5V 電壓供電,主電路用 220V 家用電壓供電。2 2、單片機電路單片機電路2.1 AT89C51 為 40 腳雙列直插封裝的 8 位通用微處理器,采用工業(yè)標準的C51 核,在部功能與管腳排布上與通用的8xc52 一樣,其主要用于會聚調整時的功能控制。功能包括對會聚主 IC 部寄存器、數據 RAM 與外部接口等功能部件的初始化,會聚調整控制,會聚測試圖控制,紅外遙控信號IR 的接收解碼與與主板 CPU 通信等。主要管腳有:XTAL1(19 腳

16、)和 XTAL2(18 腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/Vpd(9 腳)為復位輸入端口,外接電阻電容組成的復位電路。VCC(40 腳)和 VSS(20 腳)為供電端口,分別接 +5V 電源的正負端。 P0P3 為可編程通用 I/O 腳,其功能用途由軟件定義,在本設計中, P0 端口(3239 腳)被定義為 N1 功能控制端口,分別與 N1 的相應功能管腳相連接, 13 腳定義為 IR 輸入端,10 腳和11 腳定義為 I2C 總線控制端口,分別連接 N1 的 SDAS(18 腳)和 SCLS(19 腳)端口,12 腳、27 腳與 28 腳定義為握手信號功能端口,連接主板

17、CPU 的相應功能端,用于當前制式的檢測與會聚調整狀態(tài)進入的控制功能。2 2. .2 2 P P0 0 口口P0 口是一組 8 位漏極開路型雙向 I/O 口, 也即地址/數據總線復用口。作為輸出口用時,每位能吸收電流的方式驅動 8 個 TTL 邏輯門電路,對端口 P0 寫“1”時,可作為高阻抗輸入端用。在訪問外部數據存儲器或程序存儲器時,這組口線分時轉換地址(低8 位)和數據總線復用,在訪問期間激活部上拉電阻。在 Flash 編程時,P0 口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時,要求外接上拉電阻 。2 2. .3 3 P P1 1 口口 . . . 7 / 33P1 是一個帶部上

18、拉電阻的 8 位雙向 I/O 口, P1 的輸出緩沖級可驅動(吸收或輸出電流)4 個 TTL 邏輯電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。與 AT89C51 不同之處是, P1.0 和 P1.1 還可分別作為定時 /計數器 2 的外部計數輸入(P1.0/T2)和輸入( P1.1/T2EX)。2 2. .4 4 P P2 2 口口P2 是一個帶有部上拉電阻的 8 位雙向 I/O 口,P2 的輸出緩沖級可驅動(吸收或輸出電流)4 個 TTL 邏輯門電路。對端口 P2 寫“1”,通過部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為部存在上拉電阻,某個引腳被外部信號拉

19、低時會輸出一個電流(IIL)。在訪問外部程序存儲器或 16 位地址的外部數據存儲器(例如執(zhí)行MOVX DPTR 指令)時,P2 口送出高 8 位地址數據。在訪問 8 位地址的外部數據存儲器(如執(zhí)行MOVX RI 指令)時, P2 口輸出 P2 鎖存器的容。Flash 編程或校驗時, P2 亦接收高位地址和一些控制信號。2 2. .5 5 P P3 3 口口 P3 口是一組帶有部上拉電阻的 8 位雙向 I/O 口。P3 口輸出緩沖級可驅動(吸收或輸出電流) 4 個 TTL 邏輯門電路。對 P3 口寫入“1”時,它們被部上拉電阻拉高并可作為輸入端口。此時,被外部拉低的P3 口將用上拉電阻輸出電流(

20、 IIL)。P3 口還接收一些用于 Flash 閃速存儲器編程和程序校驗的控制信號。2 2. .6 6 R RS ST T復位輸入。當振蕩器工作時, RST 引腳出現兩個機器周期以上高電平將使單片機復位。2 2. .7 7 A AL LE E/ /P PR RO OG G當訪問外部程序存儲器或數據存儲器時, ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低 8 位字節(jié)。一般情況下, ALE 仍以時鐘振蕩頻率的 1/6 輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數據存儲器時將跳過一個 ALE 脈沖。對 Flash 存儲器編程期間,該引腳還用于輸入編程脈沖(PR

21、OG)。如有必要,可通過對特殊功能寄存器( SFR)區(qū)中的 8EH 單元的 D0 位置位,可禁止 ALE 操作。該位置位后,只有一條MOVX 和 MOVC 指令才能將 ALE 激活。此外,該引腳會被微弱拉高,單片機執(zhí)行外部程序時,應設置ALE 禁止位無效。2 2. .8 8 P PS SE EN N程序儲存允許( PSEN)輸出是外部程序存儲器的讀選通信號,當AT89C52 由外部程序存儲器取指令(或數據)時,每個機器周期兩次PSEN 有效,即輸出兩個脈沖。在此期間,當訪問外部數據存儲器,將跳過兩次PSEN 信號。2 2. .9 9 E EA A/ /V VP PP P . . . 8 / 3

22、3外部訪問允許。欲使 CPU 僅訪問外部程序存儲器(地址為0000HFFFFH),EA 端必須保持低電平(接地)。需注意的是:如果加密位LB1 被編程,復位時部會鎖存EA 端狀態(tài)。如 EA 端為高電平(接 Vcc 端),CPU 則執(zhí)行部程序存儲器中的指令。 Flash 存儲器編程時,該引腳加上 +12V 的編程允許電源 Vpp,當然這必須是該器件是使用 12V 編程電壓 Vpp。2 2. .1 10 0 X XT TA AL L1 1振蕩器反相放大器的與部時鐘發(fā)生器的輸入端。2 2. .1 11 1 X XT TA AL L2 2振蕩器反相放大器的輸出端。 圖圖 5.5.3.3.溫度采集電路溫

23、度采集電路DS18B20工作原理:低溫度系數晶振的振蕩頻率受溫度的影響很小1 ,用于產生固定頻率的脈沖信號送給減法計數器1,高溫度系數晶振隨溫度變化其震蕩頻率明顯改變,所產生的信號作為減法計數器2的脈沖輸入,圖中還隱含著計數門,當計數門打開時,DS18B20就對低溫度系數振蕩器產生的時鐘脈沖后進行計數,進而完成溫度測量。計數門的開啟時間由高溫度系數振蕩器來決定,每次測量前,首先將-55所對應的基數分別置入減法計數器1和溫度寄存器中,減法計數器1和溫度寄存器被預置在 -55 所對應的一個基數值。減法計數器1對低溫度系數晶振產生的脈沖信號進行減法計數,當減法計數器1的預置值減到0時溫度寄存器的值將

24、加1,減法計數器1的預置將重新被裝入,減法計數器1重新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環(huán)直到減法計數器2計數到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數值即為所測溫度。圖2中的斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正減法計數器的預置值,只要計數門仍未關閉就重復上述過程,直至溫度寄存器值達到被測溫度值。 . . . 9 / 33表2.溫度值輸入輸出關系 圖6.DS18B20硬件連接4.4.顯示電路元件選擇顯示電路元件選擇 (1).數碼管的選擇: . . . 10 / 33 圖 7. CL5461AS a,b,c,d,e,f,g 為四位 7 段數碼管的段

25、選線 ,dp 為數碼管的小數點顯示位 ,A1,A2,A3,A4 為四位 7 段數碼管的位選線 5.5.按鍵輸入按鍵輸入設置獨立式按鍵,其功能分別是“設置” 、 “+” 、 “” 、 “負” 。 圖 8.按鍵電路6.6.蜂鳴電路蜂鳴電路接通電源后,當溫度超過系統(tǒng)設定溫度的上限值或者系統(tǒng)出現故障時,單片機給三極管發(fā)周期性的方波信號,振蕩器產生的音頻信號電流通過電磁線圈,使電磁線圈產生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性振動發(fā)生。圖 9.報警電路 . . . 11 / 337.7.主電路主電路當溫度低于設定溫度是,單片機給主電路發(fā)高電平通過光電隔離開關控制雙向晶闡管的導通,是主電路接通

26、或關斷市電(220V 50HZ) ,從而控制加熱元件的加熱(制冷元件的制冷)圖 10.主電路圖四、系統(tǒng)軟件設計四、系統(tǒng)軟件設計1.1.程序流程圖程序流程圖 . . . 12 / 33圖 11.溫度采樣流程開始初始化DS18B20是否存在?ROM操作命令存儲操作命令讀溫度值計算整數位溫度BCD值,并進行存儲錯誤提示顯示8888NY結束返回圖 . . . 13 / 33圖 12.中斷中斷判斷有鍵按下?調用10ms延時子程序判斷是否有鍵按下檢測當前溫度(假設為R2)調用顯示子程序顯示當前溫度P1.4=1?(是否為加) P1.5=1?(是否為)P1.6=1?(確定鍵按下沒有) 默認溫度=R2中斷結束返

27、回YYNNYNNR2=R2+1延時10msYR2=R2-1YN . . . 14 / 33圖 13.主流程設置默認溫度和溫度上限值初始化(中斷和定時)開始調用溫度檢測子程序 溫度顯示子程序當前溫度溫度上限制?溫度默認溫度?P1.0發(fā)高電平延時10msP1.0發(fā)低電平P1.0發(fā)低電平報警和錯誤顯示8888 NYYN . . . 15 / 33五、系統(tǒng)調試仿真五、系統(tǒng)調試仿真 圖 14. 實時溫度顯示圖 15 . . . 16 / 33六、結束語六、結束語 經過這次單片機的課程設計,我們接觸到了更多平時沒有接觸到的儀器設備、元器件以與相關的使用高度經驗,發(fā)現了自身許多不足之處,使我深刻體會到了所學

28、理論知識的重要性。另外在這次設計中,我體會到了 51 單片機的種種優(yōu)勢,體積小,重量輕,抗干擾能力強,對環(huán)境要求不高,價格低廉,可靠性高,靈活性好等特點,即使是非電子計算機專業(yè)人員,通過學習一些專業(yè)基礎知識以后也能依靠自己的技術力量,來開發(fā)所希望的單片機應用系統(tǒng)。本文的溫度控制系統(tǒng),只是單片機廣泛的應用更加廣泛化。首先,通過這次應用系統(tǒng)設計,在很大程度上提高了自己的獨立思考能力和單片機的專業(yè)知識,也深刻了解寫一篇應用系統(tǒng)的步驟和格式,以與不可少的幾個階段。課程設計能夠從理論設計和工程實踐相結合、鞏固基礎知識與培養(yǎng)創(chuàng)新意識相結合、個人作用和集體協作結合等方面全方位的培養(yǎng)我們學生的素質。我經過這次

29、設計,熟悉了對一項課題進行研究、設計和實驗的詳細過程。這些在我將來的工作和學習當中都會有很大的幫助。有過這樣的一次訓練,相信在接下來的日子我們都會了,而且會做得更多。 其次,我學會了怎么樣查閱資料和利用工具書。平時課堂上所學習的只是大多數比較舊,這就要求我們更加積極地查閱當前最近的電子信息資料。一個人所學所了解的總是有限,因此,當我在設計過程中需要一些我不曾學習過的知識時,我就有針對性地去查找了相關材料,并加以理解和利用。這大大有助于我們提高自身的應用能力,而且增長了自己的見識,最新的專業(yè)知識。 而且,課程設計對我以前學過的知識起到了回顧作用,并對其加以進一步的消化和鞏固。更進一步的,課程設計

30、培養(yǎng)了我嚴肅認真,實事的科學態(tài)度。也讓我明白了吃苦耐相對應的工程意識的重要。參考文獻:參考文獻:1 羅印升 單片微機原理與應用 :機械工業(yè),2012,12 譚浩強 C 程序設計 :清華大學,2010,63 康華光 電子技術基礎模擬部分 高等教育,2011,11,4 康華光 電子技術基礎數字部分 高等教育,2011,11,5 月飛,郭會平,胡仁喜 Protel 99se,:機械工業(yè),2009,126 紅艷,余成波 傳感器與現代檢測技術 :清華大學,2009,3 . . . 17 / 33附錄附錄 1 1:程序/* 程序名; 基于 DS18B20 的測溫系統(tǒng)* 功 能: 實時測量溫度,超過上下限報

31、警,報警溫度可手動調整。K1 是用來* 進入上下限調節(jié)模式的,當按一下 K1 進入上限調節(jié)模式,再按一下進入下限* 調節(jié)模式。在正常模式下,按一下 K2 進入查看上限溫度模式,顯示 1s 左右自動* 退出;按一下 K3 進入查看下限溫度模式,顯示 1s 左右自動退出;按一下 K4 消除* 按鍵音,再按一下啟動按鍵音。在調節(jié)上下限溫度模式下,K2 是實現加 1 功能,* K1 是實現減 1 功能,K3 是用來設定上下限溫度正負的。 */#include /將 AT89X52.h 頭文件包含到主程序#include/將 intrins.h 頭文件包含到主程序(調用其中的_nop_()空操作函數延時

32、)#define uint unsigned int /變量類型宏定義,用 uint 表示無符號整形(16 位)#define uchar unsigned char /變量類型宏定義,用 uchar 表示無符號字符型(8 位)uchar max=0 x00,min=0 x00; /max 是上限報警溫度,min 是下限報警溫度bit s=0; /s 是調整上下限溫度時溫度閃爍的標志位,s=0 不顯示 200ms,s=1 顯示 1s左右bit s1=0; /s1 標志位用于上下限查看時的顯示void display1(uint z); /聲明 display1()函數(display.h 頭文

33、件中的函數,ds18b20.h 要用應先聲明)#includeds18b20.h /將 ds18b20.h 頭文件包含到主程序#includekeyscan.h /將 keyscan.h 頭文件包含到主程序#includedisplay.h /將 display.h 頭文件包含到主程序/*主函數*/void main() beer=0; /關閉蜂鳴器 led=1; /關閉 LED 燈 timer1_init(0); /初始化定時器 1(未啟動定時器 1) get_temperature(1); /首次啟動 DS18B20 獲取溫度(DS18B20 上點后自動將 EEPROM 中的上下限溫度復制

34、到 TH 和 TL 寄存器) while(1) /主循環(huán) keyscan(); /按鍵掃面函數 get_temperature(0); /獲取溫度函數 /keyscan(); /按鍵掃面函數 display(temp,temp_d*0.625);/顯示函數 alarm(); /報警函數 . . . 18 / 33 /keyscan(); /按鍵掃面函數 /* 程序名; _ds18b20_h_* 功 能: DS18B20 的 c51 編程頭文件 */#include#ifndef _ds18b20_h_ /定義頭文件#define _ds18b20_h_#define uint unsigned

35、 int /變量類型宏定義,用 uint 表示無符號整形(16 位)#define uchar unsigned char /變量類型宏定義,用 uchar 表示無符號字符型(8 位)sbit DQ= P23; /可位尋址變量定義,用 DQ 表示 P2.3 口sbit beer=P17; /用 beer 表示 P1.0sbit led=P11; /用 led 表示 P1.1uchar temp=0; /測量溫度的整數部分uchar temp_d=0; /測量溫度的小數部bit f=0; /測量溫度的標志位,0表示“正溫度” 1表示“負溫度”)bit f_max=0; /上限溫度的標志位0表示“

36、正溫度” 1表示“負溫度” )bit f_min=0; /下限溫度的標志位0表示“正溫度” 、 1表示“負溫度” )bit w=0; /報警標志位1啟動報警0關閉報警)sbit check=P10;/*延時子函數*/void ds18b20_delayus(uint t) /延時幾 s while(t-);void ds18b20_delayms(uint t) /延時 1ms 左右uint i,j;for(i=t;i0;i-) for(j=120;j0;j-);/*ds18b20 初始化函數*/void ds18b20_init() / DS18B20 初始化 uchar c=0; DQ=1

37、;DQ=0; /控制器向 DS18B20 發(fā)低電平脈沖 . . . 19 / 33ds18b20_delayus(80); /延時 15-80sDQ=1;/控制器拉高總線,while(DQ); /等待 DS18B20 拉低總線,在 60-240s 之間ds18b20_delayus(150);/延時,等待上拉電阻拉高總線DQ=1; /拉高數據線,準備數據傳輸;/*ds18b20 字節(jié)讀函數*/uchar ds18b20_read() /DS18B20 字節(jié)讀取uchar i;uchar d = 0;DQ = 1;/準備讀;for(i=8;i0;i-) d = 1; /低位先發(fā);DQ = 0;_

38、nop_();_nop_();DQ = 1;/必須寫 1,否則讀出來的將是不預期的數據;if(DQ)/在 12us 處讀取數據;d |= 0 x80;ds18b20_delayus(10);return d; /返回讀取的值/*ds18b20 字節(jié)寫函數*/void ds18b20_write(uchar d) / ds18b20 字節(jié)寫 uchar i; for(i=8;i0;i-) DQ=0; DQ=d&0 x01; ds18b20_delayus(5); DQ=1; d = 1; /*獲取溫度函數*/ void get_temperature(bit flag) . . . 20

39、 / 33uchar a=0,b=0,c=0,d=0; uint i;ds18b20_init(); /DS18B20 初始化ds18b20_write(0 xcc);/向 DS18B20 發(fā)跳過讀 ROM 命令ds18b20_write(0 x44);/寫啟動 DS18B20 進行溫度轉換命令,轉換結果存入部 RAMif(flag=1)/首次啟動 DS18B20 進行溫度轉換需要 500ms,若轉換時間不夠就出錯,讀出的是 85 度的錯誤值。 display1(1);/用開機動畫耗時elseds18b20_delayms(1);ds18b20_init(); /DS18B20 初始化ds18

40、b20_write(0 xcc); /向 DS18B20 發(fā)跳過讀 ROM 命令ds18b20_write(0 xbe);/寫讀部 RAM 中 9 字節(jié)的容命令a=ds18b20_read();/讀部 RAM (LSB)b=ds18b20_read();/讀部 RAM (MSB)if(flag=1)/局部位變量 f=1 時讀上下線報警溫度 max=ds18b20_read(); /讀部 RAM (TH) min=ds18b20_read(); /讀部 RAM (Tl)if(max&0 x80)=0 x80) /若讀取的上限溫度的最高位(符號位)為1表明是負溫度f_max=1;max=(

41、max-0 x80); /將上限溫度符號標志位置1表示負溫度,將上限溫度裝換成無符號數。 if(min&0 x80)=0 x80) /若讀取的下限溫度的最高位(符號位)為1表明是負溫度f_min=1;min=(min-0 x80); /將下限溫度符號標志位置1表示負溫度,將下限溫度裝換成無符號數。i=b;i=4;if (i=0) f=0; /i 為 0,正溫度,設立正溫度標記 temp=(a4)|(b4)|(b4);/整數部分 a=(a&0 x0f);/小數部分 . . . 21 / 33 temp_d=a; /*存儲極限溫度函數*/ void store_t() if(f_m

42、ax=1) /若上限溫度為負,將上限溫度轉換成有符號數(最高位為1 是負,為 0 是正)max=max+0 x80;if(f_min=1) /若下限溫度為負,將上限溫度轉換成有符號數min=min+0 x80; ds18b20_init(); /DS18B20 初始化ds18b20_write(0 xcc); /向 DS18B20 發(fā)跳過讀 ROM 命令ds18b20_write(0 x4e); /向 DS18B20 發(fā)寫字節(jié)至暫存器 2 和 3(TH 和 TL)命令ds18b20_write(max); /向暫存器 TH(上限溫度暫存器)寫溫度ds18b20_write(min); /向暫存

43、器 TL(下限溫度暫存器)寫溫度ds18b20_write(0 xff); /向配置寄存器寫命令,進行溫度值分辨率設置ds18b20_init(); /DS18B20 初始化ds18b20_write(0 xcc); /向 DS18B20 發(fā)跳過讀 ROM 命令ds18b20_write(0 x48); /向 DS18B20 發(fā)將 RAM 中 2、3 字節(jié)的容寫入 EEPROM /DS18B20 上電后會自動將 EEPROM 中的上下限溫度拷貝到 TH、TL 暫存器/*溫度超限報警函數*/ void alarm() /若上限值是正值 if(f_max=0) if(f_min=0) /若下限值是

44、正值 if(f=0) /若測量值是正值 if(temp=max) w=1;TR1=1; /當測量值小于最小值或大于最大值時報警 if(tempmin) w=0; if(temp=max)check=0; if(f=1)w=1;TR1=1; /若測量值是負值時報警 if(f_min=1) /若下限值是負值 . . . 22 / 33 if(f=0) /若測量值是正值 if(temp=max)/當測量值大于最大值時報警 w=1;TR1=1; if(temp=min)/當測量值大于最小值時報警 w=1;TR1=1; if(tempmin)/當測量值小于最小值時不報警 w=0; if(f_max=1)

45、 /若下限值是負值 if(f_min=1) /若下限值是負值 if(f=1) /若測量值是負值 if(temp=min) w=1;TR1=1; /當測量值小于最大值或大于最小值時報警 if(tempmax) w=0; /當測量值小于最小值且大于最大值時不報警 if(f=0)w=1;TR1=1; /若測量值是正值時報警 #endif/* 程序名; ds18b20 鍵盤頭文件* 功 能: 通過鍵盤設定設定上下限報警溫度 */#include#ifndef _keyscan_H_/定義頭文件#define _keyscan_H_sbit key1=P14; /可位尋址變量定義,用 key1 表示 P

46、2.2 口sbit key2=P15; /用 key2 表示 P2.1 口 . . . 23 / 33sbit key3=P16;/用 key3 表示 P2.0 口sbit key4=P33;/用 key4 表示 P3.3 口uchar i=0;/定義全局變量 i 用于不同功能模式的選擇, 0正常模式, 1上限調節(jié)模式, 2下限調節(jié)模式uchar a=0; /定義全局變量 a 用于不同模式下數碼管顯示的選擇bit k4=0;/K4 按鍵雙功能選擇位,k4=0 時 K4 按鍵選擇消按鍵音的功能,k4=1 時 K4 按鍵選擇正負溫度設定功能bit v=0;/K2、K3 按鍵雙功能選擇位,v=0 時

47、選擇上下限查看功能,v=1 時選擇上下限溫度加減功能bit v1=0;/v1=1 時定時 1250ms 時間到自動關閉報警上下限查看功能bit v2=0; /消按鍵音功能調整位,為0時開按鍵音,為1時關按鍵音/*讀鍵盤延時子函數*/void keyscan_delay(uint z)/延時 1ms 左右 uint i,j; for(i=z;i0;i-)for(j=120;j0;j-);/*溫度調節(jié)函數*/int temp_change(int count,bit f) /上下限溫度調整 if(key2=0)/判斷 K2 是否按下 if(v2=0)beer=0;/v2=0 開按鍵音,否則消按鍵音

48、keyscan_delay(10);/延時 10msif(key2=0)/再次判斷 K2 是否按下(實現按按鍵時消抖) beer=1;/K2 按下關按鍵音 if(f=0)/若溫度為正 count+;/每按一下 K2 溫度上調 1 if(a=1)if(count125) count=125;/當溫度值大于 125 時不上調 if(a=2)if(count125) count=125; if(f!=0)/若溫度為負 count+;/每按一下 K2 溫度下調 1 if(a=1)if(count55) count=55;/當溫度值小于-55 時不再下調 if(a=2)if(count55) count

49、=55; . . . 24 / 33while(key2=0);/K2 松開按鍵時消抖keyscan_delay(10);if(key3=0) if(v2=0)beer=0;keyscan_delay(10);if(key3=0) /K3 按按鍵時消抖 beer=1; count-;/每按一下 K3 溫度為正時下調 1,為負時上調 1if(a=1)if(count0) count=0;/當溫度值達到 0 時不再調if(a=2)if(count2)/K1 按下三次后退出調節(jié)模式 i=0;/進入正常模式 TR1=0;/關定時器 1 k4=0;/在正常模式下選擇 K4 的消按鍵音功能 v=0;/在正

50、常模式下選擇 K2、K3 的查看上下限報警溫度功能 store_t();/存儲調整后的上下限報警溫度 . . . 25 / 33 switch(i)/顯示選擇 case 0:a=0;break;/a=0 選擇顯示測得的溫度 case 1:a=1;break; /a=1 選擇顯示上限溫度 case 2:a=2;break; /a=2 選擇顯示下限溫度 default:break; while(key1=0);/K1 松按鍵時消抖keyscan_delay(10);if(a=1&v=1)/a=1 選擇顯示上限溫度且 v=1 時選擇上下限溫度加功能led=0;max=temp_change(

51、max,f_max);/顯示上限溫度else if(a=2&v=1)/a=2 選擇顯示下限溫度且 v=1 時選擇上下限溫度減功能led=1;min=temp_change(min,f_min);else;if(k4=1)/k4=1 時 K4 按鍵選擇正負溫度設定功能if(key4=0) if(v2=0)beer=0;keyscan_delay(5);if(key4=0) beer=1; if(a=1) if(max55) f_max=0;else f_max=f_max;/當溫度大于 55 度時,只能設定為正溫度 if(a=2) if(min55) f_max=0;else f_min

52、=f_min;/當溫度大于 55 度時,只能設定為正溫度 while(key4=0);keyscan_delay(10);if(v=0) /v=0 時選擇上下限查看功能if(key2=0) if(v2=0)beer=0;keyscan_delay(10);if(key2=0) . . . 26 / 33 beer=1; a=1;/選擇上限顯示 TR1=1;/開定時器 1 開始定時一分鐘左右 s1=1; /上限顯示不閃爍,顯示一分鐘左右自動退出while(key2=0);keyscan_delay(10);if(key3=0) if(v2=0)beer=0;keyscan_delay(10);i

53、f(key3=0) beer=1; a=2;/選擇下限顯示 TR1=1;/開定時器 1 開始定時 1s s1=1; /下限顯示不閃爍,顯示 1s 自動退出 while(key3=0);keyscan_delay(10);if(v1=1) /v1=1 時定時 1s 時間到自動關閉報警上下限查看功能a=0;v1=0;TR1=0; /a=0 顯示實測溫度,v1 清零,關定時器 1if(k4=0) /k4=0 時 K4 按鍵選擇消按鍵音的功能 if(key4=0)if(v2=0)beer=0;keyscan_delay(10);if(key4=0) beer=1; v2=v2;/為0時開按鍵音,為1時

54、關按鍵音 while(key4=0);keyscan_delay(10); #endif . . . 27 / 33/* 程序名; ds18b20 數碼管動態(tài)顯示頭文件* 功 能: 通過定時器 0 延時是數碼管動態(tài)顯示*/#include#ifndef _ds18b20_display_H_ /定義頭文件#define _ds18b20_display_H_#define uint unsigned int /變量類型宏定義,用 uint 表示無符號整形(16 位)#define uchar unsigned char /變量類型宏定義,用 uchar 表示無符號字符型(8 位)sbit we

55、i1=P24; /可位尋址變量定義,用 wei1 表示 P2.4 口sbit wei2=P25; /用 wei2 表示 P2.5 口sbit wei3=P26; /用 wei3 表示 P2.6 口sbit wei4=P27; /用 wei4 表示 P2.7 口uchar num=0; /定義 num 為全局無符號字符型變量,賦初值為uchar code temperature1= 0 xc0,0 xf9,0 xa4,0 xb0,0 x99, 0 x92,0 x82,0 xf8,0 x80,0 x90;/定義顯示碼表 09uchar code temperature2= 0 x40,0 x79,

56、0 x24,0 x30,0 x19, 0 x12,0 x02,0 x78,0 x00,0 x10;/帶小數點的 0.9.uchar code temperature3= 0 xff,0 x7f,0 xbf,0 x89,0 xc7;/依次是不顯示 . -/*延時子函數*/void display_delay(uint t) /延時 1ms 左右uint i,j;for(i=t;i0;i-) for(j=120;j0;j-);/*定時器 1 初始化函數*/void timer1_init(bit t) TMOD=0 x10;/設定定時器 1 工作在方式 1,最大定時 65.53ms TH0=0 x

57、3c;/定時器賦初值,定時 50ms TL0=0 xb0; EA=1;/開總中斷 ET1=1;/開定時器 1 中斷 TR1=t;/ 局部變量 t 為 1 啟動定時器 1,為 0 關閉定時器 1/*定時器 1 中斷函數*/void timer1() interrupt 3 TH0=0 x3c;/重新賦初值,定時 50ms TL0=0 xb0;num+;/每進入一次定時器中斷 num 加 1(每 50ms 加 1 一次) . . . 28 / 33 if(num20)/進入 20 次中斷,定時 1s num=0;/num 歸 0,重新定開始定時 1s s1=0;/定時 1s 時間到時自動關閉報警上

58、下限顯示功能 v1=1;/定時 1s 時間到時自動關閉報警上下限查看功能 /*調整報警上下限顯示選擇函數*/void selsct_1(uchar f,uchar k) /消除百位的 0 顯示,與正負溫度的顯示選擇 if(f=0)/若為正溫度,百位為 0 則不顯示百位,不為 0 則顯示 if(k/100=0) P0=temperature30; else P0=temperature1k/100; if(f=1)/若為負溫度,若十位為 0,百位不顯示,否則百位顯示- if(k%100/10=0) P0=temperature30; else P0=temperature32; void sel

59、sct_2(bit f,uchar k)/消除十位的 0 顯示,與正負溫度的顯示選擇 if(f=0) /若為正溫度,百位十位均為 0 則不顯示十位,否則顯示十位 if(k/100=0)&(k%100/10=0) P0=temperature30; . . . 29 / 33 else P0=temperature1k%100/10; if(f=1)/若為負溫度,若十位為 0,十位不顯示,否則十位顯示- if(k%100/10=0) P0=temperature32; else P0=temperature1k%100/10; /*主顯示函數*/void display(uchar t,

60、uchar t_d) /用于實測溫度、上限溫度的顯示 uchar i; for(i=0;i4;i+) /依次從左至右選通數碼管顯示,實現動態(tài)顯示 switch(i) case 0: /選通第一個數碼管 wei2=0; /關第二個數碼管 wei3=0; /關第三個數碼管 wei4=0; /關第四個數碼管 wei1=1; /開第一個數碼管 if(a=0)selsct_1(f,t); /若 a=0 則在第一個數碼管上顯示測量溫度的百位或- if(a=1) P0=temperature33; /若 a=1 則在第一個數碼管上顯示H if(a=2) P0=temperature34; /若 a=2 則在第一個數碼管上顯示L break; case 1:

溫馨提示

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

評論

0/150

提交評論