基于單片機的防火防盜報警系統設計_第1頁
基于單片機的防火防盜報警系統設計_第2頁
基于單片機的防火防盜報警系統設計_第3頁
基于單片機的防火防盜報警系統設計_第4頁
基于單片機的防火防盜報警系統設計_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

SectorErase(0x2000);byte_write(0x2000,s_temp);byte_write(0x2001,s_dengji);byte_write(0x2060,a_a);}/******************把數據從單片機內部eeprom中讀出來*****************/voidread_eeprom(){s_temp=byte_read(0x2000);s_dengji=byte_read(0x2001);a_a=byte_read(0x2060);}/**************開機自檢eeprom初始化*****************/voidinit_eeprom(){read_eeprom();//先讀if(a_a!=1)//新的單片機初始單片機內問eeprom{s_temp=50;s_dengji=60;a_a=1;write_eeprom();}}/***********************18b20初始化函數*****************************/voidinit_18b20(){bitq;dq=1;//把總線拿高delay_uint(1);//15usdq=0;//給復位脈沖delay_uint(80);//750usdq=1;//把總線拿高等待delay_uint(10);//110usq=dq;//讀取18b20初始化信號delay_uint(20);//200usdq=1;//把總線拿高釋放總線}/*************寫18b20內的數據***************/voidwrite_18b20(uchardat){uchari;for(i=0;i<8;i++){//寫數據是低位開始dq=0;//把總線拿低寫時間隙開始dq=dat&0x01;//向18b20總線寫數據了delay_uint(5);//60usdq=1;//釋放總線dat>>=1;}}/*************讀取18b20內的數據***************/ucharread_18b20(){uchari,value;for(i=0;i<8;i++){dq=0;//把總線拿低讀時間隙開始value>>=1;//讀數據是低位開始dq=1;//釋放總線if(dq==1)//開始讀寫數據value|=0x80;delay_uint(5);//60us讀一個時間隙最少要保持60us的時間}returnvalue;//返回數據}/*************讀取溫度的值讀出來的是小數***************/uintread_temp(){uintvalue;ucharlow;//在讀取溫度的時候如果中斷的太頻繁了,就應該把中斷給關了,否則會影響到18b20的時序init_18b20();//初始化18b20write_18b20(0xcc);//跳過64位ROMwrite_18b20(0x44);//啟動一次溫度轉換命令delay_uint(50);//500usinit_18b20();//初始化18b20write_18b20(0xcc);//跳過64位ROMwrite_18b20(0xbe);//發(fā)出讀取暫存器命令EA=0;low=read_18b20();//讀溫度低字節(jié)value=read_18b20();//讀溫度高字節(jié)EA=1;value<<=8;//把溫度的高位左移8位value|=low;//把讀出的溫度低位放到value的低八位中value*=0.0625;//轉換到溫度值returnvalue;//返回讀出的溫度}/*********** 讀 數 模 轉 換 數 據********************************************************///請先了解ADC0832模數轉換的串行協議,再來讀本函數,主要是對應時序圖來理解,本函數是模擬0832的串行協議進行的//100通道//111通道unsignedcharad0832read(bitSGL,bitODD){unsignedchari=0,value=0,value1=0;SCL=0;DO=1;CS=0;//開始SCL=1;//第一個上升沿SCL=0;DO=SGL;SCL=1;//第二個上升沿SCL=0;DO=ODD;SCL=1;//第三個上升沿SCL=0;//第三個下降沿DO=1;for(i=0;i<8;i++){SCL=1;SCL=0;//開始從第四個下降沿接收數據value<<=1;if(DO)value++;}for(i=0;i<8;i++){//接收校驗數據value1>>=1;if(DO)value1+=0x80;SCL=1;SCL=0;}CS=1;SCL=1; if(value==value1)//與校驗數據比較,正確就返回數據,否則返回0returnvalue;return0;}/*************定時器0初始化程序***************/voidtime_init(){EA=1;//開總中斷TMOD=0X01;//定時器0、定時器1工作方式1ET0=1;//開定時器0中斷TR0=1;//允許定時器0定時}/********************獨立按鍵程序*****************/ucharkey_can;//按鍵值voidkey()//獨立按鍵程序{staticucharkey_new;key_can=20;//按鍵值還原P1|=0x0f;if((P1&0x0f)!=0x0f)//按鍵按下{delay_1ms(1);//按鍵消抖動if(((P1&0x0f)!=0x0f)&&(key_new==1)){//確認是按鍵按下key_new=0;switch(P1&0x0f){case0x0e:key_can=4;break;//得到k1鍵值case0x0d:key_can=3;break;//得到k2鍵值case0x0b:key_can=2;break;//得到k3鍵值case0x07:key_can=1;break;//得到k4鍵值}}}elsekey_new=1;}/****************按鍵處理LCD1602液晶顯示函數***************/voidkey_with(){if(key_can==4)//緊急報警鍵手動報警{if(menu_1==0)shoudong=1;}if(key_can==1)//設置鍵{menu_1++;if(menu_1>=3){menu_1=0;}if(menu_1==0)init_1602();//初始化顯示}if(menu_1==0){if((key_can==2)||(key_can==3))shoudong=0;//取消手動報警}if(menu_1==1)//設置高溫報警{if(key_can==2){s_temp++;//高溫報警值加1if(s_temp>99)s_temp=99;}if(key_can==3){s_temp--;//高溫報警值減1if(s_temp<=10)s_temp=10;}write_sfm2(1,8,s_temp);//顯示溫度write_sfm2(2,8,s_dengji);//顯示煙物等級write_com(0x80+7);//將光標移動到第2行第到3位write_com(0x0f);//顯示光標并且閃爍write_eeprom();//保存數據}if(menu_1==2)//設置低溫報警{if(key_can==2){s_dengji++;//煙物報警值加1if(s_dengji>=99)s_dengji=99;}if(key_can==3){s_dengji--;//煙物報警值減1if(s_dengji<=1)s_dengji=1;}write_sfm2(1,8,s_temp);//顯示溫度write_sfm2(2,8,s_dengji);//顯示煙物等級write_com(0x80+0x40+7);//將光標移動到第2行第到3位write_com(0x0f);//顯示光標并且閃爍write_eeprom();//保存數據}}/****************報警函數***************/voidclock_h_l(){staticucharvalue;if((dengji>=s_dengji)||(temperature>=s_temp)||(shoudong==1))//報警{value++;if(value>=2){value=10;beep=~beep;//蜂鳴器報警fengshan=0;//起動風扇}}else{if((dengji<s_dengji)&&(temperature<(s_temp))&&(shoudong==0))//取消報警{value=0;beep=1;fengshan=1;//關閉風扇}}}/***************主函數*****************/voidmain(){beep=0;//開機蜂鳴器叫一聲delay_1ms(200);P0=P1=P2=P3=0xff;//初始化IO口temperature=read_temp();//讀取溫度值init_1602();//1602液晶初始化init_eeprom();//讀eeprom數據time_init();//初始化定時器delay_1ms(650);while(1){key();//獨立按鍵程序if(key_can<10){key_with();//按鍵按下要執(zhí)行的程序}if(flag_300ms==1){flag_300ms=0;temperature=read_temp();//讀取溫度值clock_h_l();dengji=ad0832read(1,0);dengji=dengji*99/255;if(menu_1==0){if(temperature>=99)temperature=99;write_sfm2(1,8,

溫馨提示

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

評論

0/150

提交評論