版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
/*********************************************************//*程序名稱:溫度監(jiān)控系統(tǒng)*//*程序功能:運(yùn)用89C52單片機(jī)和DS18B20溫度傳感器實(shí)現(xiàn)環(huán)境*//*溫度旳實(shí)時(shí)測量和高、低溫報(bào)警*//*程序版本:v1.0*//*作者:*//*編寫時(shí)間:*//*********************************************************/#include<reg52.h>#include<intrins.h>//含_nop_()延時(shí)函數(shù)//定義數(shù)據(jù)類型#defineucharunsignedchar#defineuintunsignedint//定義端口#defineLEDP0//段碼輸出口sbitDQ=P3^2;//傳感器數(shù)據(jù)口sbitSMG_q=P1^0; //定義數(shù)碼管陽級控制腳(千位)sbitSMG_b=P1^1; //定義數(shù)碼管陽級控制腳(百位)sbitSMG_s=P1^2; //定義數(shù)碼管陽級控制腳(十位)sbitSMG_g=P1^3; //定義數(shù)碼管陽級控制腳(個(gè)位)sbitbuzzer=P1^5;//蜂鳴器 sbitled_low=P2^6;//低溫批示燈sbitled_high=P2^7;//高溫批示燈sbitled_ok=P2^5;//溫度正常批示燈sbitled_work=P2^4;//工作批示燈sbitset=P3^7;//設(shè)立按鍵sbitadd=P3^4;//加一按鍵sbitdec=P3^5;//減一按鍵//定義變量和常量intcount=0;//按鍵次數(shù)寄存器inth;//主函數(shù)用循環(huán)計(jì)數(shù)器uinttemp;//溫度值ucharr;//溫度值整數(shù)形式ucharhigh=35,low=20;//上下限初值//共陽LED段碼表"0""1""2""3""4""5""6""7""8""9""不亮""-"ucharcodeLED_code[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharcodeLED_code1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//小數(shù)部分轉(zhuǎn)換碼表uchardatatemp_data[2]={0x00,0x00};//存儲從傳感器讀出旳溫度值uchardatadp[5]={0x00,0x00,0x00,0x00,0x00};//顯示單元數(shù)據(jù),共4個(gè)數(shù)據(jù)和一種運(yùn)算//子函數(shù)聲明voidds_reset();//DS18B20初始化函數(shù)voidds_write(uchards_wrdata);//DS18B20寫數(shù)據(jù)函數(shù)uchards_read();//DS18B20讀數(shù)據(jù)函數(shù)read_temp();//讀取溫度函數(shù)voidchange_temp(uinttem);//溫度數(shù)據(jù)解決voidxianshi(inthorl);//溫度顯示轉(zhuǎn)換voiddisplay();//數(shù)碼管顯示函數(shù)voidkeyscan();//按鍵查詢函數(shù)voidwarn_led();//超限報(bào)警voiddelay(uintt);//延時(shí)函數(shù),單次25us/********************主函數(shù)*********************/voidmain(){ LED=0x00;//初始化顯示端口 led1=0; led2=0; led3=0; led4=0; for(h=0;h<4;h++) { dp[h]=8; } while(1)//循環(huán)執(zhí)行顯示和溫度讀取 { uchari; for(i=0;i<200;i++) { warn_led();//批示燈控制 display();//顯示 keyscan();//按鍵掃描 } change_temp(read_temp());//溫度數(shù)據(jù)讀取和解決 }}/***********************************************//*函數(shù)名稱:ds_reset()*//*函數(shù)功能:DS18B20初始化*//*入口參數(shù):無*//*輸出參數(shù):無*//*調(diào)用函數(shù):delay();_nop_();*//*全局變量:無*//*局部變量:presence*//***********************************************/voidds_reset(void){ charpresence=1; while(presence) { while(presence) { DQ=1;//傳感器數(shù)據(jù)段先置高電平 _nop_(); _nop_(); //合適延時(shí) DQ=0;//傳感器數(shù)據(jù)段從高電平拉到低電平 delay(50);//延時(shí) DQ=1;//再置高電平 delay(6);//延時(shí) presence=DQ;//初始化成功,繼續(xù)下一步 } delay(45);//延時(shí) presence=~DQ; } DQ=1;//拉高電平 led_work=0; //動工作批示燈}/***********************************************//*函數(shù)名稱:ds_write()*//*函數(shù)功能:向DS18B20寫數(shù)據(jù)*//*入口參數(shù):ds_wrdata*//*輸出參數(shù):無*//*調(diào)用函數(shù):delay();_nop_();*//*全局變量:無*//*局部變量:ds_wrdata*//***********************************************/voidds_write(uchards_wrdata){ uchari; for(i=8;i>0;i--) { DQ=1; _nop_(); _nop_(); DQ=0; _nop_(); _nop_(); _nop_(); _nop_(); DQ=ds_wrdata&0x01;//最低位移出 delay(6); ds_wrdata=ds_wrdata/2;//右移1位 } DQ=1; delay(1);}/***********************************************//*函數(shù)名稱:ds_read()*//*函數(shù)功能:從DS18B20讀數(shù)據(jù)*//*入口參數(shù):無*//*輸出參數(shù):value*//*調(diào)用函數(shù):delay();_nop_();*//*全局變量:*//*局部變量:i;value;*//***********************************************/uchards_read(void){ uchari; ucharvalue=0; for(i=8;i>0;i--) { DQ=1;_nop_(); _nop_(); value>>=1; DQ=0; _nop_(); _nop_(); _nop_(); _nop_(); DQ=1; _nop_(); _nop_(); _nop_(); _nop_(); if(DQ)value|=0x80; delay(6); } DQ=1; return(value);}/***********************************************//*函數(shù)名稱:read_temp()*//*函數(shù)功能:讀溫度數(shù)據(jù)數(shù)據(jù)*//*入口參數(shù):無*//*輸出參數(shù):yemp*//*調(diào)用函數(shù):ds_reset();ds_write();ds_read();*//*delay();*//*全局變量:temp*//*局部變量:temp_data[];*//***********************************************/read_temp(){ ds_reset();//傳感器初始化 delay(200); ds_write(0xcc);//發(fā)跳過讀取序列號命令 ds_write(0x44);//發(fā)溫度轉(zhuǎn)換命令 ds_reset(); delay(1); ds_write(0xcc); ds_write(0xbe); //讀18B20中存儲器 temp_data[0]=ds_read();//讀溫度值旳低字節(jié)命令 temp_data[1]=ds_read();//讀溫度值旳高字節(jié) temp=temp_data[1]; temp<<=8; temp=temp|temp_data[0];//兩字節(jié)合成一種整型變量 returntemp;//返回溫度值}/***********************************************//*函數(shù)名稱:chang_temp()*//*函數(shù)功能:將溫度傳感器中獨(dú)到旳數(shù)據(jù)進(jìn)行轉(zhuǎn)換*//*入口參數(shù):tem*//*輸出參數(shù):dp[]*//*調(diào)用函數(shù):無*//*全局變量:dp[];ditab[];r;*//*局部變量:tem*//***********************************************/voidchange_temp(uinttem){ ucharn=0; if(tem>6348)//溫度值正負(fù)判斷 { tem=65536-tem;//負(fù)溫度求補(bǔ)碼 n=1;//標(biāo)志位置1 } dp[4]=tem&0x0f;//取小數(shù)部分旳值 dp[0]=ditab[dp[4]];//存入小數(shù)部分顯示值 dp[4]=tem>>4;//取中間八位,即整數(shù)部分旳值 dp[3]=dp[4]/100;//取百位數(shù)據(jù) dp[1]=dp[4]%100;//取后兩位數(shù)據(jù) dp[2]=dp[1]/10;//取十位數(shù)據(jù) dp[1]=dp[1]%10;//個(gè)位 r=dp[1]+dp[2]*10+dp[3]*100;//實(shí)際溫度值(十進(jìn)制) if(!dp[3]) //符號位顯示判斷 { dp[3]=0x0a;//最高位為0時(shí)不顯示 if(!dp[2]) { dp[2]=0x0a;//次高位為0時(shí)不顯示 } } if(n) { dp[3]=0x0b; //負(fù)溫度時(shí)最高位顯示"-" }}/***********************************************//*函數(shù)名稱:xianshi()*//*函數(shù)功能:溫度數(shù)據(jù)轉(zhuǎn)換成顯示所需LED段碼*//*入口參數(shù):horl*//*輸出參數(shù):dp[]*//*調(diào)用函數(shù):無*//*全局變量:dp[];*//*局部變量:n;*//***********************************************/voidxianshi(inthorl){ intn=0; if(horl>128) //負(fù)數(shù)補(bǔ)碼轉(zhuǎn)換 { horl=256-horl; n=1; } dp[3]=horl/100; dp[3]=dp[3]&0x0f;//百位 dp[2]=horl%100/10; //十位 dp[1]=horl%10; //個(gè)位 dp[0]=0; //小數(shù)位 if(!dp[3]) //高位為零不顯示 { dp[3]=0x0a; if(!dp[2]) { dp[2]=0x0a; } } if(n) //負(fù)數(shù)最高位顯示“-” { dp[3]=0x0b; }}/***********************************************//*函數(shù)名稱:display()*//*函數(shù)功能:數(shù)碼管顯示*//*入口參數(shù):無*//*輸出參數(shù):無*//*調(diào)用函數(shù):delay()*//*全局變量:dp[];LED_code[];LED_code1[];*//*led1;led2;led3;led4;*//*局部變量:j;*//***********************************************/voiddisplay(){ intj; for(j=0;j<4;j++)//4位LED掃描控制 { switch(j) { case0:LED=LED_code[dp[0]]; led4=1; delay(450); led4=0; break;//小數(shù)位 case1:LED=LED_code1[dp[1]]; led3=1; delay(450); led3=0; break;//個(gè)位 case2:LED=LED_code[dp[2]]; led2=1; delay(450); led2=0; break;//十位 case3:LED=LED_code[dp[3]]; led1=1; delay(450); led1=0; break;//百位 } }}/***********************************************//*函數(shù)名稱:keyscan()*//*函數(shù)功能:按鍵查詢*//*入口參數(shù):無*//*輸出參數(shù):無*//*調(diào)用函數(shù):delay();display();xianshi();*//*全局變量:count;high;low;*//*局部變量:無*//***********************************************/voidkeyscan(){ if(set==0) //set鍵按下 { while(1) { delay(500); //延時(shí)去抖動 if(set==0) //重新判斷set鍵與否按下 { count++; while(!set) //按鍵彈起繼續(xù)顯示前面內(nèi)容 display(); } if(count==1) //set按下一次執(zhí)行此段 { xianshi(high); //轉(zhuǎn)換上限溫度為段碼并顯示 display(); if(add==0) //add鍵與否按下 { while(!add) //彈起時(shí)上限溫度加一并顯示 display(); high+=1; } if(dec==0) //dec鍵與否按下 { while(!dec) //彈起時(shí)上限溫度減一并顯示 display(); high-=1; } } if(count==2) //set鍵按下兩次執(zhí)行此段 { xianshi(low); //轉(zhuǎn)換下限溫度為段碼并顯示 display(); if(add==0) //add鍵與否按下 { while(!add) //彈起時(shí)下限溫度加一并顯示 display(); low+=1; } //dec鍵與否按下 if(dec==0) { while(!dec) //彈起時(shí)下限溫度減一并顯示 display(); low-=1; } } if(count>=3) //set鍵按下三次回到溫度顯示狀態(tài) { count=0; break; } } }}/***********************************************//*函數(shù)名稱:warn_led()*//*函數(shù)功能:工作狀況批示燈控制*//*入口參數(shù):無*//*輸出參數(shù):無
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025教資真題模擬測試
- 《電子電路分析與應(yīng)用》課件任務(wù)8波形發(fā)生器的制作
- 美術(shù)培訓(xùn)中心管理制度(3篇)
- 設(shè)備車間獎(jiǎng)罰管理制度(3篇)
- 軟件開發(fā)團(tuán)隊(duì)管理制度(3篇)
- 采購及銷售流程管理制度(3篇)
- 獸藥GSP培訓(xùn)教學(xué)課件
- 獸醫(yī)診療技術(shù)
- 2026年及未來5年市場數(shù)據(jù)中國5G智能駕駛行業(yè)市場調(diào)查研究及發(fā)展趨勢預(yù)測報(bào)告
- 中學(xué)學(xué)生社團(tuán)活動場地保障制度
- 中職班會課主題課件
- 2025北京高三二模語文匯編:微寫作
- DB6301∕T 4-2023 住宅物業(yè)星級服務(wù)規(guī)范
- 護(hù)理查房與病例討論區(qū)別
- 土建資料管理課件
- 公司安全大講堂活動方案
- GB/T 42186-2022醫(yī)學(xué)檢驗(yàn)生物樣本冷鏈物流運(yùn)作規(guī)范
- T/CA 105-2019手機(jī)殼套通用規(guī)范
- 重癥胰腺炎的中醫(yī)護(hù)理
- 部編版語文六年級上冊第一單元綜合素質(zhì)測評B卷含答案
- 中央2025年全國婦聯(lián)所屬在京事業(yè)單位招聘93人筆試歷年參考題庫附帶答案詳解-1
評論
0/150
提交評論