單片機課程設計--DS18B20的溫度測量與顯示系統(tǒng)_第1頁
單片機課程設計--DS18B20的溫度測量與顯示系統(tǒng)_第2頁
單片機課程設計--DS18B20的溫度測量與顯示系統(tǒng)_第3頁
單片機課程設計--DS18B20的溫度測量與顯示系統(tǒng)_第4頁
單片機課程設計--DS18B20的溫度測量與顯示系統(tǒng)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機課程設計說明書題 目: DS18B20的溫度測量與顯示系統(tǒng) 學 院: 航空自動化學院 系 別: 自動化系 專業(yè)名稱: 自動化專業(yè) 班 級: 學 號: 姓 名: 指導教師: 中國民航大學航空自動化學院目錄1課程設計要求1 2總體方案設計 42.1、單片機系統(tǒng)2.2、電源模塊2.3、顯示模塊2.4、總體設計方案3系統(tǒng)方框圖4 4系統(tǒng)各方框的電路圖 9 4.1、溫度傳感器DS18B20電路4.2、顯示電路 4.3、主控制器 4.4、系統(tǒng)總電路圖5主程序流程圖和各個子程序的流程圖12 1、主程序流程圖 2、溫度讀取子程序流程圖 3、溫度轉換子程序流程圖6源程序說明157心得體會附錄一 DS18B

2、20簡介 20基于數字溫度計DS18B20的溫度測量與顯示系統(tǒng)一、任務與要求1.利用1個DS18B20測量室內溫度(誤差小于?)2.用數碼管顯示溫度3.顯示精度為0.1擴展要求1.多通道測量2.LCD顯示3.生成印刷電路板3、 二、總體方案設計(基本功能)1、單片機系統(tǒng)我選用了AT89C52單片機,查過資料后我知道AT89C52單片機具有不但AT89C51單片機所有的優(yōu)點,而且具有更大的程序存儲空間,可在線仿真的功能,方便調試。所以選用AT89S52八位單片機作為溫度采集的控部分。2、電源模塊采用普通的直流電源實現電路簡單,而且采用集成電源芯片設計的直流電源電壓比較穩(wěn)定,完全滿足系統(tǒng)各模塊的供

3、電要求。 3、顯示模塊為了顯示出溫度,采用數碼管顯示工具。4、總體設計方案為了不失通用性和智能性,本方案采用AT89S52單片機作為控制器,單總線溫度傳感器DS18B20進行溫度采集。電源部分采用普通的直流電源,完全滿足AT89S52和DS18B20等各模塊的工作電壓范圍。溫度顯示采用數碼管。4、 系統(tǒng)方框圖程序控制模塊數碼管顯示模塊單片機系統(tǒng)溫度傳感器模塊電源模塊四、系統(tǒng)各方框的電路圖1、溫度傳感器DS18B20電路 由于DS18B20 工作在單總線方式,其硬件接口非常簡單,僅需利用系統(tǒng)的一條I/ O線與DS18B20的數據總線相連即可,如圖1所示。圖1 DS18B20電路2、顯示電路顯示電

4、路采用4位共陽極LED數碼管,P0口由上拉電阻提高驅動能力,作為段碼輸出并作為數碼管的驅動。P2口的低四位作為數碼管的位選端。采用動態(tài)掃描的方式顯示。 3、主控制器單片機AT89S5具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電路系統(tǒng)的設計需要,很適合便攜手持式產品的設計使用系統(tǒng)可用二節(jié)電池供電。4、系統(tǒng)總電路圖總體設計電路圖所下,控制器采用單片機AT89S52,溫度傳感器采用DS18B20,用4位LED數碼管以串口傳送數據實現溫度顯示。五、主程序流程圖和各個子程序的流程圖1、主程序流程圖主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量的當前溫度值,溫度測量每

5、1s進行一次。這樣可以在一秒之內測量一次被測溫度,其程序流程見圖3.1所示。DS18B20初始化結束溫度轉換跳過ROM匹配延時DS18B20是否存在?跳過ROM匹配讀暫存器轉換為顯示碼是否2、溫度讀取子程序流程圖Y發(fā)DS18B20復位命令發(fā)跳過ROM命令發(fā)讀取溫度命令讀取操作,CRC校驗9字節(jié)完?CRC校驗正?確?移入溫度暫存器結束NNY3、溫度轉換子程序流程圖發(fā)DS18B20復位命令發(fā)跳過ROM命令發(fā)溫度轉換開始命令 結束六、程序及說明: #include<reg52.h>#include<intrins.h>#define uchar unsigned char#d

6、efine uint unsigned intsbit DQ=P23;sbit dula=P26;sbit wela=P27;sbit FM=P25;sbit LED1=P20;sbit LED2=P21;sbit LED3=P22;uint temp,tmp,temp1,temp2,temp3;uchar flag1=0;uchar qian,bai,shi,ge;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86,0xc7,0xc

7、0,;/數碼管顯示代碼uchar code table1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86,0xc7,0xc0,; /數碼管顯示代碼void delay(uchar i)while(-i);/延時函數void delays(uchar i)while(i-);/延時函數void delayms(uint timer)uchar x,y;for(x=timer;x>0;x-)for(y=110;y>0;y-);ms級別的延時函數void D

