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

QQ登錄

只需一步,快速開始

搜索
查看: 18108|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的MQ-2煙霧報(bào)警設(shè)計(jì)論文與源碼下載

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

摘要

隨著現(xiàn)代家庭用火、用電量的增加,家庭煙霧發(fā)生的頻率越來越高。煙霧報(bào)警器也隨之被廣泛應(yīng)用于各種場(chǎng)合。
本課題所研究的無線多功能煙霧報(bào)警器采用STC89C51為核心控制器,利用氣體傳感器MQ-2、ADC0832模數(shù)轉(zhuǎn)換器、DS18B20溫度傳感器等實(shí)現(xiàn)基本功能。通過這些傳感器和芯片,當(dāng)環(huán)境中可燃?xì)怏w濃度或溫度等發(fā)生變化時(shí)系統(tǒng)會(huì)發(fā)出相應(yīng)的燈光報(bào)警信號(hào)和聲音報(bào)警信號(hào),以此來實(shí)現(xiàn)煙霧報(bào)警,智能化提示。

目錄
摘要
Abstract
目錄
1 緒論
1.1 課題的研究背景
1.2 課題的研究目的與意義
1.3 煙霧報(bào)警器的發(fā)展與現(xiàn)狀
1.4課題的研究內(nèi)容
2 煙霧報(bào)警器的總體方案設(shè)計(jì)
2.1系統(tǒng)的功能要求
2.2 系統(tǒng)的技術(shù)要求
2.3 系統(tǒng)的組成及方案設(shè)計(jì)
3 系統(tǒng)的硬件設(shè)計(jì)
3.1 主控電路
3.2 煙霧探測(cè)電路的設(shè)計(jì)
3.2.1 MQ-2介紹
3.2.2 ADC0832介紹
3.3 液晶顯示電路設(shè)計(jì)
3.4 聲光報(bào)警提示電路
3.4.1 燈光提示電路
3.4.2 聲音報(bào)警電路
3.5 溫度采集電路
3.5.1 DS18B20概述
3.5.2 DS18B20引腳介紹
3.5.3 DS18B20的內(nèi)部結(jié)構(gòu)
3.5.4 DS18B20的程序流程圖
3.6 按鍵電路
4 系統(tǒng)的軟件設(shè)計(jì)
4.1 軟件介紹
4.2 系統(tǒng)程序流程圖
5煙霧報(bào)警器的測(cè)試結(jié)果及結(jié)論
5.1 調(diào)試
5.2 結(jié)論
致謝
參考文獻(xiàn)
源程序

1 緒論


1.1 課題的研究背景


煙霧作為一種在時(shí)空上失去控制的燃燒所引發(fā)的災(zāi)害,對(duì)人類生命財(cái)產(chǎn)和社會(huì)安全構(gòu)成了極大的威脅。由此引發(fā)的重大安全事故比皆是,所以人類一直也未停止過對(duì)它的研究。

煙霧早已成為我國常發(fā)性和破壞性以及影響力最強(qiáng)的災(zāi)害之一。隨著經(jīng)濟(jì)和城市建設(shè)的快速發(fā)展,城市高層、地下建筑以及大型綜合性建筑日益增多,煙霧隱患也大大增加,煙霧發(fā)生的數(shù)量及其造成的損失呈逐年上升趨勢(shì)。

  在過去的很長一段時(shí)間,人類不得不進(jìn)行專題研究煙霧過程中爆發(fā),截至目前,已形成一個(gè)較為成熟的概念。煙霧的發(fā)生和發(fā)展過程是一個(gè)復(fù)雜的物理和化學(xué)過程,但也與環(huán)境很強(qiáng)的相關(guān)性。正常情況下,發(fā)生火警,伴隨著煙霧,溫度,光照,信號(hào)產(chǎn)生的過程。產(chǎn)生不同的環(huán)境和不同的火燃燒成分,煙霧粒度組成,溫度分布和光譜的氣體成分是不同的,所以火過程中涉及多個(gè)物理和化學(xué)參數(shù),特點(diǎn)是強(qiáng)大的,一般的騷亂有著本質(zhì)的不同;谏鲜鎏攸c(diǎn),早起的煙霧探測(cè)技術(shù)應(yīng)運(yùn)而生,特別是多的煙霧探測(cè)技術(shù)被廣泛采用在煙霧探測(cè)領(lǐng)域,如復(fù)合材料的物理參數(shù)復(fù)合煙氣溫度探測(cè)器,使用不同的帶光傳感器的復(fù)合雙波段火焰探測(cè)器。

    在我國,隨著經(jīng)濟(jì)的發(fā)展和生活水平的提高,工業(yè)與民用建設(shè)日趨增多,煙霧發(fā)生的可能性也隨之大幅提高。另外,現(xiàn)代建筑物中塑料制品和玻璃的大量應(yīng)用使火場(chǎng)內(nèi)外部的求援行為困難重重,F(xiàn)代建筑,尤其是在大型酒店,賓館,商場(chǎng),圖書館,博物館,檔案館和辦公樓及其他公共場(chǎng)所,對(duì)于煙霧報(bào)警系統(tǒng)也提出了更高的要求。一旦發(fā)生煙霧將很難及時(shí)救助,勢(shì)必要給國家和個(gè)人帶來不可估量的損失。

基于上述情況,煙霧自動(dòng)報(bào)警技術(shù)便應(yīng)運(yùn)而生,煙霧自動(dòng)報(bào)警系統(tǒng)是始終警惕煙霧報(bào)警和輸出聯(lián)動(dòng)忠實(shí)的哨兵煙霧信號(hào)的有力手段,是一種早期預(yù)警。


1.2 課題的研究目的與意義

目的:隨著現(xiàn)代家庭用火,用電增加,家庭煙霧發(fā)生的頻率越來越高。家庭煙霧,很容易撲滅不及時(shí),有著缺乏消防設(shè)備和在場(chǎng)的人戰(zhàn)斗驚慌失措逃離緩慢的不利因素,最終導(dǎo)致的生命和財(cái)產(chǎn)的重大損失。消防部門的統(tǒng)計(jì)數(shù)據(jù)顯示,所有的煙霧比例中,家庭煙霧占全國煙霧的30%。家庭煙霧的原因是多方面的,可能把我們的注意力,也可能隱藏在我們沒有注意到的地方。

綜上所述,許多人因不懂家庭安全常識(shí)引起煙霧事故,使好端端的幸福家庭眼間毀于一旦,有的導(dǎo)致家破人亡,而且一旦發(fā)生居民家庭煙霧,處置不當(dāng)、報(bào)警遲緩,是造成人員傷亡的重要因素。所以說,人們應(yīng)該積極了解家庭煙霧的主要起因,還有預(yù)防煙霧的發(fā)生。這就是我們研究聲光報(bào)警器的目的。

意義:在中國的一些大、中型城市,幾乎每一天發(fā)生家庭煙霧,所以每一個(gè)家庭必須始終關(guān)注防火。如果能根據(jù)你家的實(shí)際情況,提前采取簡單的防火措施,有些悲劇是完全可以避免的。聲音和視覺的報(bào)警,對(duì)減少煙霧損失具有現(xiàn)實(shí)意義。

一系列悲劇性的損失,由國家從社會(huì)各界意識(shí)到,聲光報(bào)警對(duì)煙霧的報(bào)警的必要性。據(jù)調(diào)查,在最近的煙霧大部分的房子里還沒有安裝報(bào)警器。因此聲光報(bào)警,對(duì)發(fā)生煙霧預(yù)防具有重要意義。


1.3 煙霧報(bào)警器的發(fā)展與現(xiàn)狀


