找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 40136|回復(fù): 2
收起左側(cè)

基于STC89C52的MQ-2火災(zāi)自動(dòng)報(bào)警系統(tǒng)的設(shè)計(jì)與開發(fā)

[復(fù)制鏈接]
ID:424012 發(fā)表于 2018-11-10 12:19 | 顯示全部樓層 |閱讀模式
摘要: 隨著社會(huì)和經(jīng)濟(jì)的發(fā)展,防火工作越來(lái)越重要,但是目前國(guó)內(nèi)的許多研發(fā)都側(cè)重于大型場(chǎng)所的火災(zāi)報(bào)警。因此,有必要研制一種結(jié)構(gòu)簡(jiǎn)單、經(jīng)濟(jì)實(shí)用的家庭煙霧報(bào)警器以適應(yīng)市場(chǎng)的需求;诠┘彝ナ褂玫臒熿F報(bào)警器應(yīng)該具備的基本要求和功能,設(shè)計(jì)了一種比較適合的煙霧報(bào)警器。

本設(shè)計(jì)以傳感器和單片機(jī)作為煙霧報(bào)警器設(shè)計(jì)的核心器件,配合其它器件即可實(shí)現(xiàn)聲光報(bào)警、自動(dòng)排煙換氣和消防滅火等功能。設(shè)計(jì)中單片機(jī)選用STC89C52作為控制器件,傳感器選用MQ-2型半導(dǎo)體可燃?xì)怏w敏感元件煙霧傳感器實(shí)現(xiàn)煙霧的檢測(cè)。煙霧報(bào)警器主要由煙霧信號(hào)采集及前置放大電路、模數(shù)轉(zhuǎn)換電路、單片機(jī)控制電路、顯示電路、聲光報(bào)警電路和安全保護(hù)電路構(gòu)成,設(shè)計(jì)合理、簡(jiǎn)單易懂、價(jià)格低廉,使單片機(jī)在煙霧報(bào)警系統(tǒng)的控制中得到充分應(yīng)用,具有一定的實(shí)用價(jià)值。論文主要針對(duì)煙霧報(bào)警系統(tǒng)中的各個(gè)組成部分及功能進(jìn)行了詳細(xì)的介紹和說(shuō)明,并對(duì)其主控電路和外圍設(shè)備電路之間的接口連接方式,以及系統(tǒng)軟件設(shè)計(jì)進(jìn)行了重點(diǎn)的分析和講解。

目錄
1 緒論
1.1 選題背景與研究現(xiàn)狀            
2 設(shè)計(jì)思路與方案的選擇
2.1 整體設(shè)計(jì)思路
2.2 設(shè)計(jì)方案的選擇
2.2.1 煙霧檢測(cè)傳感器選型
2.2.3 溫度采集模塊            
3 系統(tǒng)概述與硬件方案的設(shè)計(jì)
3.1 系統(tǒng)總體框架
3.2 電源模塊
3.3 單片機(jī)最小系統(tǒng)
3.4 單片機(jī)的時(shí)鐘電路與復(fù)位電路設(shè)計(jì)
3.5 OLED顯示模塊
3.6 聲音報(bào)警模塊
3.7 按鍵控制模塊
3.8 DS18B20接口電路
4 系統(tǒng)軟件方案的設(shè)計(jì)
4.1系統(tǒng)主程序設(shè)計(jì)及流程圖
5 系統(tǒng)調(diào)試、測(cè)試與分析
5.1 硬件調(diào)試
5.2 軟件調(diào)試
6 結(jié)束語(yǔ)
致謝
參考文獻(xiàn)
附錄1 系統(tǒng)部分程序:
附錄2 系統(tǒng)原理圖:
附錄3 系統(tǒng)PCB圖:
附錄4 系統(tǒng)實(shí)物圖:

1 緒論   
1.1 選題背景與研究現(xiàn)狀

隨著科技的發(fā)展,越來(lái)越多的火災(zāi)隱患潛伏在工業(yè)生產(chǎn)和人們的日常生活中;馂(zāi)一旦發(fā)生便是一場(chǎng)巨大的災(zāi)難,很有可能造成巨大的經(jīng)濟(jì)損失,甚至危及個(gè)人的生命安全。在早期時(shí)候,防止和發(fā)現(xiàn)火災(zāi),保護(hù)人身和財(cái)產(chǎn)安全,減少經(jīng)濟(jì)損失,是必須要做的一個(gè)重要事情。

所以為了減少這類事故的發(fā)生,就必須對(duì)煙霧進(jìn)行現(xiàn)場(chǎng)實(shí)時(shí)檢測(cè),采用先進(jìn)可靠的安全檢測(cè)儀表,用來(lái)嚴(yán)密監(jiān)測(cè)環(huán)境中煙霧的濃度,采取有效措施,及早發(fā)現(xiàn)事故隱患,避免事故發(fā)生,才能確保工業(yè)安全和家庭生活安全。因此,研究煙霧的檢測(cè)方法與研制煙霧報(bào)警器就成為傳感器技術(shù)發(fā)展領(lǐng)域的一個(gè)重要課題。   

國(guó)外從20世紀(jì)30年代開始研究及開發(fā)煙霧傳感器,且發(fā)展迅速,一方面是因?yàn)槿藗儼踩庾R(shí)增強(qiáng),對(duì)環(huán)境安全性和生活舒適性要求提高;另一方面是因?yàn)閭鞲衅魇袌?chǎng)增長(zhǎng)受到政府安全法規(guī)的推動(dòng)。據(jù)有關(guān)統(tǒng)計(jì),美國(guó)1996年~2002年煙霧傳感器年均增長(zhǎng)率為27%~30%[1]。隨著傳感器生產(chǎn)工藝水平逐步提高,傳感器日益小型化、集成度不斷增大,使得煙霧檢測(cè)儀器的體積也逐漸變小,提高了煙霧檢測(cè)儀器的便攜性,更加利于生產(chǎn)、運(yùn)輸及市場(chǎng)推廣。

1963年5月,日本開發(fā)完成第一臺(tái)接觸燃燒式家用燃?xì)庑孤﹫?bào)警器,次年12月其改良產(chǎn)品問(wèn)世,改良的報(bào)警器可以檢測(cè)燃?xì)、一氧化碳等氣體,可以安裝在浴室或者采用集中監(jiān)視[2]。              

我國(guó)在70年代初期就已經(jīng)開始了對(duì)煙霧報(bào)警器研究,一方面是由于社會(huì)的需要,另外一方面也為了減少國(guó)家的經(jīng)濟(jì)損失,在生產(chǎn)的過(guò)程中,生產(chǎn)型號(hào)多樣化、品種也比較齊全,應(yīng)用范圍從開始單一的煉油系統(tǒng)到后面擴(kuò)展到幾乎所有危險(xiǎn)作業(yè)環(huán)境的各種類型報(bào)警器,囊括的種類極其之多,產(chǎn)品數(shù)量也在不斷增加。不過(guò)從發(fā)展的角度來(lái)看,我們大都是在引進(jìn)國(guó)外先進(jìn)的傳感器技術(shù),并且在國(guó)外先進(jìn)的生產(chǎn)工藝基礎(chǔ)之上,對(duì)其進(jìn)行研究從而大力開發(fā)屬于自己的特色火災(zāi)報(bào)警器。隨著國(guó)家的大力發(fā)展,近年來(lái),我國(guó)在煙霧選擇性和產(chǎn)品穩(wěn)定性上都有很大進(jìn)步[3]。

