智能家居環境監測系統設計 摘要:本設計可分為溫濕度檢測與煙霧檢測和人體檢測部分。溫濕度檢測部分,是通過利用單總線型數字式溫濕度傳感器DHT11,實現系統具有測溫濕度誤差小、分辨率高、抗干擾能力強等特點。煙霧檢測電路,利用氣體傳感器MQ-2與ADC0832模數轉換器實現基本功能。通過這些傳感器和芯片,當環境中可燃氣體濃度或有毒氣體等發生變化時系統會發出相應的燈光報警信號和聲音報警信號,以此來實現火災報警,智能化提示。人體檢測部分,是通過HC-SR501模塊實現,模塊主要功能就是熱釋電紅外傳感器感應到入侵者的紅外熱輻射,將其轉換成超低頻信號,經電路放大、輸出。檢測器是利用紅外人體檢測探頭檢測預先設定好的范圍內的情況,一旦有危險便向單片機發出信號,再經單片機處理,然后控制蜂鳴器和LED點亮發出警告,本設計還可以應用于家居防盜、倉庫防盜等多種防盜場合,具有很強的實用價值和良好的市場前景。溫濕度、煙霧和人體防盜檢測是三種最基本的環境參數,其測量方法和裝置對現在的生活、生產具有重要的意義。本課題基本完成預期設想,設計并實現了系統的硬件電路,完成了系統軟件的編寫和調試。測試結果證明,達到了設計要求。
目錄
摘要
1 緒論
1.1 課題背景
1.2 概述及功能介紹
1.2.1 功能概述
1.3 本課題的研究思路
1.3.1 研究意義
1.3.2 研究思路
1.3.3 研究難點
1.4 主要工作
2 系統方案設計
2.1 系統構成
2.2 方案設計
2.2.1單片機的選擇
2.2.2 傳感器的選擇
2.2.3 顯示器選擇方案
2.2.4 防盜檢測選擇方案
3 硬件的設計
3.1 主控電路
3.2 溫濕度檢測
3.3 A/D轉換電路
3.4 MQ-2煙霧檢測電路
3.5 報警電路
3.5.1 燈光報警電路
3.5.2 聲音報警電路
3.6 LCD1602夜晶顯示電路
3.7 人體檢測模塊
3.8 按鍵電路
4 軟件的設計
4.1 軟件介紹
4.2 系統程序流程圖
5測試結果及結論
5.1 調試
5.2 結論
致謝
緒論1.1 課題背景當今世界,隨著科技的不斷發展,智能環境監測成了人類關注的話題。智能家居通過物聯網技術將家中的各種設備(如照明系統、火災檢測系統、空調控制、安防系統,報警控制等)連接到一起,提供家電控制、照明控制、智能溫濕度調節、室內外遙控、防盜報警以及環境監測等多種功能和手段。與普通家居相比,智能家居不僅具有傳統的居住功能,兼備建筑、信息家電、設備自動化,集系統、結構、服務、管理為一體的高效、舒適、安全、便利、環保的居住環境,而且提供全方位的信息交互功能,幫助家庭與外部保持信息交流暢通,優化人們的生活方式,幫助人們有效安排時間,增強家居生活的安全性,甚至為各種能源費用節約資金。 本文首先介紹了智能家居的發展前景,接著介紹了該課題設計構想,各模塊電路的選擇及其電路工作原理,最后對該課題的設計過程進行了總結與展望并附帶各個模塊的電路原理圖,和本設計仿真圖,以及C語言思想。智能家居實驗是為智能家居系統實驗做準備的,是實驗的基礎,智能家居是為了提高學生的動手能力,配合各類電子設計大賽,科技活動等而開發的設計模型。在此模型上我們可以進行多種實驗,如測量,感應,報警等等。為了能更好的控制模擬家居,實現手動與自動控制相結合,進行各種功能實現,并且這個實驗對現實生活也有一定的意義,所以我們就需要對這個實驗進行一定的研究。 1.2 概述及功能介紹
1.2.1 功能概述本次設計主要分五個個功能,分別為測溫濕度,煙霧及紅外感應和報警,顯示信息和報警信息。將這幾個個功能巧妙的與家居結合,我們已經知道五個單獨功能如何實現,現在要將五個功能通過單片機系統化反饋,以達到能實現綜合五種功能的智能家居。 設計涉及主硬件為:STC89C52RC單片機,DHT11溫濕度傳感器,人體紅外感應器,MQ-2煙霧傳感器,按鍵設置與LCD1602液晶顯示模塊,蜂鳴器報警電路,以及超標指示顯示模塊組成。 1.2.2 功能介紹 (1)通過DHT11溫濕度采集數據將信息顯示于LCD1602上面,如果溫濕度超出設定的預警值,指示燈有提示并蜂鳴器報警;待到壞境溫濕度降到低于預警值的時候,報警自動關閉。 (2)采用煙霧探頭傳感器來檢測我們周圍環境的煙霧,可對煤氣甲烷,以及我們周圍著火的煙霧,或是抽煙的濃度等實時監測,如有超標,蜂鳴器報警,并有指示燈動作來提醒你解決當前的問題,解決之后,這些顯示和指示指標自動關閉,所以能給您帶來一定的安全感。 (3)人體紅外檢測電路能夠根據外界移動人體進行判斷,如果在布防狀態并且有人時,指示燈有提示并蜂鳴器報警,來警告入侵者,直至手動撤防才可以解除報警。而且具有掉電保存的功能,即使人為關閉電源再開機也能繼續報警,這樣更加智能。 1.3 本課題的研究思路
1.3.1 研究意義21世紀是信息化的時代,電子產品如雨后春筍般迅猛發展,電子測量設備也在逐漸豐富起來。模擬產品逐漸被數字化的產品所取代,并且使用變得越來越方便。雖然現今市面上有很多環境測試儀,但是針對人們學習生活需要的環境測試儀卻很少,因此設計出一個簡單實用的環境測試儀是很有意義的,F代電子技術日新月異,各種新型的自動控制系統也越來越多地運用到人們的日常生活、工業生產等領域,它不但可以提高勞動生產率,而且可以使控制的設備或執行的操作更加精確。 1.3.2 研究思路(1) 研究溫濕度傳感器與AD轉換的特性 (2) 根據其特性設計一環境監測報警裝置 (3) 選擇合適的微處理器,設計一套完整的程序 (4) 論證各個部分的可行性方案 (5) 設計實現各個模塊,并進行單獨調試 (6) 各模塊調試完畢后進行整機系統測試 1.3.3 研究難點(1) 溫濕度讀取與AD轉換與報警值的判斷程序的邏輯思路比較復雜; (2) 溫濕度仿真電路的設計。 1.4 主要工作主要完成工作如下: (2) 電路的調試; (3) 控制程序的編寫; (4) 軟件調試; (5) 單片機監測系統整機測試。 2 系統方案設計2.1 系統構成設計涉及主硬件為:STC89C52RC單片機,DHT11溫濕度傳感器,人體紅外感應器,MQ-2煙霧傳感器,按鍵設置與LCD1602液晶顯示模塊,蜂鳴器報警電路,以及超標指示顯示模塊組成。 本研究設計框圖如圖1所示。
2.2 方案設計
2.2.1單片機的選擇方案一:AT89C52是美國ATMEL公司生產的低電壓,高性能CMOS型8位單片機,器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,片內置通用8位中央處理器(CPU)和Flash存儲單元,功能強大。其片內的8K程序存儲器是FLASH工藝的,這種單片機對開發設備的要求很低,開發時間也大大縮短。寫入單片機內的程序還可以進行加密,這又很好地保護我們的勞動成果。再者,AT89C52目前的售價比8031還低,市場供應也很充足。AT89C52可構成真正的單片機最小應用系統,縮小系統體積,增加系統的可靠性,降低系統的成本。只要程序長度小于8K,四個I/O口全部提供給用戶。可用5V電壓編程,而且擦寫時間僅需lOms。AT89C51芯片提供三級程序存儲器加密,提供了方便靈活而可靠的硬加密手段,能完全保證程序或系統不被仿制。PO口是三態雙向口,通稱數據總線口,因為只有該口能直接用于對外部存儲器的讀/寫操作。 方案二:STC89C52系列單片機的指令系統和AT89C52系列的完全兼容,但實際操作起來卻存在很多問題: (1)AT89C52不帶ISP下載,要用下載器才行,STC89C52可以用你的USB轉串口下載,下載軟件可以到STC廠家網上去下。 (2)STC單片機執行指令的速度很快,大約是AT的3-30倍,盡管快是好事,但這樣一來,你在AT上好使的程序在STC上不一定好用,最典型的例子就是那些對時序有嚴格要求的模塊,用STC時注意得加長延時,大約是AT的10—30倍就差不多,這一點自己調試就知道了。 (3)STC單片機對工作環境的要求比較低,電壓低于5伏時仍然正常工作,甚至3伏到4伏之間都還可以工作,然而這樣的環境下AT肯定不行了,所以當一個系統用STC單片機好用,但用AT的單片機不工作時,直接查最小系統,看單片機的供電是否正常。 比較這兩種方案,由于在學校期間學過數字電路、單片機原理、C語言程序設計,綜合考慮單片機的各部分資源和作為學生能夠獲得的資源,經過對比此次設計要求,我選擇用STC系列芯片完成。而且學校也提供了相應的硬件操作平臺,實際操作起來比較方便,故STC為更合理的選擇。本系統選擇STC89C52單片機作為主控芯片。足夠本設計運行,且價格便宜,下載程序方便。 2.2.2 傳感器的選擇方案一:選用DS18B20溫度傳感器作為溫度檢測模塊。DS18B20是一線式數字溫度傳感器。具有獨特的單線式接口方式。測量范圍在—55℃~125℃,—10℃~85℃,誤差范圍在-\+0.5℃。最高精度可達0.0625℃。 HS1101是電容式濕度傳感器?蓽y量相對濕度范圍在0%~100%RH。誤差為-\+2%RH。 方案二: 選用DHT11作為設計的溫濕度檢測模塊。DHT11是一款集成型的數字溫濕度一體傳感器。 它應用專用的數字模塊采集技術和溫濕度傳感技術,確保產品具有極高的可靠性與卓越的長期穩定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。因此該產品具有品質卓越、超快響應、抗干擾能力強、性價比極高等優點。測量范圍20%~90%RH,0℃~50℃。測溫精度為-\+2℃,測濕精度為-\+5%RH。完全符合本次畢業設計的要求。 經上述分析,方案一雖然精度更精確。卻稍顯復雜。方案二即便不能實現方案一的高精度測量。卻也能滿足設計要求。且簡便易行?煽糠定。具有超高的性價比。故選擇方案二。 2.2.3 顯示器選擇方案方案一:采用12864液晶顯示屏。液晶顯示模塊是128×64點陣的漢字圖形型液晶顯示模塊,可顯示漢字及圖形,內置8192個中文漢字(16X16點陣)、128個字符(8X16點陣)及64X256點陣顯示RAM(GDRAM)。可與CPU直接接口,提供兩種界面來連接微處理機:8-位并行及串行兩種連接方式。具有多種功能:光標顯示、畫面移位、睡眠模式等。 方案二:采用LCD1602液晶顯示屏。LCD1602A 是一種工業字符型液晶,能夠同時顯示16x02 即32個字符。(16列2行)。1602只能顯示字母、數字和符號能顯示16*2個字符,但寄存器不止32個,有一些顯示效果,如字符一個個顯示、字符從左到右或從右到左顯示等等,顯示效果簡單。 總結:在編程使用方面,兩者難度差不多,原理差不多,都是寫指令、寫地址、寫數據等等。當然12864液晶屏顯示更全面、字符更多。相比于1602液晶屏、12864能更形象具體的實現顯示功能。不過1602液晶屏也能實現設計的要求。網上買比較廉價,最低的六塊錢左右。而12864液晶顯示屏最便宜的也要四十塊錢。從造價方面考慮,當然是價格低廉的優先。而LCD1602A就是最好的選擇。 2.2.4 防盜檢測選擇方案方案一:被動式紅外傳感技術是利用紅外光敏器件將活動生物體發出的微量紅外線轉換成相應的電信號,并進行放大,處理,它能可靠的將運動著的生物體(人)和飄落的物體加以區別。同時它還具有監控范圍大,隱蔽性好,抗干擾能力強和誤報率低等特點。被動式紅外入侵報警器又稱熱釋電紅外入侵報警器。 方案二:主動式紅外探測器由紅外發射機、紅外接收機和報警控制器組成。因此主動式探測器所探測的是點到點,而不是一個面的范圍。其特點是探測可靠性非常高。但若對一個空間進行布防,則需有多個主動式探測器,價格昂貴。主動式探測器常用于博物館中單體貴重文物展品的布防以及工廠倉庫的門窗封鎖、購物中心的通道封鎖、停車場的出口封鎖、家居的陽臺封鎖等等。 經上述分析,方案一更適合家居使用。成本低,安全性高。 3 硬件的設計
3.1 主控電路STC89C52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統可編程Flash 存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統可編程Flash,使得STC89C52為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。 具有以下標準功能: 8k字節Flash,512字節RAM, 32 位I/O 口線,看門狗定時器,內置4KB EEPROM,MAX810復位電路,三個16 位 定時器/計數器,一個6向量2級中斷結構,全雙工串行口。另外 STC89X51 可降至0Hz 靜態邏輯操作,支持2種軟件可選擇節電模式?臻e模式下,CPU 停止工作,允許RAM、定時器/計數器、串口、中斷繼續工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。最高運作頻率35Mhz,6T/12T可選。STC89C52主要功能如表1所示,其DIP封裝如圖2所示 表1:STC89C52主要功能
STC89C52引腳介紹 ① 主電源引腳(2根) VCC(Pin40):電源輸入,接+5V電源 GND(Pin20):接地線 ②外接晶振引腳(2根) XTAL1(Pin19):片內振蕩電路的輸入端 XTAL2(Pin20):片內振蕩電路的輸出端 ③控制引腳(4根) RST/VPP(Pin9):復位引腳,引腳上出現2個機器周期的高電平將使單片機復位。 ALE/PROG(Pin30):地址鎖存允許信號 PSEN(Pin29):外部存儲器讀選通信號 EA/VPP(Pin31):程序存儲器的內外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從內部程序存儲器讀指令。 ④可編程輸入/輸出引腳(32根) STC89C52單片機有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個口有8位(8根引腳),共32根。 P0口(Pin39~Pin32):8位雙向I/O口線,名稱為P0.0~P0.7 P1口(Pin1~Pin8):8位準雙向I/O口線,名稱為P1.0~P1.7 P2口(Pin21~Pin28):8位準雙向I/O口線,名稱為P2.0~P2.7 P3口(Pin10~Pin17):8位準雙向I/O口線,名稱為P3.0~P3.7 作頻率35Mhz,6T/12T可選。 圖2 STC89C52 DIP封裝圖 最小系統包括單片機及其所需的必要的電源、時鐘、復位等部件,能使單片機始終處于正常的運行狀態。電源、時鐘等電路是使單片機能運行的必備條件,可以將最小系統作為應用系統的核心部分,通過對其進行存儲器擴展、A/D擴展等,使單片機完成較復雜的功能。 STC89C52是片內有ROM/EPROM的單片機,因此,這種芯片構成的最小系統簡單﹑可靠。用STC89C52單片機構成最小應用系統時,只要將單片機接上時鐘電路和復位電路即可,結構如圖2-3所示,由于集成度的限制,最小應用系統只能用作一些小型的控制單元。