近年來,無線煙霧報(bào)警系統(tǒng)在國外已被開發(fā),并走向?qū)嵱。起初,無線煙霧報(bào)警系統(tǒng)不僅是價(jià)格貴,還必須連接布線,這是只適合一些特殊的地方,檢測(cè)設(shè)備的一部分。今天,幾乎所有的電氣裝置,可以通過無線遙控改變,可廣泛應(yīng)用于各類建筑和場(chǎng)所。美國松柏公司(ITI)成立于1981年,是美國最大的無線報(bào)警系統(tǒng)制造商制造,其產(chǎn)品占90%的無線報(bào)警器在北美市場(chǎng)的年銷售額已接近一億美元。該公司生產(chǎn)的無線煙霧報(bào)警系統(tǒng)還通過了中國的“國家消防電子產(chǎn)品質(zhì)量監(jiān)督檢驗(yàn)測(cè)試中心”的監(jiān)測(cè),該系統(tǒng)可作為煙霧報(bào)警系統(tǒng),但也可作為一個(gè)安全的系統(tǒng),兩者的結(jié)合,是一個(gè)高科技的無線安全系統(tǒng)。

    煙霧報(bào)警系統(tǒng)在中國相對(duì)較晚,與發(fā)達(dá)國家相比, 20世紀(jì)70年代末的十年間,中國開始研制生產(chǎn)的煙霧報(bào)警系統(tǒng)。 20世紀(jì)80年代后,國內(nèi)各大廠商也大多是模仿國外產(chǎn)品,或引進(jìn)國外技術(shù)生產(chǎn)的,沒有真正意義上的核心技術(shù),市場(chǎng)剛剛開始發(fā)展。真正的煙霧報(bào)警產(chǎn)品的發(fā)展也促進(jìn)了市場(chǎng)的成熟,政府逐步開放的大門,在同一時(shí)間,外國公司開始進(jìn)入中國的防火市場(chǎng),帶來先進(jìn)的技術(shù)在20世紀(jì)90年代。此期間,中國生產(chǎn)的煙霧報(bào)警產(chǎn)品的企業(yè)也得到了快速發(fā)展,在一些企業(yè)中,技術(shù)合作,合資生產(chǎn),并取得了不菲的成績,但今天在市場(chǎng)上創(chuàng)造了許多強(qiáng)大的企業(yè),有些技術(shù)已接近或趕上國際標(biāo)準(zhǔn)。

1.4課題的研究內(nèi)容


煙霧報(bào)警器,主要檢測(cè)溫度和煙霧,再通過單片機(jī)控制相應(yīng)的報(bào)警和驅(qū)動(dòng)負(fù)載。通過液晶顯示當(dāng)前的煙霧值和溫度值,通過按鍵設(shè)定相應(yīng)的閥值。

該項(xiàng)目主要是為了完成任務(wù),包括:

⑴硬件部分:包括傳感器的選擇,顯示模塊的選擇,煙霧信號(hào)轉(zhuǎn)換電路的設(shè)計(jì),報(bào)警驅(qū)動(dòng)電路的設(shè)計(jì)。

(2)軟件部分:包括微處理器控制程序的編制和原理圖的繪制。

(3)系統(tǒng)的綜合調(diào)試與分析:在軟硬件完成以后,要對(duì)系統(tǒng)進(jìn)行綜合的測(cè)試與實(shí)驗(yàn),分析系統(tǒng)的可靠性與實(shí)用性,調(diào)整系統(tǒng)的不足。












2 煙霧報(bào)警器的總體方案設(shè)計(jì)


本課題主要是實(shí)現(xiàn)煙霧報(bào)警和煙霧發(fā)生時(shí)的報(bào)警及控制,下面分別對(duì)系統(tǒng)功能要求、系統(tǒng)技術(shù)要求及系統(tǒng)實(shí)現(xiàn)方案總體闡述。


2.1系統(tǒng)的功能要求

本系統(tǒng)的研制主要包括以下幾項(xiàng)功能:

(1)火情探測(cè)功能:為了提高煙霧報(bào)警的準(zhǔn)確性和及時(shí)性,煙霧報(bào)警系統(tǒng)需要使用各種方法進(jìn)行煙霧探測(cè)。在實(shí)際使用中,根據(jù)不同的防火場(chǎng)所,用戶可以選用溫度探測(cè)法、可燃?xì)怏w檢測(cè)法及煙霧探測(cè)法等合適的煙霧探測(cè)方法,來有效的探測(cè)煙霧;

(2)燈光報(bào)警功能:當(dāng)室內(nèi)煙霧濃度過大、有火情產(chǎn)生、故障等異常情況發(fā)生時(shí),報(bào)警器要進(jìn)行燈光報(bào)警。當(dāng)煙霧超過最大設(shè)定值時(shí),可以蜂鳴器報(bào)警。


2.2 系統(tǒng)的技術(shù)要求

在了解這個(gè)系統(tǒng)的工作原理以及功能之后,我們就可以基本確定系統(tǒng)的技術(shù)要求。系統(tǒng)采用的單片機(jī)處理器成本都比較低,可以滿足批量生產(chǎn)和各類工程的需求。對(duì)于完整的一個(gè)系統(tǒng)而言,為提高市場(chǎng)的競爭力,這個(gè)系統(tǒng)應(yīng)符合體積小、功耗低、數(shù)傳性能可靠和成本低廉等技術(shù)要求。具體指標(biāo)和參數(shù)如下:

(1)體積。禾綔y(cè)器的體積要盡可能的小,這樣占用的空間才能減少,使用和更換才會(huì)方便;

(2)功耗低:系統(tǒng)可以采用三節(jié)5號(hào)干電池供電或5v電源供電。

(3)可靠性高:由于不確定的電磁干擾可能存在在系統(tǒng)工作環(huán)境中,為了保證系統(tǒng)長時(shí)間的可靠工作,以及減少誤報(bào)次數(shù),所以選擇多指示燈,指示不同的狀態(tài)。

2.3 系統(tǒng)的組成及方案設(shè)計(jì)

本設(shè)計(jì)主要由煙霧探測(cè)傳感器電路、單片機(jī)、燈光報(bào)警電路、負(fù)載驅(qū)動(dòng)電路、控制程序和編解碼程序等組成。

系統(tǒng)的組成結(jié)構(gòu)如下:














3 系統(tǒng)的硬件設(shè)計(jì)


總體電路

圖3.1

如圖3.1所示,上面的圖為protel99se所畫,下面的圖為proteus仿真所畫。

實(shí)時(shí)顯示當(dāng)前的煙霧值和溫度值,共有2個(gè)報(bào)警值(可以通過按鍵設(shè)定),分別是溫度的上限和煙霧的上限報(bào)警值,當(dāng)煙霧超過的時(shí)候紅燈和蜂鳴器聲光報(bào)警,當(dāng)溫度超過時(shí)候黃燈和蜂鳴器聲光報(bào)警。

3.1 主控電路

STC89C51是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C51為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32位I/O 口線,看門狗定時(shí)器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口。另外 STC89X51 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式?臻e模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。最高運(yùn)作頻率35Mhz,6T/12T可選。STC89C51主要功能如表1所示,其DIP封裝如圖2所示

表1:STC89C51主要功能

主要功能特性
兼容MCS51指令系統(tǒng)
4K可反復(fù)擦寫Flash ROM
32個(gè)雙向I/O口
256x8bit內(nèi)部RAM
3個(gè)16位可編程定時(shí)/計(jì)數(shù)器中斷
時(shí)鐘頻率0-24MHz
2個(gè)串行中斷
可編程UART串行通道
2個(gè)外部中斷源
共6個(gè)中斷源
2個(gè)讀寫中斷口線
3級(jí)加密位
低功耗空閑和掉電模式
軟件設(shè)置睡眠和喚醒功能

STC89C52引腳介紹

① 主電源引腳(2根)

VCC(Pin40):電源輸入,接+5V電源

GND(Pin20):接地線

②外接晶振引腳(2根)

XTAL1(Pin19):片內(nèi)振蕩電路的輸入端

XTAL2(Pin20):片內(nèi)振蕩電路的輸出端

③控制引腳(4根)

RST/VPP(Pin9):復(fù)位引腳,引腳上出現(xiàn)2個(gè)機(jī)器周期的高電平將使單片機(jī)復(fù)位。

ALE/PROG(Pin30):地址鎖存允許信號(hào)

PSEN(Pin29):外部存儲(chǔ)器讀選通信號(hào)

EA/VPP(Pin31):程序存儲(chǔ)器的內(nèi)外部選通,接低電平從外部程序存儲(chǔ)器讀指令,如果接高電平則從內(nèi)部程序存儲(chǔ)器讀指令。

