版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
科技學(xué)院2021屆本科畢業(yè)設(shè)計(jì)(論文)摘要AbstractⅡⅡ摘要附錄B程序#include<reg52.h>#include<intrins.h>#include"sim800.h" #defineucharunsignedchar //以后unsignedchar就可以用uchar代替#defineuintunsignedint //以后unsignedint就可以用uint代替/*******************************定義全局變量********************************/unsignedchar*content2="Smoke_warning\r\n";unsignedchar*content3="Fire_warning\r\n";unsignedchar*content4="Body_warning\r\n";intAlarmTH=30; //可燃?xì)怏w上限報(bào)警值intAlarmHH=50; intAlarmGL=200; //煙霧濃度上限報(bào)警值ucharU8FLAG,k; //溫濕度檢測(cè)過(guò)程中用到的變量ucharU8count,U8temp;ucharU8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;ucharU8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;ucharU8comdata;unsignedcharmoshi=0;//工作模式unsignedchardat,dat1;longValue,Value1; unsignedcharstr_yw[6];//濃度顯示緩存bitc1,c2,c3,c4;//短信已發(fā)送過(guò)標(biāo)志uintsum;bitrt_flag;bitsf_flag_buff=0;//啟動(dòng)設(shè)防標(biāo)志bitsf_flag=0;//設(shè)防標(biāo)志bitflag1s=0;//定時(shí)標(biāo)志/******************引腳定義********************/sbitsf_led=P1^3;//布放燈sbithuoyan=P1^5;//火焰sbitfengshan=P1^4;//風(fēng)扇sbitBuzzer_P=P1^7;//蜂鳴器sbitCS=P1^0;sbitClk=P1^1;sbitDATI=P1^2;sbitDATO=P1^2;sbitP2_0=P3^2; //溫濕度傳感器DHT11數(shù)據(jù)引腳sbitrenti=P3^3;//人體sbitshezhi=P3^7; //按鍵1,“設(shè)置”sbitjia=P3^6; //按鍵2,“減”sbitjian=P3^5; //按鍵3,“加”sbitshefang=P3^4; //按鍵4,“設(shè)防”/*******************************函數(shù)聲明********************************/externvoidInitLcd1602(); //液晶初始化函數(shù)externvoidLcdWriteDat(unsignedchardat);//液晶寫(xiě)命令函數(shù)externvoidLcdWriteCmd(unsignedcharcmd);//液晶寫(xiě)命令函數(shù)externvoidLcdShowStr(unsignedcharx,unsignedchary,unsignedchar*str);//液晶顯示字符串函數(shù)externvoidLcdSetCursor(unsignedcharx,unsignedchary); //液晶設(shè)置坐標(biāo)位置函數(shù)/*****液晶輸出2位數(shù)字(x,y)-對(duì)應(yīng)屏幕上的起始坐標(biāo),num-兩位數(shù)字*****************/voidLcdShow_2Num(unsignedcharx,unsignedchary,unsignedcharnum){ LcdSetCursor(x,y);//設(shè)置起始地址 LcdWriteDat(num/10+0x30); //十位 LcdWriteDat(num%10+0x30); //個(gè)位}/****液晶輸出3位數(shù)字(x,y)-對(duì)應(yīng)屏幕上的起始坐標(biāo),num-兩位數(shù)字**********/voidLcdShow_3Num(unsignedcharx,unsignedchary,unsignedintnum){ LcdSetCursor(x,y);//設(shè)置起始地址 LcdWriteDat(num/100+0x30); //百位 LcdWriteDat(num/10%10+0x30);//十位LcdWriteDat(num%10+0x30); //個(gè)位}/****************延時(shí)函數(shù)******************************/voidDelay(uintj){uchari; for(;j>0;j--) { for(i=0;i<27;i++); }}voidDelay_10us(void){uchari;i--;i--;i--;i--;i--;i--;}/*********溫濕度傳感器驅(qū)動(dòng)函數(shù)**************************/ voidCOM(void){ uchari;for(i=0;i<8;i++) { U8FLAG=2; while((!P2_0)&&U8FLAG++); Delay_10us();Delay_10us(); Delay_10us(); U8temp=0; if(P2_0)U8temp=1; U8FLAG=2; while((P2_0)&&U8FLAG++); //超時(shí)則跳出for循環(huán) if(U8FLAG==1)break; //判斷數(shù)據(jù)位是0還是1 //如果高電平高過(guò)預(yù)定0高電平值則數(shù)據(jù)位為1 U8comdata<<=1; U8comdata|=U8temp;//0 } }/*********濕度讀取子程序***********************************************/ voidRH(void) { //主機(jī)拉低18msP2_0=0; Delay(180); P2_0=1; //總線由上拉電阻拉高主機(jī)延時(shí)20us Delay_10us(); Delay_10us();Delay_10us(); Delay_10us(); //主機(jī)設(shè)為輸入判斷從機(jī)響應(yīng)信號(hào) P2_0=1; //判斷從機(jī)是否有低電平響應(yīng)信號(hào)如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行 if(!P2_0) //T! { U8FLAG=2; //判斷從機(jī)是否發(fā)出80us的低電平響應(yīng)信號(hào)是否結(jié)束 while((!P2_0)&&U8FLAG++); U8FLAG=2; //判斷從機(jī)是否發(fā)出80us的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài) while((P2_0)&&U8FLAG++); //數(shù)據(jù)接收狀態(tài) COM(); U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; P2_0=1; //數(shù)據(jù)校驗(yàn) U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp) { U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; }//fi }//fi}/*****溫濕度顯示和報(bào)警判斷子程序********************************************/voidxianshi(void){LcdShow_2Num(2,0,U8T_data_H);//顯示溫度 LcdShow_2Num(10,0,U8RH_data_H);//顯示濕度 if((U8T_data_H>AlarmTH)||(Value1>AlarmGL)||(rt_flag==1)||(huoyan==0))//只要有1個(gè)超標(biāo) Buzzer_P=0;//蜂鳴器響 else//全部無(wú)異常 Buzzer_P=1; //蜂鳴器不響 if(U8RH_data_H>AlarmHH)fengshan=0;elsefengshan=1; if(Value1>AlarmGL)//煙霧大于報(bào)警值 { //煙霧報(bào)警指示燈亮 if(c2==0) //沒(méi)有發(fā)送過(guò)短信 { Send_message_gsm(content2); //向卡發(fā)煙霧報(bào)警短信 c2=1; //已發(fā)短信,標(biāo)志置1 } } if(huoyan==0)//有火焰 { if(c3==0) { Send_message_gsm(content3); c3=1; } } if(rt_flag==1) //人體報(bào)警 { if(c4==0) { Send_message_gsm(content4); c4=1; } } }/*********按鍵掃描并處理********************************/voidKey_set_scan(void){ if(shezhi==0) //設(shè)置鍵 { Delay_Ms(10); //延時(shí)消抖 if(shezhi==0) //再次判斷按鍵按下 { while(!shezhi);//等待按鍵松開(kāi) LcdWriteCmd(0x01);//清屏 moshi++; //模式切換 if(moshi>=4)moshi=0; if(moshi==0) //檢測(cè)模式 { LcdShowStr(0,0,"T:CH:%RH");//液晶切換顯示界面 LcdShowStr(0,1,"Smoke:ppm");//顯示到液晶屏上 LcdSetCursor(4,0);//設(shè)置起始地址 LcdWriteDat(0xdf); //顯示溫度小圓點(diǎn) } elseif(moshi==1) //設(shè)置溫度報(bào)警值模式 { LcdShowStr(3,0,"Set_Temp_H"); LcdShow_2Num(7,1,AlarmTH); } elseif(moshi==2) //設(shè)置濕度報(bào)警值模式 { LcdShowStr(3,0,"Set_Humi_H"); LcdShow_2Num(7,1,AlarmHH);// } elseif(moshi==3)//設(shè)置煙霧報(bào)警值模式 { LcdShowStr(3,0,"Set_Somke_H"); LcdShow_3Num(7,1,AlarmGL);//顯示煙霧上限報(bào)警值 } } } if(jia==0)//加鍵按下 { Delay_Ms(80);//延時(shí) if(jia==0) { //while(!jia); if(moshi==1) { AlarmTH++; if(AlarmTH>=99)AlarmTH=99; //最大為99 LcdShow_2Num(7,1,AlarmTH); } if(moshi==2) { AlarmHH++; if(AlarmHH>=99)AlarmHH=99; //最大為99 LcdShow_2Num(7,1,AlarmHH); } if(moshi==3)//設(shè)置煙霧報(bào)警值模式下 { AlarmGL++;//煙霧報(bào)警值加1 if(AlarmGL>=999)AlarmGL=999;//最大為999 LcdShow_3Num(7,1,AlarmGL);//顯示煙霧報(bào)警值 } } } if(jian==0) //減鍵按下 { Delay_Ms(80);//延時(shí) if(jian==0) { //while(!jian); if(moshi==1)// { AlarmTH--; if(AlarmTH<=1)AlarmTH=1;//最小為1 LcdShow_2Num(7,1,AlarmTH); } if(moshi==2)// { AlarmHH--; if(AlarmHH<=1)AlarmHH=1;//最小為1 LcdShow_2Num(7,1,AlarmHH); } if(moshi==3)//設(shè)置煙霧報(bào)警值模式下 { AlarmGL--;//煙霧報(bào)警值減1 if(AlarmGL<=1)AlarmGL=1;//最小為1 LcdShow_3Num(7,1,AlarmGL);//顯示煙霧報(bào)警值 } } } if(shefang==0)//設(shè)防鍵 { Delay_Ms(10); if(shefang==0) { while(!shefang); if(sf_flag==0)//如果沒(méi)有設(shè)防,進(jìn)入設(shè)防 { sf_flag_buff=1; sf_led=0; } else //否則,關(guān)閉設(shè)防 { sf_flag=0; sf_flag_buff=0; sf_led=1; rt_flag=0; } } }}/****************************************************************************函數(shù)功能:AD轉(zhuǎn)換子程序入口參數(shù):CH出口參數(shù):dat****************************************************************************/unsignedcharadc0832(unsignedcharCH){unsignedchari,test,adval;adval=0x00;test=0x00;Clk=0;//初始化DATI=1;_nop_();CS=0;_nop_();Clk=1;_nop_();if(CH==0x00)//通道選擇{Clk=0;DATI=1;//通道0的第一位_nop_();Clk=1;_nop_();Clk=0;DATI=0;//通道0的第二位_nop_();Clk=1;_nop_();}else{Clk=0;DATI=1;//通道1的第一位_nop_();Clk=1;_nop_();Clk=0;DATI=1;//通道1的第二位_nop_();Clk=1;_nop_();}Clk=0;DATI=1;for(i=0;i<8;i++)//讀取前8位的值{_nop_();adval<<=1;Clk=1;_nop_();Clk=0;if(DATO)adval|=0x01;elseadval|=0x00;}for(i=0;i<8;i++)//讀取后8位的值{test>>=1;if(DATO)test|=0x80;elsetest|=0x00;_nop_();Clk=1;_nop_();Clk=0;}if(adval==test)//比較前8位與后8位的值,如果不相同舍去。若一直出現(xiàn)顯示為零,請(qǐng)將該行去掉dat=test;nop_();CS=1;//釋放ADC0832DATO=1;Clk=1; if(dat!=128) { dat1=dat; }returndat1;}/*定時(shí)器初始化子程序*/voidInit_Timer0(void){TMOD|=0x01; //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響 TH0=(65536-1000)/256; //重新賦值1msTL0=(65536-1000)%256;EA=1;//總中斷打開(kāi)ET0=1;//定時(shí)器中斷打開(kāi)TR0=1;//定時(shí)器開(kāi)關(guān)打開(kāi)PT0=1;//優(yōu)先級(jí)打開(kāi)}/*************************系統(tǒng)主程序*****************************/voidmain(){ unsignedchari,m;//循環(huán)變量Init_Timer0(); //定時(shí)器初始化 Uart_Init(); //串口初始化 InitLcd1602();//液晶初始化 LcdShowStr(0,0,"Systeminit"); //液晶顯示初始界面LcdShowStr(0,1,"pleasewait"); for(i=0;i<6;i++)//延時(shí)等待網(wǎng)絡(luò)穩(wěn)定 { Delay_Ms(800); } LcdWriteCmd(0x01);//清屏 LcdShowStr(0,0,"T:CH:%RH");//液晶切換顯示界面 LcdShowStr(0,1,"Smoke:ppm");//顯示到液晶屏上 LcdSetCursor(4,0);//設(shè)置起始地址 LcdWriteDat(0xdf); //顯示溫度小圓點(diǎn) while(1)//主循環(huán) { Key_set_scan();//按鍵掃描 if(moshi==0)//當(dāng)在檢測(cè)模式時(shí){ RH(); //調(diào)用溫濕度讀取子程序 Value1=adc0832(0);
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 宜賓老宅修復(fù)運(yùn)營(yíng)方案
- 莒縣生日策劃活動(dòng)方案(3篇)
- 制度宣貫培訓(xùn)報(bào)告
- 電腦培訓(xùn)班規(guī)章制度
- 消防控制室培訓(xùn)教育制度
- 兒童保健門(mén)診培訓(xùn)制度
- 指令性任務(wù)培訓(xùn)制度
- 黨員崗前培訓(xùn)制度
- 辦公人員培訓(xùn)制度
- 藝術(shù)培訓(xùn)班日常管理制度
- 2025年江蘇省公務(wù)員面試模擬題及答案
- 2024-2025學(xué)年山東省濟(jì)南市槐蔭區(qū)七年級(jí)(上)期末地理試卷
- 2025中國(guó)家庭品牌消費(fèi)趨勢(shì)報(bào)告-OTC藥品篇-
- 機(jī)器人學(xué):機(jī)構(gòu)、運(yùn)動(dòng)學(xué)及動(dòng)力學(xué) 課件全套 第1-8章 緒論-機(jī)器人綜合設(shè)計(jì)
- JJG 694-2025原子吸收分光光度計(jì)檢定規(guī)程
- 廣東省2025屆湛江市高三下學(xué)期第一次模擬考試-政治試題(含答案)
- 2025年3月29日全國(guó)事業(yè)單位事業(yè)編聯(lián)考A類《職測(cè)》真題及答案
- 梯子使用安全操作規(guī)程
- 民航保健與衛(wèi)生
- 醫(yī)藥ka專員培訓(xùn)課件
- 【中考真題】2025年上海英語(yǔ)試卷(含聽(tīng)力mp3)
評(píng)論
0/150
提交評(píng)論