8、s18b20_Init(void)/*uint i;DQ=0;i=103;while(i>0)i-;DQ=1;i=4;while(i>0)i-; */uchar flag=0;/設置標志位DQ=1;/拉高數據總線delay(1);/延時一段時間,盡量短一點DQ=0;/拉低總線delays(100);/延時時間在480us到960us之間DQ=1;/拉高總線delay(15);/如果在15-60ms的時間內產生一個低電平,則初始化完成。flag=DQ;delay(100);/ds18b20初始化bit tempreadbit()/位讀取子程序uint i;bit dat;DQ=0;i

9、+;/ i+起延時作用,1us后進入讀時序DQ=1;i+;i+;/ i+起延時作用,在1us到15us內進行采樣,這里延時大概8usdat=DQ;i=8;while(i>0)i-;/至少需要60us才能完成讀周期return(dat);/返回位數據 uchar Read_One_Byte()uchar i,j,dat;dat=0;for(i=1;i<=8;i+)j=tempreadbit();dat=(j<<7)|(dat>>1);/循環(huán)8次讀一個字節(jié)return(dat);void Write_One_Byte(uchar wdat)uint i;ucha

10、r j;bit testb;for(j=1;j<=8;j+)testb=wdat&0x01;wdat=wdat>>1;/右移位if(testb)/寫1周期DQ=0;i+;i+;/延時一段時間,寫周期開始DQ=1;i=8;while(i>0)i-;/完成一次寫周期至少要需要60us,這里大概是100usDQ=1;i+;i+;Else/寫0周期DQ=0;i=8;while(i>0)i-;DQ=1;i+;i+;/*uchar i=0;uchar time=0;for(i=8;i>0;i-)DQ=1;_nop_();DQ=0;_nop_();DQ=wdat&

11、amp;0x01;delay(40);DQ=1;for(time=0;time<1;time+);wdat>>=1;delay(10); */uint Get_temp()float tt;uchar low,high;Ds18b20_Init();/調用初始化函數delayms(1);Write_One_Byte(0xcc);/跳過讀ROM指令Write_One_Byte(0x44); /溫度轉換指令/delayms(2);Ds18b20_Init();/調用初始化函數delayms(1);Write_One_Byte(0xcc); /跳過讀ROM指令Write_One_B

12、yte(0xbe); /讀溫度指令/delayms(2);low=Read_One_Byte();/低字節(jié)存放在LOWhigh=Read_One_Byte();/高字節(jié)存放在hightemp=high;temp<<=8;temp=temp|low;/將溫度合并if(temp<0x07ff)/判斷溫度正負 flag1=0; else temp=temp+1; flag1=1; /*if(temp>63488)temp=temp+1;tt=temp*(0.0625);if(tt>=100)flag1=1; */temp=tt*10+0.5;tt=temp*(0.062

13、5);temp=tt*10+0.5;/temp=temp+0.05;return(temp);void Display(uint value)/*uchar qian,bai,shi,ge;bai=value/100;shi=value%100/10;ge=value%10; */qian=temp/1000;/百位數 bai=temp%1000/100;/十位數 shi=temp%100/10;/個位數 ge=temp%10;/小數位if(qian=0)/百位若為零,則不顯示dula=1;P0=0xff;dula=0;P0=0xff;wela=1;P0=2;wela=0;delayms(5)

14、;P0=0xff;elsedula=1;P0=tableqian;dula=0;P0=0xff;wela=1;P0=2;wela=0;delayms(5);P0=0xff; if(flag1=0)/若溫度我正數,則最高位不顯示dula=1;P0=0xff;dula=0;P0=0xff;wela=1;P0=1;wela=0;delayms(5);P0=0xff;Else/若溫度為負數,則最高位為負號dula=1;P0=0xbf;dula=0;P0=0xff;wela=1;P0=1;wela=0;delayms(5);P0=0xff;/*dula=1;P0=tableqian;dula=0;P0=

15、0xff;wela=1;P0=2;wela=0;delayms(5);P0=0xff; */dula=1;/顯示百位P0=tablebai;dula=0;P0=0xff;wela=1;P0=4;wela=0;delayms(5);P0=0xff;dula=1; /顯示十位P0=tableshi;dula=0;P0=0xff;wela=1;P0=8;wela=0;delayms(5);P0=0xff;dula=1; /顯示個位P0=tablege;dula=0;P0=0xff;wela=1;P0=0x10;wela=0;delayms(5);P0=0xff; void main()LED1=1;while(1)P1=0x39;tmp=Get_temp();Display(tmp);delayms(25);6、 DS18B20簡介DS18B20 采用3 腳PR-35 封裝或8 腳SOIC 封裝,管腳排列如圖3所示。圖中GND 為地,DQ 為數據輸入/輸出端(即單線總線),該腳為漏極開路輸出,常態(tài)下呈高電平,Vcc 是外部+5V 電源端,不用時應接地,NC 為空腳。圖3 DS18B20的外

溫馨提示

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

評論

0/150

提交評論