基于單片機(jī)的室內(nèi)環(huán)境檢測(cè)_第1頁(yè)
基于單片機(jī)的室內(nèi)環(huán)境檢測(cè)_第2頁(yè)
基于單片機(jī)的室內(nèi)環(huán)境檢測(cè)_第3頁(yè)
基于單片機(jī)的室內(nèi)環(huán)境檢測(cè)_第4頁(yè)
基于單片機(jī)的室內(nèi)環(huán)境檢測(cè)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一、設(shè)計(jì)任務(wù)本系統(tǒng)滿足室內(nèi)環(huán)境變量實(shí)行全面、實(shí)時(shí)、長(zhǎng)期監(jiān)測(cè)的要求,實(shí)現(xiàn)室內(nèi)環(huán)境溫濕度、可燃?xì)怏w濃度檢測(cè)的自動(dòng)化和智能化。系統(tǒng)以單片機(jī)為核心,以溫度、濕度傳感器,氣敏傳感器作為測(cè)量元件,通過單片機(jī)與智能傳感器相連,采集并存儲(chǔ)智能傳感器的測(cè)量數(shù)據(jù),經(jīng)過分析處理將結(jié)果顯示于LCD液晶屏。在單片機(jī)系統(tǒng)中,還要實(shí)現(xiàn)超限報(bào)警和數(shù)據(jù)輔助存儲(chǔ)功能。二、方案設(shè)計(jì)2.1硬件設(shè)計(jì)在室內(nèi)環(huán)境監(jiān)測(cè)硬件設(shè)計(jì)上,由單片機(jī)(AT89C52)控制整個(gè)系統(tǒng)的運(yùn)作,MQ211氣敏傳感器模塊實(shí)現(xiàn)監(jiān)測(cè)室內(nèi)可燃?xì)怏w功能、SHT11溫濕度傳感器模塊實(shí)現(xiàn)監(jiān)測(cè)室內(nèi)的溫度和濕度功能、按鍵模塊實(shí)現(xiàn)設(shè)置報(bào)警上限功能、LCD液晶模塊實(shí)現(xiàn)顯示功能、蜂鳴

2、器報(bào)警功能。這六大模塊組成的原理圖來(lái)實(shí)現(xiàn)家庭環(huán)境檢測(cè)系統(tǒng)的各個(gè)功能。在該設(shè)計(jì)中,選用了AT89C52單片機(jī)作為控制芯片。該芯片有豐富的內(nèi)部資源,豐富的I/O接口,低電壓,低功耗等優(yōu)點(diǎn),并且內(nèi)置看門狗電路,支持串口程序燒錄,使用方便快捷,可以進(jìn)行C語(yǔ)言程序編寫,易于實(shí)現(xiàn)。溫濕度測(cè)量方面選用瑞士SHT11芯片,該芯片內(nèi)置A/D轉(zhuǎn)換芯片,管腳接線簡(jiǎn)單,測(cè)量精度高等優(yōu)點(diǎn),氣敏傳感器使用多氣體測(cè)量傳感器MQ211,其具有多種可燃?xì)怏w的測(cè)試功能,簡(jiǎn)單高效。A/D轉(zhuǎn)換模塊選用ADC0831,具有接口電路簡(jiǎn)單,成本低等優(yōu)點(diǎn),該芯片為一路八位數(shù)轉(zhuǎn)換芯片需求。環(huán)境監(jiān)測(cè)系統(tǒng)硬件結(jié)構(gòu)圖如圖1. 圖1 系統(tǒng)硬件結(jié)構(gòu)圖2

