畢業(yè)設(shè)計(論文)-基于DS18B20的單片機(jī)設(shè)計(多點測溫).docx
《畢業(yè)設(shè)計(論文)-基于DS18B20的單片機(jī)設(shè)計(多點測溫).docx》由會員分享,可在線閱讀,更多相關(guān)《畢業(yè)設(shè)計(論文)-基于DS18B20的單片機(jī)設(shè)計(多點測溫).docx(37頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、目錄一、系統(tǒng)硬件部分設(shè)計21系統(tǒng)總體設(shè)計方案2(1)系統(tǒng)的技術(shù)指標(biāo)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)軟件部分設(shè)計81系統(tǒng)軟件設(shè)計方案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)硬件部分設(shè)計1系統(tǒng)總體設(shè)計方案 如圖1所示:圖1系統(tǒng)方案本設(shè)計目的在于通過測量溫度來判斷外部設(shè)備是否工作,以維持室溫的恒定,于是我們測溫模塊DS18B20來采集不同地方的溫度,通過單片機(jī)89C51來判斷溫度是否在設(shè)定范圍內(nèi),并輸出到顯示模塊LCD1602,顯示溫度數(shù)值。如果溫度在可控范圍內(nèi),LED燈將顯示正常工作,蜂鳴器不工作;如果溫度超過設(shè)定值,系統(tǒng)將驅(qū)動降溫模塊,電機(jī)將開始運轉(zhuǎn),LED燈顯示超溫工作,蜂鳴器報警;如果溫度低于設(shè)定值,系統(tǒng)將驅(qū)動升溫模塊,電阻絲將開始通電,將電能轉(zhuǎn)化成熱能
3、,LED燈將顯示紅色報警,蜂鳴器報警。(1)系統(tǒng)的技術(shù)指標(biāo)利用DS18B20和AT89C51設(shè)計一個溫度測量系統(tǒng),系統(tǒng)功能:實現(xiàn)三點溫度檢測,用LCD顯示溫度;溫度測量范圍:-55125,精度0.1。設(shè)定溫度上下限,當(dāng)溫度高于上限值或低于下限值時,系統(tǒng)能自動驅(qū)動降溫與升溫設(shè)備工作。(2)溫度測量方案由于多點溫度測量是本設(shè)計的主要內(nèi)容,所以溫度測量的精確非常重要,為了提高溫度測量匯總的準(zhǔn)確度,本設(shè)計采用了使用DS18B20溫度測量模塊直接對溫度進(jìn)行測量。然后將多個DS18B20溫度測量模塊得到的數(shù)據(jù)進(jìn)行采集,可以達(dá)到多點的溫度精確測量。DS18B20的64位ROM中存儲著器件獨一無二的序列號,緩
4、存器中包含兩字節(jié)的溫度寄存器,用于存儲溫度傳感器的數(shù)字輸出,緩存器中還提供一字節(jié)的上線警報觸發(fā)(TH)和下線警報觸發(fā)(TL)寄存器,和一字節(jié)的配置寄存器,使用者可以通過配置寄存器來設(shè)置溫度轉(zhuǎn)換的精度。緩存器的第五字節(jié)、第六字節(jié)和第七字節(jié)為器件內(nèi)部保留使用。第八字節(jié)含有循環(huán)冗余碼(CRC)。使用寄生電源時,DS18B20不需要額外的供電電源,當(dāng)總線為新電平時,功率由單總線上的上拉電阻通過DQ引腳提供;高電平總線信號同時也向內(nèi)部電容Cap充電,Cap在總線低電平時為器件供電。DS18B20中溫度數(shù)據(jù)是以帶符號位的16位補(bǔ)碼存儲在溫度寄存器中的,符號位說明溫度是正值還是負(fù)值,正值時,S=0;負(fù)值時,
5、S=1。DS18B20采用嚴(yán)格的單總線通信協(xié)議,以保證數(shù)據(jù)的完整性。該協(xié)議定義了6鐘信號類型,即復(fù)位脈沖、應(yīng)答脈沖、寫0、寫1、讀0和讀1.。除了應(yīng)答脈沖,所有這些信號都有主機(jī)發(fā)出同步信號??偩€上傳輸?shù)乃袛?shù)據(jù)和命令都是字節(jié)的低位在前。在寫時序開始后的1560us期間,DS18B20采樣總線的狀態(tài)。如果總線為高電平,則邏輯1被寫入DS18B20;如果總線為低電平,則邏輯0被寫入DS18B20.。每個讀時序均由主機(jī)發(fā)起,拉低總線至少1us。在主機(jī)發(fā)起讀時序后,DS18B20開始在總線上傳送0或1。若DS18B20發(fā)送1,則保持總線為高電平;若發(fā)送0,則拉低總線,當(dāng)傳送0時,DS18B20在該時序
6、結(jié)束時釋放總線,再由上拉電阻將總線拉回空閑狀態(tài)。DS18B20發(fā)出的數(shù)據(jù)在讀時序下降沿起始后的15us內(nèi)有效,因此主機(jī)必須在讀時序開始后的15us內(nèi)釋放總線,并采樣總線狀態(tài)。DS18B20在使用時,一般采用單片機(jī)來進(jìn)行數(shù)據(jù)采集。只需將DS18B20信號線與單片機(jī)一位I/O線相連,且單片機(jī)的一位I/O線可掛接多個DS18B20,從而實現(xiàn)多點溫度測量。(3)系統(tǒng)方案及元件的選擇機(jī)型的選擇,通過對系統(tǒng)大致程序的估計和系統(tǒng)工作速度的估計以及I/O口需求量的估計,考慮價格因素、元器件市場因素,選定AT89C51單片機(jī)作為系統(tǒng)的主要控制芯片。各種經(jīng)過DS18B20測量得到的溫度值的電信號都需要經(jīng)過LCD顯
7、示出來,考慮到被測量的有效位數(shù)及其富裕量,選擇LM016L液晶顯示模塊進(jìn)行顯示,由于需要顯示的數(shù)字較多,需要進(jìn)行排版處理,才能使得溫度值能夠更加直觀地顯示出來,選擇LM016L液晶顯示模塊進(jìn)行顯示排版。由于升溫和降溫時,需要進(jìn)行聲音報警和燈光報警,所以采用LED指示燈和蜂鳴器進(jìn)行報警提示。由于該電路的設(shè)計需要對升溫和降溫做出反應(yīng),在升溫時散熱,在降溫時發(fā)熱,所以采用電動機(jī)模塊和電阻絲模塊,在升溫時發(fā)電機(jī)啟動,帶動風(fēng)扇進(jìn)行散熱, 在降溫時電阻絲模塊接入電路,通過電流熱效應(yīng)進(jìn)行放熱。2系統(tǒng)的工作模塊(1)AT89C51芯片51 單片機(jī)是一塊芯片集成了 CPU、RAM、ROM、定時/計數(shù)器和多功能的
8、 I/O 口。 運算模塊由DS18B20、設(shè)備和顯示屏組成。 單片機(jī)通過對DS18B20輸入數(shù)據(jù)的處理,來判斷是否啟動設(shè)備。如果溫度超過所設(shè)置的上限值,單片機(jī)將在電機(jī)的輸出口置1,啟動電機(jī)散熱,同時高溫指示燈將亮起,蜂鳴器工作;如果溫度低于所設(shè)置的下限值,電阻絲工作供熱,低溫指示燈將亮起,蜂鳴器工作;在所設(shè)置的溫度范圍內(nèi),設(shè)備將不會工作,綠燈亮起。如圖2所示:圖2 AT89C51(2) LCD顯示本設(shè)計采用的是 LCD 液晶顯示輸出數(shù)據(jù)。液晶顯示器 LM016L 液晶顯示器 LCD液晶顯示模塊引出引腳標(biāo)號為D7.0、RS、RW、E,接入單片機(jī)引腳P07.0、P20、P21 、P22如圖3所示:
9、 圖3液晶顯示圖(3)溫度采集模塊本設(shè)計采用DS18B20模塊采集和輸送溫度,溫度采集模塊引出引腳標(biāo)號為DQ-A、DQ-B、DQ-C接入單片機(jī)引腳P35、P36、P37。連接方式如圖4所示: 圖4 DS18B20(4)聲光模塊LED指示燈LED指示燈是單片機(jī)系統(tǒng)中最常用的顯示設(shè)備,用戶可以根據(jù)指示燈的亮滅狀況判斷設(shè)備的工作狀態(tài)。指示燈需要完成的任務(wù)有:檢查設(shè)備的運行狀態(tài),如果設(shè)備沒啟動,則相應(yīng)的指示燈亮起,其他指示燈不工作;如果設(shè)備啟動,則相應(yīng)的指示燈亮起,其他不工作設(shè)備的指示燈熄滅,同時以不同顏色的指示燈來區(qū)別工作狀況,使用戶可以更加有順序和效率的操作設(shè)備。LED指示模塊引出引腳LED-A、
10、LED-B、LED-C、MOTOR-A、MOTOR-B、MOTOR-C、HEAT-A、HEAT-B、HEAT-C接入單片機(jī)引腳P24、P25、P26、P27、P30、P31、P32、P33、P34。如圖5所示。圖5 LED指示燈警報本設(shè)計采用揚聲器speaker警報模塊引出引腳BEE,接入單片機(jī)引腳P23連接方式如圖6所示:圖6蜂鳴器(5)驅(qū)動模塊電動機(jī)驅(qū)動電動機(jī)屬于強(qiáng)電設(shè)備,在弱電設(shè)備中無法應(yīng)用,所以電動機(jī)的驅(qū)動就需要使用繼電器,繼電器是弱電驅(qū)動強(qiáng)電的中間設(shè)備,單片機(jī)可以在繼電器的控制端輸入一個高電平信號,使繼電器的銜鐵吸和,從而啟動電動機(jī)。電動機(jī)驅(qū)動模塊引出引腳MOTOR-A、MOTOR-
11、B、MOTOR-C,接入單片機(jī)引腳P27、P30、P31。如圖7所示:圖7電動機(jī)的連接圖發(fā)熱電阻絲驅(qū)動發(fā)熱電阻絲的驅(qū)動原理同電動機(jī)的驅(qū)動一樣,利用繼電器使設(shè)備接入電源從而工作。電阻絲驅(qū)動模塊引出引腳HEAT-A、HEAT-B、HEAT-C,接入單片機(jī)引腳P32、P33、P34.如圖8所示:圖8電阻絲的連接圖3系統(tǒng)電路原理圖二、系統(tǒng)軟件部分設(shè)計1系統(tǒng)軟件設(shè)計方案(軟件流程圖)(1)主程序流程圖主程序通過對溫度采集模塊輸送的信息進(jìn)行處理,并在LCD顯示處理,如圖 9.圖9主程序流程圖(2)顯示模塊流程圖通過單片機(jī)向顯示模塊寫入命令和數(shù)據(jù),對顯示方式和顯示內(nèi)容作出選擇,如圖10.圖10顯示模塊流程圖
12、(3)溫度采集模塊流程圖DS18B20溫度采集模塊的工作時序包括:初始化時序、寫時序和讀時序,如圖11. 圖11溫度采集模塊流程圖2程序清單(見附錄二)三、系統(tǒng)仿真過程及結(jié)果1.Keil編譯及仿真將所編輯的C程序?qū)懭隟eil軟件,并運行仿真,所得程序編譯無誤,如圖12。圖12編譯程序截圖點擊軟件右上角的程序仿真按鈕,對所編譯成功的程序進(jìn)行仿真,結(jié)果如圖13。圖13運行程序截圖2.Proteus仿真接通電源開關(guān)后,仿真圖如圖14 15 16 17和18所示:LCD、DS18B20開始工作。DS18B20溫度數(shù)值為27.0、27.0、27.0LCD示數(shù)分別為27.0、27.0、27.0未超過溫度上
13、下限,電阻絲模塊、電動機(jī)模塊不工作,如圖14。圖14調(diào)整DS18B20感受到的溫度值為31.5、33.0、29.4LCD示數(shù)為31.5、33.0、29.4未超過溫度上下限,所以電動機(jī)模塊和電阻絲模塊都不動作,如圖15。圖15調(diào)整DS18B20溫度數(shù)值為31.5、33.0、40.9LCD顯示為31.5、33.0、40.9第三組溫度超過溫度上限,第三組對應(yīng)發(fā)動機(jī)模塊動作,電阻絲模塊不動做,如圖16。圖16調(diào)整DS18B20溫度數(shù)值分別為31.5、33.0、19.7,LCD顯示為31.5、33.0、19.7,由于第三組低于溫度下限,所以第三組對應(yīng)電阻絲模塊動作,電動機(jī)模塊不動作,如圖17。圖17調(diào)整
14、DS18B20溫度數(shù)值為39.7、39.0、20.0LCD顯示為39.7、39.0、20.0按住KM2按鈕,給B降溫未超過溫度上下限,但電動機(jī)模塊動作,電阻絲模塊沒有動作。圖18四、系統(tǒng)實物制作與調(diào)試1系統(tǒng)實物器件清單(見附錄一)2實物制作過程為了縮短開發(fā)周期,采用購買完整的單片機(jī)開發(fā)板進(jìn)行實驗,購買單片機(jī)開發(fā)板中只包含本實驗中的AT89C51芯片、AT89C51的周邊電路和電動機(jī)模塊和電阻絲模塊,為了完善開發(fā)元件,我們購買了LCD液晶顯示模塊,型號為LM016L、三塊DS18B20芯片和若干杜邦線。因為電動機(jī)模塊和電阻絲模塊并沒有與開發(fā)板直接相連,所以采用杜邦線將電動機(jī)模塊和電阻絲模塊與開發(fā)
15、板進(jìn)行連接,對照電路圖進(jìn)行完善連接。實物圖如圖19所示。圖193系統(tǒng)調(diào)試過程與功能實現(xiàn)(1)實驗中遇到的問題和解決方案實驗初期,按照實驗方案在溫度范圍內(nèi)的LED應(yīng)該點亮,仿真成功,但是應(yīng)用于實驗中的單片機(jī)開發(fā)板卻并沒成功,經(jīng)過多次更換LED之后依然無發(fā)點亮,通過與老師、同學(xué)的討論和分析,得出結(jié)論:在單片機(jī)開發(fā)板中使用的LED燈是共陽極連接的,所以實驗現(xiàn)象與仿真結(jié)果無法一致。硬件修改過于繁瑣,所以我們在軟件即程序語言上做了修改,原是“0”點亮的程序,我們改為“1”點亮,通過軟件即程序上的修改,我們達(dá)到了仿真結(jié)果。多次實驗以后,我們將位定義直接集中在端口頭文件,方便進(jìn)行調(diào)試。我們將三組溫度采集和處
16、理模塊的相似功能的程序進(jìn)行分組集成函數(shù)。通過AT89C51部分函數(shù)初始化程序,我們成功解決了無定義端口高電平影響實驗的問題。(2)系統(tǒng)的功能實現(xiàn)用手指握住B組DS18B20芯片加溫,LCD示數(shù)為B組25.5,A組19.3,C組19.3。其中A組與C組低于溫度下限,觸發(fā)對應(yīng)LED7、LED8,B組處于溫度范圍內(nèi),觸發(fā)對應(yīng)LED2。圖20使用加熱工具對B組DS18B20芯片進(jìn)行加熱,LCD示數(shù)如下:A組21.0,B組40,C組23.1攝氏度。其中B組超過溫度上限,觸發(fā)對應(yīng)LED5,A組C組處在溫度范圍內(nèi),觸發(fā)對應(yīng)LED1、LED3。五、心得體會:課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn)、提出、分析
17、和解決實際問題, 鍛煉實踐能力的重要環(huán)節(jié), 是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程。 隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計算機(jī)應(yīng)用中空前活躍的領(lǐng)域,在生活中可以說得是無處不在。因此作為自動化專業(yè)的學(xué)生來說掌握單片機(jī)的開發(fā)技術(shù)是十分重要的。我的題目是簡易計算器硬軟件的設(shè)計,對于我們這些工科學(xué)生來說,這是 一次考驗。怎么才能找到課堂所學(xué)與實際應(yīng)用的最佳結(jié)合點?怎樣讓自己的業(yè)余更接近專業(yè)?怎樣讓自己的計劃更具有序性,而不會忙無一用?這都是我們所要考慮和努力的。這次課程設(shè)計我學(xué)到很多很多的東西,學(xué)會了怎么樣去制定計劃,怎么樣去實現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒
18、。不僅鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識,掌握了一種系統(tǒng)的研究方法,可以進(jìn)行一些簡單的編程。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。 同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處, 對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,對單片機(jī)匯編語言掌握得不夠好。這次課程設(shè)計通過自己的努力,同學(xué)的幫助,網(wǎng)絡(luò)資料的收集,最終順利完成了。六、參考文件1 張毅剛. 單片機(jī)原理及應(yīng)用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); /檢查忙標(biāo)志函數(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)/檢查忙標(biāo)志函數(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:開整體顯示,光標(biāo)關(guān),無黑塊write_command(0 x06);/寫入命令0 x06:光標(biāo)右移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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 六級上冊科學(xué)ppt課件-誰選擇了它們-教科版
- 護(hù)理核心制度培訓(xùn)一_圖文課件
- 部編《池子與河流》課件
- SWOT分析法(非常全面)課件
- 主題班會我的成長目標(biāo)課件
- 城市交通擁堵及治理總結(jié)課件
- 輸血相關(guān)性急性肺損傷課件
- 議論文的謀篇布局與論點的提出ppt課件
- 六級上冊科學(xué)ppt課件-地球的近鄰——月球-冀人版
- 疾病預(yù)防、冬季保暖-課件
- 中考英語語法復(fù)習(xí)之狀語從句ppt課件集4
- 《百分?jǐn)?shù)的意義和讀寫》參考ppt課件
- 主題班會堅持就是勝利課件
- 第二章--用人單位對大學(xué)生的要求概況ppt課件
- 教科版六年級科學(xué)上冊第三單元檢測卷(含答案)課件