圖3 單片機最小系統原理框圖
(1) 時鐘電路 STC89C52單片機的時鐘信號通常有兩種方式產生:一是內部時鐘方式,二是外部時鐘方式。內部時鐘方式如圖2-4所示。在STC89C52單片機內部有一振蕩電路,只要在單片機的XTAL1(18)和XTAL2(19)引腳外接石英晶體(簡稱晶振),就構成了自激振蕩器并在單片機內部產生時鐘脈沖信號。圖中電容C1和C2的作用是穩定頻率和快速起振,電容值在5~30pF,典型值為30pF。晶振CYS的振蕩頻率范圍在1.2~12MHz間選擇,典型值為12MHz和6MHz。 
圖4 STC89C52內部時鐘電路 (2) 復位電路 當在STC89C52單片機的RST引腳引入高電平并保持2個機器周期時,單片機內部就執行復位操作(若該引腳持續保持高電平,單片機就處于循環復位狀態)。 最簡單的上電自動復位電路中上電自動復位是通過外部復位電路的電容充放電來實現的。只要Vcc的上升時間不超過1ms,就可以實現自動上電復位。 除了上電復位外,有時還需要按鍵手動復位。本設計就是用的按鍵手動復位。按鍵手動復位有電平方式和脈沖方式兩種。其中電平復位是通過RST(9)端與電源Vcc接通而實現的。 
圖5 STC89C52復位電路
(3) STC89C52中斷技術概述 中斷技術主要用于實時監測與控制,要求單片機能及時地響應中斷請求源提出的服務請求,并作出快速響應、及時處理。這是由片內的中斷系統來實現的。當中斷請求源發出中斷請求時,如果中斷請求被允許,單片機暫時中止當前正在執行的主程序,轉到中斷服務處理程序處理中斷服務請求。中斷服務處理程序處理完中斷服務請求后,再回到原來被中止的程序之處(斷點),繼續執行被中斷的主程序。 圖2-6為整個中斷響應和處理過程。
圖6 中斷響應和處理過程
如果單片機沒有中斷系統,單片機的大量時間可能會浪費在查詢是否有服務請求發生的定時查詢操作上。采用中斷技術完全消除了單片機在查詢方式中的等待現象,大大地提高了單片機的工作效率和實時性。 3.2 溫濕度檢測DHT11數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合傳感器。它應用專用的數字模塊采集技術和溫濕度傳感技術,確保產品具有極高的可靠性與卓越的長期穩定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。因此該產品具有品質卓越、超快響應、抗干擾能力強、性價比極高等優點。每個DHT11傳感器都在極為精確的濕度校驗室中進行校準。校準系數以程序的形式儲存在OTP內存中,傳感器內部在檢測信號的處理過程中要調用這些校準系數。單線制串行接口,使系統集成變得簡易快捷。超小的體積、極低的功耗,信號傳輸距離可達20米以上,使其成為各類應用甚至最為苛刻的應用場合的最佳選則。產品為 4 針單排引腳封裝。連接方便,特殊封裝形式可根據用戶需求而提供。 DHT11傳感器實物圖如下圖2所示: 圖7 DHT11傳感器實物圖 (1)引腳介紹: Pin1:(VDD),電源引腳,供電電壓為3~5.5V。 Pin2:(DATA),串行數據,單總線。 Pin3:(NC),空腳,請懸浮。 Pin4(VDD),接地端,電源負極。 (2)接口說明 : 建議連接線長度短于20米時用5K上拉電阻,大于20米時根據實際情況使用合適的上拉電阻。如下圖3所示: 圖8 DHT11典型應用電路 (3)數據幀的描述: DATA 用于微處理器與 DHT11之間的通訊和同步,采用單總線數據格式,一次通訊時間4ms左右,數據分小數部分和整數部分,具體格式在下面說明,當前小數部分用于以后擴展,現讀出為零.操作流程如下: 一次完整的數據傳輸為40bit,高位先出。 數據格式:8bit濕度整數數據+8bit濕度小數數據 +8bi溫度整數數據+8bit溫度小數數據 數據傳送正確時校驗和數據等于“8bit濕度整數數據+8bit濕度小數數據+8bi溫度整數數據+8bit溫度小數數據”所得結果的末8位。 (4)電氣特性:VDD=5V,T = 25℃,除非特殊標注 表1 DHT11的電氣特性 注:采樣周期間隔不得低于1秒鐘。 (5)時序描述: 用戶MCU發送一次開始信號后,DHT11從低功耗模式轉換到高速模式,等待主機開始信號結束后,DHT11發送響應信號,送出40bit的數據,并觸發一次信號采集,用戶可選擇讀取部分數據.從模式下,DHT11接收到開始信號觸發一次溫濕度采集,如果沒有接收到主機發送開始信號,DHT11不會主動進行溫濕度采集.采集數據后轉換到低速模式。 總線空閑狀態為高電平,主機把總線拉低等待DHT11響應,主機把總線拉低必須大于18毫秒,保證DHT11能檢測到起始信號。DHT11接收到主機的開始信號后,等待主機開始信號結束,然后發送80us低電平響應信號.主機發送開始信號結束后,延時等待20-40us后, 讀取DHT11的響應信號,主機發送開始信號后,可以切換到輸入模式,或者輸出高電平均可, 總線由上拉電阻拉高。 總線為低電平,說明DHT11發送響應信號,DHT11發送響應信號后,再把總線拉高80us,準備發送數據,每一bit數據都以50us低電平時隙開始,高電平的長短定了數據位是0還是1.格式見下面圖示.如果讀取響應信號為高電平,則DHT11沒有響應,請檢查線路是否連接正常.當最后一bit數據傳送完畢后,DHT11拉低總線50us,隨后總線由上拉電阻拉高進入空閑狀態。 DHT11傳感器連接STC89C52系列單片機相對比較簡單。單片機的P2.0口用來發收串行數據,即數據口。連接傳感器的Pin2(單總線,串行數據)。由于測量范圍電路小于20米,建議加一個5K的上拉電阻,因此在傳感器的Pin2口與電源之間連接一個5K電阻。而傳感器的電源端口Pin1和Pin4分別接單片機的VDD和GND端。傳感器的第三腳懸浮放置。DHT11傳感器原件的電路原理圖如下4所示:
圖9 DHT11電路原理圖 3.3 A/D轉換電路ADC0832 是美國國家半導體公司生產的一種8 位分辨率、雙通道A/D轉換芯片。由于它體積小,兼容性強,性價比高而深受單片機愛好者及企業歡迎,其目前已經有很高的普及率。學習并使用ADC0832 可是使我們了解A/D轉換器的原理,有助于我們單片機技術水平的提高。芯片如下(圖10)所示:
芯片接口說明如下: CS_ 片選使能,低電平芯片使能。 CH0 模擬輸入通道0,或作為IN+/-使用。 CH1 模擬輸入通道1,或作為IN+/-使用。 GND 芯片參考0 電位(地)。 DI 數據信號輸入,選擇通道控制。 DO 數據信號輸出,轉換數據輸出。 CLK 芯片時鐘輸入。 Vcc/REF 電源輸入及參考電壓輸入(復用)。 工作原理如下: 正常情況下ADC0832 與單片機的接口應為4條數據線,分別是CS、CLK、DO、DI。但由于DO端與DI端在通信時并未同時有效并與單片機的接口是雙向的,所以電路設計時可以將DO和DI 并聯在一根數據線上使用。當ADC0832未工作時其CS輸入端應為高電平,此時芯片禁用,CLK 和DO/DI 的電平可任意。當要進行A/D轉換時,須先將CS使能端置于低電平并且保持低電平直到轉換完全結束。此時芯片開始轉換工作,同時由處理器向芯片時鐘輸入端CLK 輸入時鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數據信號。在第1 個時鐘脈沖的下沉之前DI端必須是高電平,表示啟始信號。在第2、3個脈沖下沉之前DI端應輸入2 位數據用于選擇通道功能。當此2 位數據為“1”、“0”時,只對CH0 進行單通道轉換。當2位數據為“1”、“1”時,只對CH1進行單通道轉換。當2 位數據為“0”、 “0”時,將CH0作為正輸入端IN+,CH1作為負輸入端IN-進行輸入。當2 位數據為“0”、“1”時,將CH0作為負輸入端IN-,CH1 作為正輸入端IN+進行輸入。到第3 個脈沖的下沉之后DI端的輸入電平就失去輸入作用,此后DO/DI端則開始利用數據輸出DO進行轉換數據的讀取。從第4個脈沖下沉開始由DO端輸出轉換數據最高位DATA7,隨后每一個脈沖下沉DO端輸出下一位數據。直到第11個脈沖時發出最低位數據DATA0,一個字節的數據輸出完成。也正是從此位開始輸出下一個相反字節的數據,即從第11個字節的下沉輸出DATD0。隨后輸出8位數據,到第19 個脈沖時數據輸出完成,也標志著一次A/D轉換的結束。最后將CS置高電平禁用芯片,直接將轉換后的數據進行處理就可以了。 3.4 MQ-2煙霧檢測電路MQ-2型氣體傳感器用于以氫氣為主要成分的城市煤氣、天然氣、液化石油的測量,而且它抗干擾能力強,水蒸氣、煙等干擾氣體對它的影響小。 MQ-2型氣敏元件具有以下特點: (1) 采用燒結半導體所形成的敏感燒結體,具有穩定的R (即器件在純潔空氣中的阻抗)阻值,從而保證了長期工作的穩定性。 (2) 單電源供電,其功耗僅0.7W左右。 (3) 對所測試的氣體有極高的靈敏度和信噪比。 MQ-2型氣敏元件有兩種型號。MQ-2A型適用于天然氣、城市煤氣、石油液化氣、丙丁烷及氫氣等;MQ-2型適用于煙霧等減光型有害氣體。 器件的靈敏度:S=Ro/Rx為10~30。常見為QM系列的S值僅8左右。Rx為器件在丁烷濃度為0.2%時的阻抗。 電路如右圖所示: 器件的主要參數如下:
響應時間:Tr≤10s 恢復時間:Tn≤60s 加熱電壓:V﹢=5+0.2V 加熱功率::約0.7W 抗干擾能力:丁烷濃度在0.2%時在濕度小于85%RH,在-10℃~+40℃溫度下不會引起誤報。 工作環境:溫度-10℃~+50℃ 濕度≤85%RH 下圖是元件外形結構圖,基座采用耐高溫酚醛塑料壓制,引腳為鍍鎳銅絲,上罩采用雙層密紋不銹鋼網壓制,有較高的強度和防爆能力。 
MQK-2型元件外形結構圖
MQ-2氣敏元件的結構和外形如上圖所示, 由微型AL2O3陶瓷管、SnO2 敏感層,測量電極和加熱器構成的敏感元件固定在塑料或不銹鋼制成的腔體內,加熱器為氣敏元件提供了必要的工作條件。封裝好的氣敏元件有6只針狀管腳,其中4個用于信號取出,2個用于提供加熱電流。 
上圖是MQ-2型元件典型氣體濃度測試特性曲線,在丁烷濃度0.6%以下有極高的靈敏度。 
上圖是MQ-2型元件通電時間特性曲線。可看出,通電后60~90s,元件即進入穩定待測工作狀態。 MQ-2的特點和工作參數如下: 特點: ⑴ 廣泛的探測范圍 ⑵ 高靈敏度/快速響應恢復 ⑶ 優異的穩定性/長壽命 ⑷ 簡單的驅動電路 3.5 報警電路3.5.1 燈光報警電路
圖11 燈光報警電路 LED英文單詞的縮寫,主要含義:LED = Light Emitting Diode,發光二極管,是一種能夠將電能轉化為可見光的固態的半導體器件,它可以直接把電轉化為光;它改變了白熾燈鎢絲發光與節能燈三基色粉發光的原理,而采用電場發光。據分析,LED的特點非常明顯,壽命長、光效高、輻射低與功耗低。作為目前全球最受矚目的新一代光源,LED因其高亮度、低熱量、長壽命、無毒、可回收再利用等優點,被稱為是21世紀最有發展前景的綠色照明光源。我國的LED產業起步于20世紀70年代,經過近40年的發展,產品廣泛應用于景觀照明和普通照明領域,我國已成為世界第一大照明電器生產國和第二大照明電器出口國。近幾年來,隨著人們對半導體發光材料研究的不斷深入,LED制造工藝的不斷進步和新材料(氮化物晶體和熒光粉)的開發和應用,各種顏色的超高亮度LED取得了突破性進展,其發光效率提高了近1000倍,色度方面已實現了可見光波段的所有顏色,其中最重要的是超高亮度白光LED的出現,使LED應用領域跨越至高效率照明光源市場成為可能。曾經有人指出,高亮度LED將是人類繼愛迪生發明白熾燈泡后,最偉大的發明之一。 本設計利用不同顏色的LED指示不同的報警。 3.5.2 聲音報警電路