2 設(shè)計(jì)思路與方案的選擇   
2.1 整體設(shè)計(jì)思路

   本次設(shè)計(jì)是基于STC89C52的煙霧報(bào)警器,能夠檢測(cè)環(huán)境中的煙霧濃度,并具有報(bào)警功能。該報(bào)警系統(tǒng)的最基本組成部分應(yīng)包括:信號(hào)采集模數(shù)轉(zhuǎn)換電路、單片機(jī)控制電路、字符顯示電路、聲光報(bào)警電路和安全保護(hù)電路等部分[2]。設(shè)計(jì)的煙霧報(bào)警器具有顯示報(bào)警狀態(tài),為適應(yīng)家庭和工業(yè)等場(chǎng)所對(duì)可燃性易爆煙霧安全性等要求。報(bào)警器以STC89C52單片機(jī)為控制核心,延時(shí)的工作方式,選用MQ-2半導(dǎo)體氣體煙霧傳感器,用來(lái)采集煙霧濃度信息,配合外圍電路以構(gòu)成煙霧報(bào)警系統(tǒng),從而達(dá)到自己設(shè)計(jì)的目的。

本設(shè)計(jì)對(duì)系統(tǒng)進(jìn)行一個(gè)整體規(guī)劃,還有結(jié)構(gòu)設(shè)計(jì),以STC89C52單片機(jī)為中央處理器,對(duì)硬件電路進(jìn)行設(shè)計(jì)和改進(jìn),使其功能更加完善。系統(tǒng)模塊分為軟件和硬件兩個(gè)部分。系統(tǒng)硬件電路主要分為數(shù)碼管顯示電路、狀態(tài)指示燈電路、聲音報(bào)警電路、數(shù)據(jù)收集等四大部分。 系統(tǒng)的軟件編制的分類,按照軟件實(shí)現(xiàn)的功能,主要分為主程序、報(bào)警子程序、初始化子程序、報(bào)警限值設(shè)置子程序、濃度顯示子程序等程序內(nèi)容。在程序的編寫過(guò)程中,同時(shí)又加入了詳細(xì)的文字注釋,以便于后期的修改與維護(hù)。

2.2 設(shè)計(jì)方案的選擇    2.2.1 煙霧檢測(cè)傳感器選型

1煙霧傳感器內(nèi)部結(jié)構(gòu)圖

煙霧傳感器是測(cè)量裝置和控制系統(tǒng)的首要環(huán)節(jié)。而煙霧報(bào)警器的信號(hào)采集由煙霧傳感器負(fù)責(zé)。煙霧傳感器能夠?qū)怏w的種類及其濃度有關(guān)的信息轉(zhuǎn)換為電信號(hào),根據(jù)這些電信號(hào)的強(qiáng)弱就可以獲得與待測(cè)氣體在環(huán)境中存在的情況有關(guān)的信息,從而達(dá)到檢測(cè)、監(jiān)控、報(bào)警的功能[4]?梢哉f(shuō),沒有精確可靠的傳感器,就沒有精確可靠的自動(dòng)檢測(cè)、控制和報(bào)警系統(tǒng)。煙霧傳感器作為報(bào)警器中不可缺少的核心器件,它決定了所采集的煙霧濃度信號(hào)的準(zhǔn)確性和可靠性,煙霧傳感器內(nèi)部結(jié)構(gòu)如圖1所示[5]。

方案一:接觸燃燒式傳感器。當(dāng)易燃煙霧接觸這種被催化物覆蓋的傳感器表面時(shí)會(huì)發(fā)生氧化反應(yīng)而燃燒。接觸燃燒式氣體傳感器的檢測(cè)元件一般為鉑金屬絲(也可表面涂鉑、鈀等稀有金屬催化層),使用時(shí)對(duì)鉑絲通以電流,保持300℃~400℃的高溫,此時(shí)若與可燃性氣體接觸,可燃性氣體就會(huì)在稀有金屬催化層上燃燒,因此鉑絲的溫度會(huì)上升,鉑絲的電阻值也上升;通過(guò)測(cè)量鉑絲的電阻值變化的大小,就知道可燃性氣體的濃度。使用接觸燃燒式傳感器,其最大的缺點(diǎn)是探頭很容易發(fā)生阻緩和中毒現(xiàn)象。一般在連續(xù)使用兩個(gè)月后應(yīng)對(duì)該傳感器進(jìn)行維護(hù)。這無(wú)形中加大了工作人員的工作量,同時(shí)增加了報(bào)警器的維護(hù)成本[6]。

方案二:半導(dǎo)體煙霧傳感器(半導(dǎo)體氣敏傳感器)半導(dǎo)體煙霧傳感器包括用氧化物半導(dǎo)體陶瓷材料作為敏感體制作的煙霧傳感器,以及用單晶半導(dǎo)體器件制作的煙霧傳感器。半導(dǎo)體煙霧傳感器是利用氣體在半導(dǎo)體表面的氧化和還原反應(yīng)導(dǎo)致敏感元件阻值變化而制成的。按照敏感機(jī)理分類,半導(dǎo)體煙霧傳感器可分為電阻式和非電阻式。當(dāng)半導(dǎo)體接觸到氣體時(shí),半導(dǎo)體的電阻值將發(fā)生變化,利用傳感器輸出端阻值的變化來(lái)測(cè)定或控制氣體的有關(guān)參數(shù),這種類型的傳感器稱為電阻式半導(dǎo)體氣敏傳感器;當(dāng)MOS場(chǎng)效應(yīng)管在接觸到氣體時(shí),場(chǎng)效應(yīng)管的電壓將隨周圍氣體狀態(tài)的不同而發(fā)生變化,利用這種原理制成的傳感器被稱為非電阻式半導(dǎo)體氣敏傳感器[7]。

自1962年半導(dǎo)體金屬氧化物煙霧傳感器問(wèn)世以來(lái),由于具有靈敏度高、響應(yīng)快、輸出信號(hào)強(qiáng)、耐久性強(qiáng)、結(jié)構(gòu)簡(jiǎn)單、體積小、維修方便、價(jià)格便宜等諸多優(yōu)點(diǎn),得到了廣泛的應(yīng)用。但是其最大的缺點(diǎn)就是選擇性較差。該傳感器己成為世界上產(chǎn)量最大、使用最廣的煙霧傳感器之一。

方案三:離子感煙傳感器

離子感煙傳感器對(duì)于火災(zāi)初起和陰燃階段的煙霧氣溶膠檢測(cè)非常有效,可測(cè)煙霧粒徑范圍為0.03um-10um。它在內(nèi)外電離室里面有放射源镅241。由于它能使兩極板間空氣分子電離為正、負(fù)離子,使電極之間原來(lái)不導(dǎo)電的空氣具有導(dǎo)電性。在正常的情況下,內(nèi)外電離室的電流、電壓都是穩(wěn)定的。當(dāng)火災(zāi)發(fā)生時(shí),煙霧粒子進(jìn)入電離室后,電力部分(區(qū)域)的正離子和負(fù)離子被吸附到煙霧粒子上,使正、負(fù)離子相互中和的概率增加,從而將煙霧粒子濃度大小以電流變化量大小表示出來(lái),實(shí)現(xiàn)對(duì)火災(zāi)參數(shù)的檢測(cè)。

第四種方案:光電式感煙傳感器

