智能火災(zāi)報(bào)警系統(tǒng)的設(shè)計(jì)論文_第1頁
智能火災(zāi)報(bào)警系統(tǒng)的設(shè)計(jì)論文_第2頁
智能火災(zāi)報(bào)警系統(tǒng)的設(shè)計(jì)論文_第3頁
智能火災(zāi)報(bào)警系統(tǒng)的設(shè)計(jì)論文_第4頁
智能火災(zāi)報(bào)警系統(tǒng)的設(shè)計(jì)論文_第5頁
已閱讀5頁,還剩46頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

目錄TOC\o"1-3"\h\u27208摘要 ⑨可定義的非易失性溫度告警設(shè)置。(3)接口電路接口電路的電路圖如圖3.2.4所示圖3.2.4溫度傳感器接口電路圖DS18B20有六條控制命令:溫度轉(zhuǎn)換44H啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換、讀暫存器BEH讀暫存器9個(gè)字節(jié)內(nèi)容、寫暫存器4EH將數(shù)據(jù)寫入暫存器的TH、TL字節(jié)、復(fù)制暫存器48H把暫存器的TH、TL字節(jié)寫到E2RAM中、重新調(diào)E2RAMB8H把E2RAM中的TH、TL字節(jié)寫到暫存器TH、TL字節(jié)、讀電源供電方式B4H啟動(dòng)DS18B20發(fā)送電源供電方式的信號(hào)給主CPU【15】。DS18B20有兩種供電方式,一是用電源供電的方式,此時(shí)DS18B20的1腳接地、2腳為信號(hào)線、3腳來接電源。另一個(gè)是寄生電源的供電方式,單片機(jī)的端口接總線,為了保證在有效DS18B20的時(shí)鐘周期內(nèi)能提供足夠電流,可用一個(gè)三極管對(duì)總線進(jìn)行上拉。本設(shè)計(jì)用電源供電的方式。3.3顯示與報(bào)警電路3.3.1顯示電路圖3.3.1數(shù)碼管顯示顯示采用4位共陽數(shù)碼管,單片機(jī)控制數(shù)碼管顯示不同的四位數(shù)字,P2.0.P2.3選位,P0.0.P0.7選段,顯示電路如圖3.3.1。前兩位顯示煙霧濃度,可顯示范圍為0-9;后兩位顯示溫度值,可顯示范圍為0-99度。3.3.2報(bào)警電路電路通過三極管基極串連一個(gè)電阻與單片機(jī)P3.6端口連接從而達(dá)到控制喇叭是否報(bào)警。聲音報(bào)警電路圖如圖3.3.2所示。圖3.3.2聲音報(bào)警電路圖3.4按鍵控制及電源電路設(shè)計(jì)圖3.4消音按鍵連接電路圖本電路設(shè)計(jì)了四個(gè)按鍵,一個(gè)設(shè)置鍵、一個(gè)加鍵、一個(gè)減鍵、一個(gè)緊急報(bào)警鍵,當(dāng)遇到緊急情況時(shí),可按下緊急報(bào)警鍵,蜂鳴器進(jìn)行報(bào)警。如圖3.4所示供電方式可以用5V蓄電池為系統(tǒng)供電。蓄電池具有較強(qiáng)的電流驅(qū)動(dòng)能力以及穩(wěn)定的電壓輸出性能。但是蓄電池的體積過于龐大,在報(bào)警器上使用極為不方便。因此我們放棄了此方案。也可以用3節(jié)1.5V干電池共4.5V做電源,經(jīng)過實(shí)驗(yàn)驗(yàn)證系統(tǒng)工作時(shí),單片機(jī)、傳感器的工作電壓穩(wěn)定能夠滿足系統(tǒng)的要求,而且電池更換方便。本系統(tǒng)采用電池供電。電源接口電路如圖3.5,其中P1為電池接口,SW1為電源開關(guān)。D1為電源指示燈。圖3.5電源接口電路圖

