標(biāo)題: 基于單片機(jī)和GP2Y1010AU粉塵傳感器的空氣質(zhì)量檢測(cè)儀設(shè)計(jì)論文 [打印本頁(yè)]

作者: izhineng    時(shí)間: 2018-1-19 01:18
標(biāo)題: 基于單片機(jī)和GP2Y1010AU粉塵傳感器的空氣質(zhì)量檢測(cè)儀設(shè)計(jì)論文
本帖最后由 izhineng 于 2018-1-19 01:22 編輯

空氣質(zhì)量檢測(cè)儀系統(tǒng)畢業(yè)設(shè)計(jì)

摘要
隨著社會(huì)的發(fā)展,隨著工業(yè)的發(fā)展,其給人們的生活帶來(lái)很多便利。然而,工業(yè)生產(chǎn)過(guò)程中會(huì)產(chǎn)生很多對(duì)人體有害的因素,比如煤炭開(kāi)采、水泥生產(chǎn)等行業(yè)中的粉塵污染。其在各種危害因素中對(duì)人體健康的影響最為嚴(yán)重。粉塵對(duì)人體的危害最直接、最嚴(yán)重的是引起塵肺病。當(dāng)粉塵濃度過(guò)高時(shí),在高溫干燥的時(shí)候可能產(chǎn)生爆炸。
本設(shè)計(jì)采用由STC89C52單片機(jī)最小系統(tǒng)、GP2Y1010AU粉塵傳感器、ADC0832模數(shù)轉(zhuǎn)換器模塊、LCD1602液晶模塊、電源模塊、蜂鳴器報(bào)警模塊和按鍵模塊模塊組成。單片機(jī)實(shí)時(shí)通過(guò)ADC0832轉(zhuǎn)換芯片采集GP2Y1010AU粉塵傳感器的粉塵的濃度,通過(guò)單片機(jī)的數(shù)據(jù)轉(zhuǎn)換處理后在液晶屏上顯示空氣中的質(zhì)量,當(dāng)測(cè)量空間中的粉塵濃度大于設(shè)置粉塵濃度時(shí),蜂鳴器和發(fā)光二極管發(fā)出聲光報(bào)警。粉塵的濃度報(bào)警值可以通過(guò)按鍵進(jìn)行設(shè)置。

摘要
ABSTRACT
1、緒論
1.1課題的背景
1.2國(guó)內(nèi)外研究現(xiàn)狀  
2、總體方案設(shè)計(jì)
3、系統(tǒng)方案比較、設(shè)計(jì)與論證
3.1主控制器模塊選擇
3.2按鍵的選擇
3.3顯示模塊的選擇
3.4電源選取
4、芯片資料簡(jiǎn)介
4.1 GP2Y1010AU0F傳感器簡(jiǎn)介
4.1.1內(nèi)部原理圖
4.1.2  主要參數(shù)
4.1.3 電光特性
4.1.5輸入條件為L(zhǎng)ED端子
4.1.6 電路接線
4.1.7檢出方法
4.2 ADC0832模數(shù)轉(zhuǎn)換器簡(jiǎn)介
4.3LCD顯示模塊
4.3.1LCD1602的特性及使用說(shuō)明
4.4 STC89C52單片機(jī)的簡(jiǎn)介
4.4.1 STC89C52單片機(jī)主要特性
5、硬件實(shí)現(xiàn)及單元電路設(shè)計(jì)
5.1主控制模塊
5.2顯示模塊電路
5.3報(bào)警模塊的設(shè)計(jì)
5.4按鍵模塊的設(shè)計(jì)
5.5粉塵模塊電路設(shè)計(jì)
5.6電源部分的設(shè)計(jì)
6、系統(tǒng)軟件設(shè)計(jì)
6.1程序結(jié)構(gòu)分析
6.2系統(tǒng)程序流圖
6.2.1 DS18B20初始化程序流程圖
6.2.2讀溫度子程序流程圖
7、系統(tǒng)的安裝與調(diào)試
7.1安裝步驟
7.2電路的調(diào)試
結(jié)論
致謝
參考文獻(xiàn)
附錄1整體電路原理圖
附錄2元器件清單
附錄3部分源程序

1、緒論
1.1課題的背景
粉塵又稱可以入顆粒物,它是能進(jìn)入呼吸道的,直徑為10um的顆粒物,對(duì)人的眼睛、鼻腔、上呼吸道都十分有害。同時(shí)這種可吸入粉塵能長(zhǎng)驅(qū)進(jìn)入肺泡且沉積時(shí)間長(zhǎng),可導(dǎo)致心肺病、心血管疾病。粉塵做為病菌的載體,一同散入空氣中,極易傳播疾病。生產(chǎn)中許多及其工作環(huán)境對(duì)粉塵濃度也有要求,工廠中的很多粉塵攜帶有毒化學(xué)物質(zhì),人們長(zhǎng)久呼吸或長(zhǎng)久散落皮膚上容易導(dǎo)致癌癥的產(chǎn)生。由此可以看出粉塵對(duì)人體健康和生產(chǎn)的巨大危害性,煤礦井下管道作業(yè)、煤炭生產(chǎn)都要產(chǎn)生大量的粉塵,加之煤炭井下通風(fēng)條件較差,在炮采,縱采工作面,煤塵濃度可高達(dá)1000mg/m3以上。在此環(huán)境中工作的工人就會(huì)吸入這些細(xì)微灰塵,粉塵長(zhǎng)時(shí)間進(jìn)入人的呼吸系統(tǒng),就會(huì)造成大量粉塵在肺泡中沉,引起慢性職業(yè)病,危機(jī)人的身體健康。此外粉塵還是煤礦安全生產(chǎn)的重大隱患,我國(guó)《煤礦安全規(guī)程》規(guī)定:粉塵中游離的sio2含量>10%時(shí),粉塵濃度不得大于2mg/m3:當(dāng)粉塵中游離sio2<10%時(shí),粉塵濃度不得大于10mg/m3。因此,必須對(duì)煤礦井下粉塵進(jìn)行實(shí)時(shí)檢測(cè),及時(shí)了解煤礦井下工人的勞動(dòng)環(huán)境,掌握井下煤塵濃度及變化情況,為安全,防塵,降塵等措施提供必要現(xiàn)場(chǎng)數(shù)據(jù)。
    因此,空氣質(zhì)量檢測(cè)儀意義重大是現(xiàn)代生活中不可缺少的必備品。
1.2國(guó)內(nèi)外研究現(xiàn)狀   
     在國(guó)內(nèi)大多采用先進(jìn)的測(cè)試技術(shù),有的是β射線原理,其吸收量只與吸收物質(zhì)的重量有關(guān),而與吸收物質(zhì)的物化性質(zhì)無(wú)關(guān)完全等同于稱重法,可直接讀粉塵濃度。并且配不同的采樣入口裝置,可實(shí)現(xiàn)對(duì)總粉塵、可吸入粉塵、呼吸性粉塵進(jìn)行監(jiān)測(cè)。使用稱重法比較,其相關(guān)系數(shù)大于97%,相對(duì)偏差小于10%。儀器采用的射線源符合核安全標(biāo)準(zhǔn),可長(zhǎng)期穩(wěn)定工作。
    袖珍式激光粉塵儀是以激光管為光源,采用前向光散射原理設(shè)計(jì),具有國(guó)際先進(jìn)水平的最新型粉塵儀。該儀器適用于公共場(chǎng)所可吸入顆粒物濃度的快速測(cè)定以及環(huán)境保護(hù),勞動(dòng)衛(wèi)生等方面粉塵濃度檢測(cè)、工礦企業(yè)生產(chǎn)現(xiàn)場(chǎng)粉塵濃度的監(jiān)測(cè)。