3、.1.1芯片管腳連接 在該設(shè)計(jì)電路中,用單片機(jī)I/O口中的P1口作為L(zhǎng)CD液晶屏的數(shù)據(jù)口,采用并口數(shù)據(jù)傳輸模式,P2口中P2.0、P2.1、P2.2作為控制信號(hào)輸出口,分別接LCD的RS、R/W、E控制端;P2.3和P2.4分別接溫濕度傳感器SHT11的SCK和DATA,P2.5、P2.6和P2.7接按鍵電路。P1口的P1.1、P1.2分別接ADC0831的控制端,P1.4接報(bào)警器的蜂鳴器。圖2 STC89C52管腳分布圖2.1.2 晶振和復(fù)位電路 時(shí)鐘電路用于產(chǎn)生時(shí)鐘信號(hào),時(shí)鐘信號(hào)是單片機(jī)內(nèi)部各種微操作的時(shí)間基準(zhǔn)。復(fù)位對(duì)單片機(jī)來(lái)說(shuō),是程序還沒有開始執(zhí)行,是在做準(zhǔn)備工作。晶振電路和復(fù)位電路見圖

4、3.圖3 晶振和復(fù)位電路 氣敏傳感器 MQ211型氣敏元件是一種通用性較強(qiáng)的氣敏元件,氣敏傳感器的敏感元件是氣敏電阻器,氣敏電阻器的阻值隨吸附氣體的濃度變化而變化,利用者一特性檢測(cè)氣體濃度。氣敏傳感器的連接如圖4.圖4 氣敏傳感器的連接2.1.4 溫濕度傳感器傳感器SHT11將溫度感測(cè)、濕度感測(cè)、信號(hào)變換、A/D轉(zhuǎn)換和加熱器等功能集成到一個(gè)芯片上,其內(nèi)部結(jié)構(gòu)如圖5所示。該芯片包括一個(gè)電容性聚合體濕度敏感元件和一個(gè)用能隙材料制成的溫度敏感元件。這兩個(gè)敏感元件分別將濕度和溫度轉(zhuǎn)換成電信號(hào),該電信號(hào)首先進(jìn)入微弱信號(hào)放大器進(jìn)行放大,然后進(jìn)入一個(gè)14位的A/D轉(zhuǎn)換器,最后經(jīng)過二線串行數(shù)字接口輸出數(shù)字信號(hào)

5、。圖5 溫濕度傳感器內(nèi)部結(jié)構(gòu)圖6 溫濕度傳感器指令代碼 圖7 溫濕度傳感器電路2.1.5 LCD顯示模塊設(shè)計(jì) 在該設(shè)計(jì)中,LCD要顯示溫度、濕度、可燃?xì)怏w是否超標(biāo)的功能,所以使用了一塊行列點(diǎn)陣數(shù)為128*64,每行可以顯示8個(gè)字符,共顯示2行字的LCD。圖8 LCD管腳名稱和功能LCD的連接電路:當(dāng)LCD選擇并口時(shí),要把8個(gè)數(shù)據(jù)送到芯片,而LCD選擇串口時(shí),只需要把3個(gè)數(shù)據(jù)送到芯片。由于芯片的管腳豐富夠用,所以LCD的連接方式選擇并口。LCD的連接方式如圖9所示。圖9 LCD連接電路2.1.6 按鍵電路塊 圖10是按鍵輸入的典型電路,按鍵S1、S2、S3斷開時(shí),端口P2.5、P2.6、P2.7

6、上的信號(hào)為高電平,按鍵S1、S2、S3合上時(shí),端口P2.5、P2.6、P2.7上的信號(hào)為低電平。電阻起到分壓、限流作用。當(dāng)按鍵電路設(shè)計(jì)成這種硬件連接時(shí),按鍵可以采取中斷的形式進(jìn)行讀取,也可以采用循環(huán)掃描的形式讀取,為程序的編寫提供了選擇的余地。圖10按鍵電路 報(bào)警電路設(shè)計(jì)圖11,在本系統(tǒng)中,采用P1.4口為報(bào)警電路輸出口,當(dāng)有報(bào)警信號(hào)時(shí),蜂鳴器鳴叫,提醒安全指標(biāo)超標(biāo)或不正常,須采取安全措施改變室內(nèi)環(huán)境質(zhì)量,如配合智能建筑系統(tǒng),可實(shí)現(xiàn)自動(dòng)化無(wú)人操作,方便又安全。圖11 報(bào)警電路2.2 軟件設(shè)計(jì)在上述硬件基礎(chǔ)上,編寫系統(tǒng)程序,實(shí)現(xiàn)以下幾項(xiàng)功能:(1) 通電時(shí)蜂鳴器響一聲,LCD液晶顯示室內(nèi)溫度、濕