4系統(tǒng)主程序設(shè)計(jì)及流程圖4.1主程序設(shè)計(jì)首先要給傳感器預(yù)熱,因?yàn)镸Q.2型半導(dǎo)體電阻式煙霧傳感器在不通電存放一段時(shí)間后,再次通電時(shí),傳感器不能立即正常采集煙霧信息,需要一段時(shí)間預(yù)熱。程序初始化結(jié)束后,系統(tǒng)進(jìn)入監(jiān)控狀態(tài)。主程序流程圖如下圖所示。程序初始化程序初始化傳感器預(yù)熱處理開始單片機(jī)處理,判斷否超過設(shè)定報(bào)警值A(chǔ)/D轉(zhuǎn)換進(jìn)入報(bào)警子程序信號(hào)采集YN 圖4.1主程序流程圖在整個(gè)報(bào)警系統(tǒng)工作中,煙霧濃度信息經(jīng)ADC0832轉(zhuǎn)換處理后,由單片機(jī)進(jìn)行分析處理,判斷系統(tǒng)是否啟動(dòng)報(bào)警。主程序還包括LED八段式數(shù)碼管濃度字符顯示功能、手動(dòng)報(bào)警功能、報(bào)警濃度設(shè)定功能,中斷子程序等,使報(bào)警器功能更加完善,更加方便。預(yù)熱后,程序就開始執(zhí)行初始化子程序,初始化實(shí)現(xiàn)的功能是I/O口輸入、輸出狀態(tài)設(shè)定,寄存器初始化,中斷功能等。首先,設(shè)定定時(shí)初值為50ms,利用IAP寫入EEPROM,作為取值間隔。然后,設(shè)置定時(shí)器0,選擇方式1。方式1狀態(tài)下,定時(shí)器的工作寄存器TH1、TL1,是全16位參與操作。接下來,定時(shí)器0中斷的允許位置1,打開定時(shí)器0,關(guān)閉蜂鳴器,開啟綠燈,設(shè)置報(bào)警限初值。4.2濾波子程序設(shè)計(jì)求2到9采樣值的和設(shè)置采樣次數(shù)N=10求2到9采樣值的和設(shè)置采樣次數(shù)N=10開始已采樣10次調(diào)用A/D采樣將10次采樣值排序值送入寄存器和除以8NY圖4.2濾波子程序流程路4.3線性化處理子程序設(shè)計(jì)在單片機(jī)測(cè)控系統(tǒng)中,使用之前必須進(jìn)行靜態(tài)標(biāo)定,以得到輸出信號(hào)與被測(cè)信號(hào)的關(guān)系輸出曲線,用來作為使用過程中的計(jì)量依據(jù)。但是標(biāo)定時(shí)輸出曲線往往不是一條理想的直線,所以要對(duì)標(biāo)定曲線進(jìn)行線性化處理,用一條擬合直線近似代替輸出曲線,線性化是智能儀表的典型功能之一。該報(bào)警器主要針對(duì)甲烷煙霧檢測(cè),在軟件線性化處理時(shí),以傳感器對(duì)甲烷的響應(yīng)曲線為依據(jù)。本論文報(bào)警器使用的MQ.2型傳感器的電阻是隨著煙霧濃的升高而降低的,因此輸入單片機(jī)的電壓也是隨之降低的。圖4.4為單片機(jī)采集電壓值與煙霧濃度百分比的對(duì)應(yīng)曲線,可以看出,電壓值與煙霧濃度之間是非線性的關(guān)系,為了實(shí)時(shí)顯示煙霧濃度.需要對(duì)其進(jìn)行線性化處理。在誤差許可范圍內(nèi),根據(jù)標(biāo)定曲線形狀,以及單片機(jī)處理能力,把曲線分成若干小段,對(duì)每小段分別線性化。返回上電狀態(tài)返回監(jiān)控狀態(tài)啟動(dòng)故障報(bào)警是否大于20%讀取處理后的空氣濃度值開始延遲20秒采集一組濃度數(shù)據(jù)是否大于20%傳感器故障自診斷返回上電狀態(tài)返回監(jiān)控狀態(tài)啟動(dòng)故障報(bào)警是否大于20%讀取處理后的空氣濃度值開始延遲20秒采集一組濃度數(shù)據(jù)是否大于20%傳感器故障自診斷傳感器有問題啟動(dòng)燃?xì)庑孤秷?bào)警消音鍵是否按下YNNYNY圖4.4報(bào)警子程序流程圖當(dāng)煙霧濃度超過報(bào)警設(shè)定值時(shí),報(bào)警器發(fā)出一種近似警笛的鳴叫聲,對(duì)應(yīng)通道的紅燈閃亮,以提示操作人員采取安全對(duì)策或自動(dòng)控制相關(guān)安全裝置,從而保障生產(chǎn)安全,避免火災(zāi)和爆炸事故的發(fā)生。為防止誤報(bào),在程序設(shè)計(jì)上,對(duì)煙霧濃度進(jìn)行快速重復(fù)檢測(cè)和延時(shí)報(bào)警,以區(qū)別出是管道中煙霧的泄漏,還是由于暫短打開閥門產(chǎn)生的可燃煙霧的微量散失,防止誤報(bào)。4.5控制按鍵設(shè)計(jì)子程序報(bào)警系統(tǒng)必須有控制按鈕,本設(shè)計(jì)采用自鎖復(fù)位開關(guān)調(diào)整設(shè)置值,從而達(dá)到超出設(shè)定值時(shí)報(bào)警功能,鍵盤處理子程序流程路如圖4.5所示提取鍵值提取鍵值結(jié)束調(diào)用鍵盤子程序是否有鍵按下延時(shí)10ms去抖動(dòng)是否有鍵按下掃描鍵值開始NYNY圖4.5鍵盤處理子程序流程圖