2、總體方案設(shè)計(jì)
本設(shè)計(jì)采用由STC89C52單片機(jī)最小系統(tǒng)、GP2Y1010AU粉塵傳感器、ADC0832模數(shù)轉(zhuǎn)換器模塊、LCD1602液晶模塊、電源模塊、蜂鳴器報(bào)警模塊和按鍵模塊模塊組成。單片機(jī)實(shí)時(shí)通過(guò)ADC0832轉(zhuǎn)換芯片采集GP2Y1010AU粉塵傳感器的粉塵的濃度,通過(guò)單片機(jī)的數(shù)據(jù)轉(zhuǎn)換處理后在液晶屏上顯示空氣中的質(zhì)量,當(dāng)測(cè)量空間中的粉塵濃度大于設(shè)置粉塵濃度時(shí),蜂鳴器和發(fā)光二極管發(fā)出聲光報(bào)警。粉塵的濃度報(bào)警值可以通過(guò)按鍵進(jìn)行設(shè)置。系統(tǒng)總體框圖如圖2-1所示:


2-1總體結(jié)構(gòu)框圖
3、系統(tǒng)方案比較、設(shè)計(jì)與論證

該系統(tǒng)主要由粉塵檢測(cè)模塊GP2Y1010AU、按鍵設(shè)置模塊、報(bào)警模塊和液晶顯示模塊態(tài)顯電路組成,下面介紹實(shí)現(xiàn)此系統(tǒng)功能的方案。

3.1主控制器模塊選擇

方案1:

采用可編程邏輯器件CPLD              作為控制器。CPLD可以實(shí)現(xiàn)各種復(fù)雜的邏輯功能、規(guī)模大、密度高、體積小、穩(wěn)定性高、IO資源豐富、易于進(jìn)行功能擴(kuò)展。采用并行的輸入輸出方式,提高了系統(tǒng)的處理速度,適合作為大規(guī)?刂葡到y(tǒng)的控制核心。但本系統(tǒng)不需要復(fù)雜的邏輯功能,對(duì)數(shù)據(jù)的處理速度的要求也不是非常高。且從使用及經(jīng)濟(jì)的角度考慮我們放棄了此方案。

方案2:

采用STC89C52單片機(jī)作為整個(gè)系統(tǒng)的核心,用其控制水溫測(cè)量控制系統(tǒng),以實(shí)現(xiàn)其既定的性能指標(biāo)。充分分析我們的系統(tǒng),其關(guān)鍵在于實(shí)現(xiàn)水溫的自動(dòng)控制,而在這一點(diǎn)上,單片機(jī)就顯現(xiàn)出來(lái)它的優(yōu)勢(shì)——控制簡(jiǎn)單、方便、快捷。這樣一來(lái),單片機(jī)就可以充分發(fā)揮其資源豐富、有較為強(qiáng)大的控制功能及可位尋址操作功能、價(jià)格低廉等優(yōu)點(diǎn)。STC89C52單片機(jī)具有功能強(qiáng)大的位操作指令,I/O口均可按位尋址,程序空間多達(dá)8K,對(duì)于本設(shè)計(jì)也綽綽有余,更可貴的是STC89C52單片機(jī)價(jià)格非常低廉。

3.2按鍵的選擇

方案—:

    采用矩陣式鍵盤(pán),此類鍵盤(pán)采用矩陣式行列掃描方式,優(yōu)點(diǎn)是當(dāng)按鍵較多時(shí)可降低占用單片機(jī)的I/O口數(shù)目,缺點(diǎn)為電路復(fù)雜且會(huì)加大編程難度。

方案二:

采用獨(dú)立式按鍵電路,每個(gè)按鍵單獨(dú)占有一根I/O接口線,每個(gè)I/O口的工作狀態(tài)互不影響,此類鍵盤(pán)采用端口直接掃描方式。缺點(diǎn)為當(dāng)按鍵較多時(shí)占用單片機(jī)的I/O口數(shù)目較多,優(yōu)點(diǎn)為電路設(shè)計(jì)簡(jiǎn)單,且編程相對(duì)比較容易。

綜合考慮兩種方案及題目要求,考慮到系統(tǒng)資源有限,故采用第二種方案。

3.3顯示模塊的選擇

方案1:

用數(shù)碼管進(jìn)行顯示。數(shù)碼管由于顯示速度快,使用簡(jiǎn)單,顯示效果簡(jiǎn)潔明了而得到了廣泛應(yīng)用。但是由于要顯示溫度。及設(shè)置菜單,用數(shù)碼管無(wú)法顯示如此豐富的內(nèi)容,因此我們放棄了此方案。
方案 2:
    用LCD液晶進(jìn)行顯示。LCD由于其顯示清晰,顯示內(nèi)容豐富、清晰,顯示信息量大,使用方便,顯示快速而得到了廣泛的應(yīng)用。對(duì)于此系統(tǒng)我們選用1602液晶能夠很好的滿足顯示要求,因此我們選擇了此方案。
3.4電源選取

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

方案1:

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

方案2

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

4、芯片資料簡(jiǎn)介4.1 GP2Y1010AU0F傳感器簡(jiǎn)介
GP2Y1010AU0F是一個(gè)采用光學(xué)傳感系統(tǒng)的灰塵傳感器。該設(shè)備由紅外線發(fā)光二極管(IRED)和一個(gè)光電管成對(duì)角布置而成。它通過(guò)檢測(cè)空氣中的塵埃的反射光。特別是,它能夠有效地檢測(cè)到像香煙煙霧等非常細(xì)的粒子。此外,他可以通過(guò)脈沖模擬輸出區(qū)分房子內(nèi)的煙霧和灰塵。

4.1.1內(nèi)部原理圖

4.1.2  主要參數(shù)

4.1.3 電光特性
4.1.4 LED輸入端子輸入的條件
參數(shù)
符號(hào)
數(shù)值
單位
脈沖周期
T
101
ms
脈沖寬度
Pw
0.320.02
ms
工作電源電壓
VCC
50.5
V
4.1.5輸入條件為L(zhǎng)ED端子

4.1.6 電路接線

引腳定義:

不接電容電阻接線示意圖

添加一個(gè)電阻和一個(gè)電容,接線如下圖!

Sensor Pin      Arduino Pin
1         Vled        –>    5V (150ohm resistor)
2         LED-GND     –>    GND
3         LED         –>    Digital pin 2
4         S-GND       –>    GND
5         Vo          –>    Analog pin 0
6         Vcc           –>     5V
4.1.7檢出方法
GP2Y1010AU插上電源后,1秒內(nèi)會(huì)穩(wěn)定、正常的工作,可以進(jìn)行檢出。我們使用的方法是:從輸出的電壓來(lái)做判定。我們首先測(cè)出無(wú)塵無(wú)煙時(shí)的電壓值;覊m和煙檢出時(shí)輸出的區(qū)別:一般,煙是細(xì)微顆粒,密度高,會(huì)擴(kuò)散式的大范圍漂移。灰塵粉塵是一個(gè)一個(gè)的大顆粒,密度低,斷斷續(xù)續(xù)式的進(jìn)入灰塵傳感器的檢出區(qū)域。就如下圖所示,煙是連續(xù)的表現(xiàn)出較高的輸出電壓,灰塵是間隔的表現(xiàn)出較高的輸出電壓。因此,根據(jù)傳感器的輸出電壓值在時(shí)間上的推移向微機(jī)軟件的讀取,是否無(wú)塵無(wú)煙/是否有煙/是否有灰塵/,不管是哪種狀態(tài),及空氣污染程度是多少,都可以檢出。
無(wú)塵時(shí)輸出電壓的更新:無(wú)塵時(shí)的輸出電壓是灰塵、煙的檢出有無(wú)的判定級(jí)別的基準(zhǔn)。無(wú)塵時(shí)的輸出電壓是根據(jù)發(fā)光二極管輸出的低下、盒子內(nèi)部灰塵的附著、周圍溫度等來(lái)進(jìn)行變化的。發(fā)光輸出低下,無(wú)塵時(shí)輸出電壓下降;器件盒子內(nèi)部的灰塵附著能使無(wú)塵輸出電壓有上升的傾向。一般,發(fā)光二極管在長(zhǎng)期通電的情況下,輸出會(huì)降低,導(dǎo)致無(wú)塵輸出電壓及檢出感度也會(huì)隨之降低。此時(shí)就要根據(jù)標(biāo)準(zhǔn)進(jìn)行輸出電壓及感度的補(bǔ)正。另外,也要定期清理器件盒子內(nèi)部的污染物。

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