④可編程輸入/輸出引腳(32根)

STC89C52單片機(jī)有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個(gè)口有8位(8根引腳),共32根。

P0口(Pin39~Pin32):8位雙向I/O口線,名稱為P0.0~P0.7

P1口(Pin1~Pin8):8位準(zhǔn)雙向I/O口線,名稱為P1.0~P1.7

P2口(Pin21~Pin28):8位準(zhǔn)雙向I/O口線,名稱為P2.0~P2.7

P3口(Pin10~Pin17):8位準(zhǔn)雙向I/O口線,名稱為P3.0~P3.7

作頻率35Mhz,6T/12T可選。
圖3.2  STC89C51 DIP封裝圖
最小系統(tǒng)包括單片機(jī)及其所需的必要的電源、時(shí)鐘、復(fù)位等部件,能使單片機(jī)始終處于正常的運(yùn)行狀態(tài)。電源、時(shí)鐘等電路是使單片機(jī)能運(yùn)行的必備條件,可以將最小系統(tǒng)作為應(yīng)用系統(tǒng)的核心部分,通過對(duì)其進(jìn)行存儲(chǔ)器擴(kuò)展、A/D擴(kuò)展等,使單片機(jī)完成較復(fù)雜的功能。
STC89C51是片內(nèi)有ROM/EPROM的單片機(jī),因此,這種芯片構(gòu)成的最小系統(tǒng)簡單﹑可靠。用STC89C52單片機(jī)構(gòu)成最小應(yīng)用系統(tǒng)時(shí),只要將單片機(jī)接上時(shí)鐘電路和復(fù)位電路即可,結(jié)構(gòu)如圖2-3所示,由于集成度的限制,最小應(yīng)用系統(tǒng)只能用作一些小型的控制單元。

圖3.2單片機(jī)最小系統(tǒng)原理框圖

(1) 時(shí)鐘電路
STC89C51單片機(jī)的時(shí)鐘信號(hào)通常有兩種方式產(chǎn)生:一是內(nèi)部時(shí)鐘方式,二是外部時(shí)鐘方式。內(nèi)部時(shí)鐘方式如圖2-4所示。在STC89C51單片機(jī)內(nèi)部有一振蕩電路,只要在單片機(jī)的XTAL1(18)和XTAL2(19)引腳外接石英晶體(簡稱晶振),就構(gòu)成了自激振蕩器并在單片機(jī)內(nèi)部產(chǎn)生時(shí)鐘脈沖信號(hào)。圖中電容C1和C2的作用是穩(wěn)定頻率和快速起振,電容值在5~30pF,典型值為30pF。晶振CYS的振蕩頻率范圍在1.2~12MHz間選擇,典型值為12MHz和6MHz。

圖3.4 STC89C51內(nèi)部時(shí)鐘電路
(2) 復(fù)位電路
當(dāng)在STC89C51單片機(jī)的RST引腳引入高電平并保持2個(gè)機(jī)器周期時(shí),單片機(jī)內(nèi)部就執(zhí)行復(fù)位操作(若該引腳持續(xù)保持高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài))。
最簡單的上電自動(dòng)復(fù)位電路中上電自動(dòng)復(fù)位是通過外部復(fù)位電路的電容充放電來實(shí)現(xiàn)的。只要Vcc的上升時(shí)間不超過1ms,就可以實(shí)現(xiàn)自動(dòng)上電復(fù)位。
除了上電復(fù)位外,有時(shí)還需要按鍵手動(dòng)復(fù)位。本設(shè)計(jì)就是用的按鍵手動(dòng)復(fù)位。按鍵手動(dòng)復(fù)位有電平方式和脈沖方式兩種。其中電平復(fù)位是通過RST(9)端與電源Vcc接通而實(shí)現(xiàn)的。

圖3.5 STC89C51復(fù)位電路
(3) STC89C51中斷技術(shù)概述
中斷技術(shù)主要用于實(shí)時(shí)監(jiān)測(cè)與控制,要求單片機(jī)能及時(shí)地響應(yīng)中斷請(qǐng)求源提出的服務(wù)請(qǐng)求,并作出快速響應(yīng)、及時(shí)處理。這是由片內(nèi)的中斷系統(tǒng)來實(shí)現(xiàn)的。當(dāng)中斷請(qǐng)求源發(fā)出中斷請(qǐng)求時(shí),如果中斷請(qǐng)求被允許,單片機(jī)暫時(shí)中止當(dāng)前正在執(zhí)行的主程序,轉(zhuǎn)到中斷服務(wù)處理程序處理中斷服務(wù)請(qǐng)求。中斷服務(wù)處理程序處理完中斷服務(wù)請(qǐng)求后,再回到原來被中止的程序之處(斷點(diǎn)),繼續(xù)執(zhí)行被中斷的主程序。
圖2-6為整個(gè)中斷響應(yīng)和處理過程。

              圖3.6  中斷響應(yīng)和處理過程
如果單片機(jī)沒有中斷系統(tǒng),單片機(jī)的大量時(shí)間可能會(huì)浪費(fèi)在查詢是否有服務(wù)請(qǐng)求發(fā)生的定時(shí)查詢操作上。采用中斷技術(shù)完全消除了單片機(jī)在查詢方式中的等待現(xiàn)象,大大地提高了單片機(jī)的工作效率和實(shí)時(shí)性。

3.2 煙霧探測(cè)電路的設(shè)計(jì)

圖3.7 煙霧探測(cè)電路

如圖3.7所示,在這個(gè)電路中,有兩個(gè)部分,主要是煙霧傳感器檢測(cè)煙霧,將電壓信號(hào)給ADC0832,模數(shù)轉(zhuǎn)換電路將模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)給單片機(jī),單片機(jī)再讀取相應(yīng)的數(shù)值和處理。

3.2.1 MQ-2介紹

MQ-2型氣體傳感器用于以氫氣為主要成分的城市煤氣、天然氣、液化石油的測(cè)量,而且它抗干擾能力強(qiáng),水蒸氣、煙等干擾氣體對(duì)它的影響小。

MQ-2型氣敏元件具有以下特點(diǎn):

(1) 采用燒結(jié)半導(dǎo)體所形成的敏感燒結(jié)體,具有穩(wěn)定的R (即器件在純潔空氣中的阻抗)阻值,從而保證了長期工作的穩(wěn)定性。

(2) 單電源供電,其功耗僅0.7W左右。

(3) 對(duì)所測(cè)試的氣體有極高的靈敏度和信噪比。

MQ-2型氣敏元件有兩種型號(hào)。MQ-2A型適用于天然氣、城市煤氣、石油液化氣、丙丁烷及氫氣等;MQ-2型適用于煙霧等減光型有害氣體。

器件的靈敏度:S=Ro/Rx為10~30。常見為QM系列的S值僅8左右。Rx為器件在丁烷濃度為0.2%時(shí)的阻抗。

電路如右圖所示:

器件的主要參數(shù)如下:

響應(yīng)時(shí)間:Tr≤10s

恢復(fù)時(shí)間:Tn≤60s

加熱電壓:V﹢=5+0.2V

加熱功率::約0.7W

抗干擾能力:丁烷濃度在0.2%時(shí)在濕度小于85%RH,在-10℃~+40℃溫度下不會(huì)引起誤報(bào)。                                                                           

工作環(huán)境:溫度-10℃~+50℃     濕度≤85%RH

下圖是元件外形結(jié)構(gòu)圖,基座采用耐高溫酚醛塑料壓制,引腳為鍍鎳銅絲,上罩采用雙層密紋不銹鋼網(wǎng)壓制,有較高的強(qiáng)度和防爆能力。

MQK-2型元件外形結(jié)構(gòu)圖

MQ-2氣敏元件的結(jié)構(gòu)和外形如上圖所示, 由微型AL2O3陶瓷管、SnO2 敏感層,測(cè)量電極和加熱器構(gòu)成的敏感元件固定在塑料或不銹鋼制成的腔體內(nèi),加熱器為氣敏元件提供了必要的工作條件。封裝好的氣敏元件有6只針狀管腳,其中4個(gè)用于信號(hào)取出,2個(gè)用于提供加熱電流。