7、度、可燃?xì)怏w濃度狀態(tài)。(2) 當(dāng)室內(nèi)溫度大于設(shè)定的溫度、濕度(例如溫度28度、濕度80%)、檢測(cè)到可燃?xì)怏w超標(biāo)時(shí),蜂鳴器報(bào)警。(3) 當(dāng)?shù)谝淮伟丛O(shè)置鍵:溫度值閃爍,這是可以通過按“+”或者“”按鍵設(shè)定溫度上限值,4秒鐘無(wú)鍵按下停止閃爍,按“+”或者“”設(shè)置溫度下限值;第二次按設(shè)置按鍵:濕度值閃爍,這時(shí)可以通過按“+”或者“”設(shè)置濕度上限值,4秒鐘無(wú)鍵按下停止閃爍,按“+”或“”設(shè)置濕度下限值;第三次按設(shè)置按鍵,退出設(shè)置狀態(tài)。2.2.1 軟件系統(tǒng)設(shè)計(jì)系統(tǒng)的軟件設(shè)計(jì)采用C語(yǔ)言編程,軟件結(jié)構(gòu)為模塊化結(jié)構(gòu),由主程序、自檢程序、SHT11數(shù)據(jù)采集與處理程序、ADC0831數(shù)據(jù)采集處理程序、報(bào)警控制程序及

8、顯示程序等模塊組成,其軟件模塊結(jié)構(gòu)如圖12所示。圖12 軟件結(jié)構(gòu)方框圖主程序設(shè)計(jì) LCD1602顯示模塊程序設(shè)計(jì) SHT11溫濕度測(cè)量模塊程序三、程序代碼#include<REG51.H>#include<intrins.h>#include<LCD1602.h>#include<sht10.h>#include<adc0831.h>#define uchar unsigned char#define uint unsigned intUnsigned char TempBuffer5;Uchar humibuffer4;Uchar

9、qitibuffer3;Void main wendu_to_str() int i;int TempBuffer5;for(i=0;i<5;i+)Tempbutteri=i;Tempbutter0=(SHUOxts_zi);Tempbutter1=(SHUOxtg_zi);Tempbutter2=0xdf;Tempbutter3=C;Tempbutter4=0;Printf(“%d”,TempBufferi);Printf(“n”);Void main shidu_to_str()int i;for(i=0;i<4;i+)humibufferi=i;humibuffer0=(SH

10、UOxzz_zi);humibuffer1=(SHUOxsg_zi);humibuffer2=%;humibuffer3=0;printf(“n”);Void main qiti_to_str()int I;for(i=0;i<3;i+)qitibuffer0=b1;qitibuffer1=b2;qitibuffer2=b3;printf(“%d,”qitibufferi);printf(“n”);Void show_LCD()LCD_Initial();text_jishuan_temp11();data_pro();wendu_to_str();Goto XY(6,1);Print(

11、TempBuffer);Goto XY(0,1);Print(“wendu”);shidu_to_str();GotoXY(11,1);Print(“shidu”);GotoXY(17,1);Print(humibuffer);GotoXY(13,0);Print(qitibuffer);csh()P2.0=0;main()csh();show_LCD();delay_n10us(100000);LCD顯示屏驅(qū)動(dòng)程序1602.h#ifndef LCD_CHAR_1602_2005_4_9#define LCD_CHAR_1602_2005_4_9#include<intrins.h>

12、;sbit LcdRs=P20;sbit LcdRw=P21;sbit LcdEn=P22;sfr DBPort=0x80;unsigned char LCD_Wait(void)LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();/while(DBPort&0x80);LcdEn=0;return DBPort;/向LCD寫入命令或數(shù)據(jù)#define LCD_COMMAND0 /Command#define LCD DATA 1 /DATA#define LCD_CLEAR_SCREEN 0x01 /清屏#define LCD_HOMING 0x02 /光

