沈 陽 工 學 院 畢業(yè)設計(論文) 題 目: 學 院: 專 業(yè): 學 號: 學生姓名: 指導教師: 二〇一八 年 五 月
摘 要 基于單片機技術和多傳感器技術開發(fā)設計了一套火災自動報警系統(tǒng)。設計內(nèi)容包括軟件系統(tǒng)和硬件系統(tǒng)。系統(tǒng)的軟件部分包括主程序、按鍵、溫度氣體濃度采集、和數(shù)碼管顯示子程序;硬件包括四個部分:單片機最小系統(tǒng)、溫度氣體濃度檢測電路、顯示電路和報警電路。選用最常用的AT89S52單片機作為控制處理器,對所采集的數(shù)據(jù)進行處理;采用DS18B20數(shù)字溫度傳感器將溫度信號直接轉(zhuǎn)換成數(shù)字信號,傳遞給單片機;選用MQ-2型半導體可燃氣體敏感元件煙霧傳感器實現(xiàn)煙霧濃度的檢測;MQ-2型半導體煙霧傳感器電路簡單,成本低,同時可設置溫度報警值,實現(xiàn)聲光報警。CPS3641BR數(shù)碼管具有靈敏度高、響應快、抗干擾能力強等優(yōu)點,而且價格低廉,使用壽命長。該火災自動報警系統(tǒng)結(jié)構(gòu)簡單、性能穩(wěn)定、使用方便、價格低廉,具有一定的實用價值。 關鍵詞:單片機;溫度傳感器;煙霧傳感器;火災自動報警;結(jié)構(gòu)簡單 AbstractWe development and design a set of automatic fire alarm system based on microcontroller technology and sensor technology. This design contain software system and hardware system. The software include main program, key, collecting of temperature gas concentration, subroutine of LED display. Hardware system include microcontroller unit system, detection circuitry of temperature gas concentration, displaying circuits and alarming circuits. This system chose AT89S52 as the control processor and handle with collecting dates. This system chose digital temeperature sensor DS18B20 to transform temperature signal to digital signal and convey it to microcontroller unit. This system chose semiconductor flammable gas sensitive components sensor MQ-2 realize the testing of the density of fog. The circuits of semiconductor smoke sensor MQ-2 are simple and low cost. At the same time it can set panic value and realize audible and visual alarm. Nixie tube CPS3641BR has the merit of high sensitivity, fast response, anti-interference capability. And the price is chip, the lifetime is long. This automatic fire alarm system has a lot of merits such as, simple structure, stable performance, convenient to use, low cost, having practical value and so on. Keywords: Microcontroller Unit; Temperature sensor; Smoke sensor; Automatic fire alarming system; Simple structure
目 錄
第1章 引 言 1.1 火災報警器設計的目的和意義火災,是指在時間或空間上失去控制的燃燒所造成的災害。在各種災害中,火災是最經(jīng)常、最普遍地威脅公眾安全和社會發(fā)展的主要災害之一。人類能夠?qū)疬M行利用和控制,是文明進步的一個重要標志;,給人類帶來文明進步、光明和溫暖。但是,失去控制的火,就會給人類造成巨大的災難。對于火災,在我國古代,人們就總結(jié)出“防為上,救次之,戒為下”的經(jīng)驗。隨著社會的不斷發(fā)展,在社會財富日益增多的同時,導致發(fā)生火災的危險性也在增多,火災的危害性也越來越大。據(jù)統(tǒng)計,我國70年代火災年平均損失不到2.5 億元,80 年代火災年平均損失不到3.2億元。進入90年代,特別是1993年以來,火災造成的直接財產(chǎn)損失上升到年均十幾億元,年均死亡2000多人。 實踐證明,隨著社會和經(jīng)濟的發(fā)展,消防工作的重要性就越來越突出。由此,火災報警器在消防工作就的作用也尤為突出了。我國的火災自動報警控制系統(tǒng)經(jīng)歷了從無到有、從簡單到復雜的發(fā)展過程,其智能化程度也越來越高。但目前國內(nèi)廠家多偏重用于大型倉庫、商場、高級寫字樓、賓館等場所大型火災報警系統(tǒng)的研發(fā),他們采用集中區(qū)域報警控制方式,其系統(tǒng)復雜、成本較高。而在居民住宅區(qū)、機房、辦公室等小型防火單位,需要設置一種單一或區(qū)域聯(lián)網(wǎng)、廉價實用的火災自動探測報警裝置,因此,研制一種結(jié)構(gòu)簡單、價格低廉的語音數(shù)字聯(lián)網(wǎng)火災報警器是非常必要的。 火災自動報警系統(tǒng),一般由火災探測器、區(qū)域報警器和集中報警器組成;也可以根據(jù)工程的要求同各種滅火設施和通訊裝置聯(lián)動,以形成中心控制系統(tǒng)。即由自動報警、自動滅火、安全疏散誘導、系統(tǒng)過程顯示、消防檔案管理等組成一個完整的消防控制系統(tǒng)。由于在火災發(fā)生的階段,將伴隨產(chǎn)生煙霧、高溫格火光。這些煙、熱和光可以通過探測器轉(zhuǎn)變?yōu)殡娦盘枅缶蚴棺詣訙缁鹣到y(tǒng)啟動,及時撲滅火災。區(qū)域報警器能將所在樓層之探測器發(fā)出的信號轉(zhuǎn)換為聲光報警,并在屏幕上顯示出火災的房間號;同時還能監(jiān)視若干樓層的集中報警器(如果監(jiān)視整個大樓的則設于消防控制中心)輸出信號或控制自動滅火系統(tǒng)。集中報警是將接收到的信號以聲光方式顯示出來,其屏幕上也具體顯示出著火的樓層和房間號,機上停走的時鐘記錄下首次報警時間性,利用本機專用電話,還可迅速發(fā)出指示和向消防隊報警。此外,也可以控制有關的滅火系統(tǒng)或?qū)⒒馂男盘杺鬏斀o消防控制室。 本設計是基于多傳感器的智能火災報警系統(tǒng),能夠在火災初期,將燃燒的煙霧、熱量和光輻射等物理量,通過感溫、感煙和感光等火災探測器變成電信號,傳輸?shù)交馂膱缶刂破,出現(xiàn)異常情況能夠進行報警,起到早期發(fā)現(xiàn)火災和通報火災的作用。 1.2 火災報警器的國內(nèi)外發(fā)展情況許多年前,中國的消防報警產(chǎn)品剛剛起步,無論產(chǎn)品技術含量、產(chǎn)品系列完整性、使用性,還是社會影響程度都是相當?shù)偷摹獾漠a(chǎn)品和品牌一統(tǒng)天下,占領中國的大部分市場。由于中國的建設正在飛速發(fā)展,市場大的驚人,可幸的是中國企業(yè)抓住了機遇,頂住了挑戰(zhàn),先是一批國家的科研院所,后是一批國營企業(yè)、民營企業(yè),業(yè)內(nèi)也吸引和凝聚一大批國內(nèi)的技術和管理精英,花了好多年時間,通過幾次產(chǎn)品更新?lián)Q代,就使自己的產(chǎn)品緊緊跟上了國際水平,并且奪回了大部分國內(nèi)市場,使得現(xiàn)在大多國外產(chǎn)品只有招架之功,這是典型的自力更生,走自己的路。當然目前而言,我們基本占據(jù)的是國內(nèi)市場,對外還剛啟動。中國企業(yè)正虎視眈眈,準備進軍海外市場。消防報警產(chǎn)品是一個系列產(chǎn)品,包括火災探測設備、信息傳輸設備、報警分析控制器、消防控制聯(lián)動。是物理傳感技術、自動控制、計算機技術、數(shù)據(jù)傳輸和管理、智能樓宇等技術的綜合集成,屬于高新技術。依托中國多年的基本建設的發(fā)展,這個行業(yè)也得到發(fā)展,具備了和國外知名企業(yè)抗衡的能力。在目前中國許多冠名以高新技術的行業(yè)中,中國企業(yè)大多做的是下游的制造和服務,分取極少一部分的利潤,象消防報警產(chǎn)品那樣又擁有自我知識產(chǎn)權,又擁有大量市場的行業(yè)其實是很少的。 在消防報警產(chǎn)品的技術含量上,國內(nèi)產(chǎn)品和國外產(chǎn)品差距不是很大,許多指標已經(jīng)超越,存在的問題是:類似于國外消防報警產(chǎn)品的大批量規(guī)模化的生產(chǎn)才剛起步,有待于積累經(jīng)驗和技術;也因此在產(chǎn)品一致性和長期穩(wěn)定性上有一些差距;國內(nèi)正在形成權重的大型企業(yè)和集團,這樣可以帶領國內(nèi)的各家企業(yè)去沖擊海外市場,并最終占領海外的消防報警市場。 1.3 本設計研究的主要內(nèi)容目的是研究一個由單片機控制的火災自動報警系統(tǒng),采用多種傳感器,如溫度傳感器和煙霧傳感器,對環(huán)境中的溫度和煙霧濃度狀況進行實時監(jiān)測,能對周圍環(huán)境的溫度突然升高和煙霧濃度突然的提高進行報警,同時通過這個設計提高自己對單片機和傳感器的使用能力,了解和掌握單片機、溫度傳感器和煙霧傳感器的使用,鞏固自己在大學學習的所有知識,增強自己的實際操作的能力。要求所設計的火災自動報警系統(tǒng)能夠?qū)囟群蜔熿F進行實時監(jiān)測,出現(xiàn)異常狀況能夠進行及時的報警,起到早期出現(xiàn)火災并及時通報相關人員和及時撲滅火災,來減少人員及財產(chǎn)的損失。 本火災智能報警系統(tǒng)包括很多部分:觸發(fā)電路、報警電路、顯示電路、轉(zhuǎn)換電路、數(shù)據(jù)處理和控制電路等。觸發(fā)電路由溫度傳感器和煙霧傳感器等組成。報警電路由報警裝置蜂鳴器和光報裝置LED燈。顯示電路由數(shù)碼管顯示模塊實現(xiàn)由溫度傳感器和煙霧傳感器所傳送過來的數(shù)據(jù)。采用單片機作為主控芯片來進行數(shù)據(jù)的處理和控制。 設計包括軟件和硬件兩部分,軟件部分包括主程序、溫度和氣體的濃度的采集、單片機處理和控制程序及數(shù)碼管顯示子程序;硬件包括單片機最小系統(tǒng)、觸發(fā)電路、顯示電路和報警電路。 第一章引言部分主要介紹了智能火災報警器的設計目的與意義以及國內(nèi)外的發(fā)展情況。 第二章主要進行了對主控芯片的對比和選擇以及傳感器芯片的對比和選擇,并且給出了整體的設計方案。 第三章根據(jù)設計的要求,對外圍電路進行了設計,主要有溫度采集電路和氣體濃度采集電路及其顯示電路等等。 第四章主要介紹了系統(tǒng)軟件設計。主要介紹了系統(tǒng)的主程序流程,及其各模塊的流程圖等。 第2章 建筑物多傳感器火災報警系統(tǒng)總體方案設計 2.1 系統(tǒng)的基本方案根據(jù)設計的要求系統(tǒng)硬件部分可分為單片機控制和處理部分、傳感器部分、顯示電路和報警電路。為實現(xiàn)各模塊的功能,分別做了幾種不同的方案設計并進行論證。 2.2 主控芯片的選擇方案一:AT89S51是一個低功耗芯片,高性能CMOS 8位單片機,片內(nèi)含4k Bytes ISP(In-system programmable)的可反復擦寫1000次的Flash只讀程序存儲器,該器件采用ATMEL公司的高密度、非易失性存儲技術制造,兼容標準MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,主要特點如下: 1、4k Bytes Flash片內(nèi)程序存儲器; 2、128 bytes的隨機存取數(shù)據(jù)存儲器(RAM); 3、32個外部雙向輸入/輸出(I/O)口; 4、5個中斷優(yōu)先級、2層中斷嵌套中斷; 5、6個中斷源; 6、2個16位可編程定時器/計數(shù)器; 7、2個全雙工串行通信口; 8、看門狗(WDT)電路; 9、片內(nèi)振蕩器和時鐘電路; 10、與MCS-51兼容; 11、全靜態(tài)工作:0Hz-33MHz; 12、三級程序存儲器保密鎖定; 13、可編程串行通道; 14、低功耗的閑置和掉電模式。 方案二:AT89S52是一種低功耗、高性能CMOS 8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用ATMEL公司高密非易失性存儲器技術制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。芯片上Flash允許程序存儲器在系統(tǒng)可編程亦適于常規(guī)編程器。在單芯片上擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應用系統(tǒng)提供高靈活、有效地解決方案。AT89S52具有以下標準功能:8K字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,3個16位定時器/計數(shù)器,8個中斷向量源,全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,可選擇節(jié)電模式?臻e模式下,CPU停止工作,允許RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復位為止,主要特點如下: 1、8位字長CPU; 2、振蕩器和時鐘電路,全靜態(tài)操作:0-33MHz; 3、8KB系統(tǒng)內(nèi)可編程Flash存儲器; 4、4個I/O端口共32線; 5、3個16位定時/計數(shù)器; 6、全雙工串行口通道; 7、ISP端口; 8、定時監(jiān)視器; 9、雙數(shù)據(jù)指針; 10、20多個特殊功能寄存器; 11、電源下降標志。 通過比較AT89S51和AT89S52本質(zhì)上沒有太大的區(qū)別,只不過AT89S52是AT89S51增強型,成本差不多,電源下降有明顯的標志,所以選擇AT89S52作為本設計的主控芯片。 2.3傳感器的選擇2.3.1 溫度傳感器的選擇方案一:溫度傳感器DS18B20,它直接能把收集到的溫度信號直接轉(zhuǎn)化成單片機識別的數(shù)字信號,不需要增加外圍電路,直接可以和單片機進行相連接。結(jié)構(gòu)簡單,使用起來方便。 方案二:溫度傳感器Pt100是鉑熱電阻,它的阻值跟溫度的變化成正比。它的輸入響應時間為1秒同步測量,是一個模擬信號量。 綜上所述,DS18B20溫度傳感器的結(jié)構(gòu)簡單,能把采集到的信號直接傳送給單片機做處理,然而鉑熱電阻,需要添加響應的轉(zhuǎn)換電路。相比來說比較麻煩。 2.3.2 煙霧傳感器的選擇方案一:煙霧傳感器MQ-2,它具有信號輸出指示,雙路信號的輸出,對液化氣,天然氣,城市煤氣有較好的靈敏度。具有長期的使用壽命和可靠的穩(wěn)定度,快速的響應恢復特性,試用與家庭或工廠的氣體泄漏監(jiān)測裝置。 方案二:GQQ0.1煙霧傳感器主要用于煤礦井下橡膠、煤塵等因摩擦起熱或其它原因產(chǎn)生產(chǎn)生的煙霧進行監(jiān)測。本傳感器只能在無顯著搖動和沖擊振動的地方,在無足夠以腐蝕金屬和破壞絕緣的氣體和蒸汽的環(huán)境中,在無滴水及液體浸入的地方。 綜上所述,MQ-2煙霧傳感器的壽命長,可靠的穩(wěn)定度,快速的響應恢復特性,具有信號輸出指示,雙路信號的輸出。所以本設計采用MQ-2作為煙霧傳感器。 2.4 ADC芯片選擇的論證A/D轉(zhuǎn)換器的作用是把模擬量轉(zhuǎn)換成數(shù)字量,以便于計算機進行處理。隨著超大規(guī)模集成電路技術的飛速發(fā)展,A/D轉(zhuǎn)換的新設計思想和制造技術層出不窮。并為滿足各種不同的檢測及控制任務的需要,大量結(jié)構(gòu)的不同、性能各異的A/D轉(zhuǎn)換芯片應運而生。盡管A/D轉(zhuǎn)換器的種類繁多,但目前廣泛應用在單片機應用系統(tǒng)中的有以下幾種類型:逐次比較型轉(zhuǎn)換器、雙積分型轉(zhuǎn)換器、∑-△式轉(zhuǎn)換器。 方案一:ADC0809轉(zhuǎn)換器 ADC0809采用逐次比較的方法完成A/D轉(zhuǎn)換,由單一的+5V電源供電。片內(nèi)帶有鎖存功能的8路選1的模擬開關,由C、B、A的編碼來決定所選的通道。ADC0809完成一次轉(zhuǎn)換需100微秒左右,它可對0-5V的模擬信號進行轉(zhuǎn)換,但是它在精度、速度和價格上都適中。 方案二:ADC0832轉(zhuǎn)換器 ADC0832為8位分辨率A/D轉(zhuǎn)換芯片,其最高分辨率可達256級,可以適應一般的模擬量轉(zhuǎn)換要求。其內(nèi)部電源輸入與參考電壓的復用,使得芯片的模擬電壓輸入在0-5V之間。芯片的轉(zhuǎn)換時間僅為32微秒,具有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗,以減少數(shù)據(jù)誤差,轉(zhuǎn)換速度快且穩(wěn)定性強。 通過比較ADC0832具有較快的轉(zhuǎn)換時間且穩(wěn)定性能強,選擇ADC0832作轉(zhuǎn)換芯片選擇。 2.5 顯示電路的選擇論證方案一:LED燈顯示 LED按顯示方式可分為靜態(tài)顯示和動態(tài)顯示。靜態(tài)顯示就是顯示驅(qū)動電路具有輸出鎖存功能,單片機將要顯示的數(shù)據(jù)送出后就不再控制LED,直到下一次顯示時再傳送一次新的數(shù)據(jù)。只要當前顯示的數(shù)據(jù)沒有變化,就無需理睬數(shù)碼管顯示。靜態(tài)顯示的數(shù)據(jù)穩(wěn)定,占用CPU時間少。靜態(tài)顯示中,每一個顯示器都要占用單獨具有鎖存功能的I/O口,該接口用于筆畫段字形代碼。這樣單片機只要把顯示的字型數(shù)據(jù)代碼發(fā)送到接口電路,該字段就可以顯示要發(fā)送的字型。要顯示新的數(shù)據(jù)時,單片機再發(fā)送新的字型碼。 另一種方法是動態(tài)掃描顯示,是用接口電路把所有顯示器的8個筆畫字段(a-g和dp)同名端連接在一起,而每一個顯示器的公共極各自獨立接受I/O線控制。CPU向字段輸出端口輸出字型碼時,所有顯示器接收相同的字型碼,但究竟使哪一位則由I/O線決定。動態(tài)掃描用分時的方法輪流控制每個顯示器的公共極,使每個顯示器輪流點亮。在輪流點亮的過程中,每位顯示器的點亮時間極為短暫,但由于人的視覺暫留現(xiàn)象及發(fā)光二級管的余輝效應,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù)。 方案二:LCD顯示器 LCD是液晶顯示器的縮寫,它是一種被動式的顯示器,即液晶本身并不發(fā)光,而是利用液晶經(jīng)過處理后能改變光線通過方向的特性,從而達到白底黑字或者黑底白字顯示的目的。液晶顯示器具有功耗低、抗干擾能力強等優(yōu)點,因此被廣泛應用在儀器儀表和控制系統(tǒng)中。 通過比較LCD是具有很多優(yōu)點,但是本設計中用LED燈就能實現(xiàn)其很好的功能,且節(jié)約成本。所以選擇LED。 2.6 整體方案根據(jù)基于多傳感器的智能火災報警系統(tǒng)的基本工作原理:當有火災發(fā)生時,環(huán)境中的溫度和氣體的濃度會升高,溫度傳感器把模擬信號直接轉(zhuǎn)化成數(shù)字信號,再傳送給單片機來處理,煙霧傳感器把感受的煙霧信號經(jīng)過放大,再經(jīng)過A/D轉(zhuǎn)換電路,把模擬信號轉(zhuǎn)換成數(shù)字信號,發(fā)送給單片機來處理和控制。通過單片機處理過的信號,再與預訂的門限值進行對比,達到門限值單片機通知報警電路報警。系統(tǒng)總體方案如圖2.1所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BB4.tmp.png 圖2.1 系統(tǒng)總體方案框圖 2.7 本章小結(jié)通過控制芯片、傳感器、顯示部分的對比和分析,對本設計的主要器件進行論述,最終確定了各部分所用的元器件。主控芯片選擇AT89S52作為控制核心,DS18B20溫度傳感器和MQ-2煙霧傳感器作為數(shù)據(jù)搜集電路,并用LED作為顯示電路。 第3章 建筑物多傳感器火災報警系統(tǒng)的硬件設計 3.1 AT89S52單片機簡介 AT89S52是一個低功耗,高性能CMOS 8位單片機,片內(nèi)含8k Bytes ISP(In-system programmable)的可反復擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術制造,兼容標準MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,功能強大的微型計算機的AT89S52可為許多嵌入式控制應用系統(tǒng)提供高性價比的解決方案。 3.2 AT89S52單片機的最小系統(tǒng)電路及其引腳功能說明AT89S52單片機各個功能部件的運行都以時鐘控制信號為基準,有條不紊地一拍一拍地工作。所以在單片機系統(tǒng)設計中,振蕩電路的設計是十分重要的一個環(huán)節(jié),時鐘電路的質(zhì)量也直接影響單片機系統(tǒng)的穩(wěn)定。 如圖3.1中的時鐘電路的電容C1和C2的典型值通常采用選擇為30pF左右。該電容的大小會影響振蕩器頻率的高低、振蕩器的穩(wěn)定性和起振的快速性。晶體振蕩頻率的范圍通常是在1.2-12MHz。一般的情況下,單片機的晶體振蕩為并聯(lián)諧振狀態(tài),兩個電容的取值應該是相同的,或者相差不大,如果相差太大,容易造成諧振的不平衡,容易造成停振或者干脆不起振。輸出的信號與單片機的18、19腳相連。 復位是單片機初始化的操作,單片機重新啟動時都需要進行復位,使得CPU處于準備開始的狀態(tài),并且從這個狀態(tài)開始工作。AT89S52單片機的復位是由外部的復位電路實現(xiàn)的。復位電路通常采用上電自動復位和按鈕復位兩種方式。上電自動復位是通過外部復位電路的電容充電來實現(xiàn)的。按鍵手動復位有電平和脈沖兩種方式。如圖3.1中所示,本設計采用按鍵手動復位的電平復位電路。 當AT89S52單片機的復位引腳RST出現(xiàn)兩個機器周期以上的高電平時,單片機執(zhí)行復位操作。 VCC:電源供電電壓。 GND:電源地電平。 XTAL1:當外接晶振時,接外部晶振的一個引腳。片內(nèi)振蕩器由一個單級反相器組成,XTAL1為反相器的輸入。當外部振蕩器提供時鐘信號時,則由XTAL1端輸入。 XTAL2:接外部晶振的另一個引腳,片內(nèi)為單級反相器的輸出。當由外部時鐘源提供時鐘信號時,則本引腳懸空。 P0口:8位并行I/O口,作為輸出口時,每個管腳可帶8個TTL負載。在外擴存儲器時,它定義為低8位地址/數(shù)據(jù)總線。當定義為I/O口時,為準雙向I/O口,需外接上拉電阻,在寫入“1”后就成為高阻抗輸入口。在對片內(nèi)Flash編程時P0口接收字節(jié)代碼,在程序校驗時輸出字節(jié)代碼。程序校驗期間應外接上拉電阻。 P1口:內(nèi)接上拉電阻的8位準雙向I/O口,能負擔4個TTL負載。在Flash編程和校驗時定義為8位地址線。 P2口:內(nèi)接上拉電阻的8位準雙向I/O口。能接4個TTL負載。當訪問外部存儲器時定義為高八位地址總線,只需八位地址線時,它將輸出特殊功能寄存器中內(nèi)容。 P3:內(nèi)接上拉電阻的8位準雙向I/O口,能負擔4個TTL負載。 它的第二變異功能如下。 P3.0 RXD(串行輸入口)。 P3.1 TXD(串行輸出口)。 P3.2 /INT0(外部中斷0)。 P3.3 /INT1(外部中斷1)。 P3.4 T0(記時器0外部輸入)。 P3.5 T1(記時器1外部輸入)。 P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)。 P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)。 RST:復位信號輸入端。當單片機運行時,此引腳加上持續(xù)時間大于2個機器周期(24個時鐘振蕩周期)的高電平時,就可以對單片機完成復位操作。RST引腳上的高電平有效。 ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號不會出現(xiàn)。 /EA/VPP:當/EA保持低電平時,此時外部程序存儲器地址為0000H-FFFFH,不管是否有內(nèi)部程序存儲器。加密方式1時,/EA將內(nèi)部鎖定為RESET;當/EA端保持高電平時,此時為內(nèi)部程序存儲器。在FLASH編程時,此引腳用來通12V編程電源,即VPP。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BB5.tmp.png 圖3.1 單片機的最小系統(tǒng)電路 3.3 溫度采集電路3.3.1 DS18B20的介紹本設計采用的溫度傳感器是美國DALLAS公司生產(chǎn)的DS18B20 傳感器,它與其他傳統(tǒng)的溫度傳感器不同,DS18B20可以把采集到的溫度直接轉(zhuǎn)化成串行數(shù)字信號,直接提供給單片機進行處理,它具有耐磨耐碰,體積小,低功耗,高性能,抗干擾能力強,使用方便,適用于各種狹小空間設備數(shù)字的測溫和控制領域。 通過編程,溫度傳感器DS18B20可以實現(xiàn)9~12位的溫度讀數(shù)。信息經(jīng)過單個引腳送入溫度傳感器DS18B20或從溫度傳感器DS18B20的一個引腳送出,因此從單片機到DS18B20僅僅需要連接一個引腳。本身有電源可以支持讀、寫和執(zhí)行溫度變化所需要的電源,而不需要外接的電源。 每片DS18B20在出廠時都設有唯一的產(chǎn)品序列號,此序列號存放在它的內(nèi)部ROM中,微處理器通過簡單的協(xié)議就能識別這些序列號,因此多個DS18B20可以掛接于同一條單線總線上,這允許在許多不同的地方放置溫度傳感器,特別適合于構(gòu)成多點溫度測控系統(tǒng)。 3.3.2 溫度傳感器DS18B20的主要特點1:采用單線技術,與單片機通信只需要一個引腳; 2:通過識別芯片各自唯一的產(chǎn)品序列號從而實現(xiàn)單線多掛接,簡化了分布式溫度檢測的應用; 3:實際應用中不需要外部任何器件即可實現(xiàn)測溫; 4:可通過數(shù)據(jù)線供電,電壓范圍為3~5.5V; 5:不需要備份電源; 6:測量范圍為-55~+125℃,在-10~85℃范圍內(nèi)誤差為±0.5℃; 7:數(shù)字溫度計的分辨率用戶可以從9位到12位選擇,可配置實現(xiàn)9~12位的溫度讀數(shù); 8:將12位的溫度值轉(zhuǎn)換為數(shù)字量所需要的時間不超過750MS; 9:用戶定義的,非易失性的溫度告警設置,用戶可自行設定告警的上下限溫度; 10:告警尋找命令可以識別和尋址那些溫度超出預設告警界限的器件。 3.3.3 溫度傳感器DS18B20的引腳圖和封裝及引腳功能說明DS18B20溫度傳感器封裝如圖3.2(a)所示、引腳圖如圖3.2(b)所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BB6.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BB7.tmp.png 圖3.2(a) DS18B20封裝 圖3.2(b) DS18B20引腳圖 NC:空引腳,懸空,不使用。 VDD:可選電源腳,電壓范圍為3到5.5V。當工作于寄生電源時,此引腳必須接地。 DQ:數(shù)據(jù)輸入/輸出腳。漏極開路,常態(tài)下高電平。 GND:接地。 3.3.4 DS18B20供電方式DS18B20有兩種供電方式:寄生電源和外部電源。 寄生電源簡單說起來是器件從單線數(shù)據(jù)線中“竊取”電源,在信號線為高電平的時間周期內(nèi),把能量存儲在內(nèi)部的電容器中,在單信號線為低電平的時間內(nèi)斷開此電源,直到信號線變?yōu)楦唠娖街匦陆由霞纳娙荩╇娫礊橹。寄生電源有兩個優(yōu)點: 1、可實現(xiàn)遠程溫度檢測而無需本地電源; 2、有正常電源的條件下也可以讀ROM。 為了使DS18B20能完成準確的溫度變換,當溫度變換發(fā)生時,DQ線上必須提供足夠的功率。因為DS18B20的工作電流高達1.5mA,4.7K的上拉電阻將使得DQ線沒有足夠的驅(qū)動能力。解決的方法是在發(fā)生溫度變換時在DQ線上提供強的上拉,比如用MOSFET管把DQ線直接拉到電源電壓。當使用寄生電源方式時VDD引腳必須連接到地。 DS18B20的另一種供電方式是將VDD引腳接外部電源(3-5.5V)。這種方法的優(yōu)點是在DQ線上不要求強的上拉?偩上的主機在溫度變換期間不需要一直使DQ線保持高電平。這就允許在變換時間內(nèi)其它數(shù)據(jù)在單線上傳送。而且,在單線上可以放置多個DS18B20,如果它們都使用外部電源,那么通過發(fā)起“跳過ROM”命令,接著執(zhí)行“溫度變換”命令就可以同時完成各自的溫度變換。注意,采用外部電源這種方式時,GND引腳不可懸空。 本設計雖然只使用了一片DS18B20,但由于不存在遠程溫度測量的考慮,所以為了簡單起見,仍然采用外部供電的方式。 3.3.5 溫度采集模塊 DS18B20是數(shù)字式溫度傳感器,它把采集到的溫度信號直接轉(zhuǎn)化成單片機能識別的數(shù)字信號,而且本設計中采用的外部供電的方式,所以設計出的溫度采集電路如圖3.3所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BB8.tmp.png 圖3.3 溫度采集電路 3.4 氣體濃度采集電路氣體濃度采集模塊是能夠檢測環(huán)境中的煙霧等氣體的濃度,并將其轉(zhuǎn)換為數(shù)字信號傳送至主控芯片,其最基本組成部分應包括:氣體信號采集電路、模擬放大電路、模數(shù)轉(zhuǎn)換電路、單片機控制電路。氣體信號采集電路一般由氣體傳感器和模擬放大電路組成,將煙霧等氣體信號轉(zhuǎn)化為模擬的電信號。模數(shù)轉(zhuǎn)換電路把從煙霧檢測電路送出的模擬信號轉(zhuǎn)換成單片機可以識別的數(shù)字信號之后送入單片機中進行處理。 3.4.1 MQ-2傳感器介紹本設計中采用的MQ-2型半導體可燃氣體敏感元件煙霧傳感器屬于氣敏傳感器,是氣-電變換器,它將可燃性氣體在空氣中的含量(即濃度)轉(zhuǎn)化成電壓或者電流信號,通過A/D轉(zhuǎn)換電路將模擬量轉(zhuǎn)換成數(shù)字量后送到單片機,進而由單片機完成數(shù)據(jù)處理、濃度處理及報警控制等工作。 MQ-2型半導體可燃氣體敏感元件煙霧傳感器具有靈敏度高、響應快、抗干擾性好、使用方便、價格便宜,且不會發(fā)生探頭阻緩及中毒現(xiàn)象,維護成本較低等優(yōu)點。因此,本設計采用MQ-2氣體傳感器作為報警器煙霧信息采集部分的核心。 MQ-2型煙霧傳感器屬于二氧化錫半導體氣敏材料,屬于表面離子式N型半導體。當他處于200~300℃溫度時,二氧化錫吸附了空氣中的氧,從而形成氧的負離子吸附,使得半導體中的電子密度減小,從而使其電阻值增加。當與煙霧接觸時,如果晶粒間界處的勢壘受到該煙霧的調(diào)制而變化,此時就會引起表面電導率的變化。利用這一點,MQ-2型煙霧傳感器就可以獲得這種煙霧存在的信息。 遇到可燃煙霧(如CH4等)時,原來吸附的氧脫附,而由可燃煙霧以正離子狀態(tài)吸附在二氧化錫半導體表面;氧脫附放出電子,煙霧以正離子狀態(tài)吸附也要放出電子,從而使二氧化錫半導體帶電子密度增加,電阻值下降。而當空氣中沒有煙霧時,二氧化錫半導體又會自動恢復氧的負離子吸附,使電阻值升高到初始狀態(tài)。這就是MQ-2半導體型可燃性煙霧傳感器檢測可燃煙霧的基本原理。 3.4.2 MQ-2傳感器的特性及主要技術指標MQ-2型傳感器的一般特點:對天然氣、液化石油氣等煙霧有很高的靈敏度,尤其對烷類煙霧更為敏感;具有良好的重復性和長期的穩(wěn)定性,初始穩(wěn)定,響應時間短,長時間工作性能好;電路設計電壓范圍寬,24V以下均可;加熱電壓5±0.2V。 MQ-2型傳感器的初期穩(wěn)定特性:半導體煙霧傳感器在不通電狀態(tài)存放一段時間后,再通電時,器件并不能立即投入正常工作。這是因為煙霧傳感器中的二氧化錫在不通電的狀態(tài)下會吸附空氣中的水蒸氣,當再次通電時需要預熱幾分鐘使水蒸氣蒸發(fā)后,氣敏電阻才能正常工作。初期穩(wěn)定時間是指再次通電工作時,氣敏電阻值達到穩(wěn)定時所需要的時間。一般來說,不通電時間越長初期穩(wěn)定時間也就越長,不通電存放時間達到15天以上,初期穩(wěn)定時間一般要五分鐘以上。 MQ-2半導體煙霧傳感器一般要在較高的溫度(200~450℃)下工作,需要對其加熱。傳感器通常是用在易燃易爆環(huán)境中,但如果加熱絲直接與電源相連,當加熱絲短路造成元器件局部過熱或放電時,極易引發(fā)安全事故。因此必須使用傳感器的生產(chǎn)廠家推薦的加熱電壓,使其工作在安全范圍內(nèi),以保證操作安全。 3.4.3 氣體采集模塊MQ-2傳感器輸出的模擬信號一般的都比較微弱,需要經(jīng)過前置電路對其進行放大、濾波、電平調(diào)整,才能滿足單片機對輸入信號的要求。本設計中氣體濃度采集系統(tǒng)采用的MQ-2半導體煙霧傳感器屬于電阻型,因此只需串聯(lián)一個參考電阻,再經(jīng)過一個放大電路即可發(fā)送給ADC采集。常見的運算放大器中,S8550低電壓、大電流、小信號、價格低廉、使用簡單等優(yōu)點,最為普通,所以本設計中的前置放大電路采用S8550作為電路的運算放大器。信號經(jīng)由S8550運算放大器放大后進入ADC0832模數(shù)轉(zhuǎn)換模塊,ADC0832可以將輸入的模擬信號轉(zhuǎn)換成數(shù)字信號,然后再將數(shù)字信號傳送給單片機處理。經(jīng)過考慮以上的因素設計出氣體濃度采集電路,具體氣體濃度采集模塊如圖3.4所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BC9.tmp.png 圖3.4 氣體濃度采集模塊 3.5 ADC0832轉(zhuǎn)換器3.5.1 ADC0832轉(zhuǎn)換器介紹ADC0832 為8位分辨率的A/D轉(zhuǎn)換芯片,其最高分辨可達256級,適應一般模擬量轉(zhuǎn)換要求。因內(nèi)部電源輸入和參考電壓復用,芯片的模擬電壓輸入應在0-5V之間。芯片的轉(zhuǎn)換時間僅為32μS,它具有雙重的數(shù)據(jù)輸出,可作為數(shù)據(jù)校驗,以減少數(shù)據(jù)錯誤,具有較快的轉(zhuǎn)換速度和較強的穩(wěn)定性能。芯片的獨立使能輸入,使多器件掛接和處理器控制變得方便可行。DI 數(shù)據(jù)輸入端,可以輕松地實現(xiàn)功能的通道選擇 。ADC0832的封裝如圖3.5所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BCA.tmp.png 圖3.5 ADC0832封裝圖 3.5.2 AD0832轉(zhuǎn)換器各引腳功能/CS:片選使能,低電平芯片使能。 CH0:模擬輸入通道0,或作為IN+/- 使用。 CH1: 模擬輸入通道1,或作為IN+/- 使用。 GND:芯片參考0 電位(地)。 DI: 數(shù)據(jù)信號輸入,選擇通道控制。 DO: 數(shù)據(jù)信號輸出,轉(zhuǎn)換數(shù)據(jù)輸出。 CLK: 芯片時鐘輸入。 VCC/REF: 電源輸入及參考電壓輸入。 3.6 報警電路設計本設計采用蜂鳴器和LED燈作為報警裝置。通過判斷所接收到的數(shù)據(jù)來確定是否報警,所接受到的數(shù)據(jù)主要來自溫度傳感器、煙霧傳感器和按鍵。 3.6.1 蜂鳴器當單片機接收到超額溫度信號或氣體信號時,輸出腳BELL輸出高電平,Q1導通,致使蜂鳴器BELL得電工作,發(fā)出報警聲。具體報警電路如圖3.6所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BCB.tmp.png 圖3.6 報警模塊 3.6.2 LED指示燈本設計共使用了3個LED燈,兩個狀態(tài)指示燈和一個電源指示燈。通上電源以后,電源指示燈亮,表明該系統(tǒng)處在工作情況下;綠色的狀態(tài)指示燈亮,表明該系統(tǒng)為正常工作模式;當單片機接收到超額溫度信號或氣體信號時,向P0端口發(fā)送信號,紅色的狀態(tài)指示燈亮,并且發(fā)出報警信號。狀態(tài)指示燈如圖3.7(a)所示、電源指示燈如圖3.7(b)所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BCC.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BCD.tmp.png 圖3.7(a) 狀態(tài)指示燈電路圖 圖3.7(b) 電源指示燈電路圖 3.7 數(shù)碼管顯示電路設計要用單片機構(gòu)成發(fā)射機,就需要一個人機界面。常采用的方式是LED數(shù)碼管顯示結(jié)果,用幾個小按鍵執(zhí)行某些功能,如預置值、改變測量范圍。 3.7.1 顯示器的工作原理LED(Light Emitting Diode)顯示是用發(fā)光二極管顯示字段的顯示器件,也稱數(shù)碼管。當二極管導通時相應的一個點或一個筆劃發(fā)光,就能顯示出各種字符。 LED 數(shù)碼顯示器有兩種結(jié)構(gòu),分別是:共陽接法:所有發(fā)光二極管的陽極連在一起;共陰接法:所有發(fā)光二極管的陰極連在一起。本設計所采用的是四位一體共陽極數(shù)碼管。 點亮LED 顯示器分別有靜態(tài)和動態(tài)兩種方法。靜態(tài)顯示就是顯示某一字符時,相應的發(fā)光二極管恒定地導通或截止,這種方法,每一顯示位都需要一個8 位的輸出口控制,占用硬件比較多,一般僅用于位數(shù)較少的顯示。動態(tài)則一位位點亮各位顯示器,每位顯示器每隔一段時間點亮一次。顯示器的亮度與導通的電流大小有關,也和點亮的時間、間隔的比例有關。動態(tài)顯示器因為其硬件成本較低,從而得到較為廣泛的應用。如需顯示字符和數(shù)字,要提供顯示段碼給LED 顯示器,組成一個“8”字形的7段,再加上一個小數(shù)點位,共8段,所以提供LED 顯示器的顯示段碼為1 個字節(jié)。 發(fā)光二極管的工作電壓為1.5~3.0伏,工作電流為幾毫安到幾十毫安,壽命很長。半導體數(shù)碼管將十位數(shù)分成七個字段,每段為一個發(fā)光二極管,其字形結(jié)構(gòu)如圖所示,選擇不同的字段發(fā)光,可顯示出不同的字型。 共陽極:把發(fā)光二極管的陽極連在一起構(gòu)成共陽極。使用時公共端接Vcc,當某陽極為低電平時,該發(fā)光二極管就導通發(fā)光。輸出一個段碼就可以控制LED顯示器的字型。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BCE.tmp.png 圖3.8 數(shù)碼顯示模塊 3.8 按鍵控制電路設計本設計只要顯示周圍溫度及氣體濃度,若超過設定值則發(fā)出報警,因此只要四個按鍵即可實現(xiàn)。其中兩個按鍵為報警溫度的設定;剩下的一個為溫度與氣體濃度顯示的轉(zhuǎn)換;另一個為手動報警按鍵,當有人提前發(fā)現(xiàn)火災隱情時候,可以按動報警按鍵發(fā)出報警信號,以提醒其他人注意安全。 單片機通過檢測報警按鍵所連接端口信號判斷按鍵是否按下。 3.9 本章小結(jié)本章主要完成了單片機簡單的外圍電路:晶振電路和復位電路。以及還完成了氣體的采集電路、報警電路、按鍵電路等等。并且介紹了DS18B20溫度傳感器和MQ-2煙霧傳感器的主要特點及其DS18B20溫度傳感器的供電方式。顯示器的工作原理。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BCF.tmp.png 圖3.9 按鍵控制模塊 第4章 軟件系統(tǒng)設計 4.1 主程序流程圖程序流程圖是編寫軟件的重要前提,它是在圖表上直觀的體現(xiàn)擬設計的目的及過程。也是編譯的重要依據(jù),按照流程圖一步一步編寫程序,系統(tǒng)主程序流程圖如圖4.1所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE0.tmp.png 圖4.1 主程序流程圖 4.2 串行通訊的實現(xiàn)4.2.1 串行口控制寄存器SCON的設置單片機的結(jié)構(gòu)和特殊寄存器是編寫軟件的關鍵。SBUF 數(shù)據(jù)緩沖寄存器是一個可以直接尋址的串行口專用寄存器。實際上SBUF 包含了兩個獨立的寄存器,一個是發(fā)送寄存,另一個是接收寄存器,但它們都共同使用同一個尋址地址,即99H。CPU 在讀SBUF 時會指到接收寄存器,在寫時會指到發(fā)送寄存器,而且接收寄存器是雙緩沖寄存器,這樣可以避免接收中斷沒有及時的被響應,數(shù)據(jù)沒有被取走,下一幀數(shù)據(jù)已到來,而造成的數(shù)據(jù)重疊問題。發(fā)送器則不需要用到雙緩沖,一般情況下在寫發(fā)送程序時也不必用到發(fā)送中斷去外理發(fā)送數(shù)據(jù)。 SCON 串行口控制寄存器通常在芯片或設備中為了監(jiān)視或控制接口狀態(tài),都會引用到接口控制寄存器。SCON就是52芯片的串行口控制寄存器。它的尋址地址是98H,是一個可以位尋址的寄存器,作用就是監(jiān)視和控制52芯片串行口的工作狀態(tài)。52芯片的串口可以工作在幾個不同的工作模式下,其工作模式的設置就是使用SCON 寄存器。 REM 為允許接收位,REM 置1 時串口允許接收,置0 時禁止接收。REM 是由軟件置位或清零。如果在一個電路中接收和發(fā)送引腳P3.0,P3.1 都和上位機相連,在軟件上有串口中斷處理程序,當要求在處理某個子程序時不允許串口被上位機來的控制字符產(chǎn)生中斷,那么就可以在這個子程序的開始處加入REM=0 來禁止接收該子程序,在子程序結(jié)束處加入REM=1 再次打開串口進行接收。 TB8 發(fā)送數(shù)據(jù)位8,在模式2 和3 是要發(fā)送的第9 位。該位可以用軟件根據(jù)需要進行置位或者清除,通常這一位在通信協(xié)議中作為奇偶位使用;而在多處理機通信中這一位則用于表示是地址幀或數(shù)據(jù)幀。 RB8接收數(shù)據(jù)位8,在模式2和3是已接收的第9位。該位作為奇偶位或者地址/數(shù)據(jù)標識位。在模式0中,RB8則作為保留位。在模式1中,當SM2=0時,RB8為已接收的停止位。 TI發(fā)送中斷標識位。在模式0中,由硬件在發(fā)送完第8位數(shù)據(jù)后置位。其它模式中則是由硬件在發(fā)送之初置位。TI置位后,申請中斷,CPU響應中斷之后發(fā)送下一幀數(shù)據(jù)。在任何模式下,TI都必須由軟件來清除。 RI接收中斷標識位。在模式0中,由硬件在結(jié)束第8位接收后置位。其它模式中則是由硬件在接收的半中間置位。RI=1,申請中斷,要求CPU 取走數(shù)據(jù)。但在模式1中,SM2=1時,當未收到有效的停止位,則不會對RI置位。同樣RI也必須要靠軟件清除。常用的串口模式1是傳輸10 個位的,1位起始位為0,8位數(shù)據(jù)位,低位在先,1位停止位為1。它的波特率是可變的,其速率是取決于定時器1或定時器2的定時值(溢出速率)。 4.2.2 定時器的初始化設置定時器TMOD初始值為11H。初始化代碼如下: void main() { TMOD=0x11; //定時器0c初始化 TH1=(65535-1000)/256; TL1=(65535-1000)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; Init_DS18B20(); //溫度 芯片初始化 P0=0xff; //初始化 斷口 P1=0xff; P3=0xff; while(1) { Scan_Key(); baojin(); value = ReadAdc0832(0); } } 4.2.3 波特率計算在使用串口通訊時,一個非常重要的參數(shù)就是波特率,只有上下位機的波特 率一樣時才可進行正常的通訊。波特率是串行端口每秒可以傳輸?shù)牟ㄌ財?shù)。它是指每秒可以傳送9600個二進位,而一個字節(jié)要8個二進位,如用串口模式1來傳輸,那么加上起始位和停止位,每個數(shù)據(jù)字節(jié)就要占用10個二進位,9600 波特率用模式1傳輸時,每秒傳輸?shù)淖止?jié)數(shù)是9600÷10=960 字節(jié)。51芯片的串口工作模式0的波特率是固定的,為fosc/12,以一個12M的晶振來計算,那么它的波特率可以達到1M。模式2的波特率是固定在fosc/64或fosc/32,具體用那一種就取決于PCON寄存器中的SMOD位,如SMOD為0,波特率為focs/64,SMOD為1,波特率為focs/32。模式1和模式3的波特率是可變的,取決于定時器1或2(52 芯片)的溢出速率?梢杂靡韵碌墓饺ビ嬎悖 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE1.tmp.png (4.1) 上式中如設置PCON 寄存器中的SMOD 位為1,就可以把波特率提升至兩倍。通常會用定時器1工作在模式2下,此時TL1作為計數(shù),會自動重裝值 ,這個定時模式下定時器溢出后,TH1的值會自動裝載到TL1,接著計數(shù),這樣就可以使得定時更為準確。在這個模式下,定時器1溢出速率可用如下公式: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE2.tmp.png (4.2) 上式中的計數(shù)速率跟晶體振蕩器的頻率相關。在52芯片中,定時器啟動后,每一個機器周期內(nèi)定時寄存器TH 的值就增加1,而1個機器周期等于12個振蕩周期,所以51 芯片的計數(shù)速率為晶體振蕩器頻率的1/12,那么一個12M 的晶振用在51 芯片上的計數(shù)速率就為1M。通常用11.0592M 晶體是為了得到標準的無誤差的波特率,代入公式: 11.0592M: 9600=(2÷32)×((11.0592M/12)/(256-TH1)) TH1=250 12M: 9600=(2÷32)×((12M/12)/(256-TH1)) TH1≈249.49 上面的計算可以看出使用12M晶體的時候計算出來的TH1不為整數(shù),而TH1的值只能取整數(shù),這樣它就會有一定的誤差存在,而不能產(chǎn)生精確的9600 波特率。當然一定的誤差在使用中是可以接受的,就算使用11.0592M的晶體振蕩器也會因晶體本身所存在的誤差而使得波特率產(chǎn)生誤差,但晶體本身的誤差對波特率的影響是非常小的,甚至可以忽略不計。 4.3 主程序初始化流程圖這部分實現(xiàn)的功能包括各種I/O輸入輸出狀態(tài)的設定、寄存器初始化、中斷使能等。首先設定定時器工作方式,然后開系統(tǒng)中斷,以便響應中斷定時,及時對氣體濃度和溫度進行采樣。然后關閉蜂鳴器,開啟綠燈,設置報警限初值。主程序初始化流程圖如圖4.2所示。 4.4 濾波子程序當在對氣體濃度進行采樣時,可能會遇到尖脈沖干擾的現(xiàn)象,會引起煙霧濃度采樣值的偏差,所以,采用去極值平均濾波法,即先對N個采樣數(shù)據(jù)進行比較,然后去掉最大值和最小值,最后計算余下的N-2個采樣數(shù)據(jù)的算術平均值。這種方法既可以濾去小的隨機干擾,又可以濾去脈沖干擾,保證了煙霧檢測濃度的準確性,大大降低了誤報、錯報的可能性。濾波子程序如圖4.3所示。 4.5 單片機處理子程序當溫度或煙霧濃度超過報警限設定值時,蜂鳴器發(fā)出報警,對應的紅燈亮,提醒人們采取安全對策或者采取相關措施,從而保障生命財產(chǎn)的安全。為防止誤報,在程序設計上,需對煙霧濃度和溫度進行快速重復檢查和延時報警,以便區(qū)別出煙霧的產(chǎn)生原因,防止誤報。單片機處理子程序流程圖如圖4.4所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE3.tmp.png 圖4.2 主程序初始化流程圖 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE4.tmp.png 圖4.3 濾波子程序 4.6 按鍵處理子程序通過單片機會判斷是否有鍵值,當有鍵按下時就會有鍵值,然后調(diào)用鍵盤處理子程序。按鍵處理子程序流程圖如圖4.5所示。 4.7 本章小結(jié)本章主要完了串口通訊的實現(xiàn),并給出波特率的計算,還有主程序的流程圖以及單片機處理子程序的流程圖、按鍵處理程序等等。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE5.tmp.png 圖4.4 單片機處理子程序流程 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE6.tmp.png 圖4.5 按鍵處理子程序流程 結(jié)束語 火災自動報警系統(tǒng)可保障生產(chǎn)與生活的安全,避免火災和爆炸事故以及煤氣中毒的發(fā)生,它是防火、防爆和安全生產(chǎn)所必備的儀器,具有廣闊的市場空間與發(fā)展前景。 本設計的火災自動報警系統(tǒng)主要由單片機最小系統(tǒng)、溫度氣體濃度檢測電路、顯示電路部分和報警控制部分構(gòu)成。根據(jù)設計要求、使用環(huán)境、成本等因素,選用DS18B20數(shù)字溫度傳感器、MQ-2型半導體電阻式煙霧傳感器和AT89S52單片機。溫度傳感器采用DS18B20數(shù)字溫度傳感器,由可組網(wǎng)數(shù)字溫度傳感器芯片封裝而成,具有耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設備數(shù)字測溫和控制領域等優(yōu)點。MQ-2型半導體可燃氣體敏感元件煙霧傳感器屬于氣敏傳感器,是氣-電變換器,它將可燃性氣體在空氣中的含量(即濃度)轉(zhuǎn)化成電壓或者電流信號,通過A/D轉(zhuǎn)換電路將模擬量轉(zhuǎn)換成數(shù)字量后送到單片機,進而由單片機完成數(shù)據(jù)處理、濃度處理及報警控制等工作。MQ-2型半導體可燃氣體敏感元件煙霧傳感器具有靈敏度高、響應快、抗干擾性好、使用方便、價格便宜,且不會發(fā)生探頭阻緩及中毒現(xiàn)象,維護成本較低等優(yōu)點。AT89S52是一個低功耗,高性能CMOS 8位單片機,片內(nèi)含8k Bytes ISP(In-system programmable)的可反復擦寫1000次的Flash只讀程序存儲器,工具多,易上手,片源廣,價格低,編程靈活,控制簡單,很適合我們所要制作的火災自動報警系統(tǒng)。 在本設計研制的報警系統(tǒng)的基礎上,可以再做適當?shù)墓δ軘U展,使火災自動報警系統(tǒng)的功能更加完善,安全性更高,使用更加方便等,例如增加消防聯(lián)動裝置,在火災發(fā)生時可以直接對火災進行控制,降低火災的損失。 這次的畢業(yè)設計總的來說還是成功的,自己不僅從中學到了很多,也發(fā)現(xiàn)了不少問題。一開始看到這個題目的時候,很茫然,不知道從哪做起,不知道怎么樣才能做出來,后來在李老師的耐心指導下,才弄清楚怎么開始做。然后自己開始找相關資料,并結(jié)合李老師提供的一些資料,學習AT89S52芯片、數(shù)碼顯示管、時鐘電路、控制電路、復位電路的設計原理。通過本次的設計我從中學習到了很多的知識,也明白了很多道理,無論干什么都要細心,只要努力相信一定會成功。 參考文獻 [1] 沙占友.集成化智能傳感器原理與應用[M].北京:電子工業(yè)出版社,2004:125-127. [2] 余錫存,曹國華.單片機原理及接口技術[M].西安:西安電子科技大學出版社,2002:266-268. [3] 張志良.單片機原理與控制技術(第2版)[J].計算機信息 ,2006,12(9):222-223. [4] 陳章其,吳沖巖.火災傳感器[J].電子器件,2005,18(1):55-58. [5] 熊杰.單片機與PC機的串行通信[M].江西:江西環(huán)境工程學院,2010:15-17. [6] 揭景耀,劉激揚.傳感器在預防火災中的應用[J]. 傳感器技術,2006,6(2):46-48. [7] 徐小濤.基于AT89系列單片機的串行通信[M].北京:電子工業(yè)出版社,2010:89-91. [8] 張忠華.單片機與PC機串行通信的實現(xiàn) [M].北京:北京外國語大學信息技術中,2009:95-97. [9] Daniel T.Gottuk,Michelle J.Peatross. Advanced fire detection using multi-signature alarm algorithms[J]. Fire Safety Journal,2002,37(11):381-394. [10] 張鑫.單片機原理及應用[M].北京:電子工業(yè)出版社,2005:67-77. [11] 林繼光,吳明光.PC機和單片機串行通信程序設計[M].浙江:浙江大學工業(yè)控制研究所,2001. [12] 汪道輝.單片機系統(tǒng)設計與實踐[J].現(xiàn)代電子技術,2006,12(2):59-64. [13] Vaughn Bradshaw. The Building Environment: Active and Passive Control Systems[M]. John Wiley & Sons,2006. [14] 王瑋.52單片機與PC機串行通信接口的設計[J]. 湖北孝感學院物理與電子信息工程,2009,2(1):33-42. [15] 李華.AT89S5x系列單片機應用接口技術[M].北京:航空航天大學出版社,1993:34-43. [16] 孫育才. AT89S5x系列單片微型計算機及應用[M].南京:東南大學出版社,2006:59-67. [17] 劉文濤.單片機應用開發(fā)實例[M].北京:清華大學出版社,2005:32-36. [18] 劉軍.單片機原理與接口技術[M].上海:華東理工大學出版社,2006:40-44. [19] 彭喜元,姜守達,喬立巖.新編AT89系列單片機應用設計[M].哈爾濱:工業(yè)大學出版社,2003:90-94. [20] OGATA K. Modern control engineering [M]. Beijing,China:Publishing House of Electronics Industry,2006:7-23. [21] 李海濤.關于如何提高單片機系統(tǒng)可靠性的探討[J].寧夏機械,2005,2(3):22-28. [22] 張培仁.基于C語言編程AT89S52單片機原理與應用[M].北京:清華大學出版社,2003:55-57. [23] Yeager Brent. How to troubleshoot your electronic scale[J]. Powder and Bulk Engineering ,2005,3(1):33-38. [24] 賴壽宏.微型計算機控制技術[M]. 北京:機械工業(yè)出版社,2009:27-30. [25] 楊中華,汪蕙,劉潤生.模擬集成電路的自動綜合方法[M].杭州:科學出版社,2007:132-136. [26] 石明江,顧亞雄.單片機原理與應用課程教學改革與實踐[J]. 計算機教育,2011,2(6):12-22. [27] 張洪潤.單片機應用技術教程[M].北京:清華大學出版社,2009:88-91. [28] 何立民.單片機高級教程——應用與設計[M].北京:航空航天大學出版社,2003:65-69. [29] 胡漢才.單片機原理及其接口技術(第3版)[M].北京:清華大學出版社,2010:21-26. [30] Chan K,Ito H,Inaba H.Remote sensing system for near-infrared differential absorption of gas using low-loss optical fiber link[J]. ApplOpt,2004:10-23. 致 謝 時光飛逝,轉(zhuǎn)眼大學四年學習即將結(jié)束;厥状髮W學習期間的校園學習生活,在知識的海洋里汲取營養(yǎng)和體味獲取知識的充實與喜悅,不禁感慨萬千。 四年的校園生活即將劃上句號,而這對于我的人生來說只是一個分號,我將面對又一次新征程。四年的求學生涯在老師、同學、朋友的關愛支持下,走得辛苦卻也收獲滿囊,在設計即將完成之際,我感慨甚多,心情亦是那樣無法平靜。我們從小就崇拜名人、偉人,但是現(xiàn)在,我覺得我更是想把我的敬意和感謝獻給我的導師——黑龍江工程學院的李靜老師。您最出色的學生不是我,但我最尊敬的老師卻是您。您治學嚴謹,學識淵博,思想深邃,視野雄闊,處世態(tài)度認真,使我感受到了一種良好的精神氛圍和努力的態(tài)度。授人以魚不如授人以漁,您不僅讓我接受了全新的思想觀念,更讓我改變了基本的思考方式,鍛煉了自我動手的能力,拓寬了未來的發(fā)展目標。從設計題目的選定到開題報告、參考文獻、外文翻譯,一直到設計寫作的指導,都是您悉心的點撥,耐心的講解,再經(jīng)思考后的領悟,才使得我走到現(xiàn)在這成功的一步。您廣博的學識、深厚的學術素養(yǎng)、嚴謹?shù)闹螌W精神和一絲不茍的工作作風使我終生受益,我在此表示真誠地感謝和深深的謝意。感謝您在百忙之中對我畢業(yè)論文從選題到最后定稿所付出的辛勞,感謝您在我最后大學生涯對我人生方向的指引。 在設計即將完成之際,我的心情久久無法平靜下來,從開始進入選題,到開題,最后到現(xiàn)在設計的順利完成,有許許多多可敬的師長、親愛的同學、熱心的朋友給了我無數(shù)的幫助,請在這里接受我誠摯謝意! 同時也感謝黑龍江工程學院我的母校為我提供良好的做畢業(yè)設計的環(huán)境。最后一次感謝所有在畢業(yè)設計中曾經(jīng)幫助過我的良師益友,以及在設計中被我參考的論著的作者。 附 錄 A file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BF6.tmp.png 系統(tǒng)硬件原理圖 附 錄 B #include<reg52.h> #include "18b20.h" #include "display.h" #include "adc0832.h" #define laddata =P0; unsigned char value=1; unsigned char count=0; unsigned char code duanma[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x89,0xc7}; unsigned char code duanma1[]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xBF}; //共陽數(shù)碼管帶小數(shù)點段碼表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" unsigned char code tab[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char code tabw[]={0x24,0xaf,0xe0,0xa2,0x2b,0x32,0x30,0xa7}; extern unsigned char id=0; extern unsigned char value; unsigned char level=0; bit h_temp=0, l_temp=0; // 定義閃爍標志位 //timecount用于5000d定時記數(shù) 時間到取反標志位 RE re_disp int temp,temph=45,templ=3; int flag=1; float nongdu; unsigned char ad_data1,ad_data2,ad_data3; unsigned int data dis[4]={0x00,0x00,0x00,0x00}; //定義3個顯示數(shù)據(jù)單元和一個數(shù)據(jù)存儲單元 sbit beep= P1^0; sbit alarm = P3^0; sbit SET = P3^1; sbit UP = P3^2; sbit DOWN = P3^5; unsigned char tempFlag=0,nongduFlag=0,buttonFlag=0; sbit ledNorm = P3^3; sbit ledAlarm = P3^4; unsigned char displayFlag=0; sbit wdu1 = P2^5; //溫度十位 sbit wdu2 = P2^6; //不顯示 sbit wdu3 =P2^7; //小數(shù)點 sbit wdu4 = P2^4; //溫度各位 sbit DQ = P2^3; void Delay(int num) { //--延時函數(shù) 2uS/次 while(num--); } void Init_DS18B20(void) //初始化ds1820 { unsigned char x=0; DQ = 1; //DQ復位 Delay(8); //稍做延時 DQ = 0; //單片機將DQ拉低 Delay(80); //精確延時 大于 480us DQ = 1; //拉高總線 Delay(14); x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 Delay(20); } /******************************************************************************/ unsigned char ReadOneChar(void) //讀一個字節(jié) { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 給脈沖信號 dat>>=1; DQ = 1; // 給脈沖信號 if(DQ) dat|=0x80; Delay(4); } return(dat); } /******************************************************************************/ void WriteOneChar(unsigned char dat) //寫一個字節(jié) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; Delay(5); DQ = 1; dat>>=1; } } /******************************************************************************/ unsigned int ReadTemperature(void) //讀取溫度 { unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳過讀序號列號的操作 WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換 Init_DS18B20(); WriteOneChar(0xCC); //跳過讀序號列號的操作 WriteOneChar(0xBE); //讀取溫度寄存器 a=ReadOneChar(); //讀低8位 b=ReadOneChar(); //讀高8位 t=b; t<<=8; t=t|a; tt=t*0.0625; t= tt*10+0.5; //放大10倍輸出并四舍五入 return(t); } void delay_ms(unsigned char ms) // 延時毫秒@12M,ms最大值255 { unsigned char i; while(ms--) for(i = 0; i < 100; i++); } void display_temp(void)//顯示函數(shù) { EA = 0; temp = ReadTemperature(); EA = 1; if((temp/10)>=temph) { tempFlag =1; // ledAlarm=0; // ledNorm=1; } //溫度高于或等于上限值,報警 else { tempFlag=0; } dis[2]=value/51; //AD值轉(zhuǎn)換為3為BCD碼,最大為5.00V dis[3]=value%51; //余數(shù)暫存 dis[3]=dis[3]*10; //計算小數(shù)第一位 dis[1]=dis[3]/51; dis[3]=dis[3]%51; dis[3]=dis[3]*10; //計算小數(shù)第二位 dis[0]=dis[3]/51; nongdu = dis[2]*1.0+dis[1]*0.1+dis[0]*0.01; // P0 = duanma[value/100]; P0 = duanma1[10]; //顯示百位1 wdu1 = 0; delay_ms(1); P2 = 0xff; if(nongdu<0.50) { level=1; nongduFlag=0; } else if(0.50<=nongdu<0.75) { level=2; nongduFlag=0; } else if(0.75<=nongdu<1.00) { level=3; nongduFlag=1; } else if(1.00<=nongdu<1.10) { level=4; nongduFlag=1; } else if(1.10<=nongdu) { level=5; nongduFlag=1; } //三級以上報警 P0 = duanma[level]; //顯示等級分1,2,3,4級,兩級以上報警 wdu2 = 0; delay_ms(1); P2 = 0xff; // P0 = duanma[(value/10)-(value/100)*10]; P0 = duanma[temp/100]; //顯示十位2 wdu4 = 0; delay_ms(1); P2 = 0xff; // P0 = duanma[value%10]; P0 = duanma[(temp-(temp/100)*100)/10]; //顯示各位3 wdu3 = 0; delay_ms(1); P2 = 0xff; } void displaySet(void) //顯示函數(shù) { EA = 0; temp = ReadTemperature(); EA = 1; if((temp/10)>=temph) { tempFlag =1; // ledAlarm=0; // ledNorm=1; } //溫度高于或等于上限值,報警 else { tempFlag=0; } P0 = duanma[temph/10]; //顯示十位2 wdu1 = 1; delay_ms(1); P2 = 0xff; P0 = duanma[temph/10]; //顯示十位2 wdu2 = 1; delay_ms(1); P2 = 0xff; // P0 = duanma[(value/10)-(value/100)*10]; P0 = duanma[temph/10]; //顯示十位2 wdu4 = 0; delay_ms(1); P2 = 0xff; // P0 = duanma[value%10]; P0 = duanma[temph%10]; //顯示各位3 wdu3 = 0; delay_ms(1); P2 = 0xff; } void display(void) { if(!displayFlag) { display_temp(); } else { displaySet(); } } void Set_id(unsigned char id_number,unsigned char one_or_zero) { if(id_number==1) { if(one_or_zero==0) { if(temph++>99) temph=99; } else { if(--temph<templ) temph=templ; } } } void id_case_key(void) { display(); if(displayFlag) { if(DOWN == 0) //減少按鍵 { delay_ms(20); if(DOWN == 0) { Set_id(1,0); } while(DOWN == 0); //釋放按鍵 } if(UP == 0) { delay_ms(20); if(UP == 0) { Set_id(1,1); } while(UP ==0); } } } void Scan_Key(void) { display(); if(SET == 0) { delay_ms(20); if(SET == 0) { displayFlag = ~displayFlag; } while(SET == 0); } id_case_key(); if(alarm ==0) { delay_ms(20); if(alarm == 0) { buttonFlag = ~buttonFlag; } while(alarm == 0); } id_case_key(); } void baojin(void) { if(tempFlag|buttonFlag|nongduFlag) { beep=0; ledAlarm=0; ledNorm=1; } else { beep=1; ledAlarm=1; ledNorm=0; } } void main() { TMOD=0x11; //定時器0c初始化 TH1=(65535-1000)/256; TL1=(65535-1000)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; Init_DS18B20(); //溫度 芯片初始化 P0=0xff; //初始化 斷口 P1=0xff; P3=0xff; while(1) { Scan_Key(); baojin(); value = ReadAdc0832(0); } }
|