版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)理禮儀概述-【課件】
- 電場仿真開題報(bào)告范文
- 報(bào)告機(jī)制范文
- 會(huì)計(jì)專業(yè)實(shí)踐報(bào)告范文
- 小學(xué)生開展安全教育班會(huì)
- 勻速圓周運(yùn)動(dòng)應(yīng)用課件
- 2025商鋪合同解除協(xié)議范文
- 手術(shù)器械的清洗與保養(yǎng)
- 手術(shù)后如何避免肌肉萎縮
- 2025新建辦公樓室內(nèi)設(shè)計(jì)合同
- 2024年護(hù)校隊(duì)安全工作制度(3篇)
- 2024年安徽省廣播電視行業(yè)職業(yè)技能大賽(有線廣播電視機(jī)線員)考試題庫(含答案)
- 山東省濟(jì)南市濟(jì)陽區(qū)三校聯(lián)考2024-2025學(xué)年八年級(jí)上學(xué)期12月月考語文試題
- 手術(shù)室的人文關(guān)懷
- 2024合作房地產(chǎn)開發(fā)協(xié)議
- 糖尿病酮酸癥中毒
- 農(nóng)貿(mào)市場通風(fēng)與空調(diào)設(shè)計(jì)方案
- Unit 6 Food Lesson 1(說課稿)-2024-2025學(xué)年人教精通版(2024)英語三年級(jí)上冊(cè)
- 第25課《周亞夫軍細(xì)柳》復(fù)習(xí)課教學(xué)設(shè)計(jì)+2024-2025學(xué)年統(tǒng)編版語文八年級(jí)上冊(cè)
- 2024年廣東省深圳市中考英語試題含解析
- 金蛇納瑞2025年公司年會(huì)通知模板
評(píng)論
0/150
提交評(píng)論