光電式感煙傳感器包含三個(gè)部分:光源、光敏元件和電子開關(guān)。在正常的情況下,平常光源發(fā)出的光,它會(huì)通過(guò)透鏡照射到光敏元件上,這個(gè)時(shí)候如果沒有什么特殊情況,電路就會(huì)保持正常。但是一旦有煙霧從中阻隔光的照射,就會(huì)導(dǎo)致到達(dá)光敏元件上的光減少,這個(gè)時(shí)候光敏元件就把光強(qiáng)的變化轉(zhuǎn)化成電的變化,在火災(zāi)產(chǎn)生的初期利用光散射原理對(duì)煙霧進(jìn)行探測(cè),并及時(shí)發(fā)出報(bào)警信號(hào)。在報(bào)警的同時(shí),按照光源不同,又可分為4種,其中包括一般光電式、激光光電式、紫外光光電式和紅外光光電式。

光電式感煙探測(cè)器發(fā)展的速度非?欤N類也在不斷增多,除了在大型建筑物內(nèi)部應(yīng)用之外,還特別適用于電氣火災(zāi)危險(xiǎn)性較大的場(chǎng)所,如儀器儀表室、隧道、計(jì)算機(jī)房和電纜溝等處。但是從另一個(gè)角度來(lái)看,比如說(shuō)就其功能而言,它在火災(zāi)發(fā)生的早期也能實(shí)現(xiàn)報(bào)警功能。

有時(shí)候根據(jù)報(bào)警器檢測(cè)煙霧種類的不同要求,在使用條件的各種考慮下,半導(dǎo)體煙霧傳感器對(duì)于各種場(chǎng)合都比較適合,在眾多煙霧傳感器的應(yīng)用特性的對(duì)比之下,發(fā)現(xiàn)半導(dǎo)體煙霧傳感器的優(yōu)點(diǎn)更加突出。比如靈敏度高、響應(yīng)快、體積小、結(jié)構(gòu)簡(jiǎn)單等優(yōu)良特性,而且還兼具使用方便、價(jià)格便宜等優(yōu)點(diǎn),并且在報(bào)警的過(guò)程中,不具有其他傳感器所具備的缺陷,比如探頭阻緩及中毒現(xiàn)象,而且在維護(hù)成本方面,也是比較低廉的,因而得到廣泛應(yīng)用。因此,本設(shè)計(jì)中的煙霧傳感器采用方案2,選用MQ-2半導(dǎo)體氣體煙霧傳感器[8]。

2.2.2 單片機(jī)的選型

單片機(jī)是煙霧自動(dòng)報(bào)警系統(tǒng)最關(guān)鍵的一部分,并且具有多種功能,它可以用來(lái)接收火災(zāi)信號(hào),當(dāng)接收到信號(hào)之后,就會(huì)啟動(dòng)報(bào)警裝置顯示,然后執(zhí)行相應(yīng)的報(bào)警。在單片機(jī)實(shí)現(xiàn)的控制功能中,對(duì)單片機(jī)的運(yùn)算速度具有較高的要求,使檢測(cè)人員和用戶在報(bào)警器系統(tǒng)正常工作時(shí)能夠及時(shí)地觀測(cè)到實(shí)時(shí)的煙霧濃度等級(jí),并進(jìn)行相應(yīng)處理。同時(shí),在滿足報(bào)警器系統(tǒng)設(shè)計(jì)的計(jì)算速度要求之后,在接口功能要求相同的同類型單片機(jī)中,還要考慮選擇價(jià)格低廉且體積輕巧的機(jī)型,這是為了建立在報(bào)警器的精確性、可靠性及抗干擾性的基礎(chǔ)之上,還要能夠考慮成本能夠足夠的低廉[9]。

由于單片機(jī)技術(shù)在各個(gè)領(lǐng)域里面應(yīng)用的越來(lái)越廣泛,所以世界上許多集成電路生產(chǎn)廠家相繼推出了各種類型的單片機(jī),在眾多類型的單片機(jī)之中,MCS系列單片機(jī)以其成熟的技術(shù)、優(yōu)越的性能、高可靠性和高性能價(jià)格比,迅速占領(lǐng)了工業(yè)測(cè)控、自動(dòng)化工程應(yīng)用等大多數(shù)主流市場(chǎng),成為國(guó)內(nèi)單片機(jī)應(yīng)用領(lǐng)域中的翹楚。其中,51系列單片機(jī)有一些顯著的優(yōu)點(diǎn),比如價(jià)錢便宜,I/O口多,程序空間大。因此,在測(cè)控操作系統(tǒng)中,使用51系列單片機(jī)是最理想的選擇,因此本次畢業(yè)設(shè)計(jì)采用STC89C52作為設(shè)計(jì)用的單片機(jī)[10]。

STC89C52是一種高性能、低功耗CMOS8位微控制器,使用高密度非易失性存儲(chǔ)器技術(shù)制造,在兼容性方面,工業(yè)80C51產(chǎn)品指令和引腳完全兼容,并且具有8K可編程Flash存儲(chǔ)器。片上Flash適于常規(guī)編程器,亦允許程序存儲(chǔ)器在線可編程。在單芯片上,擁有系統(tǒng)可編程Flash和靈巧的8 位CPU,因?yàn)榫邆溥@些條件,STC89C52可以為眾多嵌入式控制應(yīng)用系統(tǒng)提供超有效、高靈活的解決方案[10]。STC89C52還具備以下標(biāo)準(zhǔn)功能:256字節(jié)RAM,32 位I/O 口線,8k字節(jié)Flash定時(shí)器,2個(gè)數(shù)據(jù)指針,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,三個(gè)16位定時(shí)器/計(jì)數(shù)器,片內(nèi)晶振及時(shí)鐘電路。另外,STC89C52可降低0Hz 靜態(tài)邏輯操作,并且支持2種軟件可選擇節(jié)電模式。在空閑模式條件下,CPU開始停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,振蕩器被凍結(jié),RAM內(nèi)容被保存,單片機(jī)停止一切工作,直到下一個(gè)硬件或中斷復(fù)位為止。這是一個(gè)以單片機(jī)為中心的模塊,把程序代碼燒進(jìn)去以后,然后在外圍接上振蕩電路、復(fù)位電路、LED顯示電路、LED顯示電路、報(bào)警電路等子模塊[11]。

2.2.3 溫度采集模塊

方案1:在測(cè)溫電路中采用PT100作為溫度傳感器。PT100傳感器是利用鉑電阻的特性來(lái)進(jìn)行測(cè)溫的,鉑電阻具有這樣的特性,它的阻值隨溫度變化而變化、并呈一定函數(shù)關(guān)系的特性,并且PT100傳感器具有抗振動(dòng)、穩(wěn)定性好、準(zhǔn)確度高、耐高壓等優(yōu)點(diǎn)。但它也具有一些缺點(diǎn),就是使用起來(lái)比較復(fù)雜。

方案2:采用DS18B20作為本次設(shè)計(jì)的溫度傳感器。DS18B20的數(shù)字溫度輸出通過(guò) “ 一線 ” 總線( 1-Wire是一種特殊的數(shù)字信號(hào)總線協(xié)議,它將獨(dú)特的信號(hào)線和電源線復(fù)合在一起,僅使用一條口線;每個(gè)芯片編碼都是唯一的,支持聯(lián)網(wǎng)尋址、還有零功耗等方面,是總線之中所需硬件連線最少的一種)這種獨(dú)特的方式,可以使多個(gè) DS18B20方便地組建成傳感器網(wǎng)絡(luò),為整個(gè)測(cè)量系統(tǒng)的建立和組合提供了更大可能性。它在傳輸距離、轉(zhuǎn)換時(shí)間、測(cè)溫精度、分辨率等方面相較于其他溫度傳感器有了更大的進(jìn)步,相對(duì)于用戶來(lái)講使用更方便,而且效果也更加令人滿意[12]。

通過(guò)比較之后得出,DS18B20可以直接輸出數(shù)字溫度值,不需要校正,是比較理想的選擇,因此最后決定選擇方案2。