圖12 聲音報警電路 蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發聲器件。 ;蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。蜂鳴器在電路中用字母“H”或“HA”(舊標準用“FM”、“LB”、“JD”等)表示。1.壓電式蜂鳴器 壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。有的壓電式蜂鳴器外殼上還裝有發光二極管。 多諧振蕩器由晶體管或集成電路構成。當接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發聲。 壓電蜂鳴片由鋯鈦酸鉛或鈮鎂酸鉛壓電陶瓷材料制成。在陶瓷片的兩面鍍上銀電極,經極化和老化處理后,再與黃銅片或不銹鋼片粘在一起。 電磁式蜂鳴器 電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。 接通電源后,振蕩器產生的音頻信號電流通過電磁線圈,使電磁線圈產生磁場。振動膜片在電磁線圈和磁鐵的相互纏繞
蜂鳴器驅動電路一般都包含以下幾個部分:一個三極管、一個蜂鳴器、一個限流電阻。 蜂鳴器為發聲元件,在其兩端施加直流電壓(有源蜂鳴器)或者方波(無源蜂鳴器)就可以發聲,其主要參數是外形尺寸、發聲方向、工作電壓、工作頻率、工作電流、驅動方式(直流/方波)等。這些都可以根據需要來選擇。本設計采用有源蜂鳴器。 三極管Q1起開關作用,其基極的低電平使三極管飽和導通,使蜂鳴器發聲;而基極高電平則使三極管關閉,蜂鳴器停止發聲。 3.6 LCD1602夜晶顯示電路
圖13 液晶顯示電路設計 LCD1602A 是一種工業字符型液晶,能夠同時顯示16x02 即32個字符。(16列2行)。在日常生活中,我們對液晶顯示器并不陌生。液晶顯示模塊已作為很多電子產品的通過器件,如在計算器、萬用表、電子表及很多家用電子產品中都可以看到,顯示的主要是數字、專用符號和圖形。在單片機的人機交流界面中,一般的輸出方式有以下幾種:發光管、LED數碼管、液晶顯示器。發光管和LED數碼管比較常用,軟硬件都比較簡單。 在單片機系統中應用晶液顯示器作為輸出器件有以下幾個優點: 由于液晶顯示器每一個點在收到信號后就一直保持那種色彩和亮度,恒定發光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新新亮點。因此,液晶顯示器畫質高且不會閃爍。 液晶顯示器都是數字式的,和單片機系統的接口更加簡單可靠,操作更加方便。 液晶顯示器通過顯示屏上的電極控制液晶分子狀態來達到顯示的目的,在重量上比相同顯示面積的傳統顯示器要輕得多。 相對而言,液晶顯示器的功耗主要消耗在其內部的電極和驅動IC上,因而耗電量比其它顯示器要少得多。 (1)引腳說明: 第1腳:VSS為地電源。 第2腳:VDD接5V正電源。 第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。 第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。 第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平 R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數據。 第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。 第7~14腳:D0~D7為8位雙向數據線。 第15腳:背光源正極。 第16腳:背光源負極。 (2)1602LCD的RAM地址映射以及標準字庫表 LCD1602液晶模塊內部的字符發生存儲器已經存儲了160個不同的點陣字符圖形,這些字符圖有:阿拉伯數字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母。 它的讀寫操作、屏幕和光標的操作都是通過指令編程來實現的(說明:1為高電平,0為低電平)。 指令1:清顯示,指令碼01H,光標復位到地址00H位置。 指令2:光標復位,光標返回到地址00H 。 指令3:光標和顯示模式設置 I/D:光標移動方向,高電平右移,低電平左移 。S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效 。 指令4:顯示開關控制。 D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示。 C:控制光標的開與關,高電平表示有光標,低電平表示無光標。 B:控制光標是否閃爍,高電平閃爍,低電平不閃爍 。 指令5:光標或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標 。 指令6:功能設置命令 DL:高電平時為4位總線,低電平時為8位總線。 N:低電平時為單行顯示,高電平時雙行顯示。 F:低電平時顯示5X7的點陣字符,高電平時顯示5x10的點陣字符 (有些模塊是 DL:高電平時為8位總線,低電平時為4位總線)。 指令7:字符發生器RAM地址設置 。 指令8:DDRAM地址設置 。 指令9:讀出忙信號和光標地址。 BF為忙標志位,高電平表示忙,此時模塊不能接收命令或者數據,如果為低電平表示不忙,模塊就能接收相應的命令或者數據。 指令10:寫數據 。 指令11:讀數據 。 液晶顯示模塊是一個慢顯示器件,所以在執行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。 1602 內部顯示地址如圖3-6所示: 圖14 1602內部顯示地址 例如第二行第一個字符的地址是40H,那么是否直接寫入40H 就可以將光標定位在第二行第 一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高 電平1,所以實際寫入的數據應該是01000000B(40H)+10000000B(80H)=11000000B(C0H) 。在對液晶模塊的初始化中要先設置其顯示模式,在液晶模塊顯示字符時光標是自動右移的,無需人工干預。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態。1602 液晶模塊內部的字符發生存儲器(CGROM)已經存儲了160個不同的點陣字符圖形,如下圖所示,這些字符有:阿拉伯數字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H 中的點陣字符圖形顯示出來,我們就能看到字母“A”。 液晶顯示的原理是利用液晶的物理特性, 通過電壓對其顯示區域進行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規模集成電路直接驅動、易于實現全彩色顯示的特點,目前已經被廣泛應用在便攜式電腦、數字攝像機、PDA移動通信工具等眾多領域。 3.7 人體檢測模塊在自然界,任何高于絕對溫度(-273度)時物體都將產生紅外光譜,不同溫度的物體,其釋放的紅外能量的波長是不一樣的,因此紅外波長與溫度的高低是相關的。 在被動紅外探測器中有兩個關鍵性的元件,一個是熱釋電紅外傳感器(PIR),它能將波長為8一12um之間的紅外信號變化轉變為電信號,并能對自然界中的白光信號具有抑制作用,因此在被動紅外探測器的警戒區內,當無人體移動時,熱釋電紅外感應器感應到的只是背景溫度,當人體進人警戒區,通過菲涅爾透鏡,熱釋電紅外感應器感應到的是人體溫度與背景溫度的差異信號,因此,紅外探測器的紅外探測的基本概念就是感應移動物體與背景物體的溫度的差異。 另外一個器件就是菲涅爾透鏡,菲涅爾透鏡有兩種形式,即折射式和反射式。菲涅爾透鏡作用有兩個:一是聚焦作用,即將熱釋的紅外信號折射(反射)在PIR上,第二個作用是將警戒區內分為若干個明區和暗區,使進入警戒區的移動物體能以溫度變化的形式在PIR上產生變化熱釋紅外信號,這樣PIR就能產生變化的電信號。 人體都有恒定的體溫,一般在37度,所以會發出特定波長10微米左右的紅外線,被動式紅外探頭就是靠探測人體發射的10微米左右的紅外線而進行工作的。人體發射的10微米左右的紅外線通過菲泥爾濾光片增強后聚集到紅外感應源上。紅外感應源通常采用熱釋電元件,這種元件在接收到人體紅外輻射溫度發生變化時就會失去電荷平衡,向外釋放電荷,后續電路經檢測處理后就能產生報警信號。 1)這種探頭是以探測人體輻射為目標的。所以熱釋電元件對波長為10微米左右的紅外輻射必須非常敏感。
2)為了僅僅對人體的紅外輻射敏感,在它的輻射照面通常覆蓋有特殊的菲泥爾濾光片,使環境的干擾受到明顯的控制作用。
3)被動紅外探頭,其傳感器包含兩個互相串聯或并聯的熱釋電元。而且制成的兩個電極化方向正好相反,環境背景輻射對兩個熱釋元件幾乎具有相同的作用,使其產生釋電效應相互抵消,于是探測器無信號輸出。
4)人一旦侵入探測區域內,人體紅外輻射通過部分鏡面聚焦,并被熱釋電元接收,但是兩片熱釋電元接收到的熱量不同,熱釋電也不同,不能抵消,經信號處理而報警。
5)菲泥爾濾光片根據性能要求不同,具有不同的焦距(感應距離),從而產生不同的監控視場,視場越多,控制越嚴密。 被動式熱釋電紅外探頭的優缺點: 優點是本身不發任何類型的輻射,器件功耗很小,隱蔽性好。價格低廉。缺點是:
1.容易受各種熱源、光源干擾
2.被動紅外穿透力差,人體的紅外輻射容易被遮擋,不易被探頭接收。
3.易受射頻輻射的干擾。
4.環境溫度和人體溫度接近時,探測和靈敏度明顯下降,有時造成短時失靈。 紅外線熱釋電傳感器的安裝要求:
紅外線熱釋電人體傳感器只能安裝在室內,其誤報率與安裝位置和方式有極大的關系.。正確的安裝應滿足下列條件: 1、紅外線熱釋電傳感器應離地面2~2.2米。
2、紅外線熱釋電傳感器遠離空調, 冰箱,火爐等空氣溫度變化敏感的地方。
3、紅外線熱釋電傳感器和被探測的人體之間不得間隔家具、大型盆景、玻璃、窗簾等其他物體。
4、紅外線熱釋電傳感器不能直對門窗及有陽光直射的地方,否則窗外的熱氣流擾動和人員走動會引起誤報,有條件的最好把窗簾拉上。紅外線熱釋電傳感器也不要安裝在有強氣流活動的地方。
5、安裝探測器的天花板或墻要堅固,不能有晃動或震動。 紅外線熱釋電傳感器對人體的敏感程度還和人的運動方向關系很大。紅外線熱釋電傳感器對于徑向移動反應最不敏感, 而對于橫切方向 (即與半徑垂直的方向)移動則最為敏感. 在現場選擇合適的安裝位置是避免紅外探頭誤報、求得最佳檢測靈敏度極為重要的一環。 圖6為人體感應模塊內部圖。 本設計將人體感應模塊的輸出信號端,利用三極管的放大原理,將信號放大,來驅動信號給單片機。 圖15 人體感應模塊電路圖 3.8 按鍵電路 本設計采用按鍵接低的方式來讀取按鍵,單片機初始時,因為為高電平,當按鍵按下的時候,會給單片機一個低電平,單片機對信號進行處理 單片機鍵盤有獨立鍵盤和矩陣式鍵盤兩種:獨立鍵盤每一個I/O 口上只接一個按鍵,按鍵的另一端接電源或接地(一般接地),這種接法程序比較簡單且系統更加穩定;而矩陣式鍵盤式接法程序比較復雜,但是占用的I/O少。根據本設計的需要這里選用了獨立式鍵盤接法。 獨立式鍵盤的實現方法是利用單片機I/O口讀取口的電平高低來判斷是否有鍵按下。將常開按鍵的一端接地,另一端接一個I/O 口,程序開始時將此I/O口置于高電平,平時無鍵按下時I/O口保護高電平。當有鍵按下時,此I/O 口與地短路迫使I/O 口為低電平。按鍵釋放后,單片機內部的上拉電阻使I/O口仍然保持高電平。我們所要做的就是在程序中查尋此I/O口的電平狀態就可以了解我們是否有按鍵動作了。 在用單片機對鍵盤處理的時候涉及到了一個重要的過程,那就是鍵盤的去抖動。這里說的抖動是機械的抖動,是當鍵盤在未按到按下的臨界區產生的電平不穩定正,F象,并不是我們在按鍵時通過注意可以避免的。這種抖動一般10~200毫秒之間,這種不穩定電平的抖動時間對于人來說太快了,而對于時鐘是微秒的單片機而言則是慢長的。硬件去抖動就是用部分電路對抖動部分加之處理,軟件去抖動不是去掉抖動,而是避抖動部分的時間,等鍵盤穩定了再對其處理。所以這里選擇了軟件去抖動,實現法是先查尋按鍵當有低電平出現時立即延時10~200毫秒以避開抖動(經典值為20毫秒),延時結束后再讀一次I/O 口的值,這一次的值如果為1 表示低電平的時間不到10~200 毫秒,視為干擾信號。當讀出的值是0時則表示有按鍵按下,調用相應的處理程序。硬件電路如圖16所示: 圖16 按鍵電路 4 軟件的設計4.1 軟件介紹 Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發系統,與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優勢,因而易學易用。用過匯編語言后再使用C來開發,體會更加深刻。 Keil C51軟件提供豐富的庫函數和功能強大的集成開發調試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標代碼效率非常之高,多數語句生成的匯編代碼很緊湊,容易理解。在開發大型軟件時更能體現高級語言的優勢。下面詳細介紹Keil C51開發系統各部分功能和使用。 Keil_c軟件界面如圖
圖4.1 Keil_c軟件界面 Protel99SE是PORTEL公司在80年代末推出的EDA軟件。Protel99SE是應用于Windows9X/2000/NT操作系統下的EDA設計軟件,采用設計庫管理模式,可以網設計,具有很強的數據交換能力和開放性及3D模擬功能,是一個32位的設計軟件,可以完成電路原理圖設計,印制電路板設計和可編程邏輯器件設計等工作,可以設計32個信號層,16個電源--地層和16個機加工層。 Protel99SE軟件的特點: - 可生成30多種格式的電氣連接網絡表;
- 強大的全局編輯功能;
- 在原理圖中選擇一級器件,PCB中同樣的器件也將被選中;
- 同時運行原理圖和PCB,在打開的原理圖和PCB圖間允許雙向交叉查找元器件、引腳、網絡
- 既可以進行正向注釋元器件標號(由原理圖到PCB),也可以進行反向注釋(由PCB到原理圖),以保持電氣原理圖和PCB在設計上的一致性;
- 滿足國際化設計要求(包括國標標題欄輸出,GB4728國標庫); * 方便易用的數;旌戏抡妫嫒SPICE 3f5);
- 支持用CUPL語言和原理圖設計PLD,生成標準的JED下載文件; * PCB可設計32個信號層,16個電源-地層和16個機加工層;
- 強大的“規則驅動”設計環境,符合在線的和批處理的設計規則檢查;
- 智能覆銅功能,覆鈾可以自動重鋪;
- 提供大量的工業化標準電路板做為設計模版;