上圖是MQ-2型元件典型氣體濃度測(cè)試特性曲線,在丁烷濃度0.6%以下有極高的靈敏度。

上圖是MQ-2型元件通電時(shí)間特性曲線?煽闯,通電后60~90s,元件即進(jìn)入穩(wěn)定待測(cè)工作狀態(tài)。

MQ-2的特點(diǎn)和工作參數(shù)如下:

特點(diǎn):

⑴ 廣泛的探測(cè)范圍               

⑵ 高靈敏度/快速響應(yīng)恢復(fù)

⑶ 優(yōu)異的穩(wěn)定性/長壽命         

⑷ 簡單的驅(qū)動(dòng)電路

3.2.2 ADC0832介紹

ADC0832 是美國國家半導(dǎo)體公司生產(chǎn)的一種8 位分辨率、雙通道A/D轉(zhuǎn)換芯片。由于它體積小,兼容性,性價(jià)比高而深受單片機(jī)愛好者及企業(yè)歡迎,其目前已經(jīng)有很高的普及率。學(xué)習(xí)并使用ADC0832 可是使我們了解A/D轉(zhuǎn)換器的原理,有助于我們單片機(jī)技術(shù)水平的提高。

分辨率8位

A/D轉(zhuǎn)換器逐次逼近式

A/D轉(zhuǎn)換雙通道

· 輸入輸出電平與TTL/CMOS相兼容;

· 5V電源供電時(shí)輸入電壓在0~5V之間;

· 工作頻率為250KHZ,轉(zhuǎn)換時(shí)間為32μS;

· 一般功耗僅為15mW;

· 8P、14P—DIP(雙列直插)、PICC 多種封裝;

· 商用級(jí)芯片溫寬為0°C to +70°C,工業(yè)級(jí)芯片溫寬為−40°C to +85°C;

芯片接口說明:

· CS_片選使能,低電平芯片使能。

· CH0 模擬輸入通道0,或作為IN+/-使用。

· CH1 模擬輸入通道1,或作為IN+/-使用。

· GND 芯片參考0 電位(地)。

· DI 數(shù)據(jù)信號(hào)輸入,選擇通道控制。

· DO 數(shù)據(jù)信號(hào)輸出,轉(zhuǎn)換數(shù)據(jù)輸出。

· CLK 芯片時(shí)鐘輸入。

· Vcc/REF 電源輸入及參考電壓輸入(復(fù)用)。

ADC0832 為8位分辨率A/D轉(zhuǎn)換芯片,其最高分辨可達(dá)256級(jí),可以適應(yīng)一般的模擬量轉(zhuǎn)換要求。其內(nèi)部電源輸入與參考電壓的復(fù)用,使得芯片的模擬電壓輸入在0~5V之間。芯片轉(zhuǎn)換時(shí)間僅為32μS,據(jù)有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗(yàn),以減少數(shù)據(jù)誤差,轉(zhuǎn)換速度快且穩(wěn)定性能強(qiáng)。獨(dú)立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過DI 數(shù)據(jù)輸入端,可以輕易的實(shí)現(xiàn)通道功能的選擇。


3.3 液晶顯示電路設(shè)計(jì)

圖3.8 液晶顯示電路設(shè)計(jì)


LCD1602A 是一種工業(yè)字符型液晶,能夠同時(shí)顯示16x02 即32個(gè)字符。(16列2行)。在日常生活中,我們對(duì)液晶顯示器并不陌生。液晶顯示模塊已作為很多電子產(chǎn)品的通過器件,如在計(jì)算器、萬用表、電子表及很多家用電子產(chǎn)品中都可以看到,顯示的主要是數(shù)字、專用符號(hào)和圖形。在單片機(jī)的人機(jī)交流界面中,一般的輸出方式有以下幾種:發(fā)光管、LED數(shù)碼管、液晶顯示器。發(fā)光管和LED數(shù)碼管比較常用,軟硬件都比較簡單。
在單片機(jī)系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個(gè)優(yōu)點(diǎn):
由于液晶顯示器每一個(gè)點(diǎn)在收到信號(hào)后就一直保持那種色彩和亮度,恒定發(fā)光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新新亮點(diǎn)。因此,液晶顯示器畫質(zhì)高且不會(huì)閃爍。
液晶顯示器都是數(shù)字式的,和單片機(jī)系統(tǒng)的接口更加簡單可靠,操作更加方便。
液晶顯示器通過顯示屏上的電極控制液晶分子狀態(tài)來達(dá)到顯示的目的,在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。
相對(duì)而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動(dòng)IC上,因而耗電量比其它顯示器要少得多。
(1)引腳說明:
第1腳:VSS為地電源。
第2腳:VDD接5V正電源。
第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對(duì)比度。
第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。
第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平
R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。
第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。
第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。
第15腳:背光源正極。
第16腳:背光源負(fù)極。
(2)1602LCD的RAM地址映射以及標(biāo)準(zhǔn)字庫表
LCD1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字符圖有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母。
它的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的(說明:1為高電平,0為低電平)。
指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置。
指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H 。
指令3:光標(biāo)和顯示模式設(shè)置 I/D:光標(biāo)移動(dòng)方向,高電平右移,低電平左移 。S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效 。
指令4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示。 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo)。 B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍 。
指令5:光標(biāo)或顯示移位 S/C:高電平時(shí)移動(dòng)顯示的文字,低電平時(shí)移動(dòng)光標(biāo) 。
指令6:功能設(shè)置命令 DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線。      N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示。 F:低電平時(shí)顯示5X7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符 (有些模塊是 DL:高電平時(shí)為8位總線,低電平時(shí)為4位總線)。
指令7:字符發(fā)生器RAM地址設(shè)置 。
指令8:DDRAM地址設(shè)置 。
指令9:讀出忙信號(hào)和光標(biāo)地址。 BF為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙,模塊就能接收相應(yīng)的命令或者數(shù)據(jù)。
指令10:寫數(shù)據(jù) 。
指令11:讀數(shù)據(jù) 。
液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。
1602 內(nèi)部顯示地址如圖3-6所示:
                         圖3-6 1602內(nèi)部顯示地址
例如第二行第一個(gè)字符的地址是40H,那么是否直接寫入40H 就可以將光標(biāo)定位在第二行第 一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7恒定為高電平1,所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H) 。在對(duì)液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時(shí)光標(biāo)是自動(dòng)右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。1602 液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如下圖所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H 中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”。

液晶顯示的原理是利用液晶的物理特性, 通過電壓對(duì)其顯示區(qū)域進(jìn)行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規(guī)模集成電路直接驅(qū)動(dòng)、易于實(shí)現(xiàn)全彩色顯示的特點(diǎn),目前已經(jīng)被廣泛應(yīng)用在便攜式電腦、數(shù)字?jǐn)z像機(jī)、PDA移動(dòng)通信工具等眾多領(lǐng)域。

3.4 聲光報(bào)警提示電路

3.4.1 燈光提示電路

圖3.9燈光提示電路

LED英文單詞的縮寫,主要含義:LED = Light Emitting Diode,發(fā)光二極管,是一種能夠?qū)㈦娔苻D(zhuǎn)化為可見光的固態(tài)的半導(dǎo)體器件,它可以直接把電轉(zhuǎn)化為光;它改變了白熾燈鎢絲發(fā)光與節(jié)能燈三基色粉發(fā)光的原理,而采用電場(chǎng)發(fā)光。據(jù)分析,LED的特點(diǎn)非常明顯,壽命長、光效高、輻射低與功耗低。作為目前全球最受矚目的新一代光源,LED因其高亮度、低熱量、長壽命、無毒、可回收再利用等優(yōu)點(diǎn),被稱為是21世紀(jì)最有發(fā)展前景的綠色照明光源。我國的LED產(chǎn)業(yè)起步于20世紀(jì)70年代,經(jīng)過近40年的發(fā)展,產(chǎn)品廣泛應(yīng)用于景觀照明和普通照明領(lǐng)域,我國已成為世界第一大照明電器生產(chǎn)國和第二大照明電器出口國。近幾年來,隨著人們對(duì)半導(dǎo)體發(fā)光材料研究的不斷深入,LED制造工藝的不斷進(jìn)步和新材料(氮化物晶體和熒光粉)的開發(fā)和應(yīng)用,各種顏色的超高亮度LED取得了突破性進(jìn)展,其發(fā)光效率提高了近1000倍,色度方面已實(shí)現(xiàn)了可見光波段的所有顏色,其中最重要的是超高亮度白光LED的出現(xiàn),使LED應(yīng)用領(lǐng)域跨越至高效率照明光源市場(chǎng)成為可能。曾經(jīng)有人指出,高亮度LED將是人類繼愛迪生發(fā)明白熾燈泡后,最偉大的發(fā)明之一。 本設(shè)計(jì)利用不同顏色的LED指示不同的煙霧濃度報(bào)警。

