室內(nèi)空氣質(zhì)量檢測儀設(shè)計畢業(yè)設(shè)計論文_第1頁
室內(nèi)空氣質(zhì)量檢測儀設(shè)計畢業(yè)設(shè)計論文_第2頁
室內(nèi)空氣質(zhì)量檢測儀設(shè)計畢業(yè)設(shè)計論文_第3頁
室內(nèi)空氣質(zhì)量檢測儀設(shè)計畢業(yè)設(shè)計論文_第4頁
室內(nèi)空氣質(zhì)量檢測儀設(shè)計畢業(yè)設(shè)計論文_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

河南理工大學畢業(yè)設(shè)計(論文)說明書河南理工大學畢業(yè)設(shè)計(論文)說明書#致謝為期兩個多月的畢業(yè)設(shè)計終于完成了,對我個人而言,凝聚了許多努力和汗水,也經(jīng)受住了嚴峻的考驗。和普通的課程設(shè)計不同,由于畢業(yè)設(shè)計的綜合性,幾乎用到所學的全部知識,而且是我第一次接觸傳感器的使用,對我來說這是一個全新的任務(wù)。由于基礎(chǔ)過于薄弱,專業(yè)知識有限,浮躁的心理讓我一開始舉步維艱,滿腦子想的就是放棄。在心理最為脆弱的時候,宋老師耐心地開導我,給我鼓勵和信心,畢業(yè)設(shè)計才得以步入正軌。萬事開頭難,從研究課題,搜集材料,到正式投入設(shè)計,我花費了很多時間和精力。對于這次全新的設(shè)計,老師給了我很大的自由空間,可以充分發(fā)揮自己的創(chuàng)造思維。但是,對于很多新的嘗試,我還是有所拘束??赡苁切愿袷谷话桑慨斢龅絾栴},設(shè)計處于混沌狀態(tài)時,煩躁焦慮接踵而來,讓我迷失了方向。又是宋老師在最繁忙的時候,給我做細致的分析指導,讓我茅塞頓開,使設(shè)計得以延續(xù)直至順利完成。所以,在這次畢業(yè)設(shè)計中,我最感謝的是宋老師,他給我們提供一流的設(shè)計場所,還提供了許多實用的設(shè)計資料,為我們的設(shè)計提供了保障在我看來,宋老師不僅是一位態(tài)度嚴謹,學識淵博的優(yōu)秀教師,也是一位心理調(diào)節(jié)師,他總是能在設(shè)計氛圍緊張的時候,給同學們帶來歡樂,緩解同學們的壓力他那自信樂觀的生活態(tài)度,也值得我們學習。從宋老師那里,我不僅學到了許多專業(yè)知識和實踐經(jīng)驗,而且懂得許多做人的道理和生活的真諦,這些都是一輩子受用的財富,讓我受益匪淺,終生難忘。最后,再次對宋老師表示真誠的謝意和崇高的敬意。同時也對同組同學的幫助表示衷心的感謝。附錄附錄硬件電氣原理圖附錄二程序代碼#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitLED1=P2人7;//定義單片機Pl口的第1位(即P1.0)為指示端sbitDQ=P2A3;〃定義DS18B20端口DQsbitBEEP=P3A4;〃蜂鳴器驅(qū)動線sbitLED2=P3A6;bitpresence,flag;bitcompare_th,compare_tl,alarm_on_off=0,temp_th,temp_tl;sbitLCD_RS=P2A4;sbitLCD_RW=P2A5;sbitLCD_EN=P2A6;unsignedcharvoc_ad;//AD讀取數(shù)據(jù)/******AD管腳定義*****/sbitSTA=P3A0;sbitOE=P3A1;sbitEOC=P3A2;sbitCLK=P3A3;floattemp1;floattemp2;floatx=0,y=0;unsignedlonginta;unsignedlongintb;unsignedlongintabc;unsignedlongintab;ucharcodecdis1[]={"NiNing_Read"};ucharcodecdis2[]={""};ucharcodecdis3[]={"DS18B20ERR0R"};ucharcodecdis4[]={"PLEASECHECK"};ucharcodecdis5[]={"TEMP:"};ucharcodecdis6[]={"voc:ppm"};unsignedchardataunsignedchardataunsignedchardataunsignedchardatatemp_data[2]={0x00,0x00};unsignedchardataunsignedchardataunsignedchardataunsignedchardatatemp_alarm[2]={0x20,0x10};display[5]={0x00,0x00,0x00,0x00,0x00};//溫度值顯示display1[5]={0x00,0x00,0x00,0x00,0x00};//溫度報警值顯示unsignedchardataRomCode[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};unsignedcharcodemytab1[8]={0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};unsignedcharTemp,temp_comp,timecount,count;unsignedcharcrc;voidDisp_Temp_alarm(ucharaddr,ucharnum);voidspk(ucharaddr);voidset_temp_alarm();voidtemp_compare();voidbeep();voidvoc_warning();voiddelay1(intms){unsignedcharz;while(ms--){for(z=0;z<250;z++){_nop_();_nop_();_nop_();_nop_();}}}///*檢查LCD忙狀態(tài)*//*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數(shù)據(jù)。*/bitlcd_busy(){bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP();result=(bit)(P0&0x80);LCD_EN=0;return(result);/*寫指令數(shù)據(jù)到LCD*//*RS=L,RW=L,已=高脈沖,D0-D7=指令碼。*/voidlcd_wcmd(ucharcmd){while(lcd_busy());LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();P0=cmd;

delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;/*寫顯示數(shù)據(jù)到LCD*//*RS=H,RW=L,已=高脈沖,D0-D7=數(shù)據(jù)。*/voidlcd_wdat(uchardat){while(lcd_busy());LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}/*自定義字符寫入CGRAM*/voidwritetab(){//寫CGRAMunsignedchari;lcd_wcmd(0x40);for(i=0;i<//寫CGRAM}/*LCD初始化設(shè)定*/voidlcd_init(){delay1(15);lcd_wcmd(0x01);voidlcd_init(){delay1(15);lcd_wcmd(0x01);lcd_wcmd(0x38);delay1(5);lcd_wcmd(0x38);delay1(5);lcd_wcmd(0x38);delay1(5);lcd_wcmd(0x0c);delay1(5);lcd_wcmd(0x06);delay1(5);lcd_wcmd(0x01);//清除LCD的顯示內(nèi)容//16*2顯示,5*7點陣,8位數(shù)據(jù)//顯示開,關(guān)光標//移動光標//清除LCD的顯示內(nèi)容

//自定義字符寫入//自定義字符寫入CGRAMwritetab();}/*設(shè)定顯示位置*/voidlcd_pos(ucharpos){lcd_wcmd(pos|0x80);//數(shù)據(jù)指針=80+地址變量}/*us級延時函數(shù)*/voidDelay(unsignedintnum){while(--num);}TOC\o"1-5"\h\z/*初始化dsl820*/Init_DSl8B20(void){DQ=1;Delay(8);DQ=1;Delay(8);DQ=0;Delay(90);DQ=1;Delay(8);//稍做延時//單片機將DQ拉低//精確延時大于480us//拉高總線presence=DQ;//如果=0則初始化成功=1則初始化失敗Delay(100);DQ=1;return(presence);〃返回信號,O=presence,l=nopresence}TOC\o"1-5"\h\z/*讀一個字節(jié)*/ReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//給脈沖信號dat>>=l;DQ=l;//給脈沖信號if(DQ)dat|=0x80;Delay(4);}

return(dat);}/*寫一個字節(jié)*/WriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat>>=1;}}/*溫度報警值寫入DS18B20*/Write_Temperature_alarm(void){//跳過讀序號列號的操作//將設(shè)定的溫度報警值寫入DS18B20////跳過讀序號列號的操作//將設(shè)定的溫度報警值寫入DS18B20//寫TH//寫TL//12位精確度//跳過讀序號列號的操作//把暫存器里的溫度報警值拷貝到EEROMWriteOneChar(0xCC);WriteOneChar(0x4e);WriteOneChar(temp_alarm[0]);WriteOneChar(temp_alarm[1]);WriteOneChar(0x7f);Init_DS18B20();WriteOneChar(0xCC);WriteOneChar(0x48);*//*讀取64位序列碼*/Read_RomCord(void){unsignedcharj;Init_DS18B20();WriteOneChar(0x33);//讀序列碼的操作for(j=0;j<8;j++){RomCode[j]=ReadOneChar();}}/*DS18B20的CRC8校驗程序*/ucharCRC8()uchari,x;ucharcrcbuff;crc=0;for(x=0;x<8;x++){crcbuff=RomCode[x];for(i=0;i<8;i++){if(((crc人crcbuff)&0x01)==0)crc>>=1;else{crcA=0x18;〃CRC=X8+X5+X4+1crc>>=1;crc|=0x80;}crcbuff>>=1;}}returncrc;}/*數(shù)據(jù)轉(zhuǎn)換與顯示*/Disp_RomCode(ucharH_num){ucharj;if(H_num==1)lcd_pos(0x00);if(H_num==2)lcd_pos(0x40);for(j=0;j<8;j++){Temp=RomCode[j];display[0]=((Temp&0xf0)>>4);if(display[0]>9){display[0]=display[0]+0x37;}else{display[0]=display[0]+0x30;}lcd_wdat(display[0]);//高位數(shù)顯示display[1]=(Temp&0x0f);if(display[1]>9){display[1]=display[1]+0x37;}else{display[1]=display[1]+0x30;}lcd_wdat(display[1]);//低位數(shù)顯示}}TOC\o"1-5"\h\z/*讀取溫度*/Read_Temperature(void)uchari;TR0=0;Init_DS18B20();WriteOneChar(0xCC);WriteOneChar(0x44);Init_DS18B20();WriteOneChar(0x55);//關(guān)中斷,防止讀數(shù)錯誤//跳過讀序號列號的操作//啟動溫度轉(zhuǎn)換//匹配ROM命令for(i=0;i<8;i++)WriteOneChar(RomCode[i]);WriteOneChar(0xBE);//讀取溫度寄存器temp_data[0]=ReadOneChar();//溫度低8位temp_data[1]=ReadOneChar();//溫度高8位temp_alarm[0]=ReadOneChar();//溫度報警THtemp_alarm[1]=ReadOneChar();//溫度報警TLtemp_comp=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);〃取溫度整數(shù)值/**********AD車專換函數(shù)**********/STA=0;OE=0;STA=1;〃啟動AD轉(zhuǎn)換_nop_();STA=0;while(EOC==1);{OE=1;voc_ad=P1;OE=0;}TR0=1;//開中斷/*數(shù)據(jù)轉(zhuǎn)換與溫度顯示*/Disp_Temperature(){uchars=0;if(temp_data[1]>127)//溫度為負值{temp_data[0]=(~temp_data[0])+1;//取反加一,將補碼變成原碼if((~temp_data[0])>=0xff)temp_data[1]=(~temp_data[1])+1;elsetemp_data[1]=~temp_data[1];s=1;}display[4]=temp_data[0]&0x0f;display[0]=(display[4]*10/16)+0x30;display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);display[3]=display[4]/100+0x30;display[1]=display[4]%100;display[2]=display[1]/10+0x30;display[1]=display[1]%10+0x30;display[2]=display[1]/10+0x30;display[1]=display[1]%10+0x30;//高位為0,不顯示if(display[3]==0x30){display[3]=0x20;if(display[2]==0x30)display[2]=0x20;}if(s)

//次高位為0,不顯示display[3]=0x2d;lcd_pos(0x07);lcd_wdat(display[3]);lcd_wdat(display[2]);lcd_wdat(display[1]);lcd_wdat('.');lcd_wdat(display[0]);lcd_wdat(0x00);lcd_wdat('C');temp1=voc_ad;temp1=temp1*(4560/255);a=temp1;//顯示負號//百位數(shù)顯示//十位數(shù)顯示//個位數(shù)顯示//小數(shù)位數(shù)顯示//顯示自定義字符//顯示C//5V參考電壓x=a/1000+((a/100)%10)*0.1+((a%100)/10)*0.01+(a%10)*0.001;b=y;display1[4]=b/10000+0x30;display1[3]=(b%10000)/1000+0x30;display1[2]=(b%1000)/100+0x30;display1[1]=(b%100)/10+0x30;display1[0]=b%10+0x30;lcd_pos(0x48);lcd_wdat(display1[4]);lcd_wdat(display1[3]);lcd_wdat(display1[2]);lcd_wdat(display1[1]);lcd_wdat(display1[0]);abc=b;//萬位數(shù)顯//千位數(shù)顯示//百位數(shù)顯示//十位數(shù)顯示//個位數(shù)顯示/*蜂鳴器響一聲*/voidbeep(){unsignedchary;for(y=0;y<100;y++){Delay(70);BEEP=!BEEP;//BEEP取反}BEEP=1;Delay(25000);}/*ROMCORD顯示菜單//關(guān)閉蜂鳴器*/voidRomCode_Menu(){ucharm;lcd_init();lcd_pos(0);for(m=0;m<16;m++)lcd_wdat(cdis1[m]);Read_RomCord();CRC8();if(crc==0){Disp_RomCode(2);}〃初始化LCD//設(shè)置顯示位置為第一行//顯示字符//讀取64位序列碼//CRC效驗//CRC效驗正確//顯示64位序列碼}/*DS18B20ERROR顯示菜單*/void{Error_Menu()ucharm;lcd_init();lcd_pos(0);for(m=0;m<16;m++)lcd_wdat(cdis3[m]);lcd_pos(0x40);for(m=0;m<16;m++)lcd_wdat(cdis4[m]);///設(shè)置顯示CD置為第一行的第1個字符//顯示字符//設(shè)置顯示位置為第二行第1個字符//顯示字符}/*DS18B20正常顯示菜單*/voidNatural_Menu(){ucharm;lcd_init();lcd_pos(0);for(m=0;m<16;m++)lcd_wdat(cdis5[m]);lcd_pos(0x40);for(m=0;m<16;m++)lcd_wdat(cdis6[m]);Read_Temperature();Disp_Temperature();}〃濺置顯示位置為第一行的第1個字符//顯示字符//設(shè)置顯示位置為第二行第1個字符//顯示字符//顯示實時溫度值//Time0中斷函數(shù)voidTime0(void)interrupt1using0//50ms定時{//50ms定時TH0=0x4c;TLO=OxOO;timecount++;if(timecount>9){timecount=0;flag=~flag;}}voidt1(void)interrupt3//using1{TH1=(65536-2)%256;TL1=(65536-2)/256;CLK=~CLK;}//溫度比較函數(shù)voidtemp_compare(){if(temp_comp>=temp_alarm[0]){compare_th=1;}elsecompare_th=0;if(temp_comp<temp_alarm[1]){compare_tl=1;}elsecompare_tl=0;if(compare_th){if(!alarm_on_off)//靜音選擇beep();count=temp_alarm[0];}if(compare_tl){if(!alarm_on_off)//靜音選擇beep();count=temp_alarm[1];}if(abc>1000){if(!alarm_on_off)beep();LED2=0;}//比較TH值//比較TL值}/*******數(shù)據(jù)處理********/voidADC0809_Intit(void){OE=0;STA=0;}/*主函數(shù)*/voidmain(){ucharm;TMOD=0x11;TH0=0x4c;TL0=0x00;//50ms定時TH1=(65536-2)%256;TL1=(65536-2)/256;ET1=1;//允許T0中斷EA=1;//開總中斷TR1=1;//啟動定時器T0ET0=1;TR0=1;P0=0;P2&=0x1F;Init_DS18B20();ADC0809_Intit();Write_Temperature_alarm();//設(shè)定報警上下限溫度值if(presence){Error_Menu();do{Init_DS18B20();beep();}while(presence);//顯示RomCode//正常顯示界面//顯示RomCode//正常顯示界面//讀取當前溫度//更新當前溫度//溫度上下限比較RomCode_Menu();for(m=0;m<10;m++)Delay(50000);N

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論