5硬件調(diào)試第一步是目測(cè),單片機(jī)應(yīng)用系統(tǒng)電路全部手工焊接在洞洞板上,因此對(duì)每一個(gè)焊點(diǎn)都要進(jìn)行仔細(xì)的檢查。檢查它是否有虛焊、是否有毛剌等。第二步是萬用表來測(cè)試,首先用萬用表來復(fù)核目測(cè)時(shí)可疑的連線或接點(diǎn),查看通斷狀態(tài),是否與設(shè)計(jì)是的規(guī)定相符,然后檢查電源線與地線間,是否有短路的現(xiàn)象。第三步是加電檢查。當(dāng)系統(tǒng)加電時(shí),先檢查全部插座或者器件引腳電源端,是否有符合的電壓值,接地端電壓值是否接近零,接固定電平的引腳端是否電平正確。第四步是聯(lián)機(jī)檢查。在對(duì)硬件電路調(diào)試過程中,還遇到了不少問題,第一次把所有的元件都焊上去后,都準(zhǔn)備調(diào)試了,才發(fā)現(xiàn)正負(fù)極的插針離得太近了,不容易接電源,本不該犯的錯(cuò)誤,這些都是由于自己的粗心大意造成的,所以說,做任何事情都必需經(jīng)過“三思而后行”,來不得半點(diǎn)的馬虎,否則浪費(fèi)了時(shí)間和精力。實(shí)物實(shí)現(xiàn)的功能有:可設(shè)置煙霧濃度和高溫報(bào)警值,可緊急報(bào)警和手動(dòng)取消緊急報(bào)警功能,當(dāng)有特殊情況時(shí)可按緊急報(bào)警鍵報(bào)警,并有掉電保存功能,設(shè)置的參數(shù)保存在單片機(jī)內(nèi)部EEPOM中。當(dāng)煙霧傳感器檢測(cè)到火災(zāi)釋放的煙霧時(shí),信號(hào)由ADC0832進(jìn)行處理模數(shù)轉(zhuǎn)化再到單片機(jī)進(jìn)行處理,當(dāng)檢測(cè)到濃度超標(biāo)時(shí),蜂鳴器會(huì)發(fā)出滴滴的報(bào)警聲。同時(shí),此系統(tǒng)還可以檢測(cè)溫度,火災(zāi)發(fā)生往往環(huán)境溫度會(huì)升高。到檢測(cè)到溫度超過設(shè)定的報(bào)警溫度時(shí)候,蜂鳴器也將產(chǎn)生報(bào)警,系統(tǒng)的按鍵還具有連加、減功能,操作起來非常方便,系統(tǒng)還能夠在進(jìn)入設(shè)置界面后,如果沒有按鍵按下30秒后會(huì)自動(dòng)退出設(shè)置界面。經(jīng)過調(diào)測(cè),該實(shí)物符合設(shè)計(jì)要求,能實(shí)現(xiàn)火災(zāi)報(bào)警功能。當(dāng)設(shè)置煙霧濃度上限為4,溫度上限為33度時(shí),只要超過煙霧濃度或者溫度之一時(shí),系統(tǒng)就會(huì)報(bào)警。