3.4.2 聲音報(bào)警電路

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

蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器等電子產(chǎn)品中作發(fā)聲器件。 ;蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。蜂鳴器在電路中用字母“H”或“HA”(舊標(biāo)準(zhǔn)用“FM”、“LB”、“JD”等)表示。1.壓電式蜂鳴器 壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。有的壓電式蜂鳴器外殼上還裝有發(fā)光二極管。
多諧振蕩器由晶體管或集成電路構(gòu)成。當(dāng)接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號(hào),阻抗匹配器推動(dòng)壓電蜂鳴片發(fā)聲。
壓電蜂鳴片由鋯鈦酸鉛或鈮鎂酸鉛壓電陶瓷材料制成。在陶瓷片的兩面鍍上銀電極,經(jīng)極化和老化處理后,再與黃銅片或不銹鋼片粘在一起。
電磁式蜂鳴器 電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼等組成。
接通電源后,振蕩器產(chǎn)生的音頻信號(hào)電流通過電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng)。振動(dòng)膜片在電磁線圈和磁鐵的相互纏繞
蜂鳴器驅(qū)動(dòng)電路一般都包含以下幾個(gè)部分:一個(gè)三極管、一個(gè)蜂鳴器、一個(gè)限流電阻。
蜂鳴器為發(fā)聲元件,在其兩端施加直流電壓(有源蜂鳴器)或者方波(無源蜂鳴器)就可以發(fā)聲,其主要參數(shù)是外形尺寸、發(fā)聲方向、工作電壓、工作頻率、工作電流、驅(qū)動(dòng)方式(直流/方波)等。這些都可以根據(jù)需要來選擇。本設(shè)計(jì)采用有源蜂鳴器。
三極管Q1起開關(guān)作用,其基極的低電平使三極管飽和導(dǎo)通,使蜂鳴器發(fā)聲;而基極高電平則使三極管關(guān)閉,蜂鳴器停止發(fā)聲。

3.6 按鍵電路

本設(shè)計(jì)采用按鍵接低的方式來讀取按鍵,單片機(jī)初始時(shí),因?yàn)闉楦唠娖剑?dāng)按鍵按下的時(shí)候,會(huì)給單片機(jī)一個(gè)低電平,單片機(jī)對(duì)信號(hào)進(jìn)行處理

單片機(jī)鍵盤有獨(dú)立鍵盤和矩陣式鍵盤兩種:獨(dú)立鍵盤每一個(gè)I/O 口上只接一個(gè)按鍵,按鍵的另一端接電源或接地(一般接地),這種接法程序比較簡單且系統(tǒng)更加穩(wěn)定;而矩陣式鍵盤式接法程序比較復(fù)雜,但是占用的I/O少。根據(jù)本設(shè)計(jì)的需要這里選用了獨(dú)立式鍵盤接法。

獨(dú)立式鍵盤的實(shí)現(xiàn)方法是利用單片機(jī)I/O口讀取口的電平高低來判斷是否有鍵按下。將常開按鍵的一端接地,另一端接一個(gè)I/O 口,程序開始時(shí)將此I/O口置于高電平,平時(shí)無鍵按下時(shí)I/O口保護(hù)高電平。當(dāng)有鍵按下時(shí),此I/O 口與地短路迫使I/O 口為低電平。按鍵釋放后,單片機(jī)內(nèi)部的上拉電阻使I/O口仍然保持高電平。我們所要做的就是在程序中查尋此I/O口的電平狀態(tài)就可以了解我們是否有按鍵動(dòng)作了。

在用單片機(jī)對(duì)鍵盤處理的時(shí)候涉及到了一個(gè)重要的過程,那就是鍵盤的去抖動(dòng)。這里說的抖動(dòng)是機(jī)械的抖動(dòng),是當(dāng)鍵盤在未按到按下的臨界區(qū)產(chǎn)生的電平不穩(wěn)定正,F(xiàn)象,并不是我們?cè)诎存I時(shí)通過注意可以避免的。這種抖動(dòng)一般10~200毫秒之間,這種不穩(wěn)定電平的抖動(dòng)時(shí)間對(duì)于人來說太快了,而對(duì)于時(shí)鐘是微秒的單片機(jī)而言則是慢長的。硬件去抖動(dòng)就是用部分電路對(duì)抖動(dòng)部分加之處理,軟件去抖動(dòng)不是去掉抖動(dòng),而是避抖動(dòng)部分的時(shí)間,等鍵盤穩(wěn)定了再對(duì)其處理。所以這里選擇了軟件去抖動(dòng),實(shí)現(xiàn)法是先查尋按鍵當(dāng)有低電平出現(xiàn)時(shí)立即延時(shí)10~200毫秒以避開抖動(dòng)(經(jīng)典值為20毫秒),延時(shí)結(jié)束后再讀一次I/O 口的值,這一次的值如果為1 表示低電平的時(shí)間不到10~200 毫秒,視為干擾信號(hào)。當(dāng)讀出的值是0時(shí)則表示有按鍵按下,調(diào)用相應(yīng)的處理程序。硬件電路如圖3.12所示:

圖3.15 按鍵電路


4 系統(tǒng)的軟件設(shè)計(jì)


4.1 軟件介紹

Keil C51是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會(huì)更加深刻。   Keil C51軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語言的優(yōu)勢(shì)。下面詳細(xì)介紹Keil C51開發(fā)系統(tǒng)各部分功能和使用。Keil_c軟件界面如圖

圖4.1 Keil_c軟件界面

Protel99SE是PORTEL公司在80年代末推出的EDA軟件。Protel99SE是應(yīng)用于Windows9X/2000/NT操作系統(tǒng)下的EDA設(shè)計(jì)軟件,采用設(shè)計(jì)庫管理模式,可以網(wǎng)設(shè)計(jì),具有很強(qiáng)的數(shù)據(jù)交換能力和開放性及3D模擬功能,是一個(gè)32位的設(shè)計(jì)軟件,可以完成電路原理圖設(shè)計(jì),印制電路板設(shè)計(jì)和可編程邏輯器件設(shè)計(jì)等工作,可以設(shè)計(jì)32個(gè)信號(hào)層,16個(gè)電源--地層和16個(gè)機(jī)加工層。

Protel99SE軟件的特點(diǎn):

  • 可生成30多種格式的電氣連接網(wǎng)絡(luò)表;
  • 強(qiáng)大的全局編輯功能;
  • 在原理圖中選擇一級(jí)器件,PCB中同樣的器件也將被選中;
  • 同時(shí)運(yùn)行原理圖和PCB,在打開的原理圖和PCB圖間允許雙向交叉查找元器件、引腳、網(wǎng)絡(luò)
  • 既可以進(jìn)行正向注釋元器件標(biāo)號(hào)(由原理圖到PCB),也可以進(jìn)行反向注釋(由PCB到原理圖),以保持電氣原理圖和PCB在設(shè)計(jì)上的一致性;
  • 滿足國際化設(shè)計(jì)要求(包括國標(biāo)標(biāo)題欄輸出,GB4728國標(biāo)庫); * 方便易用的數(shù)模混合仿真(兼容SPICE 3f5);
  • 支持用CUPL語言和原理圖設(shè)計(jì)PLD,生成標(biāo)準(zhǔn)的JED下載文件; * PCB可設(shè)計(jì)32個(gè)信號(hào)層,16個(gè)電源-地層和16個(gè)機(jī)加工層;
  • 強(qiáng)大的“規(guī)則驅(qū)動(dòng)”設(shè)計(jì)環(huán)境,符合在線的和批處理的設(shè)計(jì)規(guī)則檢查;
  • 智能覆銅功能,覆鈾可以自動(dòng)重鋪;
  • 提供大量的工業(yè)化標(biāo)準(zhǔn)電路板做為設(shè)計(jì)模版;

