基于DS18B20的52單片機(jī)的溫度計(jì)設(shè)計(jì)_第1頁
基于DS18B20的52單片機(jī)的溫度計(jì)設(shè)計(jì)_第2頁
基于DS18B20的52單片機(jī)的溫度計(jì)設(shè)計(jì)_第3頁
基于DS18B20的52單片機(jī)的溫度計(jì)設(shè)計(jì)_第4頁
基于DS18B20的52單片機(jī)的溫度計(jì)設(shè)計(jì)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于單片機(jī)的DS18B20溫度計(jì)設(shè)計(jì)//Main.c主程序#include<reg52.h>#include<18b20.h>#defineDataPortP0//概念數(shù)據(jù)端口程序中碰到DataPort則用P0替換sbitLATCH1=P1^0;//概念鎖存使能端口段鎖存sbitLATCH2=P1^1;//位鎖存bitReadTempFlag;//概念讀時(shí)間標(biāo)志unsignedcharcodeDuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示段碼值0~9共陰數(shù)碼管dp-aunsignedcharcodeWeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//別離對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼unsignedcharTempData[4];//存儲(chǔ)顯示值的全局變量voidDisplay(unsignedcharFirstBit,unsignedcharNum);//數(shù)碼管顯示函數(shù)voidInit_Timer0(void);//按時(shí)器初始化voidmain(void){unsignedintTempH,TempL,temp;Init_Timer0(); //按時(shí)器初始化while(1)//主循環(huán){if(ReadTempFlag==1){ReadTempFlag=0;temp=ReadTemperature(); //讀取溫度函數(shù)if(temp&0x8000) {TempData[0]=0x40;//負(fù)號(hào)標(biāo)志temp=~temp;//取反加1 temp+=1; TempH=temp>>4;TempL=temp&0x0F;TempL=TempL*6.25/10;//小數(shù)近似處置 if(TempH/10==0)TempData[1]=0;//十位溫度 else TempData[1]=DuanMa[TempH/10];TempData[2]=DuanMa[TempH%10]|0x80;//個(gè)位溫度,帶小數(shù)點(diǎn)TempData[3]=DuanMa[TempL]; }else{ TempH=temp>>4;TempL=temp&0x0F;TempL=TempL*6.25/10;//小數(shù)近似處置 if(TempH/100==0) TempData[0]=0; elseTempData[0]=DuanMa[TempH/100];//百位溫度if((TempH/100==0)&&((TempH%100)/10==0))//消隱 TempData[1]=0; elseTempData[1]=DuanMa[(TempH%100)/10];//十位溫度TempData[2]=DuanMa[(TempH%100)%10]|0x80;//個(gè)位溫度,帶小數(shù)點(diǎn)TempData[3]=DuanMa[TempL]; }} }}voidDisplay(unsignedcharFirstBit,unsignedcharNum){staticunsignedchari=0; DataPort=0;//清空數(shù)據(jù)LATCH1=1;//段鎖存LATCH1=0;DataPort=WeiMa[i+FirstBit];//取位碼LATCH2=1;//位鎖存LATCH2=0;DataPort=TempData[i];//取顯示數(shù)據(jù),段碼LATCH1=1;//段鎖存LATCH1=0; i++;if(i==Num) i=0;}voidInit_Timer0(void) //按時(shí)器初始化{TMOD|=0x01; //利用模式1,16位按時(shí)器 EA=1;//總中斷打開ET0=1;//按時(shí)器中斷打開TR0=1;//按時(shí)器開關(guān)打開}voidTimer0_isr(void)interrupt1 //按時(shí)器中斷程序{staticunsignedintnum;TH0=(65536-2000)/256; //從頭賦值2msTL0=(65536-2000)%256;Display(0,4);//挪用數(shù)碼管掃描num++;if(num==300)//{num=0;ReadTempFlag=1;//讀標(biāo)志位置1 }}//reg52.h#ifndef__REG52_H__#define__REG52_H__sfrP0=0x80;sfrP1=0x90;sfrP2=0xA0;sfrP3=0xB0;sfrPSW=0xD0;sfrACC=0xE0;sfrB=0xF0;sfrSP=0x81;sfrDPL=0x82;sfrDPH=0x83;sfrPCON=0x87;sfrTCON=0x88;sfrTMOD=0x89;sfrTL0=0x8A;sfrTL1=0x8B;sfrTH0=0x8C;sfrTH1=0x8D;sfrIE=0xA8;sfrIP=0xB8;sfrSCON=0x98;sfrSBUF=0x99;/*8052Extensions*/sfrT2CON=0xC8;sfrRCAP2L=0xCA;sfrRCAP2H=0xCB;sfrTL2=0xCC;sfrTH2=0xCD;/*BITRegisters*//*PSW*/sbitCY=PSW^7;sbitAC=PSW^6;sbitF0=PSW^5;sbitRS1=PSW^4;sbitRS0=PSW^3;sbitOV=PSW^2;sbitP=PSW^0;//8052sbitTF1=TCON^7;sbitTR1=TCON^6;sbitTF0=TCON^5;sbitTR0=TCON^4;sbitIE1=TCON^3;sbitIT1=TCON^2;sbitIE0=TCON^1;sbitIT0=TCON^0;sbitEA=IE^7;sbitET2=IE^5;//8052sbitES=IE^4;sbitET1=IE^3;sbitEX1=IE^2;sbitET0=IE^1;sbitEX0=IE^0;/*IP*/sbitPT2=IP^5;sbitPS=IP^4;sbitPT1=IP^3;sbitPX1=IP^2;sbitPT0=IP^1;sbitPX0=IP^0;sbitRD=P3^7;sbitWR=P3^6;sbitT1=P3^5;sbitT0=P3^4;sbitINT1=P3^3;sbitINT0=P3^2;sbitTXD=P3^1;sbitRXD=P3^0;sbitSM0=SCON^7;sbitSM1=SCON^6;sbitSM2=SCON^5;sbitREN=SCON^4;sbitTB8=SCON^3;sbitRB8=SCON^2;sbitTI=SCON^1;sbitRI=SCON^0;sbitT2EX=P1^1;//8052sbitT2=P1^0;//8052sbitTF2=T2CON^7;sbitEXF2=T2CON^6;sbitRCLK=T2CON^5;sbitTCLK=T2CON^4;sbitEXEN2=T2CON^3;sbitTR2=T2CON^2;sbitC_T2=T2CON^1;sbitCP_RL2=T2CON^0;#endif//18b20.h#ifndef__DS18B20_H__#define__DS18B20_H__#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint;/*端口概念*/sbitDQ=P1^3;//ds18b20端口/*函數(shù)聲明*/unsignedintReadTemperature(void); bitInit_DS18B20(void); unsignedcharReadOneChar(void);voidWriteOneChar(unsignedchardat);#endif//delay.c#ifndef__DELAY_H__#define__DELAY_H__/*微秒延時(shí)函數(shù)*/voidDelayUs2x(unsignedchart);/*毫秒延時(shí)函數(shù)*/voidDelayMs(unsignedchart);#endif//18b20.c#include<delay.h>#include<18b20.h>/*18b20初始化*/bitInit_DS18B20(void){ bitdat=0; DQ=1; //DQ復(fù)位 DelayUs2x(5);//稍做延時(shí) DQ=0;//單片機(jī)將DQ拉低 DelayUs2x(200);//精準(zhǔn)延時(shí)大于480us小于960us DelayUs2x(200); DQ=1;//拉高總線 DelayUs2x(50);//15~60us后接收60-240us的存在脈沖 dat=DQ;//若是dat=0則初始化成功,dat=1則初始化失敗 DelayUs2x(25);//稍作延時(shí)返回 returndat;}/*讀取一個(gè)字節(jié)*/ unsignedcharReadOneChar(void) { unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) { DQ=0;//給脈沖信號(hào) dat>>=1; DQ=1;//給脈沖信號(hào) if(DQ) dat|=0x80; DelayUs2x(25); } return(dat); }/*寫一個(gè)字節(jié)*/ voidWriteOneChar(unsignedchardat) { unsignedchari=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; DelayUs2x(25); DQ=1; dat>>=1; } DelayUs2x(25); }/*讀取溫度函數(shù)*/ unsignedintReadTemperature(void) { unsignedchara=0; unsignedintb=0; unsignedintt=0; Init_DS18B20(); //

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論