3 系統(tǒng)概述與硬件方案的設(shè)計(jì)
3.1 系統(tǒng)總體框架

煙霧報(bào)警器是能夠檢測(cè)環(huán)境中的煙霧濃度,并具有報(bào)警功能的儀器。該報(bào)警系統(tǒng)的最基本組成部分應(yīng)包括:信號(hào)采集模數(shù)轉(zhuǎn)換電路、單片機(jī)控制電路、字符顯示電路、聲光報(bào)警電路和安全保護(hù)電路等部分組成。

為適應(yīng)家庭和工業(yè)等場(chǎng)所對(duì)可燃性易爆煙霧安全性要求,設(shè)計(jì)的煙霧報(bào)警器具有顯示報(bào)警狀態(tài)。報(bào)警器采用延時(shí)的工作方式,煙霧檢測(cè)報(bào)警器以STC89C52單片機(jī)為控制核心,選用MQ-2半導(dǎo)體氣體煙霧傳感器采集煙霧濃度信息,配合外圍電路構(gòu)成煙霧報(bào)警系統(tǒng)。本設(shè)計(jì)包括硬件和軟件設(shè)計(jì)兩個(gè)部分。

從設(shè)計(jì)的要求來(lái)分析該設(shè)計(jì)須包含如下結(jié)構(gòu):煙霧檢測(cè)部分、STC89C52單片機(jī)主控部分、報(bào)警部分,AD采集四大部分。電路總體設(shè)計(jì)框圖如圖2所示:

2總體設(shè)計(jì)框圖

處理器采用51系列單片機(jī)STC89C52。整個(gè)系統(tǒng)是在系統(tǒng)軟件控制下工作的。設(shè)置在監(jiān)測(cè)點(diǎn)上的煙霧檢測(cè)探頭將檢測(cè)到的煙霧變換成電信號(hào),送出模擬信號(hào),給AD采集電路采集。在單片機(jī)內(nèi),經(jīng)軟件查詢、識(shí)別判決等環(huán)節(jié)實(shí)時(shí)發(fā)出煙霧報(bào)警狀態(tài)控制信號(hào)。驅(qū)動(dòng)蜂鳴器及報(bào)警指示燈報(bào)警[13]。

3.2 電源模塊

3電源模塊原理圖

由于本系統(tǒng)采用電池供電,考慮了如下幾種方案為系統(tǒng)供電。

方案1:采用5V蓄電池為系統(tǒng)供電。蓄電池具有較強(qiáng)的電流驅(qū)動(dòng)能力以及穩(wěn)定的電壓輸出性能。但是蓄電池的體積過(guò)于龐大,在報(bào)警器上使用極為不方便。因此放棄了此方案。

方案2:采用4節(jié)1.5 V干電池共4.5V做電源,經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證系統(tǒng)工作時(shí),單片機(jī)、傳感器的工作電壓穩(wěn)定能夠滿足系統(tǒng)的要求,而且電池更換方便。

綜上所述采用方案2,電源模塊原理圖如圖3所示,其中P1為電池接口,SW1為電源開關(guān)[14]。

3.3 單片機(jī)最小系統(tǒng)

單片機(jī)如果需要工作起來(lái),構(gòu)成為單片機(jī)最小系統(tǒng)的基本構(gòu)成如圖4所示。

4單片機(jī)最小系統(tǒng)的基本構(gòu)成

單片機(jī)最小系統(tǒng)大致由三部分構(gòu)成,第一部分包含單片機(jī),第二部分包含復(fù)位電路,最后一部分由時(shí)鐘電路構(gòu)成,這三部分每一部分都有其獨(dú)立功能,能夠單獨(dú)工作卻又互相協(xié)作。

而在STC89C52 單片機(jī)中,它的工作電壓范圍在4V到5.5V之間,所以就需要給單片機(jī)外接一個(gè)5V的直流電源。連接到單片機(jī)中的40腳,而單片機(jī)的VCC就需要接到正極5V,另外一個(gè)20腳VSS就接到電源地端,達(dá)到所需的效果。

復(fù)位電路則是用來(lái)確定單片機(jī)的工作起始狀態(tài),而單片機(jī)的啟動(dòng)過(guò)程就需要復(fù)位電路來(lái)實(shí)現(xiàn)。當(dāng)單片機(jī)接通電源的時(shí)候,它會(huì)產(chǎn)生一個(gè)復(fù)位信號(hào),用來(lái)完成單片機(jī)的啟動(dòng)并且確定單片機(jī)起始工作狀態(tài)。如果單片機(jī)系統(tǒng)在運(yùn)行的過(guò)程中,受到外界環(huán)境的干擾并且出現(xiàn)程序跑飛的現(xiàn)象時(shí)。只要按下復(fù)位按鈕,其內(nèi)部的程序便會(huì)自動(dòng)從頭開始執(zhí)行。這種復(fù)位一般有兩種方式,上電自動(dòng)復(fù)位和外部按鍵手動(dòng)復(fù)位。單片機(jī)在時(shí)鐘電路工作以后,要完成復(fù)位操作,就需要在RESET端持續(xù)給出2個(gè)機(jī)器周期,這是完成復(fù)位操作的重要條件。本設(shè)計(jì)在兩者之間采用的是外部手動(dòng)按鍵復(fù)位電路,不過(guò)選擇這個(gè)以后,則需要接上拉電阻來(lái)提高輸出高電平的值。

時(shí)鐘電路是單片機(jī)最重要的一部分,單片機(jī)的工作節(jié)奏由它來(lái)進(jìn)行掌控。時(shí)鐘電路在另一方面來(lái)講也可以說(shuō)是振蕩電路,它需要向單片機(jī)提供一個(gè)正弦波信號(hào)作為基準(zhǔn),用來(lái)決定單片機(jī)的執(zhí)行速度。XTAL1和XTAL2分別是反向放大器的輸入和輸出,該反向放大器可以配置一個(gè)片內(nèi)振蕩器。但是如果采用外部時(shí)鐘源驅(qū)動(dòng)器件,就不需要外接XTAL2。因?yàn)橐粋(gè)機(jī)器周期含有6個(gè)狀態(tài)周期,每個(gè)狀態(tài)周期又含有2個(gè)振蕩周期,所以一個(gè)機(jī)器周期共有12個(gè)振蕩周期,如果外接石英晶體振蕩器的話它的振蕩頻率就為12MHz,一個(gè)振蕩周期的時(shí)間為1/12us[15]。

3.4 單片機(jī)的時(shí)鐘電路與復(fù)位電路設(shè)計(jì)

本系統(tǒng)采用STC系統(tǒng)列單片機(jī),相對(duì)于其他系列單片機(jī)來(lái)說(shuō)的話,它具有更多的優(yōu)點(diǎn)。一般STC單片在資源方面也比其他單片機(jī)要多,而且它還有一個(gè)優(yōu)點(diǎn),執(zhí)行速度快;STC系列單片機(jī)使用串口對(duì)單片機(jī)進(jìn)行燒寫下載程序較為方便;STC89C52單片機(jī)內(nèi)部集成了很多復(fù)雜電路,且在抗干擾方面也具有不錯(cuò)的能力。

本系統(tǒng)采用內(nèi)部方式的時(shí)鐘電路和加電自復(fù)位的復(fù)位電路,分別如圖5和圖6所示:

5時(shí)鐘電路6復(fù)位電路

由于單片機(jī)為高阻態(tài),PO口內(nèi)部不含上拉電阻,不能正常地輸出高/低電平,因而該組I/O口在使用時(shí)必須外接上拉電阻。