圖17 Prtel99SE軟件界面

Protel99SE的工作界面是一種標(biāo)準(zhǔn)的Windows界面,如圖所示,包括:標(biāo)題欄、主菜單、標(biāo)準(zhǔn)工具欄、繪圖工具欄、狀態(tài)欄、對(duì)象選擇按鈕、預(yù)覽對(duì)象方位控制按鈕、仿真進(jìn)程控制按鈕、預(yù)覽窗口、對(duì)象選擇器窗口、圖形編輯窗口。

4.2 系統(tǒng)程序流程圖(見附件)

5煙霧報(bào)警器的測(cè)試結(jié)果及結(jié)論

5.1 調(diào)試

調(diào)試過程中首先要檢測(cè)的就是硬件電路的設(shè)計(jì)原理是否正確、能否達(dá)到預(yù)期效果以及實(shí)現(xiàn)方法是否簡便等等;其次在焊接好難有線電路之后,認(rèn)真檢查電路的焊接情況。這次采用的是分塊調(diào)試的方法,煙霧探測(cè)電路,控制電路以及單片機(jī)控制電路進(jìn)行調(diào)試。在對(duì)每個(gè)模塊的進(jìn)行調(diào)試過程中又采用了由局部到整體,由簡單到復(fù)雜的調(diào)試方法,最后再將各個(gè)模塊總和成一個(gè)整體。

在調(diào)試過程中遇到的問題有:

  •                 由于在焊電路之前沒有認(rèn)真的查看STC89C51的管腳,使得管腳的順序全部焊錯(cuò)了,最后只好重新買器件重焊;
  •                 煙霧值一直顯示很高,經(jīng)過查閱資料和換元件測(cè)試發(fā)現(xiàn),煙霧傳感器初次使用得通電幾小時(shí)以上才可以正常使用,要做老化試驗(yàn)。
  •                 在解碼程序的編寫過程中,隨著理解的深入也作了相應(yīng)的修改。

5.2 結(jié)論

煙霧為一種由于燃燒失去控制所引發(fā)的災(zāi)害,對(duì)人類的生命財(cái)產(chǎn)和社會(huì)安全穩(wěn)定構(gòu)成了極大的威脅。由此引發(fā)的重大安全事故比比皆是,所以人類一直也未停止過對(duì)煙霧的研究。

本文在參考了國內(nèi)外大量資料的基礎(chǔ)上,針對(duì)傳統(tǒng)的一系列煙霧報(bào)警探測(cè)器存在的問題,合理地提出了煙霧報(bào)警器的設(shè)計(jì)方法。極大地提高了產(chǎn)品的實(shí)用性和市場(chǎng)競爭力。

本課題中設(shè)計(jì)的煙霧報(bào)警探測(cè)器由傳感器電路與無線通信電路兩大部分構(gòu)成。控制處理器是以管腳資源豐富的STC89C51為核心,實(shí)現(xiàn)對(duì)探測(cè)器寫入信號(hào)和對(duì)信號(hào)進(jìn)行編譯等人機(jī)交互功能。應(yīng)用程序以C語言編寫,充分利用芯片的內(nèi)部資源,提高了代碼執(zhí)行效率,減小了代碼的容量。由于該探測(cè)器具有體積小、功耗低、安裝調(diào)試簡單、可靠性高等優(yōu)點(diǎn),因此,該煙霧探測(cè)器有著良好的市場(chǎng)前景。

但是,由于本人在各方面的知識(shí)不夠全面,再加上時(shí)間緊迫以及實(shí)驗(yàn)條件的限制,該報(bào)警器還有較多需要提高的地方。比如:添加感應(yīng)溫度的傳感器,通過多方面判斷煙霧。

致謝

這次畢業(yè)設(shè)計(jì)得到了很多人的幫助,其中**老師對(duì)我的關(guān)心和支持尤為重要,每次遇到難題,我首先想到的就是向金老師尋求幫助。另外,他嚴(yán)謹(jǐn)?shù)淖黠L(fēng)使我的論文即使在謹(jǐn)小細(xì)微處也給予了糾正,讓我的論文無論是結(jié)構(gòu)還是內(nèi)容變得更加公整、緊湊,感謝金老師對(duì)我的悉心指導(dǎo)。

感謝校方給予我這樣一次機(jī)會(huì),能夠獨(dú)立地完成這樣一個(gè)設(shè)計(jì),作為檢驗(yàn)這些年來學(xué)習(xí)的成果,在這個(gè)過程當(dāng)中,學(xué)校給予我們各種方便,使我們?cè)诩磳㈦x校的最后一段時(shí)間里,能夠更多學(xué)習(xí)一些實(shí)踐應(yīng)用知識(shí),增強(qiáng)了我們實(shí)踐操作和動(dòng)手應(yīng)用能力,提高了獨(dú)立思考的能力。再一次對(duì)我的母校表示感謝。