· 8位分辨率;

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

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

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

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

· 一般功耗僅為15mW

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

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

芯片頂視圖:


圖1

芯片接口說(shuō)明:
· 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 與單片機(jī)的接口電路:
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ú)立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過(guò)DI 數(shù)據(jù)輸入端,可以輕易的實(shí)現(xiàn)通道功能的選擇。
單片機(jī)對(duì)ADC0832 的控制原理:
正常情況下ADC0832 與單片機(jī)的接口應(yīng)為4條數(shù)據(jù)線,分別是CS、CLK、DO、DI。但由于DO端與DI端在通信時(shí)并未同時(shí)有效并與單片機(jī)的接口是雙向的,所以電路設(shè)計(jì)時(shí)可以將DO和DI 并聯(lián)在一根數(shù)據(jù)線上使用。當(dāng)ADC0832未工作時(shí)其CS輸入端應(yīng)為高電平,此時(shí)芯片禁用,CLK 和DO/DI 的電平可任意。當(dāng)要進(jìn)行A/D轉(zhuǎn)換時(shí),須先將CS使能端置于低電平并且保持低電平直到轉(zhuǎn)換完全結(jié)束。此時(shí)芯片開(kāi)始轉(zhuǎn)換工作,同時(shí)由處理器向芯片時(shí)鐘輸入端CLK 輸入時(shí)鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數(shù)據(jù)信號(hào)。在第1 個(gè)時(shí)鐘脈沖的下沉之前DI端必須是高電平,表示啟始信號(hào)。在第2、3個(gè)脈沖下沉之前DI端應(yīng)輸入2 位數(shù)據(jù)用于選擇通道功能。當(dāng)此2 位數(shù)據(jù)為“1”、“0”時(shí),只對(duì)CH0 進(jìn)行單通道轉(zhuǎn)換。當(dāng)2位數(shù)據(jù)為“1”、“1”時(shí),只對(duì)CH1進(jìn)行單通道轉(zhuǎn)換。當(dāng)2 位數(shù)據(jù)為“0”、 “0”時(shí),將CH0作為正輸入端IN+,CH1作為負(fù)輸入端IN-進(jìn)行輸入。當(dāng)2 位數(shù)據(jù)為“0”、“1”時(shí),將CH0作為負(fù)輸入端IN-,CH1 作為正輸入端IN+進(jìn)行輸入。到第3 個(gè)脈沖的下沉之后DI端的輸入電平就失去輸入作用,此后DO/DI端則開(kāi)始利用數(shù)據(jù)輸出DO進(jìn)行轉(zhuǎn)換數(shù)據(jù)的讀取。從第4個(gè)脈沖下沉開(kāi)始由DO端輸出轉(zhuǎn)換數(shù)據(jù)最高位DATA7,隨后每一個(gè)脈沖下沉DO端輸出下一位數(shù)據(jù)。直到第11個(gè)脈沖時(shí)發(fā)出最低位數(shù)據(jù)DATA0,一個(gè)字節(jié)的數(shù)據(jù)輸出完成。也正是從此位開(kāi)始輸出下一個(gè)相反字節(jié)的數(shù)據(jù),即從第11個(gè)字節(jié)的下沉輸出DATD0。隨后輸出8位數(shù)據(jù),到第19 個(gè)脈沖時(shí)數(shù)據(jù)輸出完成,也標(biāo)志著一次A/D轉(zhuǎn)換的結(jié)束。最后將CS置高電平禁用芯片,直接將轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行處理就可以了。
ADC0832時(shí)序圖:
                                       圖3
作為單通道模擬信號(hào)輸入時(shí)ADC0832的輸入電壓是0~5V且8位分辨率時(shí)的電壓精度為19.53mV。如果作為由IN+與IN-輸入的輸入時(shí),可是將電壓值設(shè)定在某一個(gè)較大范圍之內(nèi),從而提高轉(zhuǎn)換的寬度。但值得注意的是,在進(jìn)行IN+與IN-的輸入時(shí),如果IN-的電壓大于IN+的電壓則轉(zhuǎn)換后的數(shù)據(jù)結(jié)果始終為00H。
4.3LCD1602液晶顯示模塊4.3.1LCD1602的特性及使用說(shuō)明
HJ1602A 是一種工業(yè)字符型液晶,能夠同時(shí)顯示16x02 即32個(gè)字符。(16列2行)。在日常生活中,我們對(duì)液晶顯示器并不陌生。液晶顯示模塊已作為很多電子產(chǎn)品的通過(guò)器件,如在計(jì)算器、萬(wàn)用表、電子表及很多家用電子產(chǎn)品中都可以看到,顯示的主要是數(shù)字、專用符號(hào)和圖形。在單片機(jī)的人機(jī)交流界面中,一般的輸出方式有以下幾種:發(fā)光管、LED數(shù)碼管、液晶顯示器。發(fā)光管和LED數(shù)碼管比較常用,軟硬件都比較簡(jiǎn)單。
在單片機(jī)系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個(gè)優(yōu)點(diǎn):
由于液晶顯示器每一個(gè)點(diǎn)在收到信號(hào)后就一直保持那種色彩和亮度,恒定發(fā)光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新新亮點(diǎn)。因此,液晶顯示器畫(huà)質(zhì)高且不會(huì)閃爍。
液晶顯示器都是數(shù)字式的,和單片機(jī)系統(tǒng)的接口更加簡(jiǎn)單可靠,操作更加方便。
液晶顯示器通過(guò)顯示屏上的電極控制液晶分子狀態(tài)來(lái)達(dá)到顯示的目的,在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。
相對(duì)而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動(dòng)IC上,因而耗電量比其它顯示器要少得多。
字符型液晶顯示模塊是一種專門(mén)用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。下面以長(zhǎng)沙太陽(yáng)人電子有限公司的1602字符型液晶顯示器為例,介紹其用法。
一般1602字符型液晶顯示器實(shí)物如圖3-10和3-11所示:
圖3-10 液晶屏正面
圖3-11 液晶屏背面
(1)引腳說(shuō)明:
第1腳:VSS為地電源。
第2腳:VDD接5V正電源。
第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度。
第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。
第5腳:R/W為讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)RS為低電平
R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫(xiě)入數(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)字庫(kù)表
LCD1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字符圖有:阿拉伯?dāng)?shù)字、英文字母的大小寫(xiě)、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫(xiě)的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母。
它的讀寫(xiě)操作、屏幕和光標(biāo)的操作都是通過(guò)指令編程來(lái)實(shí)現(xiàn)的(說(shuō)明: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:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無(wú)效 。
指令4:顯示開(kāi)關(guān)控制。 D:控制整體顯示的開(kāi)與關(guān),高電平表示開(kāi)顯示,低電平表示關(guān)顯示。 C:控制光標(biāo)的開(kāi)與關(guān),高電平表示有光標(biāo),低電平表示無(wú)光標(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:寫(xiě)數(shù)據(jù) 。
指令11:讀數(shù)據(jù) 。
液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。
1602 內(nèi)部顯示地址如圖3-12所示:
                         圖3-12 1602內(nèi)部顯示地址
例如第二行第一個(gè)字符的地址是40H,那么是否直接寫(xiě)入40H 就可以將光標(biāo)定位在第二行第 一個(gè)字符的位置呢?這樣不行,因?yàn)閷?xiě)入顯示地址時(shí)要求最高位D7恒定為高電平1,所以實(shí)際寫(xiě)入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H) 。在對(duì)液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時(shí)光標(biāo)是自動(dòng)右移的,無(wú)需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。1602 液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如下圖所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫(xiě)、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫(xiě)的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H 中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”。
4.4 STC89C52單片機(jī)的簡(jiǎn)介