13、標(biāo)返回原點(diǎn)Void LCD_Write(bit style,unsigned char input)LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();/注意順序LcdEn=1; _nop_();/注意順序LcdEn=0; _nop_();LCD_wait(); /設(shè)置顯示模式#define LCD_SHOW 0x04 /顯示開#define LCD_HIDE 0x00 /顯示關(guān)#define LCD_CURSOR 0x02 /顯示光標(biāo)#define LCD_NO_CURSOR 0x00 /無(wú)光標(biāo)#define LCD_FLAS

14、H 0x01 /光標(biāo)閃動(dòng)#define LCD_NO_FLASH 0x00 /光標(biāo)不閃動(dòng)Void LCD_SetDisplay(unsigned char DisplayMode) LCD_Write(LCD_COMMAND,0x08|DisplayMode);/設(shè)置輸入模式#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 /default#define LCD_MOVE 0x01 /畫面可移動(dòng)#define LCD_NO_MOVE 0x00 /defaultVoid LCD_SetInput(unsigned char InputMode)LCD_

15、Write(LCD_COMMAND,0x04|InputMode);/移動(dòng)光標(biāo)或屏幕#define LCD_CURSOR 0x02#define LCD_SCREEN 0x08#define LCD_LEFT 0x00#define LCD_RIGHT 0x04Void LCD_Move(unsigned char object,unsigned char direction) if(object=LCD_CURSOR)LCD_Write(LCD_COMMAND,0x10|diriction);if(object=LCD_SCREEN)LCD_Write(LCD_COMMAND,0x18|di

16、riction);/初始化LCDVoid LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38);LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);Void GotoXY(unsigned char x,unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1

17、)LCD_Write(LCD_COMMAND,0x80|(x-0x40);Void Print(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;Void LCD_LoadChar(unsigned char user8,unsigned char place)Unsigned char i;LCD_Write(LCD_COMMAND,0x40|(place*8);for(i=0;i<8;i+)LCD_Write(LCD_DATA,useri);#endif溫濕度傳感器驅(qū)動(dòng)程序SHT11.h#include<

18、;reg51.h> /頭文件#include<intrins.h>#include<stdio.h>#include<math.h> /Keil librarysbit DATA=P24; /數(shù)據(jù)sbit SCK=P23; /時(shí)鐘#define TEMP_ML 0x03 /000 0001 1 溫度命令#define HUMI_ML 0x05 /000 0010 1 濕度命令unsigned char error; /全局錯(cuò)誤變量unsigned char ack; /全局錯(cuò)誤變量/float temp_zi; /全局應(yīng)答變量/float humi_z

19、i; /全局應(yīng)答變量unsigned char temp_h; /全局應(yīng)答變量unsigned char temp_LL; /全局應(yīng)答變量unsigned char humi_h; unsigned char temp_LL#define uchar unsigned char /定義一下方便使用#define unit unsigned int#define ulong unsigned longunsigned int recs=0;/接收次數(shù)uchar TempBuffer5;uchar humibuffer4;const unsigned char SHUO15=”0123456789

20、.%RH”;int xts_zi=0;/溫度值int xtg_zi=0;/溫度個(gè)位值int xtd_zi=0;/溫度點(diǎn)值int xss_zi=0;/濕度值int xsg_zi=0;/濕度個(gè)位值int xsd_zi=0;/濕度點(diǎn)值sbit soud=P14;/聲音/基本驅(qū)動(dòng)程序/系統(tǒng)初始化Void start(void) /啟動(dòng)DATA=1; SCK=0; /數(shù)據(jù)為1,SCK=0_nop_();SCK=1; /第一個(gè)脈沖DATA=0; /數(shù)據(jù)跌落_nop_();SCK=0; /完成一個(gè)脈沖_nop_(); _nop_(); _nop_();SCK=1; /再一個(gè)脈沖_nop_(); DATA=1

21、; /數(shù)據(jù)變?yōu)?_nop_();SCK=0; /變?yōu)樵撁}沖Void sht_rest(void) /復(fù)位unsigned char I;DATA=1;SCK=0; /數(shù)據(jù)為1時(shí)鐘為0for(i=0;i<9;i+) /9個(gè)脈沖為復(fù)位SCK=1;SCK=0;Start(); /啟動(dòng)char write(unsigned char value)/寫一個(gè)字節(jié) 返回應(yīng)答信號(hào) Unsigned char I;ack=0;for(i=0x80;i>0;i/=2) /釋放數(shù)據(jù)總線if(i&value)DATA=1; /寫入值Else DATA=0;SCK=1; /上升沿寫入_nop_();