3.5 OLED顯示模塊

7 數(shù)碼管顯示

顯示采用數(shù)碼管顯示,顯示電路如圖7所示。

3.6 聲音報(bào)警模塊

電路通過(guò)三極管基極串連一個(gè)電阻與單片機(jī)P3.6端口連接從而達(dá)到控制蜂鳴器是否報(bào)警。聲音報(bào)警電路如圖8所示。

8 聲音報(bào)警電路圖

3.7 按鍵控制模塊

9 消音按鍵連接電路圖

本電路設(shè)計(jì)了四個(gè)按鍵,一個(gè)設(shè)置鍵、一個(gè)加鍵、一個(gè)減鍵、一個(gè)緊急報(bào)警鍵,當(dāng)遇到緊急情況時(shí),可按下緊急報(bào)警鍵,蜂鳴器進(jìn)行報(bào)警,消音按鍵連接如圖9所示[16]。

    3.8 DS18B20接口電路

    采用DS18B20溫度傳感器,其接口電路圖如圖10所示。

10 溫度傳感器接口電路圖

(1) DS18B20控制方法

DS18B20有六條控制命令:

溫度變化:44H開動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換

讀暫存器:BEH僅僅占了暫存器9個(gè)字節(jié)內(nèi)容

寫暫存器:數(shù)據(jù)被4EH放入暫存器的TH、TL字節(jié)

復(fù)制暫存器:暫存器的TH、TL字節(jié)被48H 送到E2RAM中

再一次調(diào)E2RAM B8H 把E2RAM中的TH、TL字節(jié)放到暫存器TH、TL字節(jié)

讀電源供電方式 B4H 開啟DS18B20把電源供電方式的信號(hào)發(fā)送給主CPU

(2) DS18B20供電方式

DS18B20可以采用兩種方式供電:1是采用電源供電方式,此時(shí)DS18B20的1腳連到地端,2腳變作信號(hào)線,3腳連接電源。另一種是寄生電源供電方式,在圖3.1所示的那樣,單片機(jī)端口連上單線總線,這是為了在工作的周期之內(nèi),能夠?yàn)镈S18B20時(shí)鐘提供足夠的電流,以方便其工作,所以可以采用一個(gè)三極管來(lái)完成上拉總線。本設(shè)計(jì)采用電源供電方式,P2.3口連單線總線為保證在有效的DS18B20時(shí)鐘周期內(nèi)提供足夠的電流,可用一個(gè)上拉電阻和STC89C52的P2.3來(lái)完成對(duì)總線的上拉。當(dāng)DS18B20處于寫存儲(chǔ)器操作和溫度A/D變換操作時(shí),總線上必須有強(qiáng)的上拉,上拉開啟時(shí)間所到達(dá)的極限時(shí)間為10μs。實(shí)行寄生電源供電方式則VDD和GND端均需要連接地端。由于單線制只有一根線,則對(duì)發(fā)送接收口的要求,它就必須是三狀態(tài)的。DS18B20被主機(jī)控制之后完成溫度轉(zhuǎn)換就必須經(jīng)過(guò)3個(gè)步驟:1,初始化;2,ROM操作指令;3,存儲(chǔ)器操作指令。

4 系統(tǒng)軟件方案的設(shè)計(jì)4.1系統(tǒng)主程序設(shè)計(jì)及流程圖

自動(dòng)火災(zāi)報(bào)警器的硬件系統(tǒng)設(shè)計(jì)結(jié)束之后,如果缺乏軟件的輔助及幫助,硬件還是不能正常工作。軟件是硬件能夠運(yùn)動(dòng)起來(lái)的重要支撐部分,控制著整個(gè)硬件系統(tǒng)的運(yùn)行。所以從另外一個(gè)意義來(lái)說(shuō)軟件對(duì)整個(gè)系統(tǒng)極其的重要,甚至從某種意義上說(shuō)比硬件更加重要。

主程序流程圖如圖11所示。首先要給傳感器預(yù)熱,因?yàn)镸Q-2型半導(dǎo)體電阻式煙霧傳感器在不通電的情況下,它存放一段時(shí)間之后,當(dāng)它再次通電,傳感器不能進(jìn)入工作狀態(tài),也就是說(shuō)正常采集煙霧信息,需要一段時(shí)間進(jìn)行預(yù)熱處理。程序初始化結(jié)束后,系統(tǒng)就會(huì)進(jìn)入監(jiān)控狀態(tài),對(duì)整個(gè)電路和環(huán)境進(jìn)行一個(gè)監(jiān)控作用。

在整個(gè)報(bào)警系統(tǒng)工作中,ADC0832把煙霧濃度信息轉(zhuǎn)換處理后,還要經(jīng)過(guò)單片機(jī)來(lái)對(duì)信號(hào)進(jìn)行分析處理,判斷系統(tǒng)是否啟動(dòng)報(bào)警。主程序還包括報(bào)警濃度設(shè)定功能、LED八段式數(shù)碼管濃度字符顯示功能、手動(dòng)報(bào)警功能、中斷子程序等,這些程序使報(bào)警器功能更加全面和完善,給用戶帶來(lái)更大的便利和體驗(yàn)[17]。

圖11 主程序流程圖

至此,整個(gè)多功能MP3系統(tǒng)的設(shè)計(jì)基本完成了,剩下的任務(wù)就是對(duì)該系統(tǒng)進(jìn)行調(diào)試和測(cè)試。

5 系統(tǒng)調(diào)試、測(cè)試與分析5.1 硬件調(diào)試

第一步為目測(cè)階段,單片機(jī)應(yīng)用系統(tǒng)電路全部需要手工焊接在洞洞板上,這個(gè)時(shí)候?qū)附有枰欢ǖ氖煜ざ龋疫要對(duì)每一個(gè)焊點(diǎn)都要進(jìn)行仔細(xì)的檢查。以便測(cè)定它是否有虛焊、是否有毛剌等現(xiàn)象。

第二步為萬(wàn)用表測(cè)試,先用萬(wàn)用表再一次檢查目測(cè)中認(rèn)為可能存在錯(cuò)誤的連線或接點(diǎn),查看它們的通斷狀態(tài)是否跟設(shè)計(jì)狀態(tài)相對(duì)應(yīng),再檢查各種線與線之間的連接是否有短路現(xiàn)象。

第三步為加電檢查。當(dāng)系統(tǒng)加電時(shí),首先檢查所有插座或器件引腳的電源端是否達(dá)到符合要求的電壓值,接地端電壓值是否與零想接近,接固定電平的引腳端是否符合設(shè)計(jì)所需的電平。

第四步是聯(lián)機(jī)檢查。

在對(duì)硬件電路調(diào)試過(guò)程中,還遇到了不少問(wèn)題,第一次當(dāng)把所有的元件都焊上去后,準(zhǔn)備調(diào)試,這個(gè)時(shí)候才發(fā)現(xiàn)正負(fù)極的插針離得太近了,不容易接電源,按理來(lái)說(shuō)這種小錯(cuò)本不該發(fā)生的,出錯(cuò)的原因就是因?yàn)樽约禾囫R虎,所以說(shuō),做任何事情都必需經(jīng)過(guò)“三思而后行”,不能僅停留在想象的階段,還需要自己身體力行,方能取得好的結(jié)果,才能使自己的經(jīng)驗(yàn)更加豐富,而且來(lái)不得半點(diǎn)的馬虎,否則浪費(fèi)了時(shí)間和精力。

