畢業(yè)設計(論文)-基于DS18B20的單片機設計(多點測溫).docx
《畢業(yè)設計(論文)-基于DS18B20的單片機設計(多點測溫).docx》由會員分享,可在線閱讀,更多相關《畢業(yè)設計(論文)-基于DS18B20的單片機設計(多點測溫).docx(37頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、目錄一、系統(tǒng)硬件部分設計21系統(tǒng)總體設計方案2(1)系統(tǒng)的技術指標2(2)溫度測量方案2(3)系統(tǒng)方案及元件的選擇32系統(tǒng)的工作模塊4(1)AT89C51芯片4(2) LCD顯示5(3)溫度采集模塊5(4)聲光模塊5(5)驅(qū)動模塊63系統(tǒng)電路原理圖7二、系統(tǒng)軟件部分設計81系統(tǒng)軟件設計方案8(1)主程序流程圖8(2)顯示模塊流程圖9(3)溫度采集模塊流程圖92程序清單10三、系統(tǒng)仿真過程及結(jié)果111.Keil編譯及仿真112.Proteus仿真12四、系統(tǒng)實物制作與調(diào)試151系統(tǒng)實物器件清單152實物制作過程153系統(tǒng)調(diào)試過程與功能實現(xiàn)16(1)實驗中遇到的問題和解決方案16(2)系統(tǒng)的功能實
2、現(xiàn)16五、心得體會:17六、參考文件18附錄19附錄一(系統(tǒng)實物器件清單)19附錄二(源程序)21一、系統(tǒng)硬件部分設計1系統(tǒng)總體設計方案 如圖1所示:圖1系統(tǒng)方案本設計目的在于通過測量溫度來判斷外部設備是否工作,以維持室溫的恒定,于是我們測溫模塊DS18B20來采集不同地方的溫度,通過單片機89C51來判斷溫度是否在設定范圍內(nèi),并輸出到顯示模塊LCD1602,顯示溫度數(shù)值。如果溫度在可控范圍內(nèi),LED燈將顯示正常工作,蜂鳴器不工作;如果溫度超過設定值,系統(tǒng)將驅(qū)動降溫模塊,電機將開始運轉(zhuǎn),LED燈顯示超溫工作,蜂鳴器報警;如果溫度低于設定值,系統(tǒng)將驅(qū)動升溫模塊,電阻絲將開始通電,將電能轉(zhuǎn)化成熱能
3、,LED燈將顯示紅色報警,蜂鳴器報警。(1)系統(tǒng)的技術指標利用DS18B20和AT89C51設計一個溫度測量系統(tǒng),系統(tǒng)功能:實現(xiàn)三點溫度檢測,用LCD顯示溫度;溫度測量范圍:-55125,精度0.1。設定溫度上下限,當溫度高于上限值或低于下限值時,系統(tǒng)能自動驅(qū)動降溫與升溫設備工作。(2)溫度測量方案由于多點溫度測量是本設計的主要內(nèi)容,所以溫度測量的精確非常重要,為了提高溫度測量匯總的準確度,本設計采用了使用DS18B20溫度測量模塊直接對溫度進行測量。然后將多個DS18B20溫度測量模塊得到的數(shù)據(jù)進行采集,可以達到多點的溫度精確測量。DS18B20的64位ROM中存儲著器件獨一無二的序列號,緩
4、存器中包含兩字節(jié)的溫度寄存器,用于存儲溫度傳感器的數(shù)字輸出,緩存器中還提供一字節(jié)的上線警報觸發(fā)(TH)和下線警報觸發(fā)(TL)寄存器,和一字節(jié)的配置寄存器,使用者可以通過配置寄存器來設置溫度轉(zhuǎn)換的精度。緩存器的第五字節(jié)、第六字節(jié)和第七字節(jié)為器件內(nèi)部保留使用。第八字節(jié)含有循環(huán)冗余碼(CRC)。使用寄生電源時,DS18B20不需要額外的供電電源,當總線為新電平時,功率由單總線上的上拉電阻通過DQ引腳提供;高電平總線信號同時也向內(nèi)部電容Cap充電,Cap在總線低電平時為器件供電。DS18B20中溫度數(shù)據(jù)是以帶符號位的16位補碼存儲在溫度寄存器中的,符號位說明溫度是正值還是負值,正值時,S=0;負值時,
5、S=1。DS18B20采用嚴格的單總線通信協(xié)議,以保證數(shù)據(jù)的完整性。該協(xié)議定義了6鐘信號類型,即復位脈沖、應答脈沖、寫0、寫1、讀0和讀1.。除了應答脈沖,所有這些信號都有主機發(fā)出同步信號??偩€上傳輸?shù)乃袛?shù)據(jù)和命令都是字節(jié)的低位在前。在寫時序開始后的1560us期間,DS18B20采樣總線的狀態(tài)。如果總線為高電平,則邏輯1被寫入DS18B20;如果總線為低電平,則邏輯0被寫入DS18B20.。每個讀時序均由主機發(fā)起,拉低總線至少1us。在主機發(fā)起讀時序后,DS18B20開始在總線上傳送0或1。若DS18B20發(fā)送1,則保持總線為高電平;若發(fā)送0,則拉低總線,當傳送0時,DS18B20在該時序
6、結(jié)束時釋放總線,再由上拉電阻將總線拉回空閑狀態(tài)。DS18B20發(fā)出的數(shù)據(jù)在讀時序下降沿起始后的15us內(nèi)有效,因此主機必須在讀時序開始后的15us內(nèi)釋放總線,并采樣總線狀態(tài)。DS18B20在使用時,一般采用單片機來進行數(shù)據(jù)采集。只需將DS18B20信號線與單片機一位I/O線相連,且單片機的一位I/O線可掛接多個DS18B20,從而實現(xiàn)多點溫度測量。(3)系統(tǒng)方案及元件的選擇機型的選擇,通過對系統(tǒng)大致程序的估計和系統(tǒng)工作速度的估計以及I/O口需求量的估計,考慮價格因素、元器件市場因素,選定AT89C51單片機作為系統(tǒng)的主要控制芯片。各種經(jīng)過DS18B20測量得到的溫度值的電信號都需要經(jīng)過LCD顯
7、示出來,考慮到被測量的有效位數(shù)及其富裕量,選擇LM016L液晶顯示模塊進行顯示,由于需要顯示的數(shù)字較多,需要進行排版處理,才能使得溫度值能夠更加直觀地顯示出來,選擇LM016L液晶顯示模塊進行顯示排版。由于升溫和降溫時,需要進行聲音報警和燈光報警,所以采用LED指示燈和蜂鳴器進行報警提示。由于該電路的設計需要對升溫和降溫做出反應,在升溫時散熱,在降溫時發(fā)熱,所以采用電動機模塊和電阻絲模塊,在升溫時發(fā)電機啟動,帶動風扇進行散熱, 在降溫時電阻絲模塊接入電路,通過電流熱效應進行放熱。2系統(tǒng)的工作模塊(1)AT89C51芯片51 單片機是一塊芯片集成了 CPU、RAM、ROM、定時/計數(shù)器和多功能的
8、 I/O 口。 運算模塊由DS18B20、設備和顯示屏組成。 單片機通過對DS18B20輸入數(shù)據(jù)的處理,來判斷是否啟動設備。如果溫度超過所設置的上限值,單片機將在電機的輸出口置1,啟動電機散熱,同時高溫指示燈將亮起,蜂鳴器工作;如果溫度低于所設置的下限值,電阻絲工作供熱,低溫指示燈將亮起,蜂鳴器工作;在所設置的溫度范圍內(nèi),設備將不會工作,綠燈亮起。如圖2所示:圖2 AT89C51(2) LCD顯示本設計采用的是 LCD 液晶顯示輸出數(shù)據(jù)。液晶顯示器 LM016L 液晶顯示器 LCD液晶顯示模塊引出引腳標號為D7.0、RS、RW、E,接入單片機引腳P07.0、P20、P21 、P22如圖3所示:
9、 圖3液晶顯示圖(3)溫度采集模塊本設計采用DS18B20模塊采集和輸送溫度,溫度采集模塊引出引腳標號為DQ-A、DQ-B、DQ-C接入單片機引腳P35、P36、P37。連接方式如圖4所示: 圖4 DS18B20(4)聲光模塊LED指示燈LED指示燈是單片機系統(tǒng)中最常用的顯示設備,用戶可以根據(jù)指示燈的亮滅狀況判斷設備的工作狀態(tài)。指示燈需要完成的任務有:檢查設備的運行狀態(tài),如果設備沒啟動,則相應的指示燈亮起,其他指示燈不工作;如果設備啟動,則相應的指示燈亮起,其他不工作設備的指示燈熄滅,同時以不同顏色的指示燈來區(qū)別工作狀況,使用戶可以更加有順序和效率的操作設備。LED指示模塊引出引腳LED-A、
10、LED-B、LED-C、MOTOR-A、MOTOR-B、MOTOR-C、HEAT-A、HEAT-B、HEAT-C接入單片機引腳P24、P25、P26、P27、P30、P31、P32、P33、P34。如圖5所示。圖5 LED指示燈警報本設計采用揚聲器speaker警報模塊引出引腳BEE,接入單片機引腳P23連接方式如圖6所示:圖6蜂鳴器(5)驅(qū)動模塊電動機驅(qū)動電動機屬于強電設備,在弱電設備中無法應用,所以電動機的驅(qū)動就需要使用繼電器,繼電器是弱電驅(qū)動強電的中間設備,單片機可以在繼電器的控制端輸入一個高電平信號,使繼電器的銜鐵吸和,從而啟動電動機。電動機驅(qū)動模塊引出引腳MOTOR-A、MOTOR-
11、B、MOTOR-C,接入單片機引腳P27、P30、P31。如圖7所示:圖7電動機的連接圖發(fā)熱電阻絲驅(qū)動發(fā)熱電阻絲的驅(qū)動原理同電動機的驅(qū)動一樣,利用繼電器使設備接入電源從而工作。電阻絲驅(qū)動模塊引出引腳HEAT-A、HEAT-B、HEAT-C,接入單片機引腳P32、P33、P34.如圖8所示:圖8電阻絲的連接圖3系統(tǒng)電路原理圖二、系統(tǒng)軟件部分設計1系統(tǒng)軟件設計方案(軟件流程圖)(1)主程序流程圖主程序通過對溫度采集模塊輸送的信息進行處理,并在LCD顯示處理,如圖 9.圖9主程序流程圖(2)顯示模塊流程圖通過單片機向顯示模塊寫入命令和數(shù)據(jù),對顯示方式和顯示內(nèi)容作出選擇,如圖10.圖10顯示模塊流程圖
12、(3)溫度采集模塊流程圖DS18B20溫度采集模塊的工作時序包括:初始化時序、寫時序和讀時序,如圖11. 圖11溫度采集模塊流程圖2程序清單(見附錄二)三、系統(tǒng)仿真過程及結(jié)果1.Keil編譯及仿真將所編輯的C程序?qū)懭隟eil軟件,并運行仿真,所得程序編譯無誤,如圖12。圖12編譯程序截圖點擊軟件右上角的程序仿真按鈕,對所編譯成功的程序進行仿真,結(jié)果如圖13。圖13運行程序截圖2.Proteus仿真接通電源開關后,仿真圖如圖14 15 16 17和18所示:LCD、DS18B20開始工作。DS18B20溫度數(shù)值為27.0、27.0、27.0LCD示數(shù)分別為27.0、27.0、27.0未超過溫度上
13、下限,電阻絲模塊、電動機模塊不工作,如圖14。圖14調(diào)整DS18B20感受到的溫度值為31.5、33.0、29.4LCD示數(shù)為31.5、33.0、29.4未超過溫度上下限,所以電動機模塊和電阻絲模塊都不動作,如圖15。圖15調(diào)整DS18B20溫度數(shù)值為31.5、33.0、40.9LCD顯示為31.5、33.0、40.9第三組溫度超過溫度上限,第三組對應發(fā)動機模塊動作,電阻絲模塊不動做,如圖16。圖16調(diào)整DS18B20溫度數(shù)值分別為31.5、33.0、19.7,LCD顯示為31.5、33.0、19.7,由于第三組低于溫度下限,所以第三組對應電阻絲模塊動作,電動機模塊不動作,如圖17。圖17調(diào)整
14、DS18B20溫度數(shù)值為39.7、39.0、20.0LCD顯示為39.7、39.0、20.0按住KM2按鈕,給B降溫未超過溫度上下限,但電動機模塊動作,電阻絲模塊沒有動作。圖18四、系統(tǒng)實物制作與調(diào)試1系統(tǒng)實物器件清單(見附錄一)2實物制作過程為了縮短開發(fā)周期,采用購買完整的單片機開發(fā)板進行實驗,購買單片機開發(fā)板中只包含本實驗中的AT89C51芯片、AT89C51的周邊電路和電動機模塊和電阻絲模塊,為了完善開發(fā)元件,我們購買了LCD液晶顯示模塊,型號為LM016L、三塊DS18B20芯片和若干杜邦線。因為電動機模塊和電阻絲模塊并沒有與開發(fā)板直接相連,所以采用杜邦線將電動機模塊和電阻絲模塊與開發(fā)
15、板進行連接,對照電路圖進行完善連接。實物圖如圖19所示。圖193系統(tǒng)調(diào)試過程與功能實現(xiàn)(1)實驗中遇到的問題和解決方案實驗初期,按照實驗方案在溫度范圍內(nèi)的LED應該點亮,仿真成功,但是應用于實驗中的單片機開發(fā)板卻并沒成功,經(jīng)過多次更換LED之后依然無發(fā)點亮,通過與老師、同學的討論和分析,得出結(jié)論:在單片機開發(fā)板中使用的LED燈是共陽極連接的,所以實驗現(xiàn)象與仿真結(jié)果無法一致。硬件修改過于繁瑣,所以我們在軟件即程序語言上做了修改,原是“0”點亮的程序,我們改為“1”點亮,通過軟件即程序上的修改,我們達到了仿真結(jié)果。多次實驗以后,我們將位定義直接集中在端口頭文件,方便進行調(diào)試。我們將三組溫度采集和處
16、理模塊的相似功能的程序進行分組集成函數(shù)。通過AT89C51部分函數(shù)初始化程序,我們成功解決了無定義端口高電平影響實驗的問題。(2)系統(tǒng)的功能實現(xiàn)用手指握住B組DS18B20芯片加溫,LCD示數(shù)為B組25.5,A組19.3,C組19.3。其中A組與C組低于溫度下限,觸發(fā)對應LED7、LED8,B組處于溫度范圍內(nèi),觸發(fā)對應LED2。圖20使用加熱工具對B組DS18B20芯片進行加熱,LCD示數(shù)如下:A組21.0,B組40,C組23.1攝氏度。其中B組超過溫度上限,觸發(fā)對應LED5,A組C組處在溫度范圍內(nèi),觸發(fā)對應LED1、LED3。五、心得體會:課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn)、提出、分析
17、和解決實際問題, 鍛煉實踐能力的重要環(huán)節(jié), 是對學生實際工作能力的具體訓練和考察過程。 隨著科學技術發(fā)展的日新日異,單片機已經(jīng)成為當今計算機應用中空前活躍的領域,在生活中可以說得是無處不在。因此作為自動化專業(yè)的學生來說掌握單片機的開發(fā)技術是十分重要的。我的題目是簡易計算器硬軟件的設計,對于我們這些工科學生來說,這是 一次考驗。怎么才能找到課堂所學與實際應用的最佳結(jié)合點?怎樣讓自己的業(yè)余更接近專業(yè)?怎樣讓自己的計劃更具有序性,而不會忙無一用?這都是我們所要考慮和努力的。這次課程設計我學到很多很多的東西,學會了怎么樣去制定計劃,怎么樣去實現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒
18、。不僅鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識,掌握了一種系統(tǒng)的研究方法,可以進行一些簡單的編程。通過這次課程設計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。 同時在設計的過程中發(fā)現(xiàn)了自己的不足之處, 對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,對單片機匯編語言掌握得不夠好。這次課程設計通過自己的努力,同學的幫助,網(wǎng)絡資料的收集,最終順利完成了。六、參考文件1 張毅剛. 單片機原理及應用M 北京.高等教育出版社 2010附錄附
19、錄一(系統(tǒng)實物器件清單)DescriptionDesignatorFootprintLibRefQuantityMotor, General KindB1RB5-10.5Motor1Motor, General KindB2RB5-10.5Motor1Motor, General KindB3RB5-10.5Motor1CapacitorC1RAD-0.3Cap1CapacitorC2RAD-0.3Cap11 Amp General Purpose RectifierD1DIO10.46-5.3x2.8Diode 1N400111 Amp General Purpose RectifierD2
20、DIO10.46-5.3x2.8Diode 1N400111 Amp General Purpose RectifierD3DIO10.46-5.3x2.8Diode 1N400111 Amp General Purpose RectifierD4DIO10.46-5.3x2.8Diode 1N400111 Amp General Purpose RectifierD5DIO10.46-5.3x2.8Diode 1N400111 Amp General Purpose RectifierD6DIO10.46-5.3x2.8Diode 1N40011Typical RED GaAs LEDDS1
21、LED-1LED11Typical RED GaAs LEDDS2LED-1LED11Typical RED GaAs LEDDS3LED-1LED11Typical RED GaAs LEDDS4LED-1LED11Typical RED GaAs LEDDS5LED-1LED11Typical RED GaAs LEDDS6LED-1LED11Typical RED GaAs LEDDS7LED-1LED11Typical RED GaAs LEDDS8LED-1LED11Typical RED GaAs LEDDS9LED-1LED11Single-Pole Dual-Throw Rel
22、ayK1DIP-P5/X1.65Relay-SPDT1Single-Pole Dual-Throw RelayK2DIP-P5/X1.65Relay-SPDT1Single-Pole Dual-Throw RelayK3DIP-P5/X1.65Relay-SPDT1Single-Pole Dual-Throw RelayK4DIP-P5/X1.65Relay-SPDT1Single-Pole Dual-Throw RelayK5DIP-P5/X1.65Relay-SPDT1Single-Pole Dual-Throw RelayK6DIP-P5/X1.65Relay-SPDT1Inductor
23、L1INDC2010-0804Inductor1InductorL2INDC1005-0402Inductor1InductorL3INDC2010-0804Inductor1LoudspeakerLS1PIN2Speaker1NPN Bipolar TransistorQ1BCY-W3NPN1NPN Bipolar TransistorQ2BCY-W3NPN1NPN Bipolar TransistorQ3BCY-W3NPN1NPN Bipolar TransistorQ4BCY-W3NPN1NPN Bipolar TransistorQ5BCY-W3NPN1NPN Bipolar Tran
24、sistorQ6BCY-W3NPN1NPN Bipolar TransistorQ7BCY-W3NPN1ResistorR1AXIAL-0.4Res21ResistorR2AXIAL-0.4Res21ResistorR3AXIAL-0.4Res21ResistorR4AXIAL-0.4Res21ResistorR5AXIAL-0.4Res21ResistorR6AXIAL-0.4Res21ResistorR7AXIAL-0.4Res21ResistorR8AXIAL-0.4Res21ResistorR9AXIAL-0.4Res21ResistorR10AXIAL-0.4Res21Resisto
25、rR11AXIAL-0.4Res21ResistorR12AXIAL-0.4Res21ResistorR13AXIAL-0.4Res21ResistorR14AXIAL-0.4Res21ResistorR15AXIAL-0.4Res21ResistorR16AXIAL-0.4Res21Isolated Resistor NetworkRP1SSO-G16/X.4Res Pack41SwitchS1SPST-2SW-PB1SwitchS2SPST-2SW-PB1SwitchS3SPST-2SW-PB1SwitchS4SPST-2SW-PB1SwitchS5SPST-2SW-PB1SwitchS6
26、SPST-2SW-PB1U1AT89C511U2Component_11U3Component_11U4Component_11Crystal OscillatorY1BCY-W2/D3.1XTAL1附錄二(源程序)主程序:#include#includeioset.h #includeLCD1602.h#includeds1820.h#define uchar unsigned char#define uint unsigned intuchar fh,bw,sw,fh1,bw1,sw1,fh2,bw2,sw2;uint ty,temp,tempi,tempx,ty1,temp1,temp1
27、i,temp1x,ty2,temp2,temp2i,temp2x,max,min;uchar displaytemp16 = A: B: ;uchar displaytemp116 =C: ;void delays (unsigned int us) while(us-);void DISPLAY() displaytemp2= fh; bw=tempi/100;if(bw=0) displaytemp3= ; else displaytemp3=bw+0 x30;sw=(tempi%100)/10;if(sw=0) displaytemp4= ; else displaytemp4=sw+0
28、 x30; displaytemp5= (tempi%100)%10+0 x30; displaytemp6=.; displaytemp7=tempx/10+0 x30;displaytemp10= fh1; bw1=temp1i/100;if(bw1=0) displaytemp11= ; else displaytemp11=bw1+0 x30;sw1=(temp1i%100)/10;if(sw1=0) displaytemp12= ; else displaytemp12=sw1+0 x30; displaytemp13= (temp1i%100)%10+0 x30; displayt
29、emp14=.; displaytemp15=temp1x/10+0 x30; LCD_Write_String(0,0,displaytemp); displaytemp12= fh2; bw2=temp2i/100;if(bw2=0) displaytemp13= ; else displaytemp13=bw2+0 x30;sw2=(temp2i%100)/10;if(sw2=0) displaytemp14= ; else displaytemp14=sw2+0 x30; displaytemp15= (temp2i%100)%10+0 x30; displaytemp16=.; di
30、splaytemp17=temp2x/10+0 x30;LCD_Write_String(0,1,displaytemp1);void flag() temp=retemp();ty=temp;if(ty0 xf000) fh=-; temp=temp; temp+=1; else fh= ; tempi =temp4; tempx=(temp&0 x000f)*6.25;temp1=retemp1();ty1=temp1;if(ty10 xf000) fh1=-; temp1=temp1; temp1+=1; else fh1= ; temp1i =temp14; temp1x=(temp1
31、&0 x000f)*6.25;temp2=retemp2();ty2=temp2;if(ty20 xf000) fh2=-; temp2=temp2; temp2+=1; else fh2= ; temp2i =temp24; temp2x=(temp2&0 x000f)*6.25;void port_init(void) LED_A =1; LED_B =1; LED_C =1; MOTOR_A =0; MOTOR_B =0; MOTOR_C =0; HEAT_A =0; HEAT_B =0; HEAT_C =0; BEE =0;void alarm(int z,int p,int v) i
32、f(z=max) LED_A =0; MOTOR_A =1; HEAT_A =0; else if(z=max) LED_B =0; MOTOR_B =1; HEAT_B =0; else if(p=max) LED_C =0; MOTOR_C =1; HEAT_C =0; else if(vmin) LED_C =0; MOTOR_C =0; HEAT_C =1; else LED_C =1; MOTOR_C =0; HEAT_C =0; /* if(MOTOR_A=1)|(MOTOR_B=1)|(MOTOR_C=1)|(HEAT_A=1)|(HEAT_B=1)|(HEAT_C=1) BEE
33、=1; else BEE=0;*/void keycan() if(KMA=0) delays(500); if(KMA=0) MOTOR_A=1; if(KTA=0) delays(500); if(KTA=0) HEAT_A=1; if(KMB=0) delays(500); if(KMB=0) MOTOR_B=1; if(KTB=0) delays(500); if(KTB=0) HEAT_B=1; if(KMC=0) delays(500); if(KMC=0) MOTOR_C=1; if(KTC=0) delays(500); if(KTC=0) HEAT_C=1;void main
34、() port_init(); LCD_initial(); max=40; min=20; while(1) keycan(); flag(); DISPLAY(); alarm(tempi,temp1i,temp2i); delays(10); IOSET端口頭文件#ifndef _IOSET_H_#define _IOSET_H_#define out P0sbit KMA=P10; sbit KTA=P11; sbit KMB=P12; sbit KTB=P13; sbit KMC=P14; sbit KTC=P15; sbit RS=P20; sbit RW=P21;sbit E =
35、P22; sbit BEE =P23;sbit LED_A =P24;sbit LED_B =P25;sbit LED_C =P26;sbit MOTOR_A =P27;sbit MOTOR_B =P30;sbit MOTOR_C =P31;sbit HEAT_A =P32;sbit HEAT_B =P33;sbit HEAT_C =P34;sbit DQ =P35;sbit DQ1=P36;sbit DQ2=P37;#endifLCD1602液晶顯示屏頭文件#ifndef _1602_H_#define _1602_H_#include #include /包含_nop_( )空函數(shù)指令的頭
36、文件#define uchar unsigned char#define uint unsigned intvoid lcd_initial(void);/ LCD初始化函數(shù)void check_busy(void); /檢查忙標志函數(shù)void write_command(uchar com); /寫命令函數(shù)void write_data(uchar dat);/寫數(shù)據(jù)函數(shù)void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) ; /寫字符串函數(shù)void delay(uint);/延時函數(shù)void dela
37、y(uint j) /1ms延時子程序uchar i=250;for(;j0;j-)while(-i);i=249;while(-i);i=250;void check_busy(void)/檢查忙標志函數(shù)uchar dt;dodt=0 xff;E=0;RS=0;RW=1;E=1;dt=out;while(dt&0 x80);E=0;void write_command(uchar com) /寫命令函數(shù)check_busy();E=0;RS=0;RW=0;out=com;E=1;_nop_( );E=0;delay(1);void write_data(uchar dat) /寫數(shù)據(jù)函數(shù)ch
38、eck_busy();E=0;RS=1;RW=0;out=dat;E=1;_nop_();E=0;delay(1);void LCD_initial(void) /液晶顯示器初始化函數(shù)write_command(0 x38);/寫入命令0 x38:8位兩行顯示,57點陣字符write_command(0 x0C);/寫入命令0 x0C:開整體顯示,光標關,無黑塊write_command(0 x06);/寫入命令0 x06:光標右移write_command(0 x01); /寫入命令0 x01:清屏delay(1);/ 寫入字符串函數(shù)void LCD_Write_String(unsigne
39、d char x,unsigned char y,unsigned char *s) if (y = 0) write_command(0 x80 + x); /表示第一行else write_command(0 xC0 + x); /表示第二行 while (*s0) write_data( *s); s +; delay(1); #endifDS18B20模塊頭文件#ifndef _1802_H_#define _1802_H_#include #include /包含_nop_( )空函數(shù)指令的頭文件#define uchar unsigned char#define uint unsi
40、gned intvoid delay5(uchar);void init_ds18b20(void);uchar readbyte(void);void writebyte(uchar);uint retemp(void);void init_ds18b201(void);uchar readbyte1(void);void writebyte1(uchar);uint retemp1(void);void init_ds18b202(void);uchar readbyte2(void);void writebyte2(uchar);uint retemp2(void);void delay
41、5(uchar n) do _nop_(); _nop_(); _nop_(); n-; while(n);void init_ds18b20(void)/函數(shù)功能:18B20初始化 uchar x=0; DQ =0; delay5(120); DQ =1; delay5(16); delay5(80);uchar readbyte(void) /函數(shù)功能:讀取1字節(jié)數(shù)據(jù)uchar i=0;uchar date=0;for (i=8;i0;i-) DQ =0; delay5(1); DQ =1;/15s內(nèi)拉釋放總線 date=1; if(DQ) date|=0 x80; delay5(11);
42、 return(date);void writebyte(uchar dat) /函數(shù)功能:寫1字節(jié) uchar i=0; for(i=8;i0;i-) DQ =0; DQ =dat&0 x01;/寫1 在15s內(nèi)拉低 delay5(12); /寫0 拉低60s DQ = 1; dat=1; delay5(5); uint retemp(void)/函數(shù)功能:讀取溫度uchar a,b;uint t;init_ds18b20();writebyte(0 xCC); writebyte(0 x44);init_ds18b20();writebyte(0 xCC); writebyte(0 xBE
43、); a=readbyte();b=readbyte();t=b;t0;i-) DQ1 =0; delay5(1); DQ1 =1;/15s內(nèi)拉釋放總線 date1=1; if(DQ1) date1|=0 x80; delay5(11); return(date1);void writebyte1(uchar dat1) /函數(shù)功能:寫1字節(jié) uchar i=0; for(i=8;i0;i-) DQ1 =0; DQ1 =dat1&0 x01;/寫1 在15s內(nèi)拉低 delay5(12); /寫0 拉低60s DQ1 = 1; dat1=1; delay5(5); uint retemp1(vo
44、id)/函數(shù)功能:讀取溫度uchar c,d;uint t1;init_ds18b201();writebyte1(0 xCC); writebyte1(0 x44);init_ds18b201();writebyte1(0 xCC); writebyte1(0 xBE); c=readbyte1();d=readbyte1();t1=d;t10;i-) DQ2 =0; delay5(1); DQ2 =1;/15s內(nèi)拉釋放總線 date2=1; if(DQ2) date2|=0 x80; delay5(11); return(date2);void writebyte2(uchar dat2)
45、 /函數(shù)功能:寫1字節(jié) uchar i=0; for(i=8;i0;i-) DQ2 =0; DQ2 =dat2&0 x01;/寫1 在15s內(nèi)拉低 delay5(12); /寫0 拉低60s DQ2 = 1; dat2=1; delay5(5); uint retemp2(void)/函數(shù)功能:讀取溫度uchar e,f;uint t2;init_ds18b202();writebyte2(0 xCC); writebyte2(0 x44);init_ds18b202();writebyte2(0 xCC); writebyte2(0 xBE); e=readbyte2();f=readbyte2();t2=f;t2=8;t2=t2|e;return(t2);#endi37
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 110中國人民警察節(jié)(筑牢忠誠警魂感受別樣警彩)
- 2025正字當頭廉字入心爭當公安隊伍鐵軍
- XX國企干部警示教育片觀后感筑牢信仰之基堅守廉潔底線
- 2025做擔當時代大任的中國青年PPT青年思想教育微黨課
- 2025新年工作部署會圍繞六個干字提要求
- XX地區(qū)中小學期末考試經(jīng)驗總結(jié)(認真復習輕松應考)
- 支部書記上黨課筑牢清廉信念為高質(zhì)量發(fā)展營造風清氣正的環(huán)境
- 冬季消防安全知識培訓冬季用電防火安全
- 2025加強政治引領(政治引領是現(xiàn)代政黨的重要功能)
- 主播直播培訓直播技巧與方法
- 2025六廉六進持續(xù)涵養(yǎng)良好政治生態(tài)
- 員工職業(yè)生涯規(guī)劃方案制定個人職業(yè)生涯規(guī)劃
- 2024年XX地區(qū)黨建引領鄉(xiāng)村振興工作總結(jié)
- XX中小學期末考試經(jīng)驗總結(jié)(認真復習輕松應考)
- 幼兒園期末家長會長長的路慢慢地走