




已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
一、設(shè)計任務(wù)本系統(tǒng)滿足室內(nèi)環(huán)境變量實(shí)行全面、實(shí)時、長期監(jiān)測的要求,實(shí)現(xiàn)室內(nèi)環(huán)境溫濕度、可燃?xì)怏w濃度檢測的自動化和智能化。系統(tǒng)以單片機(jī)為核心,以溫度、濕度傳感器,氣敏傳感器作為測量元件,通過單片機(jī)與智能傳感器相連,采集并存儲智能傳感器的測量數(shù)據(jù),經(jīng)過分析處理將結(jié)果顯示于LCD液晶屏。在單片機(jī)系統(tǒng)中,還要實(shí)現(xiàn)超限報警和數(shù)據(jù)輔助存儲功能。二、方案設(shè)計2.1硬件設(shè)計在室內(nèi)環(huán)境監(jiān)測硬件設(shè)計上,由單片機(jī)(AT89C52)控制整個系統(tǒng)的運(yùn)作,MQ211氣敏傳感器模塊實(shí)現(xiàn)監(jiān)測室內(nèi)可燃?xì)怏w功能、SHT11溫濕度傳感器模塊實(shí)現(xiàn)監(jiān)測室內(nèi)的溫度和濕度功能、按鍵模塊實(shí)現(xiàn)設(shè)置報警上限功能、LCD液晶模塊實(shí)現(xiàn)顯示功能、蜂鳴器報警功能。這六大模塊組成的原理圖來實(shí)現(xiàn)家庭環(huán)境檢測系統(tǒng)的各個功能。在該設(shè)計中,選用了AT89C52單片機(jī)作為控制芯片。該芯片有豐富的內(nèi)部資源,豐富的I/O接口,低電壓,低功耗等優(yōu)點(diǎn),并且內(nèi)置看門狗電路,支持串口程序燒錄,使用方便快捷,可以進(jìn)行C語言程序編寫,易于實(shí)現(xiàn)。溫濕度測量方面選用瑞士SHT11芯片,該芯片內(nèi)置A/D轉(zhuǎn)換芯片,管腳接線簡單,測量精度高等優(yōu)點(diǎn),氣敏傳感器使用多氣體測量傳感器MQ211,其具有多種可燃?xì)怏w的測試功能,簡單高效。A/D轉(zhuǎn)換模塊選用ADC0831,具有接口電路簡單,成本低等優(yōu)點(diǎn),該芯片為一路八位數(shù)轉(zhuǎn)換芯片需求。環(huán)境監(jiān)測系統(tǒng)硬件結(jié)構(gòu)圖如圖1. 圖1 系統(tǒng)硬件結(jié)構(gòu)圖2.1.1芯片管腳連接 在該設(shè)計電路中,用單片機(jī)I/O口中的P1口作為LCD液晶屏的數(shù)據(jù)口,采用并口數(shù)據(jù)傳輸模式,P2口中P2.0、P2.1、P2.2作為控制信號輸出口,分別接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接報警器的蜂鳴器。圖2 STC89C52管腳分布圖2.1.2 晶振和復(fù)位電路 時鐘電路用于產(chǎn)生時鐘信號,時鐘信號是單片機(jī)內(nèi)部各種微操作的時間基準(zhǔn)。復(fù)位對單片機(jī)來說,是程序還沒有開始執(zhí)行,是在做準(zhǔn)備工作。晶振電路和復(fù)位電路見圖3.圖3 晶振和復(fù)位電路2.1.3 氣敏傳感器 MQ211型氣敏元件是一種通用性較強(qiáng)的氣敏元件,氣敏傳感器的敏感元件是氣敏電阻器,氣敏電阻器的阻值隨吸附氣體的濃度變化而變化,利用者一特性檢測氣體濃度。氣敏傳感器的連接如圖4.圖4 氣敏傳感器的連接2.1.4 溫濕度傳感器傳感器SHT11將溫度感測、濕度感測、信號變換、A/D轉(zhuǎn)換和加熱器等功能集成到一個芯片上,其內(nèi)部結(jié)構(gòu)如圖5所示。該芯片包括一個電容性聚合體濕度敏感元件和一個用能隙材料制成的溫度敏感元件。這兩個敏感元件分別將濕度和溫度轉(zhuǎn)換成電信號,該電信號首先進(jìn)入微弱信號放大器進(jìn)行放大,然后進(jìn)入一個14位的A/D轉(zhuǎn)換器,最后經(jīng)過二線串行數(shù)字接口輸出數(shù)字信號。圖5 溫濕度傳感器內(nèi)部結(jié)構(gòu)圖6 溫濕度傳感器指令代碼 圖7 溫濕度傳感器電路2.1.5 LCD顯示模塊設(shè)計 在該設(shè)計中,LCD要顯示溫度、濕度、可燃?xì)怏w是否超標(biāo)的功能,所以使用了一塊行列點(diǎn)陣數(shù)為128*64,每行可以顯示8個字符,共顯示2行字的LCD。圖8 LCD管腳名稱和功能LCD的連接電路:當(dāng)LCD選擇并口時,要把8個數(shù)據(jù)送到芯片,而LCD選擇串口時,只需要把3個數(shù)據(jù)送到芯片。由于芯片的管腳豐富夠用,所以LCD的連接方式選擇并口。LCD的連接方式如圖9所示。圖9 LCD連接電路2.1.6 按鍵電路塊 圖10是按鍵輸入的典型電路,按鍵S1、S2、S3斷開時,端口P2.5、P2.6、P2.7上的信號為高電平,按鍵S1、S2、S3合上時,端口P2.5、P2.6、P2.7上的信號為低電平。電阻起到分壓、限流作用。當(dāng)按鍵電路設(shè)計成這種硬件連接時,按鍵可以采取中斷的形式進(jìn)行讀取,也可以采用循環(huán)掃描的形式讀取,為程序的編寫提供了選擇的余地。圖10按鍵電路2.1.7 報警電路設(shè)計圖11,在本系統(tǒng)中,采用P1.4口為報警電路輸出口,當(dāng)有報警信號時,蜂鳴器鳴叫,提醒安全指標(biāo)超標(biāo)或不正常,須采取安全措施改變室內(nèi)環(huán)境質(zhì)量,如配合智能建筑系統(tǒng),可實(shí)現(xiàn)自動化無人操作,方便又安全。圖11 報警電路2.2 軟件設(shè)計在上述硬件基礎(chǔ)上,編寫系統(tǒng)程序,實(shí)現(xiàn)以下幾項功能:(1) 通電時蜂鳴器響一聲,LCD液晶顯示室內(nèi)溫度、濕度、可燃?xì)怏w濃度狀態(tài)。(2) 當(dāng)室內(nèi)溫度大于設(shè)定的溫度、濕度(例如溫度28度、濕度80%)、檢測到可燃?xì)怏w超標(biāo)時,蜂鳴器報警。(3) 當(dāng)?shù)谝淮伟丛O(shè)置鍵:溫度值閃爍,這是可以通過按“+”或者“”按鍵設(shè)定溫度上限值,4秒鐘無鍵按下停止閃爍,按“+”或者“”設(shè)置溫度下限值;第二次按設(shè)置按鍵:濕度值閃爍,這時可以通過按“+”或者“”設(shè)置濕度上限值,4秒鐘無鍵按下停止閃爍,按“+”或“”設(shè)置濕度下限值;第三次按設(shè)置按鍵,退出設(shè)置狀態(tài)。2.2.1 軟件系統(tǒng)設(shè)計系統(tǒng)的軟件設(shè)計采用C語言編程,軟件結(jié)構(gòu)為模塊化結(jié)構(gòu),由主程序、自檢程序、SHT11數(shù)據(jù)采集與處理程序、ADC0831數(shù)據(jù)采集處理程序、報警控制程序及顯示程序等模塊組成,其軟件模塊結(jié)構(gòu)如圖12所示。圖12 軟件結(jié)構(gòu)方框圖2.2.2主程序設(shè)計2.2.3 LCD1602顯示模塊程序設(shè)計2.2.4 SHT11溫濕度測量模塊程序三、程序代碼#include#include#include#include#include#define uchar unsigned char#define uint unsigned intUnsigned char TempBuffer5;Uchar humibuffer4;Uchar qitibuffer3;Void main wendu_to_str() int i;int TempBuffer5;for(i=0;i5;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;i4;i+)humibufferi=i;humibuffer0=(SHUOxzz_zi);humibuffer1=(SHUOxsg_zi);humibuffer2=%;humibuffer3=0;printf(“n”);Void main qiti_to_str()int I;for(i=0;i3;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(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ū)動程序1602.h#ifndef LCD_CHAR_1602_2005_4_9#define LCD_CHAR_1602_2005_4_9#includesbit 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 /光標(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 /無光標(biāo)#define LCD_FLASH 0x01 /光標(biāo)閃動#define LCD_NO_FLASH 0x00 /光標(biāo)不閃動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 /畫面可移動#define LCD_NO_MOVE 0x00 /defaultVoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND,0x04|InputMode);/移動光標(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|diriction);/初始化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)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;i8;i+)LCD_Write(LCD_DATA,useri);#endif溫濕度傳感器驅(qū)動程序SHT11.h#include /頭文件#include#include#include /Keil librarysbit DATA=P24; /數(shù)據(jù)sbit SCK=P23; /時鐘#define TEMP_ML 0x03 /000 0001 1 溫度命令#define HUMI_ML 0x05 /000 0010 1 濕度命令unsigned char error; /全局錯誤變量unsigned char ack; /全局錯誤變量/float temp_zi; /全局應(yīng)答變量/float humi_zi; /全局應(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.%RH”;int xts_zi=0;/溫度值int xtg_zi=0;/溫度個位值int xtd_zi=0;/溫度點(diǎn)值int xss_zi=0;/濕度值int xsg_zi=0;/濕度個位值int xsd_zi=0;/濕度點(diǎn)值sbit soud=P14;/聲音/基本驅(qū)動程序/系統(tǒng)初始化Void start(void) /啟動DATA=1; SCK=0; /數(shù)據(jù)為1,SCK=0_nop_();SCK=1; /第一個脈沖DATA=0; /數(shù)據(jù)跌落_nop_();SCK=0; /完成一個脈沖_nop_(); _nop_(); _nop_();SCK=1; /再一個脈沖_nop_(); DATA=1; /數(shù)據(jù)變?yōu)?_nop_();SCK=0; /變?yōu)樵撁}沖Void sht_rest(void) /復(fù)位unsigned char I;DATA=1;SCK=0; /數(shù)據(jù)為1時鐘為0for(i=0;i0;i/=2) /釋放數(shù)據(jù)總線if(i&value)DATA=1; /寫入值Else DATA=0;SCK=1; /上升沿寫入_nop_(); _nop_(); _nop_(); /延時SCK=0;DATA=1; /釋放數(shù)據(jù)總線SCK=1;return ack; /error=1表示沒有應(yīng)答char read()/讀一個字節(jié)返回應(yīng)答信號Unsigned char I,val=0;temp_LL=0;temp_h=0;DATA=1; /釋放數(shù)據(jù)總線for(i=0x80;i0;i/=2) /位移8位SCK=1; /上升沿讀入if(DATA)val=(val|i) /確定值SCK=0;DATA=0; /讀應(yīng)答信號應(yīng)答為1,應(yīng)答為0通過CPU下拉為應(yīng)答SCK=1; 第9個脈沖_nop_(); _nop_(); _nop_(); /pulswith approx.5usSCK=0;DATA=1; /釋放數(shù)據(jù)總線temp_h=val;val=0;/低8位DATA=1; /釋放數(shù)據(jù)總線for(i=0x80;i0;i/=2) /位移8位SCK=1; /上升沿讀入if(DATA)val=(val|i) /確定值SCK=0;DATA=1;/0; /不需要應(yīng)答 通過CPU下拉為應(yīng)答SCK=1; 第9個脈沖_nop_(); _nop_(); _nop_(); /pulswith approx.5usSCK=0;DATA=1; /釋放數(shù)據(jù)總線temp_LL=valreturn val;/測量溫度或者是濕度,返回校驗(yàn)值text_a(unsigned char ml)unsigned int I;start(); /啟動write(ml); /寫入測溫度if(ack=1)sht_rest(); /復(fù)位write(ml); /寫入測溫度/DATA=1;/ 釋放數(shù)據(jù)總線For(i=0;i65535;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_zi0;i-)_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();四、心得體會通過本次課程設(shè)計的學(xué)習(xí)與實(shí)踐,我逐漸對單片機(jī)產(chǎn)生了興趣,并且對溫度氣敏傳感器、LED顯示器都有了一定的了解,在設(shè)計過程中通過圖書館、網(wǎng)上查閱資料,自己的專業(yè)知識也有了一定的提高,相信這次設(shè)計對我會有很大的幫助。在本系統(tǒng)中,采用模塊化、層次化設(shè)計。單片機(jī)監(jiān)測信息的采集、報警和處理,能夠迅速、全面準(zhǔn)確地獲取系統(tǒng)的各種特征量,完成室內(nèi)環(huán)境溫濕度參數(shù)、有害氣體濃度參數(shù)的實(shí)時監(jiān)測。同時L
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家庭過年活動方案
- 小學(xué)入學(xué)活動方案
- 宜家清明活動方案
- 家庭結(jié)業(yè)活動策劃方案
- 定期疫情演練活動方案
- 官渡區(qū)開業(yè)活動策劃方案
- 小學(xué)云端六一活動方案
- 尋人活動策劃方案
- 小主播植樹節(jié)活動方案
- 小學(xué)棋社活動方案
- 學(xué)校預(yù)防性侵教育活動開展情況總結(jié)
- 廣州版四年級英語下冊各單元知識點(diǎn)歸納及同步練習(xí)
- 廣東省廉江市實(shí)驗(yàn)學(xué)校2022-2023學(xué)年數(shù)學(xué)五年級第二學(xué)期期末聯(lián)考試題含答案
- 湖南三支一扶考試歷年真題
- 心肺運(yùn)動試驗(yàn)-PPT-醫(yī)學(xué)課件
- 2023年小學(xué)數(shù)學(xué)壓軸幾何圖形經(jīng)典30題匯編
- 農(nóng)業(yè)推廣經(jīng)營服務(wù)相關(guān)知識
- 鐵路工程預(yù)算定額標(biāo)準(zhǔn)說明
- 滅火和疏散應(yīng)急預(yù)案流程圖
- 2023-2024學(xué)年云南省景洪市小學(xué)語文四年級期末評估試題
- 強(qiáng)夯施工工藝流程圖
評論
0/150
提交評論