首先燒入顯示程序,看顯示正不正常,整體功能是否都還完善。在調(diào)試程序時(shí),發(fā)現(xiàn)有的指令用的不正確,功能不能達(dá)到自己想要的效果,電路功能也不能正常的運(yùn)行,另外軟件程序中的延時(shí)有的過(guò)長(zhǎng)、有的過(guò)短,長(zhǎng)短不一。類似的現(xiàn)象還有很多就不一一列舉了。

在完成之后,一共要測(cè)試兩個(gè)功能。第一個(gè)測(cè)試濃度達(dá)到設(shè)定值之后,是否會(huì)自動(dòng)報(bào)警。第二個(gè)測(cè)試溫度上升到報(bào)警值之后,能否實(shí)現(xiàn)自動(dòng)實(shí)現(xiàn)報(bào)警功能。

5.2 軟件調(diào)試

在軟件調(diào)試時(shí),對(duì)每個(gè)模塊分別進(jìn)行測(cè)試,采取步步為營(yíng)的策略,這樣方便對(duì)一個(gè)模塊都起到一個(gè)檢查的作用,第一步完成OLED顯示,然后接下來(lái)單片機(jī)的時(shí)鐘電路與復(fù)位電路,最后就是時(shí)鐘等驅(qū)動(dòng)程序的調(diào)試,下一步煙霧檢測(cè)AD采集電路的編寫﹑按鍵控制電路的設(shè)計(jì),最后根據(jù)系統(tǒng)所需然后設(shè)置自己想要的功能,進(jìn)行微型修改。

然后就要在實(shí)際操作的過(guò)程中,首先把顯示程序燒入進(jìn)去,看顯示正不正常。在調(diào)試程序結(jié)束之后,發(fā)現(xiàn)有的指令用的并不是很正確,導(dǎo)致電路功并不能完全實(shí)現(xiàn),另外軟件程序中的延時(shí)有的過(guò)長(zhǎng)、有的過(guò)短,當(dāng)出現(xiàn)這些這些問(wèn)題之后,就要對(duì)自己的程序進(jìn)行不斷的修改,不斷的查資料,這樣才能解決出現(xiàn)的問(wèn)題得出自己想要的結(jié)果。

系統(tǒng)用到了多個(gè)中斷程序,在設(shè)計(jì)過(guò)程中遇到過(guò)中斷嵌套而無(wú)法退出的問(wèn)題,這個(gè)時(shí)候就需要設(shè)定中斷優(yōu)先級(jí),其中顯示屏引腳中斷優(yōu)先級(jí)最高。

6 結(jié)束語(yǔ)

本次設(shè)計(jì)的煙霧檢測(cè)報(bào)警器在生產(chǎn)與生活等情況下可以保障它們的安全,避免發(fā)生火災(zāi)和爆炸事故,在火災(zāi)發(fā)生的現(xiàn)場(chǎng),還可以防止煤氣中毒的發(fā)生,在防火、防爆和安全生產(chǎn)等場(chǎng)所中,這都是所必備的一種儀器,有此可以想象的出來(lái),煙霧報(bào)警器具有巨大的市場(chǎng)空間和不錯(cuò)的發(fā)展前景。本論文建立在對(duì)煙霧傳感器和報(bào)警技術(shù)進(jìn)行過(guò)深入研究的基礎(chǔ)上,然后對(duì)國(guó)內(nèi)和國(guó)外相同款式產(chǎn)品的技術(shù)特點(diǎn)進(jìn)行全面比較,然后對(duì)系統(tǒng)的設(shè)計(jì)方案進(jìn)行完,并且最后還要確定系統(tǒng)的設(shè)計(jì)方案。并對(duì)儀器的整體設(shè)計(jì)進(jìn)行確定和對(duì)各個(gè)組成部分還要進(jìn)行詳細(xì)的分析和設(shè)計(jì),從而才能設(shè)計(jì)自己所需要的產(chǎn)品。

本論文設(shè)計(jì)的煙霧報(bào)警器由兩大部分構(gòu)成,一部分分為煙霧信號(hào)采集電路,另一部分分為單片機(jī)控制電路。根據(jù)設(shè)計(jì)要求、使用環(huán)境、成本以及眾多因素,從而確定選用MQ-2型半導(dǎo)體電阻式煙霧傳感器。該傳感器因?yàn)榫哂袕V譜型半導(dǎo)體敏感器件,從而對(duì)以烷類煙霧為主的多種煙霧都不錯(cuò)的良好敏感特性。它的靈敏度適中,而且還具有響應(yīng)與恢復(fù)特性好等特點(diǎn),而且在工作的過(guò)程中,穩(wěn)定性、重現(xiàn)性,都不怎么易受環(huán)境影響及抗溫濕度影響等優(yōu)良性能。

在系統(tǒng)單片機(jī)控制電路的設(shè)計(jì)上,為了使儀器具有結(jié)構(gòu)簡(jiǎn)單、體積小、性能穩(wěn)定、成本低等優(yōu)良性能,在前期的設(shè)計(jì)中采用了高性能、高整合度的STC89C52單片機(jī)作為核心芯片,充分利用了其高速數(shù)據(jù)處理能力和豐富的片內(nèi)外設(shè),實(shí)現(xiàn)了儀器的小型化和智能化,因?yàn)橛辛诉@些獨(dú)特設(shè)計(jì),才能達(dá)到自己預(yù)期的效果。由于煙霧傳感器需要在加熱狀態(tài)下工作,所以溫度便是一個(gè)決定因素,在傳感器工作的時(shí)候,溫度越高,反應(yīng)速度隨著溫度的升高而加快,響應(yīng)時(shí)間和恢復(fù)時(shí)間也跟著加快。為保證傳感器準(zhǔn)確地、穩(wěn)定地工作,提高響應(yīng)時(shí)間。需要向煙霧傳感器持續(xù)供給5V的加熱電壓。煙霧報(bào)警器能在范圍比較廣的溫度范圍工作,可將煙霧濃度顯示用LED數(shù)碼管顯示。當(dāng)煙霧的濃度達(dá)到自己在開始設(shè)定的報(bào)警濃度時(shí),就會(huì)發(fā)出報(bào)警的滴答聲。

在現(xiàn)場(chǎng)進(jìn)行標(biāo)定及測(cè)試的過(guò)程中,我們需要分析煙霧濃度信號(hào)的實(shí)驗(yàn)數(shù)據(jù),利用這些數(shù)據(jù)計(jì)算本報(bào)警器顯示煙霧濃度與實(shí)際濃度之間的誤差為2.55%LEL,如果在所規(guī)定誤差范圍±5%LEL之內(nèi),這個(gè)數(shù)據(jù)滿足我們開始設(shè)定的檢測(cè)要求,達(dá)到了預(yù)期的設(shè)計(jì)效果,這就是我們所要得出的結(jié)論。

到目前為止畢業(yè)設(shè)計(jì)也即將告一段落了,在這次的畢業(yè)設(shè)計(jì)中,我更加了解理論知識(shí)和實(shí)踐能力的差距,如果自己光是知道一些理論知識(shí),那是遠(yuǎn)遠(yuǎn)不夠的,還需要不斷地實(shí)踐,從而才能更好的鞏固自己所學(xué)到的知識(shí)。另一方面也意識(shí)到自己的短處與缺陷,培養(yǎng)了我的獨(dú)立思考能力,讓自己學(xué)到了很多以前從來(lái)沒有接觸過(guò)的知識(shí),進(jìn)一步提高了自己在實(shí)際設(shè)計(jì)過(guò)程中研究問(wèn)題、發(fā)現(xiàn)問(wèn)題、解決問(wèn)題的能力,同時(shí),也發(fā)現(xiàn)了自己的不足之處,和一些問(wèn)題的存在,并有待進(jìn)一步學(xué)習(xí)和發(fā)展,讓自己在未來(lái)的工作和學(xué)習(xí)之中更快的適應(yīng)和提高自己。


