版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 單片機課程設(shè)計說明書</p><p> 題 目: DS18B20的溫度測量與顯示系統(tǒng) </p><p> 學(xué) 院: 航空自動化學(xué)院 </p><p> 系 別: 自動化系 </p><p> 專業(yè)名稱: 自動化專業(yè)
2、 </p><p> 班 級: </p><p> 學(xué) 號: </p><p> 姓 名: </p><p> 指導(dǎo)教師:
3、 </p><p><b> 目錄</b></p><p> 1課程設(shè)計要求…………………………………………………………………1</p><p> 2總體方案設(shè)計………………………………………………………………… 4</p><p><b> 2.1、單片機系統(tǒng)</b>&
4、lt;/p><p><b> 2.2、電源模塊</b></p><p><b> 2.3、顯示模塊</b></p><p> 2.4、總體設(shè)計方案</p><p> 3系統(tǒng)方框圖……………………………………………………………………4 </p><p> 4系統(tǒng)各方框的電
5、路圖………………………………………………………… 9 </p><p> 4.1、溫度傳感器DS18B20電路</p><p><b> 4.2、顯示電路</b></p><p><b> 4.3、主控制器</b></p><p> 4.4、系統(tǒng)總電路圖</p><p&g
6、t; 5主程序流程圖和各個子程序的流程圖………………………………………12 </p><p><b> 1、主程序流程圖</b></p><p> 2、溫度讀取子程序流程圖</p><p> 3、溫度轉(zhuǎn)換子程序流程圖</p><p> 6源程序說明……………………………………………………………………15<
7、/p><p> 7心得體會………………………………………………………………………</p><p> 附錄一 DS18B20簡介………………………………………………………… 20</p><p> 基于數(shù)字溫度計DS18B20的溫度測量與顯示系統(tǒng)</p><p><b> 一、任務(wù)與要求</b></p>
8、<p> 1.利用1個DS18B20測量室內(nèi)溫度(誤差小于?)</p><p> 2.用數(shù)碼管顯示溫度</p><p> 3.顯示精度為0.1℃</p><p><b> 擴展要求</b></p><p><b> 1.多通道測量</b></p><p>
9、<b> 2.LCD顯示</b></p><p><b> 3.生成印刷電路板</b></p><p> 二、總體方案設(shè)計(基本功能)</p><p><b> 1、單片機系統(tǒng)</b></p><p> 我選用了AT89C52單片機,查過資料后我知道AT89C52單片
10、機具有不但AT89C51單片機所有的優(yōu)點,而且具有更大的程序存儲空間,可在線仿真的功能,方便調(diào)試。所以選用AT89S52八位單片機作為溫度采集的控部分。</p><p><b> 2、電源模塊</b></p><p> 采用普通的直流電源實現(xiàn)電路簡單,而且采用集成電源芯片設(shè)計的直流電源電壓比較穩(wěn)定,完全滿足系統(tǒng)各模塊的供電要求。 </p><p
11、><b> 3、顯示模塊</b></p><p> 為了顯示出溫度,采用數(shù)碼管顯示工具。</p><p><b> 4、總體設(shè)計方案</b></p><p> 為了不失通用性和智能性,本方案采用AT89S52單片機作為控制器,單總線溫度傳感器DS18B20進(jìn)行溫度采集。電源部分采用普通的直流電源,完全滿足AT
12、89S52和DS18B20等各模塊的工作電壓范圍。溫度顯示采用數(shù)碼管。</p><p><b> 系統(tǒng)方框圖</b></p><p> 四、系統(tǒng)各方框的電路圖</p><p> 1、溫度傳感器DS18B20電路</p><p> 由于DS18B20 工作在單總線方式,其硬件接口非常簡單,僅需利用系統(tǒng)的一條I/ O
13、線與DS18B20的數(shù)據(jù)總線相連即可,如圖1所示。</p><p> 圖1 DS18B20電路</p><p><b> 2、顯示電路</b></p><p> 顯示電路采用4位共陽極LED數(shù)碼管,P0口由上拉電阻提高驅(qū)動能力,作為段碼輸出并作為數(shù)碼管的驅(qū)動。P2口的低四位作為數(shù)碼管的位選端。采用動態(tài)掃描的方式顯示。</p>
14、<p><b> 3、主控制器</b></p><p> 單片機AT89S5具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電路系統(tǒng)的設(shè)計需要,很適合便攜手持式產(chǎn)品的設(shè)計使用系統(tǒng)可用二節(jié)電池供電。</p><p><b> 4、系統(tǒng)總電路圖</b></p><p> 總體設(shè)計電路圖所下,控制
15、器采用單片機AT89S52,溫度傳感器采用DS18B20,用4位LED數(shù)碼管以串口傳送數(shù)據(jù)實現(xiàn)溫度顯示。</p><p> 五、主程序流程圖和各個子程序的流程圖</p><p><b> 1、主程序流程圖</b></p><p> 主程序的主要功能是負(fù)責(zé)溫度的實時顯示、讀出并處理DS18B20的測量的當(dāng)前溫度值,溫度測量每1s進(jìn)行一次。這
16、樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程見圖3.1所示。</p><p> 2、溫度讀取子程序流程圖</p><p> 3、溫度轉(zhuǎn)換子程序流程圖</p><p> 六、程序及說明: </p><p> #include<reg52.h></p><p> #include<intri
17、ns.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit DQ=P2^3;</p><p> sbit dula=P2^6;</p><p> sbit wela=P2^7;&l
18、t;/p><p> sbit FM=P2^5;</p><p> sbit LED1=P2^0;</p><p> sbit LED2=P2^1;</p><p> sbit LED3=P2^2;</p><p> uint temp,tmp,temp1,temp2,temp3;</p><p
19、> uchar flag1=0;</p><p> uchar qian,bai,shi,ge;</p><p> uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86,0xc7,0xc0,};//數(shù)碼管顯示代碼&
20、lt;/p><p> uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86,0xc7,0xc0,}; //數(shù)碼管顯示代碼</p><p> void delay(uchar i)</p><p>&l
21、t;b> {</b></p><p> while(--i);</p><p><b> }//延時函數(shù)</b></p><p> void delays(uchar i)</p><p><b> {</b></p><p> while(i-
22、-);</p><p><b> }//延時函數(shù)</b></p><p> void delayms(uint timer)</p><p><b> {</b></p><p> uchar x,y;</p><p> for(x=timer;x>0;x--
23、)</p><p> for(y=110;y>0;y--);</p><p> }ms級別的延時函數(shù)</p><p> void Ds18b20_Init(void)</p><p><b> {</b></p><p> /*uint i;</p><p&g
24、t;<b> DQ=0;</b></p><p><b> i=103;</b></p><p> while(i>0)i--;</p><p><b> DQ=1;</b></p><p><b> i=4;</b></p>
25、<p> while(i>0)i--; */</p><p> uchar flag=0;//設(shè)置標(biāo)志位</p><p> DQ=1;//拉高數(shù)據(jù)總線</p><p> delay(1);//延時一段時間,盡量短一點</p><p> DQ=0;//拉低總線</p><p> delays
26、(100);//延時時間在480us到960us之間</p><p> DQ=1;//拉高總線</p><p> delay(15);//如果在15-60ms的時間內(nèi)產(chǎn)生一個低電平,則初始化完成。</p><p><b> flag=DQ;</b></p><p> delay(100);</p>
27、<p> }//ds18b20初始化</p><p> bit tempreadbit()//位讀取子程序</p><p><b> {</b></p><p><b> uint i;</b></p><p><b> bit dat;</b></p
28、><p> DQ=0;i++;// i++起延時作用,1us后進(jìn)入讀時序</p><p> DQ=1;i++;i++;// i++起延時作用,在1us到15us內(nèi)進(jìn)行采樣,這里延時大概8us</p><p><b> dat=DQ;</b></p><p> i=8;while(i>0)i--;//至少需要60
29、us才能完成讀周期</p><p> return(dat);//返回位數(shù)據(jù)</p><p><b> } </b></p><p> uchar Read_One_Byte()</p><p><b> {</b></p><p> uchar i,j,dat;&
30、lt;/p><p><b> dat=0;</b></p><p> for(i=1;i<=8;i++)</p><p><b> {</b></p><p> j=tempreadbit();</p><p> dat=(j<<7)|(dat>
31、>1);</p><p> }//循環(huán)8次讀一個字節(jié)</p><p> return(dat);</p><p><b> }</b></p><p> void Write_One_Byte(uchar wdat)</p><p><b> {</b><
32、;/p><p><b> uint i;</b></p><p><b> uchar j;</b></p><p> bit testb;</p><p> for(j=1;j<=8;j++)</p><p><b> {</b></
33、p><p> testb=wdat&0x01;</p><p> wdat=wdat>>1;//右移位</p><p> if(testb)//寫1周期</p><p><b> {</b></p><p><b> DQ=0;</b></p&
34、gt;<p> i++;i++;//延時一段時間,寫周期開始</p><p><b> DQ=1;</b></p><p> i=8;while(i>0)i--;//完成一次寫周期至少要需要60us,這里大概是100us</p><p><b> DQ=1;</b></p><
35、;p><b> i++;i++;</b></p><p><b> }</b></p><p> Else//寫0周期</p><p><b> {</b></p><p><b> DQ=0;</b></p><p&g
36、t; i=8;while(i>0)i--;</p><p><b> DQ=1;</b></p><p><b> i++;i++;</b></p><p><b> }</b></p><p><b> }</b></p>
37、<p> /*uchar i=0;</p><p> uchar time=0;</p><p> for(i=8;i>0;i--)</p><p><b> {</b></p><p><b> DQ=1;</b></p><p><b&g
38、t; _nop_();</b></p><p><b> DQ=0;</b></p><p><b> _nop_();</b></p><p> DQ=wdat&0x01;</p><p> delay(40);</p><p><b&g
39、t; DQ=1;</b></p><p> for(time=0;time<1;time++);</p><p><b> wdat>>=1;</b></p><p> delay(10);</p><p><b> } */</b></p>&
40、lt;p><b> }</b></p><p> uint Get_temp()</p><p><b> {</b></p><p><b> float tt;</b></p><p> uchar low,high;</p><p>
41、; Ds18b20_Init();//調(diào)用初始化函數(shù)</p><p> delayms(1);</p><p> Write_One_Byte(0xcc);//跳過讀ROM指令</p><p> Write_One_Byte(0x44); //溫度轉(zhuǎn)換指令</p><p> //delayms(2);</p><
42、;p> Ds18b20_Init();//調(diào)用初始化函數(shù)</p><p> delayms(1);</p><p> Write_One_Byte(0xcc); //跳過讀ROM指令</p><p> Write_One_Byte(0xbe); //讀溫度指令</p><p> //delayms(2);</p>
43、<p> low=Read_One_Byte();//低字節(jié)存放在LOW</p><p> high=Read_One_Byte();//高字節(jié)存放在high</p><p> temp=high;</p><p><b> temp<<=8;</b></p><p> temp=te
44、mp|low;//將溫度合并</p><p> if(temp<0x07ff)//判斷溫度正負(fù)</p><p><b> flag1=0;</b></p><p><b> else</b></p><p> {temp=~temp+1;</p><p><
45、;b> flag1=1;</b></p><p><b> }</b></p><p> /*if(temp>63488)</p><p><b> {</b></p><p> temp=~temp+1;</p><p><b>
46、; }</b></p><p> tt=temp*(0.0625);</p><p> if(tt>=100)</p><p><b> {</b></p><p><b> flag1=1;</b></p><p><b> } */
47、</b></p><p> //temp=tt*10+0.5;</p><p> tt=temp*(0.0625);</p><p> temp=tt*10+0.5;</p><p> //temp=temp+0.05;</p><p> return(temp);</p>
48、<p><b> }</b></p><p> void Display(uint value)</p><p><b> {</b></p><p> /*uchar qian,bai,shi,ge;</p><p> bai=value/100;</p>&l
49、t;p> shi=value%100/10;</p><p> ge=value%10; */</p><p> qian=temp/1000;//百位數(shù)</p><p> bai=temp%1000/100;//十位數(shù)</p><p> shi=temp%100/10;//個位數(shù)</p><p>
50、ge=temp%10;//小數(shù)位</p><p> if(qian==0)//百位若為零,則不顯示</p><p><b> {</b></p><p><b> dula=1;</b></p><p><b> P0=0xff;</b></p><
51、p><b> dula=0;</b></p><p><b> P0=0xff;</b></p><p><b> wela=1;</b></p><p><b> P0=2;</b></p><p><b> wela=0;&l
52、t;/b></p><p> delayms(5);</p><p><b> P0=0xff;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b
53、></p><p><b> dula=1;</b></p><p> P0=table[qian];</p><p><b> dula=0;</b></p><p><b> P0=0xff;</b></p><p><b>
54、 wela=1;</b></p><p><b> P0=2;</b></p><p><b> wela=0;</b></p><p> delayms(5);</p><p><b> P0=0xff; </b></p><p>
55、;<b> }</b></p><p> if(flag1==0)//若溫度我正數(shù),則最高位不顯示</p><p><b> {</b></p><p><b> dula=1;</b></p><p><b> P0=0xff;</b><
56、/p><p><b> dula=0;</b></p><p><b> P0=0xff;</b></p><p><b> wela=1;</b></p><p><b> P0=1;</b></p><p><b>
57、; wela=0;</b></p><p> delayms(5);</p><p><b> P0=0xff;</b></p><p><b> }</b></p><p> Else//若溫度為負(fù)數(shù),則最高位為負(fù)號</p><p><b>
58、 {</b></p><p><b> dula=1;</b></p><p><b> P0=0xbf;</b></p><p><b> dula=0;</b></p><p><b> P0=0xff;</b></p>
59、;<p><b> wela=1;</b></p><p><b> P0=1;</b></p><p><b> wela=0;</b></p><p> delayms(5);</p><p><b> P0=0xff;</b>
60、</p><p><b> }</b></p><p> /*dula=1;</p><p> P0=table[qian];</p><p><b> dula=0;</b></p><p><b> P0=0xff;</b></p&
61、gt;<p><b> wela=1;</b></p><p><b> P0=2;</b></p><p><b> wela=0;</b></p><p> delayms(5);</p><p> P0=0xff; */</p>&
62、lt;p> dula=1;//顯示百位</p><p> P0=table[bai];</p><p><b> dula=0;</b></p><p><b> P0=0xff;</b></p><p><b> wela=1;</b></p>
63、<p><b> P0=4;</b></p><p><b> wela=0;</b></p><p> delayms(5);</p><p><b> P0=0xff;</b></p><p> dula=1; //顯示十位</p><
64、;p> P0=table[shi];</p><p><b> dula=0;</b></p><p><b> P0=0xff;</b></p><p><b> wela=1;</b></p><p><b> P0=8;</b><
65、;/p><p><b> wela=0;</b></p><p> delayms(5);</p><p><b> P0=0xff;</b></p><p> dula=1; //顯示個位</p><p> P0=table[ge];</p><p
66、><b> dula=0;</b></p><p><b> P0=0xff;</b></p><p><b> wela=1;</b></p><p><b> P0=0x10;</b></p><p><b> wela=0;
67、</b></p><p> delayms(5);</p><p> P0=0xff; </p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p>&l
68、t;b> LED1=1;</b></p><p><b> while(1)</b></p><p><b> {</b></p><p><b> P1=0x39;</b></p><p> tmp=Get_temp();</p>&
69、lt;p> Display(tmp);</p><p> delayms(25);</p><p><b> }</b></p><p><b> }</b></p><p><b> DS18B20簡介</b></p><p> DS
70、18B20 采用3 腳PR-35 封裝或8 腳SOIC 封裝,管腳排列如圖3所示。圖中GND 為地,DQ 為數(shù)據(jù)輸入/輸出端(即單線總線),該腳為漏極開路輸出,常態(tài)下呈高電平,Vcc 是外部+5V 電源端,不用時應(yīng)接地,NC 為空腳。</p><p> 圖3 DS18B20的外部結(jié)構(gòu)</p><p> DS18B20內(nèi)部主要包括寄生電源、溫度傳感器、64 位激光ROM 單線接口、存放
71、中間數(shù)據(jù)的高速暫存器(內(nèi)含便箋式RAM),用于存儲用戶設(shè)定的溫度上下限值的TH 和TL 解發(fā)器存儲與控制邏輯、8 位循環(huán)冗余校驗碼(CRC)發(fā)生器等七部分,內(nèi)部結(jié)構(gòu)如圖4。</p><p> 圖4 DS18B20內(nèi)部結(jié)構(gòu)</p><p><b> 七、心得體會</b></p><p> 在兩個星期的努力中,這次課程設(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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計---基于ds18b20的單片機溫度采集系統(tǒng)
- 單號單片機課程設(shè)計報告--基于ds18b20的溫度測量
- 單片機課程設(shè)計--基于pic16f877單片機與ds18b20的溫度采集與顯示
- 基于avr單片機ds18b20的溫度測量實驗
- 單片機溫度計課程設(shè)計--基于ds18b20的溫度計
- 課程設(shè)計--基于單片機的ds18b20數(shù)字溫度計設(shè)計
- avr單片機基于ds18b20的溫度測量實驗七
- 單片機課程設(shè)計報告--ds18b20數(shù)字溫度計的設(shè)計與實現(xiàn)
- 課程設(shè)計--基于51單片機與ds18b20的數(shù)字溫度計設(shè)計
- 課程設(shè)計---基于ds18b20的多點溫度測量系統(tǒng)
- 基于單片機設(shè)計的溫度計(ds18b20)課程設(shè)計
- 課程設(shè)計 ---基于ds18b20的溫度測試led顯示
- ds18b20溫度計課程設(shè)計
- 基于ds18b20的溫度測量系統(tǒng)設(shè)計
- ds18b20課程設(shè)計---溫度監(jiān)控系統(tǒng)設(shè)計
- 課程設(shè)計--ds18b20數(shù)字溫度計
- ds18b20數(shù)字溫度計設(shè)計課程設(shè)計
- 單片機畢業(yè)設(shè)計外文翻譯--ds18b20
- 基于ds18b20的溫度采集顯示系統(tǒng)的
- 基于ds18b20單線多點溫度測量系統(tǒng)
評論
0/150
提交評論