結(jié)論本論文在對(duì)煙霧傳感器和報(bào)警技術(shù)進(jìn)行深入研究的基礎(chǔ)上,全面比較國(guó)內(nèi)外同類產(chǎn)品的技術(shù)特點(diǎn),合理地確定系統(tǒng)的設(shè)計(jì)方案。并對(duì)儀器的整體設(shè)計(jì)和各個(gè)組成部分進(jìn)行了詳細(xì)的分析和設(shè)計(jì)。本論文設(shè)計(jì)的煙霧報(bào)警器由煙霧信號(hào)采集電路與單片機(jī)控制電路兩大部分構(gòu)成。根據(jù)設(shè)計(jì)要求、使用環(huán)境、成本等因素,選用MQ.2型半導(dǎo)體電阻式煙霧傳感器。該傳感器是對(duì)以烷類煙霧為主的多種煙霧有良好敏感特性的廣譜型半導(dǎo)體敏感器件。它的靈敏度適中,具有響應(yīng)與恢復(fù)特性好,長(zhǎng)期工作穩(wěn)定性、重現(xiàn)性、不易受環(huán)境影響及抗溫濕度影響等優(yōu)點(diǎn)。在系統(tǒng)單片機(jī)控制電路的設(shè)計(jì)上,采用了高性能、高整合度的STC89C52單片機(jī)作為核心芯片,充分利用了其高速數(shù)據(jù)處理能力和豐富的片內(nèi)外設(shè),實(shí)現(xiàn)了儀器的小型化和智能化。使儀器具有結(jié)構(gòu)簡(jiǎn)單、性能穩(wěn)定、體積小、成本低等優(yōu)點(diǎn)。由于煙霧傳感器需要在加熱狀態(tài)下工作,溫度越高,反應(yīng)越快,響應(yīng)時(shí)間和恢復(fù)時(shí)間就越快。為提高響應(yīng)時(shí)伺,保證傳感器準(zhǔn)確地、穩(wěn)定地工作,需要向煙霧傳感器持續(xù)供給5V的加熱電壓。煙霧報(bào)警器能在較寬的溫度范圍工作,可將煙霧濃度顯示用LED數(shù)碼管顯示。當(dāng)煙霧的濃度達(dá)到設(shè)定的濃度時(shí),發(fā)出報(bào)警。通過現(xiàn)場(chǎng)標(biāo)定及測(cè)試,分析煙霧濃度信號(hào)的實(shí)驗(yàn)數(shù)據(jù),計(jì)算本報(bào)警器顯示煙霧濃度與實(shí)際濃度之間的誤差為2.55%LEL,在所規(guī)定誤差范圍±5%LEL之內(nèi),滿足檢測(cè)要求,達(dá)到了預(yù)期的設(shè)計(jì)效果的結(jié)論。到目前為止我的畢業(yè)設(shè)計(jì)也即將告一段落了,在這次的畢業(yè)設(shè)計(jì)中,自己也學(xué)習(xí)到了很多以前沒有沒有經(jīng)歷過的知識(shí),讓我更加清楚了理論知識(shí)和實(shí)踐能力的差別了,了解到自己的短處,培養(yǎng)了我的獨(dú)立思考能力,進(jìn)一步提高了自己在實(shí)際設(shè)計(jì)過程中研究問題、發(fā)現(xiàn)問題、解決問題的能力,同時(shí),也發(fā)現(xiàn)了自己的不足之處,和一些問題的存在,并有待進(jìn)一步學(xué)習(xí)和發(fā)展,讓自己在未來的工作和學(xué)習(xí)之中更快的適應(yīng)和提高自己。致謝在完成本設(shè)計(jì)的寫作過程中,我十分感謝我的指導(dǎo)老師。從選題到完成設(shè)計(jì),老師一直都是很悉心的給我講解著在設(shè)計(jì)中遇到的各種問題,循循善誘,嚴(yán)格把關(guān),幫助我開拓設(shè)計(jì)思路,并不斷地鼓舞著我,使我感到信心倍增,讓我非常積極地投入到設(shè)計(jì)中,不斷地完成設(shè)計(jì)中的一個(gè)個(gè)部分。在此,再次感謝老師在設(shè)計(jì)上不斷地給與我?guī)椭屛以诖髮W(xué)里的最后一次的學(xué)習(xí)過程中,充分感受到了自己對(duì)學(xué)習(xí)的興趣和熱情,使我能夠圓滿地完成自己的畢業(yè)設(shè)計(jì)。回想大學(xué)四年的時(shí)光,仿佛盡在昨天。最后,我還要感謝在我大學(xué)四年的學(xué)習(xí)期間給我極大關(guān)心和支持的家人、各位老師以及我的同學(xué)和朋友。是你們?cè)谏詈蛯W(xué)習(xí)上不斷給與我支持、幫助和無微不至的關(guān)懷,是你們不斷地給與了我信心,讓我在人生中一次次堅(jiān)強(qiáng)地走下去。