主控模塊模塊在整個(gè)系統(tǒng)中起著統(tǒng)籌的作用,需要檢測(cè)鍵盤(pán),溫度傳感器等各種參數(shù),同時(shí)驅(qū)動(dòng)液晶顯示相關(guān)參數(shù),在這里我們選用了51系列單片機(jī)中的STC89C52單片機(jī)作為系統(tǒng)的主控芯片。

51系列單片機(jī)最初是由Intel 公司開(kāi)發(fā)設(shè)計(jì)的,但后來(lái)Intel 公司把51 核的設(shè)計(jì)方案賣給了幾家大的電子設(shè)計(jì)生產(chǎn)商,譬如 SST、Philip、Atmel 等大公司。因此市面上出現(xiàn)了各式各樣的均以51 為內(nèi)核的單片機(jī)。這些各大電子生產(chǎn)商推出的單片機(jī)都兼容51 指令、并在51 的基礎(chǔ)上擴(kuò)展一些功能而內(nèi)部結(jié)構(gòu)是與51一致的。

STC89C52有40個(gè)引腳,4個(gè)8位并行I/O口,1個(gè)全雙工異步串行口,同時(shí)內(nèi)含5個(gè)中斷源,2個(gè)優(yōu)先級(jí),2個(gè)16位定時(shí)/計(jì)數(shù)器。STC89C52的存儲(chǔ)器系統(tǒng)由4K的程序存儲(chǔ)器(掩膜ROM),和128B的數(shù)據(jù)存儲(chǔ)器(RAM)組成。

STC89C52單片機(jī)的基本組成框圖見(jiàn)圖3-1。