感謝在整個(gè)畢業(yè)設(shè)計(jì)期間和我密切合作的同學(xué),和曾經(jīng)在各個(gè)方面給予過我?guī)椭幕锇閭儯且驗(yàn)橛辛四銈兊膸椭,才讓我不僅學(xué)到了本次課題所涉及的新知識(shí),更讓我感覺到了知識(shí)以外的東西,那就是團(tuán)結(jié)的力量。


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


  1. <font color="rgb(0, 0, 0)">#include <reg52.h>                 //調(diào)用單片機(jī)頭文件
  2. #define uchar unsigned char  //無符號(hào)字符型 宏定義        變量范圍0~255
  3. #define uint  unsigned int         //無符號(hào)整型 宏定義        變量范圍0~65535

  4. #include <intrins.h>
  5. //#include "lcd1602.h"

  6. sbit CS=P1^3;                //CS定義為P2口的第4位腳,連接ADC0832CS腳
  7. sbit SCL=P1^0;                //SCL定義為P2口的第3位腳,連接ADC0832SCL腳
  8. sbit DO=P1^1;                //DO定義為P2口的第4位腳,連接ADC0832DO腳

  9. sbit beep = P2^0;   //蜂鳴器IO口定義
  10. long dengji,s_dengji = 50;     //濃度等級(jí)


  11. bit flag_300ms ;
  12. uchar key_can;                 //按鍵值的變量
  13. uchar menu_1;        //菜單設(shè)計(jì)的變量
  14. uchar flag_clock;

  15. //這三個(gè)引腳參考資料
  16. sbit rs=P1^2;         //1602數(shù)據(jù)/命令選擇引腳 H:數(shù)據(jù)              L:命令
  17. //sbit rw=P2^6;         //1602讀寫引腳                 H:數(shù)據(jù)寄存器          L:指令寄存器
  18. sbit e =P1^4;         //1602使能引腳          下降沿觸發(fā)
  19. uchar code table_num[]="0123456789abcdefg";

  20. /********************************************************************
  21. * 名稱 : delay_uint()
  22. * 功能 : 小延時(shí)。
  23. * 輸入 : 無
  24. * 輸出 : 無
  25. ***********************************************************************/
  26. void delay_uint(uint q)
  27. {
  28.         while(q--);
  29. }

  30. /********************************************************************
  31. * 名稱 : write_com(uchar com)
  32. * 功能 : 1602命令函數(shù)
  33. * 輸入 : 輸入的命令值
  34. * 輸出 : 無
  35. ***********************************************************************/
  36. void write_com(uchar com)
  37. {
  38.         e=0;
  39.         rs=0;
  40. //        rw=0;
  41.         P0=com;
  42.         delay_uint(3);
  43.         e=1;
  44.         delay_uint(25);
  45.         e=0;
  46. }

  47. /********************************************************************
  48. * 名稱 : write_data(uchar dat)
  49. * 功能 : 1602寫數(shù)據(jù)函數(shù)
  50. * 輸入 : 需要寫入1602的數(shù)據(jù)
  51. * 輸出 : 無
  52. ***********************************************************************/
  53. void write_data(uchar dat)
  54. {
  55.         e=0;
  56.         rs=1;
  57. //        rw=0;
  58.         P0=dat;
  59.         delay_uint(3);
  60.         e=1;
  61.         delay_uint(25);
  62.         e=0;        
  63. }

  64. /********************************************************************
  65. * 名稱 : write_sfm2(uchar hang,uchar add,uchar date)
  66. * 功能 : 顯示2位十進(jìn)制數(shù),如果要讓第一行,第五個(gè)字符開始顯示"23" ,調(diào)用該函數(shù)如下
  67.                   write_sfm1(1,5,23)
  68. * 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
  69. * 輸出 : 無
  70. ***********************************************************************/
  71. void write_sfm2(uchar hang,uchar add,uint date)
  72. {
  73.         if(hang==1)   
  74.                 write_com(0x80+add);
  75.         else
  76.                 write_com(0x80+0x40+add);
  77.         if(date >= 100)
  78.         {
  79.                 write_data(0x30+date/100%10);
  80.                 write_data(0x30+date/10%10);
  81.         }
  82.         else
  83.         {
  84.                 write_data(' ');
  85.                 write_data(0x30+date/10%10);
  86.         }
  87.         write_data(0x30+date%10);        
  88. }

  89. /********************************************************************
  90. * 名稱 : write_string(uchar hang,uchar add,uchar *p)
  91. * 功能 : 改變液晶中某位的值,如果要讓第一行,第五個(gè)字符開始顯示"ab cd ef" ,調(diào)用該函數(shù)如下
  92.                   write_string(1,5,"ab cd ef;")
  93. * 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
  94. * 輸出 : 無
  95. ***********************************************************************/
  96. void write_string(uchar hang,uchar add,uchar *p)
  97. {
  98.         if(hang==1)   
  99.                 write_com(0x80+add);
  100.         else
  101.                 write_com(0x80+0x40+add);
  102.                 while(1)
  103.                 {
  104.                         if(*p == '\0')  break;
  105.                         write_data(*p);
  106.                         p++;
  107.                 }        
  108. }

  109. /********************************************************************
  110. * 名稱 : clear_1602()
  111. * 功能 : 清除1602顯示
  112. * 輸入 : 無
  113. * 輸出 : 無
  114. ***********************************************************************/
  115. void clear_1602()
  116. {
  117.         write_string(1,0,"                ");
  118.         write_string(2,0,"                ");
  119. }

  120. /***********************lcd1602上顯示特定的字符************************/
  121. void write_zifu(uchar hang,uchar add,uchar date)
  122. {
  123.         if(hang==1)   
  124.                 write_com(0x80+add);
  125.         else
  126.                 write_com(0x80+0x40+add);
  127.         write_data(date);        
  128. }


  129. /********************************************************************
  130. * 名稱 : init_1602()
  131. * 功能 : 初始化1602液晶
  132. * 輸入 : 無
  133. * 輸出 : 無
  134. ***********************************************************************/
  135. void init_1602()
  136. {
  137.         write_com(0x38);
  138.         write_com(0x0c);
  139.         write_com(0x06);
  140.         write_string(1,0," thickne: 00    ");
  141.         write_string(2,0," Thresho: 80    ");
  142.         write_sfm2(2,9,s_dengji);                   //顯示濃度等級(jí)
  143. }

  144. uchar a_a;

  145. /********STC89C51扇區(qū)分布*******
  146. 第一扇區(qū):1000H--11FF
  147. 第二扇區(qū):1200H--13FF
  148. 第三扇區(qū):1400H--15FF
  149. 第四扇區(qū):1600H--17FF
  150. 第五扇區(qū):1800H--19FF
  151. 第六扇區(qū):1A00H--1BFF
  152. 第七扇區(qū):1C00H--1DFF
  153. 第八扇區(qū):1E00H--1FFF
  154. *****************/

  155. /********STC89C52扇區(qū)分布*******
  156. 第一扇區(qū):2000H--21FF
  157. 第二扇區(qū):2200H--23FF
  158. 第三扇區(qū):2400H--25FF
  159. 第四扇區(qū):2600H--27FF
  160. 第五扇區(qū):2800H--29FF
  161. 第六扇區(qū):2A00H--2BFF
  162. 第七扇區(qū):2C00H--2DFF
  163. 第八扇區(qū):2E00H--2FFF
  164. *****************/


  165. #define RdCommand 0x01 //定義ISP的操作命令
  166. #define PrgCommand 0x02
  167. #define EraseCommand 0x03
  168. #define Error 1
  169. #define Ok 0
  170. #define WaitTime 0x01 //定義CPU的等待時(shí)間
  171. sfr ISP_DATA=0xe2;  //寄存器申明
  172. sfr ISP_ADDRH=0xe3;
  173. sfr ISP_ADDRL=0xe4;
  174. sfr ISP_CMD=0xe5;
  175. sfr ISP_TRIG=0xe6;
  176. sfr ISP_CONTR=0xe7;

  177. /* ================ 打開 ISP,IAP 功能 ================= */
  178. void ISP_IAP_enable(void)
  179. {
  180.          EA = 0;       /* 關(guān)中斷   */
  181.          ISP_CONTR = ISP_CONTR & 0x18;       /* 0001,1000 */
  182.          ISP_CONTR = ISP_CONTR | WaitTime; /* 寫入硬件延時(shí) */
  183.          ISP_CONTR = ISP_CONTR | 0x80;       /* ISPEN=1  */
  184. }
  185. /* =============== 關(guān)閉 ISP,IAP 功能 ================== */
  186. void ISP_IAP_disable(void)
  187. {
  188.          ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */
  189.          ISP_TRIG = 0x00;
  190.          EA   =   1;   /* 開中斷 */
  191. }
  192. /* ================ 公用的觸發(fā)代碼 ==================== */
  193. void ISPgoon(void)
  194. {
  195.          ISP_IAP_enable();   /* 打開 ISP,IAP 功能 */
  196.          ISP_TRIG = 0x46;  /* 觸發(fā)ISP_IAP命令字節(jié)1 */
  197.          ISP_TRIG = 0xb9;  /* 觸發(fā)ISP_IAP命令字節(jié)2 */
  198.          _nop_();
  199. }
  200. /* ==================== 字節(jié)讀 ======================== */
  201. unsigned char byte_read(unsigned int byte_addr)
  202. {
  203.         EA = 0;
  204.          ISP_ADDRH = (unsigned char)(byte_addr >> 8);/* 地址賦值 */
  205.          ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
  206.          ISP_CMD   = ISP_CMD & 0xf8;   /* 清除低3位  */
  207.          ISP_CMD   = ISP_CMD | RdCommand; /* 寫入讀命令 */
  208.          ISPgoon();       /* 觸發(fā)執(zhí)行  */
  209.          ISP_IAP_disable();    /* 關(guān)閉ISP,IAP功能 */
  210.          EA  = 1;
  211.          return (ISP_DATA);    /* 返回讀到的數(shù)據(jù) */
  212. }
  213. /* ================== 扇區(qū)擦除 ======================== */
  214. void SectorErase(unsigned int sector_addr)
  215. {
  216.          unsigned int iSectorAddr;
  217.          iSectorAddr = (sector_addr & 0xfe00); /* 取扇區(qū)地址 */
  218.          ISP_ADDRH = (unsigned char)(iSectorAddr >> 8);
  219.          ISP_ADDRL = 0x00;
  220.          ISP_CMD = ISP_CMD & 0xf8;   /* 清空低3位  */
  221.          ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3  */
  222.          ISPgoon();       /* 觸發(fā)執(zhí)行  */
  223.          ISP_IAP_disable();    /* 關(guān)閉ISP,IAP功能 */
  224. }
  225. /* ==================== 字節(jié)寫 ======================== */
  226. void byte_write(unsigned int byte_addr, unsigned char original_data)
  227. {
  228.          EA  = 0;
  229. //         SectorErase(byte_addr);
  230.          ISP_ADDRH = (unsigned char)(byte_addr >> 8);  /* 取地址  */
  231.          ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
  232.          ISP_CMD  = ISP_CMD & 0xf8;    /* 清低3位 */
  233.          ISP_CMD  = ISP_CMD | PrgCommand;  /* 寫命令2 */
  234.          ISP_DATA = original_data;   /* 寫入數(shù)據(jù)準(zhǔn)備 */
  235.          ISPgoon();       /* 觸發(fā)執(zhí)行  */
  236.          ISP_IAP_disable();     /* 關(guān)閉IAP功能 */
  237.          EA =1;
  238. }


  239. /***********************1ms延時(shí)函數(shù)*****************************/
  240. void delay_1ms(uint q)
  241. {
  242.         uint i,j;
  243.         for(i=0;i<q;i++)
  244.                 for(j=0;j<120;j++);
  245. }


  246. /******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eeprom中******************/
  247. void write_eeprom()
  248. {
  249.         SectorErase(0x2000);
  250. //        byte_write(0x2000, s_dengji);
  251.         byte_write(0x2001, s_dengji);
  252.         byte_write(0x2060, a_a);        
  253. }

  254. /******************把數(shù)據(jù)從單片機(jī)內(nèi)部eeprom中讀出來*****************/
  255. void read_eeprom()
  256. {
  257. //        s_dengji   = byte_read(0x2000);
  258.         s_dengji = byte_read(0x2001);
  259.         a_a      = byte_read(0x2060);
  260. }

  261. /**************開機(jī)自檢eeprom初始化*****************/
  262. void init_eeprom()
  263. {
  264.         read_eeprom();                //先讀
  265.         if(a_a != 2)                //新的單片機(jī)初始單片機(jī)內(nèi)問eeprom
  266.         {
  267.                 s_dengji = 80;
  268.                 a_a = 2;
  269.                 write_eeprom();
  270.         }        
  271. }

  272. /***********讀數(shù)模轉(zhuǎn)換數(shù)據(jù)********************************************************/        
  273. //請(qǐng)先了解ADC0832模數(shù)轉(zhuǎn)換的串行協(xié)議,再來讀本函數(shù),主要是對(duì)應(yīng)時(shí)序圖來理解,本函數(shù)是模擬0832的串行協(xié)議進(jìn)行的
  274.                                                 //  1  0  0 通道
  275.                                                 //  1  1  1 通道
  276. unsigned char ad0832read(bit SGL,bit ODD)
  277. {
  278.         unsigned char i=0,value=0,value1=0;               
  279.                 SCL=0;
  280.                 DO=1;
  281.                 CS=0;                //開始
  282.                 SCL=1;                //第一個(gè)上升沿        
  283.                 SCL=0;
  284.                 DO=SGL;
  285.                 SCL=1;          //第二個(gè)上升沿
  286.                 SCL=0;
  287.                 DO=ODD;
  288.                 SCL=1;            //第三個(gè)上升沿
  289.                 SCL=0;            //第三個(gè)下降沿
  290.                 DO=1;
  291.                 for(i=0;i<8;i++)
  292.                 {
  293.                         SCL=1;
  294.                         SCL=0; //開始從第四個(gè)下降沿接收數(shù)據(jù)
  295.                         value<<=1;
  296.                         if(DO)
  297.                                 value++;                                                
  298.                 }
  299.                 for(i=0;i<8;i++)
  300.                 {                        //接收校驗(yàn)數(shù)據(jù)
  301.                         value1>>=1;
  302.                         if(DO)
  303.                                 value1+=0x80;
  304.                         SCL=1;
  305.                         SCL=0;
  306.                 }
  307.                 CS=1;
  308.                 SCL=1;        
  309.                 if(value==value1)                                //與校驗(yàn)數(shù)據(jù)比較,正確就返回?cái)?shù)據(jù),否則返回0        
  310.                         return value;
  311.         return 0;
  312. }


  313. /*************定時(shí)器0初始化程序***************/
  314. void time_init()         
  315. {
  316.         EA   = 1;                   //開總中斷
  317.         TMOD = 0X01;          //定時(shí)器0、定時(shí)器1工作方式1
  318.         ET0  = 1;                  //開定時(shí)器0中斷
  319.         TR0  = 1;                  //允許定時(shí)器0定時(shí)
  320. }

  321. /****************按鍵處理顯示函數(shù)***************/
  322. void key_with()
  323. {
  324.         if(key_can == 1)
  325.         {
  326.                 s_dengji ++ ;                    //濃度設(shè)置數(shù)加1
  327.                 if(s_dengji > 999)
  328.                         s_dengji = 999;
  329.         }
  330.         if(key_can == 2)
  331.         {
  332.                         s_dengji -= 1;        //濃度設(shè)置數(shù)減1
  333.                 if(s_dengji <= 1)
  334.                         s_dengji = 1 ;
  335.         }
  336.         write_sfm2(2,9,s_dengji);                   //顯示濃度等級(jí)
  337.         write_eeprom();       //保存數(shù)據(jù)                                       
  338.                         
  339. }  

  340. /********************獨(dú)立按鍵程序*****************/
  341. uchar key_can;         //按鍵值
  342. sbit key1=P1^5;
  343. sbit key2=P3^3;
  344. void key()         //獨(dú)立按鍵程序
  345. {
  346.         static uchar key_new;
  347.         key_can = 20;                   //按鍵值還原
  348.         key1 = 1;
  349.         key2 = 1;
  350.         if((key1==0)||(key2==0))                //按鍵按下
  351.         {
  352.                 delay_1ms(1);                     //按鍵消抖動(dòng)
  353.                 if(((key1==0)||(key2==0)) && (key_new == 1))
  354.                 {                                                //確認(rèn)是按鍵按下
  355.                         key_new = 0;
  356.                         if(key1==0) key_can = 1;
  357.                         if(key2==0) key_can = 2;
  358.                 }                        
  359.         }
  360.         else
  361.                 key_new = 1;        
  362. }

  363. /****************報(bào)警函數(shù)***************/
  364. void clock_h_l()
  365. {
  366.         static uchar value;
  367.         if(dengji >= s_dengji )                //報(bào)警
  368.         {
  369.                 value ++;
  370.                 if(value >= 2)
  371.                 {
  372.                         value = 10;
  373.                         beep = ~beep;          //蜂鳴器報(bào)警
  374.                 }
  375.         }else
  376.         {
  377.                 if(dengji < s_dengji)          //取消報(bào)警
  378.                 {
  379.                         value = 0;
  380.                         beep = 1;
  381.                 }        
  382.         }
  383. }
  384. ……………………

  385. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
  386. </font>