參考文獻(xiàn)[1]李華.MCS一52系列單片機(jī)實(shí)用接口技術(shù).北京航空航天大學(xué)出版社.[2]張毅坤等.單片微型計(jì)算機(jī)原理及應(yīng)用.西安電子科技大學(xué)出版社.2006.[3]潘新民等.微型計(jì)算機(jī)控制技術(shù).電子工業(yè)科技大學(xué)出版社.2003.[4]偉.MCS一52系列單片機(jī)實(shí)用子程序集錦.清華大學(xué)出版社.1993.[5]吳佑壽.LabVIEW7實(shí)用教程.電子工業(yè)出版社.2007.[6]朱明程等.一氧化碳傳感器MGS1100原理及應(yīng)用電子技術(shù).1998年第1期.[7]劉迎春.傳感器原理設(shè)計(jì)及應(yīng)用.哈爾濱工業(yè)大學(xué)出社.[8]趙負(fù)圖.數(shù)據(jù)采集與控制系統(tǒng).北京科學(xué)技術(shù)出社.1987.[9]王若鯨.數(shù)據(jù)通信系統(tǒng)入門.人民郵電出版社.1984.[10]肖忠祥主編.數(shù)據(jù)采集原理.西北工業(yè)大學(xué)出版社.2003[11]劉廣玉.新型傳感器技術(shù)及應(yīng)用.北京航空航天大學(xué)出版社.1989.[12]張毅剛.MCS一52單片機(jī)應(yīng)用設(shè)計(jì).1990.[13]陳偉.MCS一52系列單片機(jī)實(shí)用子程序集錦.清華大學(xué)出版社.1993.[14]何立民.單片機(jī)實(shí)用文集.北京航空航天大學(xué)出版.1993.[15]余成波.傳感器與自動(dòng)檢測(cè)技術(shù).高等教育出版社.2004.附錄1:總體原理圖設(shè)計(jì)附錄2:元器件清單元器件規(guī)格名稱數(shù)量AD采集芯片ADC083211蜂鳴器蜂鳴器B11電容10uFC11電容20pFC2,C32電源指示燈DD11數(shù)碼管DS04DS11電源接口Header2P11三極管8550Q1,Q2,Q3,Q44三極管8550Q51電阻200R1,R6,R7,R8,R9,R10,R11,R128電阻2KR2,R3,R4,R5,R135電阻1KR14,R182電阻10KR15,R162電阻4.7R171獨(dú)立按鍵SW-PBS1,S2,S3,S4,S55電源開關(guān)sw-灰色SW11單片機(jī)U1U11煙物傳感器煙物傳感器1溫度傳感器DS18B20U31晶振12MY11附錄3:PCB圖附錄4:實(shí)物圖