圖3-1 STC89C52單片機(jī)結(jié)構(gòu)圖
4.4.1 STC89C52單片機(jī)主要特性
1. 一個(gè)8 位的微處理器(CPU)。
2. 片內(nèi)數(shù)據(jù)存儲(chǔ)器RAM(128B),用以存放可以讀/寫(xiě)的數(shù)據(jù),如運(yùn)算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù)等,SST89 系列單片機(jī)最多提供1K 的RAM。
3. 片內(nèi)程序存儲(chǔ)器ROM(4KB),用以存放程序、一些原始數(shù)據(jù)和表格。但也有一些單片機(jī)內(nèi)部不帶ROM/EPROM,如8031,8032,80C31 等。目前單片機(jī)的發(fā)展趨勢(shì)是將RAM 和ROM 都集成在單片機(jī)里面,這樣既方便了用戶進(jìn)行設(shè)計(jì)又提高了系統(tǒng)的抗干擾性。SST 公司推出的89 系列單片機(jī)分別集成了16K、32K、64K Flash 存儲(chǔ)器,可供用戶根據(jù)需要選用。
4. 四個(gè)8 位并行I/O 接口P0~P3,每個(gè)口既可以用作輸入,也可以用作輸出。
5. 兩個(gè)定時(shí)器/計(jì)數(shù)器,每個(gè)定時(shí)器/計(jì)數(shù)器都可以設(shè)置成計(jì)數(shù)方式,用以對(duì)外部事件進(jìn)行計(jì)數(shù),也可以設(shè)置成定時(shí)方式,并可以根據(jù)計(jì)數(shù)或定時(shí)的結(jié)果實(shí)現(xiàn)計(jì)算機(jī)控制。為方便設(shè)計(jì)串行通信,目前的52 系列單片機(jī)都會(huì)提供3 個(gè)16 位定時(shí)器/計(jì)數(shù)器。
6. 五個(gè)中斷源的中斷控制系統(tǒng),F(xiàn)在新推出的單片機(jī)都不只5 個(gè)中斷源,例如SST89E58RD 就有9 個(gè)中斷源。
7. 一個(gè)全雙工UART(通用異步接收發(fā)送器)的串行I/O 口,用于實(shí)現(xiàn)單片機(jī)之間或單機(jī)與微機(jī)之間的串行通信。
8. 片內(nèi)振蕩器和時(shí)鐘產(chǎn)生電路,但石英晶體和微調(diào)電容需要外接。最高允許振蕩頻率為12MHz。SST89V58RD 最高允許振蕩頻率達(dá)40MHz,因而大大的提高了指令的執(zhí)行速度。
圖3-2 STC89C52單片機(jī)管腳圖
部分引腳說(shuō)明:
1.時(shí)鐘電路引腳XTAL1 和XTAL2:
XTAL2(18 腳):接外部晶體和微調(diào)電容的一端;片內(nèi)它是振蕩電路反相放大器的輸出端,振蕩電路的頻率就是晶體固有頻率。若需采用外部時(shí)鐘電路時(shí),該引腳輸入外部時(shí)鐘脈沖。
要檢查振蕩電路是否正常工作,可用示波器查看XTAL2 端是否有脈沖信號(hào)輸出。
XTAL1(19 腳):接外部晶體和微調(diào)電容的另一端;在片內(nèi)它是振蕩電路反相放大器的輸入端。在采用外部時(shí)鐘時(shí),該引腳必須接地。
2.控制信號(hào)引腳RST,ALE,PSEN 和EA:
RST/VPD(9 腳):RST 是復(fù)位信號(hào)輸入端,高電平有效。當(dāng)此輸入端保持備用電源的輸入端。當(dāng)主電源Vcc 發(fā)生故障,降低到低電平規(guī)定值時(shí),將+5V 電源自動(dòng)兩個(gè)機(jī)器周期(24個(gè)時(shí)鐘振蕩周期)的高電平時(shí),就可以完成復(fù)位操作。RST 引腳的第二功能是VPD,即接入RST 端,為RAM 提供備用電源,以保證存儲(chǔ)在RAM 中的信息不丟失,從而合復(fù)位后能繼續(xù)正常運(yùn)行。
ALE/PROG(30 腳):地址鎖存允許信號(hào)端。當(dāng)8051 上電正常工作后,ALE 引腳不斷向外輸出正脈沖信號(hào),此頻率為振蕩器頻率fOSC 的1/6。CPU 訪問(wèn)片外存儲(chǔ)器時(shí),ALE 輸出信號(hào)作為鎖存低8 位地址的控制信號(hào)。
平時(shí)不訪問(wèn)片外存儲(chǔ)器時(shí),ALE 端也以振蕩頻率的1/6 固定輸出正脈沖,因而ALE 信號(hào)可以用作對(duì)外輸出時(shí)鐘或定時(shí)信號(hào)。如果想確定8051/8031 芯片的好壞,可用示波器查看ALE端是否有脈沖信號(hào)輸出。如有脈沖信號(hào)輸出,則8051/8031 基本上是好的。
ALE 端的負(fù)載驅(qū)動(dòng)能力為8 個(gè)LS 型TTL(低功耗甚高速TTL)負(fù)載。
此引腳的第二功能PROG 在對(duì)片內(nèi)帶有4KB EPROM 的8751 編程寫(xiě)入(固化程序)時(shí),作為編程脈沖輸入端。
PSEN(29 腳):程序存儲(chǔ)允許輸出信號(hào)端。在訪問(wèn)片外程序存儲(chǔ)器時(shí),此端定時(shí)輸出負(fù)脈沖作為讀片外存儲(chǔ)器的選通信號(hào)。此引肢接EPROM的OE 端(見(jiàn)后面幾章任何一個(gè)小系統(tǒng)硬件圖)。PSEN 端有效,即允許讀出EPROM/ROM 中的指令碼。PSEN 端同樣可驅(qū)動(dòng)8 個(gè)LS 型TTL 負(fù)載。要檢查一個(gè)8051/8031 小系統(tǒng)上電后CPU 能否正常到EPROM/ROM 中讀取指令碼,也可用示波器看PSEN 端有無(wú)脈沖輸出。如有則說(shuō)明基本上工作正常。
EA/Vpp(31 腳):外部程序存儲(chǔ)器地址允許輸入端/固化編程電壓輸入端。當(dāng)EA 引腳接高電平時(shí),CPU只訪問(wèn)片內(nèi)EPROM/ROM并執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令,但當(dāng)PC(程序計(jì)數(shù)器)的值超過(guò)0FFFH(對(duì)8751/8051 為4K)時(shí),將自動(dòng)轉(zhuǎn)去執(zhí)行片外程序存儲(chǔ)器內(nèi)的程序。當(dāng)輸入信號(hào)EA 引腳接低電平(接地)時(shí),CPU 只訪問(wèn)外部EPROM/ROM 并執(zhí)行外部程序存儲(chǔ)器中的指令,而不管是否有片內(nèi)程序存儲(chǔ)器。對(duì)于無(wú)片內(nèi)ROM 的8031或8032,需外擴(kuò)EPROM,此時(shí)必須將EA 引腳接地。此引腳的第二功能是Vpp 是對(duì)8751 片內(nèi)EPROM固化編程時(shí),作為施加較高編程電壓(一般12V~21V)的輸入端。
3.輸入/輸出端口P0/P1/P2/P3:
P0口(P0.0~P0.7,39~32 腳):P0口是一個(gè)漏極開(kāi)路的8 位準(zhǔn)雙向I/O口。作為漏極開(kāi)路的輸出端口,每位能驅(qū)動(dòng)8 個(gè)LS 型TTL 負(fù)載。當(dāng)P0 口作為輸入口使用時(shí),應(yīng)先向口鎖存器(地址80H)寫(xiě)入全1,此時(shí)P0 口的全部引腳浮空,可作為高阻抗輸入。作輸入口使用時(shí)要先寫(xiě)1,這就是準(zhǔn)雙向口的含義。在CPU 訪問(wèn)片外存儲(chǔ)器時(shí),P0口分時(shí)提供低8 位地址和8 位數(shù)據(jù)的復(fù)用總線。在此期間,P0口內(nèi)部上拉電阻有效。
P1口(P1.0~P1.7,1~8 腳):P1口是一個(gè)帶內(nèi)部上拉電阻的8 位準(zhǔn)雙向I/O口。P1口每位能驅(qū)動(dòng)4 個(gè)LS 型TTL 負(fù)載。在P1口作為輸入口使用時(shí),應(yīng)先向P1口鎖存地址(90H)寫(xiě)入全1,此時(shí)P1口引腳由內(nèi)部上拉電阻拉成高電平。
P2口(P2.0~P2.7,21~28 腳):P2口是一個(gè)帶內(nèi)部上拉電阻的8 位準(zhǔn)雙向I/O口。P口每位能驅(qū)動(dòng)4個(gè)LS 型TTL 負(fù)載。在訪問(wèn)片外EPROM/RAM 時(shí),它輸出高8 位地址。
P3口(P3.0~P3.7,10~17 腳):P3口是一個(gè)帶內(nèi)部上拉電阻的8 位準(zhǔn)雙向I/O口。P3口每位能驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。P3口與其它I/O 端口有很大的區(qū)別,它的每個(gè)引腳都有第二功能,如下:
P3.0:(RXD)串行數(shù)據(jù)接收。
P3.1:(RXD)串行數(shù)據(jù)發(fā)送。
P3.2:(INT0#)外部中斷0輸入。
P3.3:(INT1#)外部中斷1輸入。
P3.4:(T0)定時(shí)/計(jì)數(shù)器0的外部計(jì)數(shù)輸入。
P3.5:(T1)定時(shí)/計(jì)數(shù)器1的外部計(jì)數(shù)輸入。
P3.6:(WR#)外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通。
P3.7:(RD#)外部數(shù)據(jù)存儲(chǔ)器讀選通。
5、硬件實(shí)現(xiàn)及單元電路設(shè)計(jì)5.1主控制模塊
主控制最系統(tǒng)電路如圖4所示。單片機(jī)最小系統(tǒng)包括單片機(jī)、復(fù)位電路、時(shí)鐘電路構(gòu)成。
STC89C52 單片機(jī)的工作電壓范圍:4V-5.5V,所以通常給單片機(jī)外界5V直流電源。連接方式為單片機(jī)中的40腳VCC接正極5V,而20腳VSS接電源地端。
復(fù)位電路就是確定單片機(jī)的工作起始狀態(tài),完成單片機(jī)的啟動(dòng)過(guò)程。單片機(jī)接通電源時(shí)產(chǎn)生復(fù)位信號(hào),完成單片機(jī)啟動(dòng)確定單片機(jī)起始工作狀態(tài)。當(dāng)單片機(jī)系統(tǒng)在運(yùn)行中,受到外界環(huán)境干擾出現(xiàn)程序跑飛的時(shí)候,按下復(fù)位按鈕內(nèi)部的程序自動(dòng)從頭開(kāi)始執(zhí)行。一般有上電自動(dòng)復(fù)位和外部按鍵手動(dòng)復(fù)位,單片機(jī)在時(shí)鐘電路工作以后,在RESET端持續(xù)給出2個(gè)機(jī)器周期的高電平時(shí)就可以完成復(fù)位操作。本設(shè)計(jì)采用的是外部手動(dòng)按鍵復(fù)位電路,需要接上上拉電阻來(lái)提高輸出高電平的值。
    時(shí)鐘電路好比單片機(jī)的心臟,它控制著單片機(jī)的工作節(jié)奏。時(shí)鐘電路就是振蕩電路,是向單片機(jī)提供一個(gè)正弦波信號(hào)作為基準(zhǔn),決定單片機(jī)的執(zhí)行速度。XTAL1和XTAL2分別為反向放大器的輸入和輸出,該反向放大器可以配置為片內(nèi)振蕩器。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。因?yàn)橐粋(gè)機(jī)器周期含有6個(gè)狀態(tài)周期,而每個(gè)狀態(tài)周期為2個(gè)振蕩周期,所以一個(gè)機(jī)器周期共有12個(gè)振蕩周期,如果外接石英晶體振蕩器的振蕩頻率為12MHZ,一個(gè)振蕩周期為1/12us。

圖4 單片主控電路
5.2顯示模塊電路
    顯示模塊采用LCD1602液晶顯示器,能夠清晰的在液晶上顯示字符和數(shù)字,看到能讓人感覺(jué)到舒服感。液晶的命令操作腳是RS、RW、EN接在單片機(jī)的P3^5、P3^6、P3^7腳。,數(shù)據(jù)腳D0~D7分別接單片機(jī)的的P1口。具體電路圖如圖5所示:

圖5驅(qū)動(dòng)電路
5.3報(bào)警模塊的設(shè)計(jì)
本設(shè)計(jì)中聲光報(bào)警電路采用NPN型S8550三極管驅(qū)動(dòng),當(dāng)單片機(jī)的P1^3口輸出低電平時(shí),三極管的VE>VB>VC>0。三極管的發(fā)射結(jié)正偏,集電結(jié)反偏,三幾個(gè)飽和導(dǎo)通,此時(shí)發(fā)光二極管和蜂鳴器發(fā)出聲光報(bào)警,當(dāng)單片機(jī)的P1^3口輸出高電平時(shí),三極管截止,聲光報(bào)警停止工作。具體電路圖如圖6所示:
圖6蜂鳴器工作原理圖
5.4按鍵模塊的設(shè)計(jì)
空氣質(zhì)量檢測(cè)系統(tǒng)的灰塵參數(shù)可以通過(guò)按鍵進(jìn)行設(shè)置。一個(gè)參數(shù)加鍵,一個(gè)參數(shù)減鍵。通過(guò)這兩個(gè)按鍵進(jìn)行設(shè)置。具體電路圖如圖7所示:
圖7按鍵模塊電路圖
5.5粉塵模塊電路設(shè)計(jì)
夏普光學(xué)灰塵傳感器(GP2Y1010AU0F)在檢測(cè)非常細(xì)的顆粒,如香煙煙霧,是特別有效的,并且是常用的空氣凈化器系統(tǒng)。傳感器的第一腳接了一個(gè)220uF的電解電容和150歐姆的電阻。第二腳接到單片機(jī)的P32外部中斷0口,第五腳是粉塵濃度的模擬量輸出腳,接在模數(shù)轉(zhuǎn)換器ADC0832的通道1上。具體電路圖如圖8所示:
圖8粉塵模塊電路

5.6電源部分的設(shè)計(jì)
空氣質(zhì)量檢測(cè)系統(tǒng)采用3節(jié)1.5 V干電池共4.5V做電源,經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證系統(tǒng)工作時(shí),單片機(jī)、傳感器的工作電壓穩(wěn)定能夠滿足系統(tǒng)的要求,而且電池更換方便。電源接口電路如圖9,其中DC5V為電池接口,SW1為電源開(kāi)關(guān),R6為二極管的限流電阻,POWER為電源指示燈,C5和C6為電源的濾波電容。
圖9電源接口電路
6、系統(tǒng)軟件設(shè)計(jì)6.1程序結(jié)構(gòu)分析

  主程序調(diào)用了3個(gè)子程序,分別是液晶屏顯示程序、PM2.5處理程序、按鍵設(shè)定報(bào)警溫度程序。溫度信號(hào)處理程序:對(duì)溫度芯片送過(guò)來(lái)的數(shù)據(jù)進(jìn)行處理,進(jìn)行判斷和顯示。數(shù)碼管顯示程序:向數(shù)碼管的顯示送數(shù),控制系統(tǒng)的顯示部分。按鍵設(shè)定程序:可以設(shè)定低溫和高溫報(bào)警可精確到0.1度。

6.2系統(tǒng)程序流圖

主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測(cè)量的當(dāng)前溫度值,溫度測(cè)量每1s進(jìn)行一次。這樣可以在一秒之內(nèi)測(cè)量一次被測(cè)溫度,主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示,讀出并處理DS18B20的當(dāng)前溫度值,與設(shè)定的報(bào)警溫度比較,其程序流程見(jiàn)圖9所示。

通過(guò)調(diào)用讀溫度子程序把存入內(nèi)存儲(chǔ)中的整數(shù)部分與小數(shù)部分開(kāi)分存放在不的的兩個(gè)單元中,然后通過(guò)調(diào)用顯示子程序顯示出來(lái)。


圖9 DS18B20溫度流程圖

6.2.1 DS18B20初始化程序流程圖

在DS18B20工作之前需要進(jìn)行初始化,流程圖如下:


                       圖10 初始化程序流程圖

6.2.2讀溫度子程序流程圖

    讀溫度子程序的主要功能是從DS18B20中讀出溫度數(shù)據(jù),移入溫度暫存器保存。其程序流程圖如下:

                          圖11 溫度子程序流程圖


7、系統(tǒng)的安裝與調(diào)試  7.1安裝步驟
1.檢查元件的好壞
按電路圖買好元件后首先檢查買回元件的好壞,按各元件的檢測(cè)方法分別進(jìn)行檢測(cè),一定要仔細(xì)認(rèn)真。而且要認(rèn)真核對(duì)原理圖是否一致,在檢查好后才可上件、焊件,防止出現(xiàn)錯(cuò)誤焊件后不便改正。
2.放置、焊接各元件
按原理圖的位置放置各元件,在放置過(guò)程中要先放置、焊接較低的元件,后焊較高的和要求較高的元件。特別是容易損壞的元件要后焊,在焊集成芯片時(shí)連續(xù)焊接時(shí)間不要超過(guò)10s,注意芯片的安裝方向。 .

7.2電路的調(diào)試
首先燒入液晶顯示程序,看顯示是否正常顯示。如果不正常檢測(cè)LCD1602液晶的各引腳的焊接情況,有沒(méi)有虛焊,短焊,錯(cuò)焊的情況。顯示正常之后,在程序加入粉塵檢測(cè)程序,看粉塵檢測(cè)是否正常,然后加入按鍵進(jìn)行整機(jī)調(diào)試,在程序調(diào)試時(shí),延時(shí)有的過(guò)長(zhǎng)、有的過(guò)短。類似的現(xiàn)象還有很多就不一一列舉了。
結(jié)論
空氣質(zhì)量檢測(cè)儀系統(tǒng)采用了單片機(jī)STC89C52作為系統(tǒng)控制核心,最大限度的將其具備的資源應(yīng)用到設(shè)計(jì)中,既體現(xiàn)了單片機(jī)最小系統(tǒng)的應(yīng)用的靈活性,又實(shí)現(xiàn)功能多樣的智能化。由于采用了單片機(jī)對(duì)空氣質(zhì)量的檢測(cè)塵埃、香煙、油煙等?梢詸z測(cè)出空氣中的灰塵的程度,在液晶上進(jìn)行顯示,具有非常重要的市場(chǎng)應(yīng)用價(jià)值。
通過(guò)實(shí)踐的學(xué)習(xí),使我對(duì)整體的電路設(shè)計(jì)有了一個(gè)更全面的了解,鍛煉了重全局考慮局部的能力。深刻體會(huì)了理論聯(lián)系實(shí)際的重要性,從老師提出設(shè)計(jì)要求到完成設(shè)計(jì)報(bào)告,不斷的完善自己的設(shè)計(jì)和電路。在圖書(shū)館查資料到寫(xiě)出具體的實(shí)施方案、畫(huà)出電路圖都要認(rèn)真考慮,尋找最優(yōu)的設(shè)計(jì)方案。經(jīng)過(guò)多次修改最終于實(shí)現(xiàn)了設(shè)計(jì)要求。
在大學(xué)四年的學(xué)習(xí)和課題研究期間,老師們給予我許多悉心的指導(dǎo)和幫助,教給我知識(shí)和為人處世的道理。尤其是這次畢業(yè)論文設(shè)計(jì),在這里非常感謝老師在設(shè)計(jì)中給我的建議、支持和幫助,非常感謝老師在我寫(xiě)論文期間對(duì)我的引導(dǎo)和啟發(fā)。在整個(gè)論文的選題、理論研究、需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)的過(guò)程中,自始至終得到了老師的悉心指導(dǎo)和深切關(guān)懷。感謝導(dǎo)師對(duì)我論文不厭其煩的精心修改,多次耐心地審閱了論文全稿,提出了許多寶貴的意見(jiàn)。還有一只在身邊支持的同學(xué),在我遇到問(wèn)題時(shí),他們都盡心為我解答,如果遇到我們都不熟悉的問(wèn)題,他們都和我一起動(dòng)手解決。由于老師的支持和同學(xué)的各方配合使我的課題能順利的完成。

致謝
    本設(shè)計(jì)是在老師的悉心指導(dǎo)和熱情關(guān)懷下完成的。老師淵博的學(xué)識(shí)、嚴(yán)峻的治學(xué)態(tài)度及隨和的為人之道給我留下了難以磨滅的印象,這將使我終身受益。同時(shí),老師在生活上也給了我極大的鼓勵(lì)和幫助。為此,我要對(duì)他致以最衷心的感謝。
    在本科學(xué)習(xí)的四年中,我與同學(xué)建立了深厚的友誼,他們?cè)谖矣龅嚼щy時(shí)無(wú)私地伸出援助之手,對(duì)他們的幫助我特別感謝。最后,對(duì)關(guān)心、支持我的親人和老師致以最衷心的感謝。
參考文獻(xiàn)
[1] 李文忠,段朝玉 .短距離無(wú)線數(shù)據(jù)通信[M].北京:北京航空航天大學(xué)出版社,2006.
[2]  李艷紅,李海華.傳感器原理及其應(yīng)用[M].北京:北京理工大學(xué)出版社,2010.
[3]  傅揚(yáng)烈. 單片機(jī)原理與應(yīng)用教程[M].北京:電子工業(yè)出版社,2002.
[4]  譚浩強(qiáng).C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,1999 .
[5]  何希才, 薛永毅.傳感器及其應(yīng)用實(shí)例[M].北京:機(jī)械工業(yè)出版社,2004.
[6]  Simon Haykin,Machael Moher,鄭寶玉.現(xiàn)代無(wú)線通信[M].北京:電子工業(yè)出版社, 2006.
[7] 武慶生,仇梅.單片機(jī)原理與應(yīng)用[M].成都:電子科技大學(xué)出版社,1998.
[8] 周航慈.單片機(jī)應(yīng)用程序設(shè)計(jì)技術(shù)[M].北京:北京航空航天大學(xué)出版社,1991.
[9] 譚浩強(qiáng).C程序設(shè)計(jì)北京[M].北京:清華大學(xué)出版社,1999 .

附錄1整體電路原理圖
附錄2元器件清單
Comment
Designator
LibRef
Quantity
蜂鳴器
BUUZER
BUZZER
1
電解電容
C1
10uF
1
電解電容
C2
220uF
1
瓷片電容
C3, C4
18pF
2
電解電容
C5
470uF
1
瓷片電容
C6
104
1
排針
DC 5V
Header 2
2P
觸點(diǎn)開(kāi)關(guān)
JIA, JIAN,RESET
SW-PB
3
液晶
LCD1602
LCD1602
1
發(fā)光二極管
LED1, POWER
SI3317-H
2
灰塵傳感器
PM1
Header 6
1
三極管
Q1
S8550
1
排阻
R1
4.7K
1
電阻
R2, R4, R5, R6
2K
5
電阻
R10
150
1
電阻
R3
10K
1
自鎖開(kāi)關(guān)
SW1
SW-SPDT
1
單片機(jī)座
U1
DIP-40
1
單片機(jī)
U1
STC89C52
1
A/D模數(shù)轉(zhuǎn)換芯片
U2
ADC0832
1
晶振
Y1
11.0592M
1
附錄3部分源程序
單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit TEST  = P3^1;
  5. sbit CS   = P1^2;  //ADC0832引腳定義
  6. sbit Clk  = P1^1;
  7. sbit DATI = P1^0;
  8. sbit DATO = P1^0;

  9. #define LCD_PINDATA P0                //數(shù)據(jù)端口定義 P2
  10. sbit RS  =  P1^4;                              //RS P0^7
  11. sbit RW  =  P1^5;                              //RW P0^6
  12. sbit E   =  P1^6;                              //E  P0^5

  13. sbit BUZZER = P1^3;              //蜂鳴器驅(qū)動(dòng)端口==P1^2
  14. sbit Reduc  = P1^7;              //按鍵鍵輸入端口==P1^7
  15. sbit Add = P3^0;              //按鍵加輸入端口==P3^1

  16. uint adc_val;
  17. uchar flag=0;
  18. /************************************************
  19. ** 函數(shù)名稱 : Delay(uint T)
  20. ** 函數(shù)功能 : 延時(shí)函數(shù)
  21. ** 輸    入 : T--延時(shí)倍數(shù) 大小--0~65535
  22. ** 輸    出 : 無(wú)
  23. ** 說(shuō)    明 :
  24. ************************************************/
  25. void Delay(uint T)
  26. {
  27.     uchar i;
  28.     for(T;T>0;T--)
  29.         for(i=200;i>0;i--);
  30. }
  31. /****************************************************************************
  32. 函數(shù)功能:AD轉(zhuǎn)換子程序
  33. 入口參數(shù):CH
  34. 出口參數(shù):dat
  35. ****************************************************************************/
  36. unsigned char adc0832(unsigned char CH)
  37. {
  38.               unsigned char dat = 0x00;      //AD值
  39.     unsigned char i,test,adval;
  40.     adval = 0x00;
  41.     test = 0x00;
  42.     Clk = 0;       //初始化
  43.     DATI = 1;
  44.     _nop_();
  45.     CS = 0;
  46.     _nop_();
  47.     Clk = 1;
  48.    _nop_();
  49.               if ( CH == 0x00 )      //通道選擇
  50.                  {
  51.                   Clk = 0;
  52.                      DATI = 1;      //通道0的第一位
  53.                      _nop_();
  54.                     Clk = 1;
  55.         _nop_();
  56.         Clk = 0;
  57.                     DATI = 0;      //通道0的第二位
  58.                     _nop_();
  59.                     Clk = 1;
  60.       _nop_();
  61.     }              
  62.     else
  63.     {
  64.        Clk = 0;
  65.                     DATI = 1;      //通道1的第一位
  66.        _nop_();
  67.        Clk = 1;
  68.        _nop_();
  69.                     Clk = 0;
  70.                     DATI = 1;      //通道1的第二位
  71.                   _nop_();
  72.                    Clk = 1;
  73.                    _nop_();
  74.     }
  75.     Clk = 0;
  76.     DATI = 1;
  77.     for( i = 0;i < 8;i++ )      //讀取前8位的值
  78.     {
  79.                     _nop_();
  80.                      adval <<= 1;
  81.                      Clk = 1;
  82.                      _nop_();
  83.                      Clk = 0;
  84.                      if (DATO)
  85.                         adval |= 0x01;
  86.                     else
  87.                         adval |= 0x00;
  88.     }
  89.     for (i = 0; i < 8; i++)      //讀取后8位的值
  90.     {
  91.         test >>= 1;
  92.         if (DATO)
  93.                          test |= 0x80;
  94.         else
  95.             test |= 0x00;
  96.         _nop_();
  97.         Clk = 1;
  98.                      _nop_();
  99.         Clk = 0;
  100.      }
  101.      if (adval == test)      //比較前8位與后8位的值,如果不相同舍去。若一直出現(xiàn)顯示為零,請(qǐng)將該行去掉
  102.           dat = test;
  103.       _nop_();
  104.       CS = 1;        //釋放ADC0832
  105.       DATO = 1;
  106.       Clk = 1;
  107.       return dat;
  108. }
  109. /************************************************
  110. ** 函數(shù)名稱 : WriteCOMDATA(uchar LCD_DATA,uchar N)
  111. ** 函數(shù)功能 : LCD1602寫(xiě)指令、數(shù)據(jù)函數(shù)
  112. ** 輸    入 : LCD_DATA:指令或者數(shù)據(jù)
  113.                N:指令方式還是數(shù)據(jù)方式
  114.                                              N=0時(shí),LCD_DATA為指令,N=1時(shí),LCD_DATA為數(shù)據(jù)
  115. ** 輸    出              : 無(wú)
  116. ** 說(shuō)    明 :
  117. ************************************************/
  118. void WriteCOMDATA(uchar LCD_DATA,uchar N)
  119. {
  120.               Delay(10);
  121.               E=1;
  122.               RW=0;
  123.               RS=N;
  124.               LCD_PINDATA=LCD_DATA;
  125.               E=0;
  126. }
  127. /************************************************
  128. ** 函數(shù)名稱 : void LCD_init(void)
  129. ** 函數(shù)功能 : LCD1602初始化操作
  130. ** 輸    入 : 無(wú)
  131. ** 輸    出 : 無(wú)
  132. ** 說(shuō)    明 :
  133. ************************************************/
  134. void LCD_Init(void)
  135. {
  136.     WriteCOMDATA(0x01,0);
  137.               Delay(500);
  138.               WriteCOMDATA(0x38,0);
  139.               Delay(10);
  140.               WriteCOMDATA(0x06,0);
  141.               Delay(10);
  142.               WriteCOMDATA(0x0c,0);
  143.               Delay(10);
  144. }
  145. /************************************************
  146. ** 函數(shù)名稱 :void WriteChar(uchar Row,uchar Col,uchar Num,uchar *pBuffer)
  147. ** 函數(shù)功能 :在任意位置寫(xiě)指定個(gè)字符
  148. ** 輸    入 :Row : 要寫(xiě)的字符所在的行,只能為1或2;
  149.               Col : 要寫(xiě)的字符所在的列,只能為0---15
  150.               Num : 要寫(xiě)字符的個(gè)數(shù)
  151.               pbuffer : 要寫(xiě)字符的首地址
  152. ** 輸    出 :無(wú)
  153. ** 說(shuō)    明 :
  154. ************************************************/
  155. void WriteChar(uchar Row,uchar Col,uchar Num,uchar *pBuffer)
  156. {
  157.               uchar i;
  158.               if(Row==1)Row=0x80+Col;
  159.               else Row=0xC0+Col;
  160.               WriteCOMDATA(Row,0);
  161.               for(i=Num;i!=0;i--)
  162.               {            
  163.                             WriteCOMDATA(*pBuffer,1);            
  164.                             pBuffer++;
  165.               }
  166. }
  167. /************************************************
  168. ** 函數(shù)名稱 : Init_Timer0(void)
  169. ** 函數(shù)功能 : 定時(shí)器0初始化子程序
  170. ** 輸    入 : 無(wú)
  171. ** 輸    出 : 無(wú)
  172. ** 說(shuō)    明 : 對(duì)定時(shí)器0進(jìn)行初始化 模式1 16位定時(shí)器              0~65536
  173. ************************************************/
  174. void Init_Timer0(void)                              //定時(shí)器初始化子程序
  175. {
  176.               TMOD |= 0x01;                //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響                                
  177.               TH0=0xFF;                    //定時(shí)器賦初值
  178.               TL0=0xA4;                  
  179.               ET0=1;            //使能定時(shí)器中斷
  180.               TR0=1;            //打開(kāi)定時(shí)器
  181.               EA=1;             //打開(kāi)總中斷
  182. }
  183. /************************************************
  184. ** 函數(shù)名稱 : void System_init(void)
  185. ** 函數(shù)功能 : 系統(tǒng)初始化
  186. ** 輸    入 : 無(wú)
  187. ** 輸    出 : 無(wú)
  188. ** 說(shuō)    明 : 對(duì)端口進(jìn)行初始化及開(kāi)機(jī)狀態(tài)指示燈提示
  189. ************************************************/
  190. void System_init(void)
  191. {
  192.               P0=0xFF;                //端口初始化
  193.               P1=0xFF;                //端口初始化
  194.               P2=0xFF;                //端口初始化
  195.               P3=0xFF;                //端口初始化
  196. }
  197. /************************************************
  198. ** 函數(shù)名稱 : void Timer0_isr(void) interrupt 1 using 1
  199. ** 函數(shù)功能 : 定時(shí)器0中斷函數(shù)
  200. ** 輸    入 : 無(wú)
  201. ** 輸    出 : 無(wú)
  202. ** 說(shuō)    明 :
  203. ************************************************/
  204. void Timer0_isr(void) interrupt 1 using 1
  205. {
  206.               TH0=0xFF;                               //重新賦值
  207.               TL0=0xA4;
  208.               TR0=0;
  209.               count_100us++;
  210.               //if(count_100us==15)adc_val=adc0832(0);
  211.               if(count_100us<25){TEST=0;flag=1;}
  212.               else if(count_100us<81){TEST=1;flag=0;}
  213.               else count_100us=0;            
  214.               //TEST=~TEST;      //狀態(tài)指示燈取反
  215.               TR0=1;
  216. }
  217. /************************************************
  218. ** 函數(shù)名稱 : void main(void)
  219. ** 函數(shù)功能 : 主函數(shù)
  220. ** 輸    入 : 無(wú)
  221. ** 輸    出 : 無(wú)
  222. ** 說(shuō)    明 :
  223. ************************************************/
  224. void main(void)
  225. {
  226.               uchar count,flag=0;
  227.             
  228.               uchar baojing_val=80;
  229.               uchar disp[16]={"Dus:    Dus_L:  "};
  230.               System_init();                              
  231.               LCD_Init();
  232.               Init_Timer0();                           
  233.               WriteChar(1,0,16,"Air Quality Sys ");  //在第一行顯示QQ里面的字符
  234.               while(1)                             
  235.               {                                                                                                   
  236.                             WriteChar(2,0,16,disp); //在第二行顯示
  237. //                            count=200;
  238. //                            while(count){if(!flag)adc_val+=adc0832(1)*100/255;count--;}
  239. //                            adc_val=adc_val/200;
  240.                             adc_val=adc0832(1)*100/255;
  241.                             disp[4]=adc_val/10+0x30;
  242.                             disp[5]=adc_val%10+0x30;
  243.                             disp[14]=baojing_val/10+0x30;
  244.                             disp[15]=baojing_val%10+0x30;
  245. //                            Delay(600);
  246.                             if(Reduc==0)
  247.                             {
  248.                                           Delay(400);
  249.                                           //while(Reduc==0);
  250.                                           baojing_val--;
  251.                                           if(baojing_val<=0)baojing_val=0;                           
  252.                             }

  253. ……………………

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

完整的設(shè)計(jì)資料51hei提供下載
(仿真+原理圖+PCB文件+源碼+word格式的論文):

http://www.torrancerestoration.com/bbs/dpj-105336-1.html



作者: 向上    時(shí)間: 2018-5-6 15:29
樓主能發(fā)下完整的電路圖嗎
作者: 向上    時(shí)間: 2018-5-6 16:30
請(qǐng)問(wèn)樓主能發(fā)下完整的電路圖及源程序嗎
作者: 大打算    時(shí)間: 2019-5-17 19:57
這個(gè)怎么實(shí)現(xiàn)按鍵控制掉電保存啊
作者: e視界    時(shí)間: 2020-3-18 20:49
程序流程明明是粉塵,硬寫(xiě)成了溫度c傳感器
作者: 略略略了了    時(shí)間: 2021-5-4 15:50
大打算 發(fā)表于 2019-5-17 19:57
這個(gè)怎么實(shí)現(xiàn)按鍵控制掉電保存啊

用AT24C02保存




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1