致謝

在完成本設(shè)計(jì)的寫作過(guò)程中,我十分感謝我的指導(dǎo)老師—金老師。從論文的開始到結(jié)束,金老師一直都是很悉心的幫我修改著論文設(shè)計(jì)的過(guò)程中出現(xiàn)的各種問(wèn)題和錯(cuò)誤,對(duì)我論文設(shè)計(jì)的每個(gè)過(guò)程都嚴(yán)格的把關(guān),幫助我開拓設(shè)計(jì)思路。在做畢業(yè)設(shè)計(jì)的過(guò)程中,自己因?yàn)殡s事比較多,所以在論文這一塊都沒怎么花心思,很多次論文提交上去,都會(huì)出現(xiàn)很多小錯(cuò)誤,自己又不知道怎么修改,基本都是老師在指導(dǎo)我。而且老師不僅在論文方面給了我很大幫助,在功課上對(duì)我也指導(dǎo)了很多,真的很感謝金老師。

自己在做論文的過(guò)程中,也清楚的意識(shí)到自己對(duì)本專業(yè)的茫然與無(wú)知,很多東西都不懂,回想自己大學(xué)四年的時(shí)光,也不知道自己是怎么機(jī)緣巧合的來(lái)到這個(gè)專業(yè)以及這個(gè)學(xué)校,只記得當(dāng)初只是想跑到大城市去看看,然后想學(xué)一技傍身,剛好專業(yè)是電子科學(xué)與技術(shù),所以才來(lái)到浙江傳媒學(xué)院。自己來(lái)到之后,才發(fā)現(xiàn)這不是自己感興趣的專業(yè),所以在學(xué)習(xí)方面也沒怎么花時(shí)間,說(shuō)實(shí)話挺可惜的,自己本專業(yè)都沒學(xué)到什么東西,于是在做畢業(yè)設(shè)計(jì)的時(shí)候就顯得異常的艱難,自己也清楚的意識(shí)到自己本專業(yè)知識(shí)的缺陷。

不過(guò)盡管是無(wú)意中來(lái)到了母校,但是在這里我還是要感謝我們的母!憬瓊髅綄W(xué)院,因?yàn)樗o了我很多幫助而且還給了我一個(gè)舞臺(tái)來(lái)施展自己的才華,來(lái)到這里之后,我才發(fā)現(xiàn)這里跟其他的學(xué)校氛圍不一樣,氣氛相對(duì)來(lái)說(shuō)要活躍一些,開始我不怎么能接受,后面我也就慢慢地習(xí)慣;額!我很珍惜我大學(xué)的四年生活,給我留下了很多回憶,人生僅有一次,甚至畢業(yè)論文也是一樣,也只有這么一次,以后便再也沒有機(jī)會(huì)去寫了。此外我還要感謝我的同班各位同學(xué)以及和我一起生活的三個(gè)室友,正是與他們的交流合作使我不斷成長(zhǎng),受益頗多。最后要感謝我的家人以及我的朋友們,在他們的幫助下,我才得以能順利完成自己的畢業(yè)論文。

通過(guò)這次畢業(yè)設(shè)計(jì),使我深刻地認(rèn)識(shí)到學(xué)好專業(yè)知識(shí)的重要性,也理解了理論聯(lián)系實(shí)際的含義,并且檢驗(yàn)了大學(xué)四年的學(xué)習(xí)成果。它是我這四年來(lái)所學(xué)知識(shí)的綜合運(yùn)用和經(jīng)驗(yàn)的總結(jié),通過(guò)此次設(shè)計(jì)也鍛煉了我個(gè)人的各方面能力,包括制圖、編程、動(dòng)手以及溝通能力,所學(xué)知識(shí)更得到了升華。為以后在工作崗位上發(fā)揮自己的才能奠定了堅(jiān)實(shí)的基礎(chǔ)。由于時(shí)間的倉(cāng)促和個(gè)人專業(yè)水平的原因,整篇論文肯定存在著一定的錯(cuò)誤和漏洞。懇請(qǐng)閱讀此篇論文的老師、同學(xué),多予指正,不勝感激!

最后,再次對(duì)關(guān)心、幫助我的老師和同學(xué)表示衷心地感謝, 更感謝母校四年來(lái)對(duì)我的培養(yǎng)和教育,希望母校健康蓬勃發(fā)展,更加輝煌!等我在外拼搏成功之后,必會(huì)回來(lái)反哺母校,使母校能夠培育更多人才,為社會(huì)做出自己的一番貢獻(xiàn)。


附錄2 系統(tǒng)原理圖:


單片機(jī)源程序如下:


  1. #include <reg52.h>
  2. #include "eepom52.h"
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. #include <intrins.h>
  6. //數(shù)碼管段選定義      0     1    2    3    4    5              6              7                8                 9            
  7. uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  8.                                                                         0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};              //斷碼
  9. //數(shù)碼管位選定義
  10. uchar code smg_we[]={0x7f,0xbf,0xdf,0xef};
  11. //uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7};
  12. uchar dis_smg[8]  = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};            
  13. uchar smg_i = 3;    //顯示數(shù)碼管的個(gè)位數(shù)

  14. sbit SCL=P3^4;                            //SCL定義為P1口的第3位腳,連接ADC0832SCL腳
  15. sbit DO=P3^3;                            //DO定義為P1口的第4位腳,連接ADC0832DO腳
  16. sbit CS=P3^2;                            //CS定義為P1口的第4位腳,連接ADC0832CS腳

  17. sbit dq   = P3^5;              //18b20 IO口的定義
  18. sbit beep = P3^6;   //蜂鳴器IO口定義
  19. uint temperature,s_temp ;  //溫度的變量
  20. uchar dengji,s_dengji;     //煙物等級(jí)
  21. uchar shoudong;            //手動(dòng)報(bào)警鍵
  22. uint huoyan;


  23. bit flag_300ms ;
  24. uchar key_can;                            //按鍵值的變量
  25. uchar menu_1;        //菜單設(shè)計(jì)的變量
  26. bit flag_lj_en;                            //按鍵連加使能
  27. bit flag_lj_3_en;              //按鍵連3次連加后使能  加的數(shù)就越大了
  28. uchar key_time,flag_value;      //用做連加的中間變量
  29. bit key_500ms  ;
  30. uchar flag_clock;
  31. uchar zd_break_en,zd_break_value;   //自動(dòng)退出設(shè)置界面
  32. uchar a_a;
  33. /******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eepom中******************/
  34. void write_eepom()
  35. {
  36.               SectorErase(0x2000);
  37.               byte_write(0x2000, s_temp);
  38.               byte_write(0x2001, s_dengji);
  39.               byte_write(0x2060, a_a);            
  40. }
  41. /**************開機(jī)自檢eepom初始化*****************/
  42. void init_eepom()
  43. {
  44.               read_eepom();                            //先讀
  45.               if(a_a != 1)                            //新的單片機(jī)初始單片機(jī)內(nèi)問(wèn)EEPOM
  46.               {
  47.                             s_temp   = 50;
  48.                             s_dengji = 5;
  49.                             a_a = 1;
  50.                             write_eepom();
  51.               }            
  52. }

  53. /***********************18b20初始化函數(shù)*****************************/
  54. void init_18b20()
  55. {
  56.               bit q;
  57.               dq = 1;                                                        //把總線拿高
  58.               delay_uint(1);                  //15us
  59.               dq = 0;                                                        //給復(fù)位脈沖
  60.               delay_uint(80);                            //750us
  61.               dq = 1;                                                        //把總線拿高 等待
  62.               delay_uint(10);                            //110us
  63.               q = dq;                                                        //讀取18b20初始化信號(hào)
  64.               delay_uint(20);                            //200us
  65.               dq = 1;                                                        //把總線拿高 釋放總線
  66. }
  67. /*************寫18b20內(nèi)的數(shù)據(jù)***************/
  68. void write_18b20(uchar dat)
  69. {
  70.               uchar i;
  71.               for(i=0;i<8;i++)
  72.               {                                                                      //寫數(shù)據(jù)是低位開始
  73.                             dq = 0;                                          //把總線拿低寫時(shí)間隙開始
  74.                             dq = dat & 0x01; //向18b20總線寫數(shù)據(jù)了
  75.                             delay_uint(5);              // 60us
  76.                             dq = 1;                                          //釋放總線
  77.                             dat >>= 1;
  78.               }            
  79. }
  80. /*************讀取18b20內(nèi)的數(shù)據(jù)***************/
  81. uchar read_18b20()
  82. {
  83.               uchar i,value;
  84.               for(i=0;i<8;i++)
  85.               {
  86.                             dq = 0;                                          //把總線拿低讀時(shí)間隙開始
  87.                             value >>= 1;              //讀數(shù)據(jù)是低位開始
  88.                             dq = 1;                                          //釋放總線
  89.                             if(dq == 1)                            //開始讀寫數(shù)據(jù)
  90.                                           value |= 0x80;
  91.                             delay_uint(5);              //60us              讀一個(gè)時(shí)間隙最少要保持60us的時(shí)間
  92.               }
  93.               return value;                            //返回?cái)?shù)據(jù)
  94. }
  95. /*************讀取溫度的值 讀出來(lái)的是小數(shù)***************/
  96. uint read_temp()
  97. {
  98.               uint value;
  99.               uchar low;                                             //在讀取溫度的時(shí)候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否則會(huì)影響到18b20的時(shí)序
  100.               init_18b20();                               //初始化18b20
  101.               write_18b20(0xcc);                 //跳過(guò)64位ROM
  102.               write_18b20(0x44);                 //啟動(dòng)一次溫度轉(zhuǎn)換命令
  103.               delay_uint(50);                               //500us
  104.               init_18b20();                               //初始化18b20
  105.               write_18b20(0xcc);                 //跳過(guò)64位ROM
  106.               write_18b20(0xbe);                 //發(fā)出讀取暫存器命令
  107.               EA = 0;
  108.               low = read_18b20();                 //讀溫度低字節(jié)
  109.               value = read_18b20();  //讀溫度高字節(jié)
  110.               EA = 1;
  111.               value <<= 8;                               //把溫度的高位左移8位
  112.               value |= low;                               //把讀出的溫度低位放到value的低八位中
  113.               value *= 0.0625;                     //轉(zhuǎn)換到溫度值
  114.               return value;                               //返回讀出的溫度
  115. }

  116. /***********讀數(shù)模轉(zhuǎn)換數(shù)據(jù)********************************************************/            
  117.                                                                                     //  1  0  0 通道
  118.                                                                                     //  1  1  1 通道
  119. unsigned char ad0832read(bit SGL,bit ODD)
  120. {
  121.               unsigned char i=0,value=0,value1=0;                           
  122.                             SCL=0;
  123.                             DO=1;
  124.                             CS=0;                            //開始
  125.                             SCL=1;                            //第一個(gè)上升沿            
  126.                             SCL=0;
  127.                             DO=SGL;
  128.                             SCL=1;                //第二個(gè)上升沿
  129.                             SCL=0;
  130.                             DO=ODD;
  131.                             SCL=1;                  //第三個(gè)上升沿
  132.                             SCL=0;                  //第三個(gè)下降沿
  133.                             DO=1;
  134.                             for(i=0;i<8;i++)
  135.                             {
  136.                                           SCL=1;
  137.                                           SCL=0; //開始從第四個(gè)下降沿接收數(shù)據(jù)
  138.                                           value<<=1;
  139.                                           if(DO)
  140.                                                         value++;                                                                                   
  141.                             }
  142.                             for(i=0;i<8;i++)
  143.                             {                                          //接收校驗(yàn)數(shù)據(jù)
  144.                                           value1>>=1;
  145.                                           if(DO)
  146.                                                         value1+=0x80;
  147.                                           SCL=1;
  148.                                           SCL=0;
  149.                             }
  150.                             CS=1;
  151.                             SCL=1;            
  152.                             if(value==value1)                                                        //與校驗(yàn)數(shù)據(jù)比較,正確就返回?cái)?shù)據(jù),否則返回0            
  153.                                           return value;
  154.               return 0;
  155. }
  156. /****************報(bào)警函數(shù)***************/
  157. void clock_h_l()
  158. {
  159.               static uchar value;
  160.               if((dengji >= s_dengji) || (temperature >= s_temp) || (shoudong == 1))                            //報(bào)警
  161.               {
  162.                             value ++;
  163.                             if(value >= 3)
  164.                             {
  165.                                           value = 10;
  166.                                           beep = ~beep;                //蜂鳴器報(bào)警
  167.                             }
  168.               }else
  169.               {
  170.                             if((dengji < s_dengji) && (temperature < (s_temp - 1)) && (shoudong == 0))                //取消報(bào)警
  171.                             {
  172.                                           value = 0;
  173.                                           beep = 1;
  174.                             }            
  175.               }
  176. }
  177. void main()
  178. {
  179.               static uchar value;
  180.               temperature = read_temp();  //讀取溫度值
  181.               init_eepom();                                                //讀eepom數(shù)據(jù)
  182.               time_init();                                                        //初始化定時(shí)器
  183.               delay_1ms(650);                                                      
  184.               while(1)
  185.               {
  186.                             key();                                                                      //獨(dú)立按鍵程序
  187.                             if(key_can < 10)
  188.                             {
  189.                                           key_with();                                          //按鍵按下要執(zhí)行的程序
  190.                             }
  191.                             temperature = read_temp();  //讀取溫度值
  192.                             if(flag_300ms == 1)
  193.                             {                           
  194.                                           flag_300ms = 0;
  195.                                           clock_h_l();
  196.                                           dengji = ad0832read(1,0);            
  197.                                           dengji = dengji * 10 / 250;
  198.                                           huoyan = ad0832read(1,1);            
  199.                                           huoyan = 10 - huoyan * 10 / 250;
  200.                                           if(menu_1 == 0)
  201.                                           {
  202.                                                         if(temperature >= 99)
  203.                                                                       temperature = 99;
  204.                                                         if(value > 20)
  205.                                                                       value = 0;
  206.                                                         if(huoyan < 2)
  207.                                                         {            
  208.                                                                       smg_i = 4;
  209.                                                                       dis_smg[3]=smg_du[dengji];                  //顯示煙物報(bào)警等級(jí)
  210.                                                                       dis_smg[2]= 0xbf;                          // -                           
  211. ……………………

  212. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………

復(fù)制代碼

所有資料51hei提供下載:

基于STC89C52的火災(zāi)自動(dòng)報(bào)警系統(tǒng)的設(shè)計(jì)與開發(fā).docx (2.51 MB, 下載次數(shù): 141)




回復(fù)

使用道具 舉報(bào)

ID:758513 發(fā)表于 2020-5-22 17:06 | 顯示全部樓層
厲害,俺都看不懂
回復(fù)

使用道具 舉報(bào)

ID:1121795 發(fā)表于 2024-6-5 19:47 | 顯示全部樓層
有源代碼嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表