22、 _nop_(); _nop_(); /延時(shí)SCK=0;DATA=1; /釋放數(shù)據(jù)總線SCK=1;return ack; /error=1表示沒有應(yīng)答char read()/讀一個(gè)字節(jié)返回應(yīng)答信號(hào)Unsigned char I,val=0;temp_LL=0;temp_h=0;DATA=1; /釋放數(shù)據(jù)總線for(i=0x80;i>0;i/=2) /位移8位SCK=1; /上升沿讀入if(DATA)val=(val|i) /確定值SCK=0;DATA=0; /讀應(yīng)答信號(hào)應(yīng)答為1,應(yīng)答為0通過CPU下拉為應(yīng)答SCK=1; 第9個(gè)脈沖_nop_(); _nop_(); _nop_(); /p

23、ulswith approx.5usSCK=0;DATA=1; /釋放數(shù)據(jù)總線temp_h=val;val=0;/低8位DATA=1; /釋放數(shù)據(jù)總線for(i=0x80;i>0;i/=2) /位移8位SCK=1; /上升沿讀入if(DATA)val=(val|i) /確定值SCK=0;DATA=1;/0; /不需要應(yīng)答 通過CPU下拉為應(yīng)答SCK=1; 第9個(gè)脈沖_nop_(); _nop_(); _nop_(); /pulswith approx.5usSCK=0;DATA=1; /釋放數(shù)據(jù)總線temp_LL=valreturn val;/測(cè)量溫度或者是濕度,返回校驗(yàn)值text_a(

24、unsigned char ml)unsigned int I;start(); /啟動(dòng)write(ml); /寫入測(cè)溫度if(ack=1)sht_rest(); /復(fù)位write(ml); /寫入測(cè)溫度/DATA=1;/ 釋放數(shù)據(jù)總線For(i=0;i<65535;i+)if(DATA=0)break;read();/度溫度text_jishuan_temp()float aa=0,bb=0,temp zi;int abcd=0;aa=(float)temp_h*256+(float)temp_LL;temp_zi=0.01*aa-40;if (temp_zi<0)temp_zi

25、= -temp_zi;temp_zi= temp_zi*10;abcd=(int) temp_zi;xts_zi=abcd/100;abcd=abcd%100;xtg_zi=abcd/10;abcd=abcd%10;xtd_zi=abcd/1;text_jishuan_humi()float aa=0,bb=0,humi_zi;int abcd=0;aa=(float)temp_h*256+(float)temp_LL;baa*aa*2.8/1000000;aa=0.0405*aa;aa=aa-4-bb;humi_zi= humi_zi*10;abcd=(int)humi_zi;xss_zi=

26、abcd/100;abcd=abcd%100;xsg_zi=abcd/10;abcd=abcd%10;xsd_zi=abcd/1;text_jishuan_temp11()error=0;ack=0;sht_rest(); /復(fù)位text_a(TEMP_ML);text_jishuan_temp();text_a(HUMI_ML);text_jishuan_humi();unsigned int wendu,shidu;void delay_n10us(unit n) /延時(shí)n個(gè)10us12M晶振uint i;for(i=n;i>0;i-)_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();四、心得體會(huì)通過本次課程設(shè)計(jì)的學(xué)習(xí)與實(shí)踐,我逐漸對(duì)單片機(jī)產(chǎn)生了興趣,并且對(duì)溫度氣敏傳感器、LED顯示器都有了一定的了解,在設(shè)計(jì)過程中通過圖書館、網(wǎng)上查閱資料,自己的專業(yè)知識(shí)也有了一定的提高,相信這次設(shè)計(jì)對(duì)我會(huì)有很大的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論