圖17 Prtel99SE軟件界面 Protel99SE的工作界面是一種標準的Windows界面,如圖所示,包括:標題欄、主菜單、標準工具欄、繪圖工具欄、狀態欄、對象選擇按鈕、預覽對象方位控制按鈕、仿真進程控制按鈕、預覽窗口、對象選擇器窗口、圖形編輯窗口。
5測試結果及結論
5.1 調試
調試過程中首先要檢測的就是硬件電路的設計原理是否正確、能否達到預期效果以及實現方法是否簡便等等;其次在焊接好難有線電路之后,認真檢查電路的焊接情況。這次采用的是分塊調試的方法,煙霧探測電路,報警電路以及單片機控制電路進行調試。在對每個模塊的進行調試過程中又采用了由局部到整體,由簡單到復雜的調試方法,最后再將各個模塊總和成一個整體。在調試過程中遇到的問題有:
(1) 由于在焊電路之前沒有認真的查看STC89C52的管腳,使得管腳的順序全部焊錯了,最后只好重新買器件重焊;
(2) 煙霧值一直顯示很高,經過查閱資料和換元件測試發現,煙霧傳感器初次使用得通電幾小時以上才可以正常使用,要做老化試驗。
(3) 在解碼程序的編寫過程中,隨著理解的深入也作了相應的修改。
(4) 比如說這次用到的液晶顯示,剛開始用的是P0口,程序沒有錯誤和警告,但是液晶卻無法顯示字符,通過多番測試才知道P0口的驅動不足,所以更換IO口后,便能正確顯示。
(5) 如由于這次程序用的比較多,但是RAM空間又小,所以程序中的變量定義,必須改為idata(就是全部RAM區)型的,包括數組,否則變量隨意分配會引發意想不到的后果。
5.2 結論
通過本次設計的參與以及行動,同學的互相合作以及老師的及時指導,感覺有不少的收獲,從題目的選取到材料的準備,從硬件的焊接到軟件的編程,都有所感悟。其中硬件的測試涉及到了示波器和萬用表等的使用,軟件設計到了keil編程環境的熟悉,proteus仿真電路的應用,但是過程中也遇到了很多麻煩,通過網絡,老師,同學間的合作力量基本將其解決。由于水平的有限,所以各方面的設計效果還有很多欠缺待我們去進一步的學習與努力才能行之有效。
附錄1:原理圖
附錄3:仿真圖 
- #include<reg52.h>
- #include <I2C.H>
-
- #define ADDR 0x90 //PCF8591 地址
-
- // 此表為 LED 的字模 // 0 1 2 3 4 5 6 7 8 9 A b c d E - L P U Hidden _ (20)
- unsigned char code Disp_Tab[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x88,0x83,0xC6,0xA1,0x86,0xbf,0xc7,0x8c,0xc1, 0xff, 0xf7 };
- unsigned char TABLEW[8] ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- unsigned char AD_CHANNEL;
- unsigned char LedOut[8];
- unsigned int D[32];
-
- sbit KEY1 = P3^2;
- sbit KEY2 = P3^3;
-
- /********************************************************************
- * 名稱 : Delay_1ms()
- * 功能 : 延時子程序,延時時間為 1ms * x
- * 輸入 : x (延時一毫秒的個數)
- * 輸出 : 無
- ***********************************************************************/
- void Delay_1ms(unsigned char i)//1ms延時
- {
- unsigned char x,j;
- for(j=0;j<i;j++)
- for(x=0;x<=148;x++);
- }
- /*******************************************************************
- DAC 變換, 轉化函數
- *******************************************************************/
- bit DACconversion(unsigned char sla,unsigned char c, unsigned char Val)
- {
- Start_I2c(); //啟動總線
- SendByte(sla); //發送器件地址
- if(ack==0)return(0);
- SendByte(c); //發送控制字節
- if(ack==0)return(0);
- SendByte(Val); //發送DAC的數值
- if(ack==0)return(0);
- Stop_I2c(); //結束總線
- return(1);
- }
-
- /*******************************************************************
- ADC發送字節[命令]數據函數
- *******************************************************************/
- bit ISendByte(unsigned char sla,unsigned char c)
- {
- Start_I2c(); //啟動總線
- SendByte(sla); //發送器件地址
- if(ack==0)return(0);
- SendByte(c); //發送數據
- if(ack==0)return(0);
- Stop_I2c(); //結束總線
- return(1);
- }
-
- /*******************************************************************
- ADC讀字節數據函數
- *******************************************************************/
- unsigned char IRcvByte(unsigned char sla)
- { unsigned char c;
-
- Start_I2c(); //啟動總線
- SendByte(sla+1); //發送器件地址
- if(ack==0)return(0);
- c=RcvByte(); //讀取數據0
-
- Ack_I2c(1); //發送非就答位
- Stop_I2c(); //結束總線
- return(c);
- }
-
- //******************************************************************/
- main()
- {
- unsigned char i,temp=1;
- while(1)
- {/********以下AD-DA處理*************/
- switch(AD_CHANNEL)
- {
- case 0: ISendByte(ADDR,0x41);
- D[0]=IRcvByte(ADDR)*2; //ADC0 模數轉換1
- break;
-
- case 1: ISendByte(ADDR,0x42);
- D[1]=IRcvByte(ADDR)*2; //ADC1 模數轉換2
- break;
-
- case 2: ISendByte(ADDR,0x43);
- D[2]=IRcvByte(ADDR)*2; //ADC2 模數轉換3
- break;
-
- case 3: ISendByte(ADDR,0x40);
- D[3]=IRcvByte(ADDR)*2; //ADC3 模數轉換4
- break;
-
- case 4: DACconversion(ADDR,0x40, D[4]/4); //DAC 數模轉換
- break;
- }
-
- if(++AD_CHANNEL>4) AD_CHANNEL=0;
-
- if(KEY1==0 || KEY2==0 )
- {
- Delay_1ms(20); //20毫秒軟件防抖
- if(KEY1 == 0)
- {
- temp =1;
-
- }
- else if(KEY2 == 0)
- {
- temp=2;
- }
-
- }
- if(temp ==1)
- {
- LedOut[0]=Disp_Tab[D[0]%10000/1000];
- LedOut[1]=Disp_Tab[D[0]%1000/100];
- LedOut[2]=Disp_Tab[D[0]%100/10]&0x7f;
- LedOut[3]=Disp_Tab[D[0]%10];
-
- LedOut[4]=Disp_Tab[D[1]%10000/1000];
- LedOut[5]=Disp_Tab[D[1]%1000/100]&0x7f;
- LedOut[6]=Disp_Tab[D[1]%100/10];
- LedOut[7]=Disp_Tab[D[1]%10];
- }
- if(temp ==2)
- {
- LedOut[0]=Disp_Tab[D[2]%10000/1000];
- LedOut[1]=Disp_Tab[D[2]%1000/100];
- LedOut[2]=Disp_Tab[D[2]%100/10]&0x7f;
- LedOut[3]=Disp_Tab[D[2]%10];
-
- LedOut[4]=Disp_Tab[D[3]%10000/1000];
- LedOut[5]=Disp_Tab[D[3]%1000/100]&0x7f;
- LedOut[6]=Disp_Tab[D[3]%100/10];
- LedOut[7]=Disp_Tab[D[3]%10];
- }
- for(i=0;i<8;i++)
- {
- P0 = LedOut[7-i];
- P2 = 7-i;
- Delay_1ms(2);
- }
- }
- }
復制代碼
以上圖文的Word格式文檔下載(內容和本網頁上的一模一樣,方便大家保存):
132-(正版)智能環境監測系統論文.doc
(750.5 KB, 下載次數: 245)
2019-2-28 14:00 上傳
點擊文件名下載附件
全文在這里 下載積分: 黑幣 -5
|