附錄5:部分程序源代碼#include<reg52.h>#include"eepom52.h"#defineucharunsignedchar#defineuintunsignedint#include<intrins.h>//數(shù)碼管段選定義012345 6 7 8 9 ucharcodesmg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //斷碼//數(shù)碼管位選定義ucharcodesmg_we[]={0x7f,0xbf,0xdf,0xef};//ucharcodesmg_we[]={0xfe,0xfd,0xfb,0xf7};uchardis_smg[8]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8}; ucharsmg_i=3;//顯示數(shù)碼管的個(gè)位數(shù)sbitSCL=P3^4; //SCL定義為P1口的第3位腳,連接ADC0832SCL腳sbitDO=P3^3; //DO定義為P1口的第4位腳,連接ADC0832DO腳sbitCS=P3^2; //CS定義為P1口的第4位腳,連接ADC0832CS腳sbitdq=P3^5; //18b20IO口的定義sbitbeep=P3^6;//蜂鳴器IO口定義uinttemperature,s_temp;//溫度的變量uchardengji,s_dengji;//煙物等級(jí)ucharshoudong;//手動(dòng)報(bào)警鍵uinthuoyan;bitflag_300ms;ucharkey_can; //按鍵值的變量ucharmenu_1;//菜單設(shè)計(jì)的變量bitflag_lj_en; //按鍵連加使能bitflag_lj_3_en; //按鍵連3次連加后使能加的數(shù)就越大了ucharkey_time,flag_value;//用做連加的中間變量bitkey_500ms;ucharflag_clock;ucharzd_break_en,zd_break_value;//自動(dòng)退出設(shè)置界面uchara_a;/***********************1ms延時(shí)函數(shù)*****************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}/***********************小延時(shí)函數(shù)*****************************/voiddelay_uint(uintq){ while(q..);}/******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eepom中******************/voidwrite_eepom(){ SectorErase(0x2000); byte_write(0x2000,s_temp); byte_write(0x2001,s_dengji); byte_write(0x2060,a_a); }/******************把數(shù)據(jù)從單片機(jī)內(nèi)部eepom中讀出來*****************/voidread_eepom(){ s_temp=byte_read(0x2000); s_dengji=byte_read(0x2001); a_a=byte_read(0x2060);}/**************開機(jī)自檢eepom初始化*****************/voidinit_eepom(){ read_eepom(); //先讀 if(a_a!=1) //新的單片機(jī)初始單片機(jī)內(nèi)問EEPOM { s_temp=50; s_dengji=5; a_a=1; write_eepom(); } }/***********************18b20初始化函數(shù)*****************************/voidinit_18b20(){ bitq; dq=1; //把總線拿高 delay_uint(1); //15us dq=0; //給復(fù)位脈沖 delay_uint(80); //750us dq=1; //把總線拿高等待 delay_uint(10); //110us q=dq; //讀取18b20初始化信號(hào) delay_uint(20); //200us dq=1; //把總線拿高釋放總線}/*************寫18b20內(nèi)的數(shù)據(jù)***************/voidwrite_18b20(uchardat){ uchari; for(i=0;i<8;i++) { //寫數(shù)據(jù)是低位開始 dq=0; //把總線拿低寫時(shí)間隙開始 dq=dat&0x01;//向18b20總線寫數(shù)據(jù)了 delay_uint(5); //60us dq=1; //釋放總線 dat>>=1; } }/*************讀取18b20內(nèi)的數(shù)據(jù)***************/ucharread_18b20(){ uchari,value; for(i=0;i<8;i++) { dq=0; //把總線拿低讀時(shí)間隙開始 value>>=1; //讀數(shù)據(jù)是低位開始 dq=1; //釋放總線 if(dq==1) //開始讀寫數(shù)據(jù) value|=0x80; delay_uint(5); //60us 讀一個(gè)時(shí)間隙最少要保持60us的時(shí)間 } returnvalue; //返回?cái)?shù)據(jù)}/*************讀取溫度的值讀出來的是小數(shù)***************/uintread_temp(){ uintvalue; ucharlow; //在讀取溫度的時(shí)候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否則會(huì)影響到18b20的時(shí)序 init_18b20(); //初始化18b20 write_18b20(0xcc); //跳過64位ROM write_18b20(0x44); //啟動(dòng)一次溫度轉(zhuǎn)換命令 delay_uint(50); //500us init_18b20(); //初始化18b20 write_18b20(0xcc); //跳過64位ROM write_18b20(0xbe); //發(fā)出讀取暫存器命令 EA=0; low=read_18b20(); //讀溫度低字節(jié) value=read_18b20();//讀溫度高字節(jié) EA=1; value<<=8; //把溫度的高位左移8位 value|=low; //把讀出的溫度低位放到value的低八位中 value*=0.0625; //轉(zhuǎn)換到溫度值 returnvalue; //返回讀出的溫度}/***********讀數(shù)模轉(zhuǎn)換數(shù)據(jù)********************************************************/ //請(qǐng)先了解ADC0832模數(shù)轉(zhuǎn)換的串行協(xié)議,再來讀本函數(shù),主要是對(duì)應(yīng)時(shí)序圖來理解,本函數(shù)是模擬0832的串行協(xié)議進(jìn)行的 //100通道 //111通道unsignedcharad0832read(bitSGL,bitODD){ unsignedchari=0,value=0,value1=0; SCL=0; DO=1; CS=0; //開始 SCL=1; //第一個(gè)上升沿 SCL=0; DO=SGL; SCL=1; //第二個(gè)上升沿 SCL=0; DO=ODD; SCL=1; //第三個(gè)上升沿 SCL=0; //第三個(gè)下降沿 DO=1; for(i=0;i<8;i++) { SCL=1; SCL=0;//開始從第四個(gè)下降沿接收數(shù)據(jù) value<<=1; if(DO) value++; } for(i=0;i<8;i++) { //接收校驗(yàn)數(shù)據(jù) value1>>=1; if(DO) value1+=0x80; SCL=1; SCL=0; } CS=1; SCL=1; if(value==value1) //與校驗(yàn)數(shù)據(jù)比較,正確就返回?cái)?shù)據(jù),否則返回0 returnvalue; return0;}/***********************數(shù)碼顯示函數(shù)*****************************/voiddisplay(){ uchari; for(i=0;i<smg_i;i++) { P2=smg_we[i]; //位選 P1=dis_smg[i]; //段選 delay_1ms(1); P1=0xff; //消隱 P2=0xff; //位選 } }/*************定時(shí)器0初始化程序***************/voidtime_init() { EA=1; //開總中斷 TMOD=0X01; //定時(shí)器0、定時(shí)器1工作方式1 ET0=1; //開定時(shí)器0中斷 TR0=1; //允許定時(shí)器0定時(shí)}/****************按鍵處理數(shù)碼管顯示函數(shù)***************/voidkey_with(){ if(key_can==4) //緊急報(bào)警鍵手動(dòng)報(bào)警 { if(menu_1==0) shoudong=1; } if(key_can==1) //設(shè)置鍵 { menu_1++; if(menu_1>=3) { menu_1=0; } if(menu_1==0) { dis_smg[0]=smg_du[temperature%10]; //取溫度的個(gè)位數(shù)顯示 dis_smg[1]=smg_du[temperature/10%10];//取溫度的十位顯示 smg_i=3; } if(menu_1==1) { dis_smg[0]=smg_du[s_temp%10]; //取個(gè)位顯示 dis_smg[1]=smg_du[s_temp/10%10];//取十位顯示 dis_smg[2]=0xbf; dis_smg[3]=smg_du[10]; //顯示A smg_i=4; } if(menu_1==2) { dis_smg[0]=smg_du[s_dengji%10]; //取個(gè)位顯示 dis_smg[1]=0xbf; dis_smg[2]=0xbf; dis_smg[3]=smg_du[11]; //顯示B smg_i=4; } } if(menu_1==0) { if((key_can==2)||(key_can==3)) shoudong=0;//取消手動(dòng)報(bào)警 } if(menu_1==1) //設(shè)置高溫報(bào)警 { if(key_can==2) { if(flag_lj_3_en==0) s_temp++; //按鍵按下未松開自動(dòng)加三次 else s_temp+=10; //按鍵按下未松開自動(dòng)加三次之后每次自動(dòng)加10 if(s_temp>99) s_temp=99; dis_smg[0]=smg_du[s_temp%10]; //取個(gè)位顯示 dis_smg[1]=smg_du[s_temp/10%10];//取十位顯示 dis_smg[2]=0xbf; dis_smg[3]=smg_du[10]; //顯示A } if(key_can==3) { if(flag_lj_3_en==0) s_temp..; //按鍵按下未松開自動(dòng)加三次 else s_temp.=10; //按鍵按下未松開自動(dòng)減三次之后每次自動(dòng)減10 if(s_temp<=10) s_temp=10; dis_smg[0]=smg_du[s_temp%10]; //取個(gè)位顯示 dis_smg[1]=smg_du[s_temp/10%10];//取十位顯示 dis_smg[2]=0xbf; dis_smg[3]=smg_du[10]; //顯示A } } if(menu_1==2) //設(shè)置低溫報(bào)警 { if(key_can==2) { if(flag_lj_3_en==0) s_dengji++; else s_dengji++; if(s_dengji>=9) s_dengji=9; dis_smg[0]=smg_du[s_dengji%10]; //取個(gè)位顯示 dis_smg[1]=0xbf; dis_smg[2]=0xbf; dis_smg[3]=smg_du[11]; //顯示B } if(key_can==3) { if(flag_lj_3_en==0) s_dengji..; else s_dengji..; if(s_dengji<=1) s_dengji=1; dis_smg[0]=smg_du[s_dengji%10]; //取個(gè)位顯示 dis_smg[1]=0xbf; dis_smg[2]=0xbf; dis_smg[3]=smg_du[11]; //顯示B } } }/****************獨(dú)立按鍵處理函數(shù)************************/voidkey(){ staticucharkey_new=0,key_old=0,key_value=0; if(key_new==0) { //按鍵松開的時(shí)候做松手檢測(cè) if((P2&0x0f)==0x0f) key_value++; else key_value=0; if(key_value>=5) { write_eepom(); key_value=0; key_time=0; key_new=1; flag_lj_en=0; //關(guān)閉連加使能 flag_lj_3_en=0; //關(guān)閉3秒后使能 flag_value=0; //清零 } } else { if((P2&0x0f)!=0x0f) key_value++;//按鍵按下的時(shí)候 else key_value=0; if(key_value>=5) { key_value=0; key_new=0; flag_lj_en=1; //連加使能 zd_break_en=1;//自動(dòng)退出設(shè)置界使能 zd_break_value=0;//自動(dòng)退出設(shè)置界變量清零 } } key_can=20; if(key_500ms==1) { key_500ms=0; zd_break_en=1;//自動(dòng)退出設(shè)置界使能 zd_break_value=0;//自動(dòng)退出設(shè)置界變量清零 key_new=0; key_old=1; } if((key_new==0)&&(key_old==1)) { switch(P2&0x0f) { case0x0e:key_can=4;break; //得到k1鍵值 case0x0d:key_can=3;break; //得到k2鍵值 case0x0b:key_can=2;break; //得到k3鍵值 case0x07:key_can=1;break; //得到k4鍵值 } } key_old=key_new; }/****************報(bào)警函數(shù)***************/voidclock_h_l(){ staticucharvalue; if((dengji>=s_dengji)||(temperature>=s_temp)||(shoudong==1)) //報(bào)警 { value++; if(value>=3) { value=10; beep=~beep; //蜂鳴器報(bào)警 } }else { if((dengji<s_dengji)&&(temperature<(s_temp.1))&&(shoudong==0)) //取消報(bào)警 { value=0; beep=1; } }}voidmain(){ staticucharvalue; temperature=read_temp();//讀取溫度值 init_eepom(); //讀eepom數(shù)據(jù) time_init(); //初始化定時(shí)器 delay_1ms(650); while(1) { key(); //獨(dú)立按鍵程序 if(key_can

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論