復(fù)制代碼



所有資料51hei提供下載:

基于51的燃?xì)鈭?bào)警.zip (1.69 MB, 下載次數(shù): 364)




評(píng)分

參與人數(shù) 3黑幣 +67 收起 理由
a464066411 + 12 很給力!
任來瘋 + 5 絕世好帖!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:323384 發(fā)表于 2018-11-23 21:36 | 只看該作者
真的很厲害
回復(fù)

使用道具 舉報(bào)

板凳
ID:323384 發(fā)表于 2018-11-23 21:36 | 只看該作者
非常棒,向大佬學(xué)習(xí)                        
回復(fù)

使用道具 舉報(bào)

地板
ID:297670 發(fā)表于 2018-11-28 21:44 | 只看該作者
很不錯(cuò),就是沒有protels自己仿真試下!
回復(fù)

使用道具 舉報(bào)

5#
ID:431770 發(fā)表于 2018-12-23 12:48 | 只看該作者
這里面有PCB原理圖嗎?
回復(fù)

使用道具 舉報(bào)

6#
ID:323384 發(fā)表于 2019-1-13 10:53 | 只看該作者
制板不行啊,調(diào)試不出來
回復(fù)

使用道具 舉報(bào)

7#
ID:469250 發(fā)表于 2019-1-27 13:32 | 只看該作者
很好用,
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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