

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 基于單片機的數字溫度計設計</p><p><b> 摘 要</b></p><p> 隨著時代的進步和發(fā)展,單片機技術已經普及到我們生活、工作、科研、各個領域,已經成為一種比較成熟的技術, 本文主要介紹了一個基于AT89C52單片機的測溫系統,詳細描述了利用數字溫度傳感器DS18B20開發(fā)測溫系統的過程,重點對傳感器在單片機下的硬件連接,
2、軟件編程以及各模塊系統流程進行了詳盡分析,對各部分的電路也一一進行了介紹,該系統可以方便的實現實現溫度采集和顯示,它使用起來相當方便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點。 DS18B20與AT80C52結合實現最簡溫度檢測系統,該系統結構簡單,抗干擾能力強,適合于惡劣環(huán)境下進行現場溫度測量,有廣泛的應用前景。</p><p> 關鍵詞:單片機;數字控制;溫度計;DS18B20;AT89C52&l
3、t;/p><p><b> Abstract</b></p><p> Along with the progress of The Times and development, microcontroller technology has spread to our life, work, scientific research, each domain, has
4、become a more mature technology, this paper mainly introduces a temperature measurement system based on AT89C52 single chip microcomputer, described in detail using digital temperature sensor DS18B20 temperature measurem
5、ent and control system in the development process, focusing on sensors under the single chip microcomputer hardware connection, sof</p><p> Key words: single chip microcomputer,Digital control,The thermomet
6、er, DS18B20,AT89C52</p><p><b> 1引言</b></p><p> 隨著人們生活水平的不斷提高,單片機控制無疑是人們追求的目標之一,它所給人帶來的方便也是不可否定的,其中數字溫度計就是一個典型的例子,但人們對它的要求越來越高,要為現代人工作、科研、生活、提供更好的更方便的設施就需要從數單片機技術入手,一切向著數字化控制,智能化控制方
7、向發(fā)展。</p><p> 本設計所介紹的數字溫度計與傳統的溫度計相比,具有讀數方便,測溫范圍廣,測溫準確,其輸出溫度采用數字顯示,主要用于對測溫比較準確的場所,或科研實驗室使用,該設計控制器使用單片機AT89C52,測溫傳感器使用DS18B20。 </p><p> 1.1設計內容及性能指標</p><p> 本設計主要是介紹了單片機控制下的溫度檢測系統,詳
8、細介紹了其硬件和軟件設計,并對其各功能模塊做了詳細介紹,其主要功能和指標如下:</p><p> 利用溫度傳感器(DS18B20)測量某一點環(huán)境溫度</p><p> 測量范圍為-55℃~+99℃,精度為±0.5℃</p><p> 用1602LCD液晶顯示屏進行實際溫度值顯示</p><p><b> 2設計方案
9、及原理</b></p><p><b> 2.1設計方案</b></p><p> 本次課程設計是用89C52單片機CPU及接口電路設計一個數字時鐘,其核心部件是89C52,時鐘的顯示采用1602LCD液晶顯示屏,保證功能完善,工作可靠。1602LCD液晶顯示屏的功耗主要消耗在其內部的電極和驅動IC 上,因而耗電量比其他顯示器要少得多,功耗較低。由于其
10、內部集成有顯示芯片,程序編寫簡單,適用于多方面的應用。系統設計框圖如圖1所示。</p><p> DS18B20數字溫度傳感器是DALLAS公司生產的1-Wire,即單總線器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統,具有線路簡單,在一根通信線,可以掛很多這樣的數字溫度計,十分方便。</p><p><b> 圖1 系統方框圖</b></p&
11、gt;<p><b> 2.2系統原理</b></p><p> DS18B20采用3腳PR-35封裝或8腳SOIC封裝,64位ROM的結構開始8位是產品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前面56位的CRC檢驗碼,這也是多個DS18B20可以采用一線進行通信的原因。</p><p> DS18B20溫度傳感器的內部存儲器
12、還包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結構為8字節(jié)的存儲器,頭2個字節(jié)包含測得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復位時被刷新。第5個字節(jié),為配置寄存器,它的內容用于確定溫度值的數字轉換分辨率。DS18B20工作時寄存器中的分辨率轉換為相應精度的溫度數值。低5位一直為1,TM是工作模式位,用于設置DS18B20在工作模式還是在測試模式,DS18B20出廠時該位被設置為0,
13、用戶要去改動,R1和R0決定溫度轉換的精度位數,來設置分辨率。</p><p><b> 3硬件設計</b></p><p><b> 3.1硬件原理圖</b></p><p> 根據題目要求設計的硬件原理圖,如圖2所示。</p><p><b> 圖2 硬件原理圖</b&g
14、t;</p><p> 3.2 LCD顯示電路設計</p><p> 1602LCD液晶屏為5V電壓驅動,帶背光,可顯示兩行,每行16個字符,不能顯示漢字。液晶1、2端為電源;3端為液晶對比度調節(jié)端。液晶4端為向液晶控制器寫數據/寫命令選擇端,接單片機P2.0端口。液晶5端為讀/寫選擇端,因為我們不需要從液晶中讀取數據,只向其寫入命令和數據,因此此端始終選擇為寫狀態(tài),即低電平接地。液晶
15、6端為使能信號,是操作必須的信號,接單片機的P2.1口。</p><p> 3.3溫度檢測電路設計</p><p> DS18B20是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,與傳統的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據實際要求通過簡單的編程實現9~12位的數字值讀數方式。</p><p> DS18B20內部結構主要由
16、四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DQ 為數據輸入/輸出引腳。GND為地信號。當工作于寄生電源時,此引腳必須接地。 </p><p> 在仿真軟件中如圖3所示。</p><p> 圖3 仿真中DS18B20</p><p> DS18B20的測溫原理,低溫度系
17、數晶振的振蕩頻率受溫度的影響很小用于產生固定頻率的脈沖信號送給減法計數器1,高溫度系數晶振隨溫度變化其震蕩頻率明顯改變,所產生的信號作為減法計數器2的脈沖輸入,圖中還隱含著計數門,當計數門打開時,DS18B20就對低溫度系數振蕩器產生的時鐘脈沖后進行計數,進而完成溫度測量.計數門的開啟時間由高溫度系數振蕩器來決定,每次測量前,首先將-55 ℃所對應的基數分別置入減法計數器1和溫度寄存器中,減法計數器1和溫度寄存器被預置在-55 ℃所對應
18、的一個基數值。</p><p> 減法計數器1對低溫度系數晶振產生的脈沖信號進行減法計數,當減法計數器1的預置值減到0時溫度寄存器的值將加1,減法計數器 1的預置將重新被裝入,減法計數器1重新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環(huán)直到減法計數器2計數到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數值即為所測溫度,中的斜率累加器用于補償和修正測溫過程中的非線性輸出,用于修正減法計數器的預置值,只
19、要計數門仍未關閉就重復上述過程,直至溫度寄存器值達到被測溫度值,這就是DS18B20的測溫原理。</p><p> 另外,由于DS18B20單線通信功能是分時完成的,有嚴格的時隙概念,因此讀寫時序很重要。系統對DS18B20的各種操作必須按協議進行。操作協議為:初始化DS18B20(發(fā)復位脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命令→處理數據。</p><p><b> 4軟件
20、設計</b></p><p> 實驗主程序流程圖,如圖4所示。</p><p><b> 圖4 主程序流程圖</b></p><p> 5系統仿真及實際應用</p><p> 5.1 Proteus仿真圖 </p><p> 根據硬件原理電路,用在Keil生成hex的可執(zhí)行
21、文件,Proteus中畫圖的仿真結果,如圖5所示。</p><p> 圖5 Proteus仿真結果</p><p><b> 5.2實際應用</b></p><p> 溫度是人們日常生活中常常需要測量和控制的一個物理量。傳統的溫度計有反應速度慢、讀數麻煩、測量精度不高、誤差大等缺點,而在某些特定的場合,器材設備對溫度的要求極高,設計一種高
22、精度的溫度計就顯得十分有意義。設計的高精度溫度計有著線性優(yōu)良、性能穩(wěn)定、靈敏度高、使用方便、軟硬件結構實現了模塊化、電路簡單等優(yōu)點。</p><p><b> 六、總結</b></p><p> 歷時一周的單片機課程設計結束了,此次課程設計中,我所做的是要用89C52單片機及其他部件完成一個電子時鐘??梢詫崿F電子鐘的走時和校對;電子鐘上電時開始走,通過用1602L
23、CD液晶顯示屏;通過對數字溫度傳感器DS18B20調整,對1602LCD液晶顯示屏進行延遲控制。在完成設計的過程中,我遇到了一些問題,在用Keil uVision3調試程序時,軟件提示說“代碼”超過2k。這個問題困擾了我半天的時間。后來我直接編譯、編譯連接、全部重建、停止編譯和對工程進行設置,生成了名為 c51.hex文件。之后在Proteus中畫圖仿真。通過這次單片機課程設計,我不僅將上學期所學的單片機知識應用到設計中,同時更進一步學
24、習了89C52。更加熟悉了Keil和Proteus的使用。每次課程設計都會遇到一些問題,隨著問題的解決自己又學到了更多的知識。</p><p><b> 參考文獻</b></p><p> [1] 王思明.單片機原理及應用系統設計[M].北京:科學出版社,2012.</p><p> [2] 李廣弟.單片機基礎[M].北京:北京航空航天大
25、學出版社,1994.</p><p> [3] 閻石.數字電子技術基礎(第三版)[M].北京:高等教育出版社,1989.</p><p><b> 附錄</b></p><p><b> 源程序代碼:</b></p><p> #include<reg52.h> //頭文件&l
26、t;/p><p> #define uchar unsigned char </p><p> #define uint unsigned int</p><p> sbit rs=P2^0;</p><p> sbit lcden=P2^1; //液晶使能端</p><p> sbit DATA = P3
27、^7; //DS18B20接入口</p><p> uchar FLAG_DIS=0;</p><p> uchar bai_18b20,shi_18b20,ge_18b20,num; //定義變量</p><p> bit flag_Negative_number ;//負數標志</p><p> uchar code table
28、[]={"tempreture:"} ; //提示語</p><p> /*****一毫秒定時*****/</p><p> void delay_ms(uint z)</p><p><b> {</b></p><p><b> uint x,y;</b></p
29、><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p><b> /*延時子函數*/</b></p><p> void delay(uint num)&l
30、t;/p><p><b> {</b></p><p> while(num--) ;</p><p><b> }</b></p><p><b> /*液晶寫命令*/</b></p><p> void write_lcd_com(uchar
31、com)</p><p><b> {</b></p><p><b> rs=0;</b></p><p><b> lcden=0;</b></p><p><b> P0=com;</b></p><p> dela
32、y_ms(1);</p><p><b> lcden=1;</b></p><p> delay_ms(1);</p><p><b> lcden=0;</b></p><p><b> }</b></p><p><b> /
33、*液晶寫數據*/</b></p><p> void write_lcd_date(uchar date)</p><p><b> {</b></p><p><b> rs=1;</b></p><p><b> lcden=0;</b></p&g
34、t;<p><b> P0=date;</b></p><p> delay_ms(1);</p><p><b> lcden=1;</b></p><p> delay_ms(1);</p><p><b> lcden=0;</b></p&
35、gt;<p><b> }</b></p><p> /*液晶初始化程序*/</p><p> void lcd_init()</p><p><b> {</b></p><p> write_lcd_com(0x38);</p><p> wri
36、te_lcd_com(0x0c);</p><p> write_lcd_com(0x06);</p><p> write_lcd_com(0x01);</p><p><b> }</b></p><p> /*************DS18b20溫度傳感器函數*********************/&
37、lt;/p><p> void Init_DS18B20(void) //傳感器初始化</p><p><b> {</b></p><p> uchar x=0;</p><p> DATA = 1; </p><p> delay(10); //稍做延時</p>
38、;<p> DATA = 0; //單片機將DQ拉低</p><p> delay(80); //精確延時 大于 480us //450</p><p> DATA = 1; //拉高總線</p><p> delay(20);</p><p> x=DATA; //稍做延時后 如果x=
39、0則初始化成功 x=1則初始化失敗</p><p> delay(30);</p><p><b> }</b></p><p> /*溫度傳感器讀一個字節(jié)*/</p><p> ReadOneChar(void)</p><p><b> {</b></p&
40、gt;<p> uchar i=0;</p><p> uchar dat = 0;</p><p> for (i=8;i>0;i--)</p><p><b> {</b></p><p> DATA = 0; // 給脈沖信號</p><p><b>
41、 dat>>=1;</b></p><p> DATA = 1; // 給脈沖信號</p><p><b> if(DATA)</b></p><p> dat|=0x80;</p><p><b> delay(8);</b></p><p&g
42、t;<b> }</b></p><p> return(dat);</p><p><b> }</b></p><p> /*溫度傳感器寫一個字節(jié)*/</p><p> void WriteOneChar(uchar dat)</p><p><b>
43、 {</b></p><p> uchar i=0;</p><p> for (i=8; i>0; i--)</p><p><b> {</b></p><p><b> DATA = 0;</b></p><p> DATA = dat&a
44、mp;0x01;</p><p> delay(10);</p><p><b> DATA = 1;</b></p><p><b> dat>>=1;</b></p><p><b> }</b></p><p><b>
45、; delay(8);</b></p><p><b> }</b></p><p> /*讀取溫度傳感器溫度*/</p><p> int ReadTemperature(void)</p><p><b> {</b></p><p> uchar
46、 a=0;</p><p> uchar b=0;</p><p><b> int t=0;</b></p><p> float tt=0;</p><p> Init_DS18B20();</p><p> WriteOneChar(0xCC); //跳過讀序號列號的操作</
47、p><p> WriteOneChar(0x44); //啟動溫度轉換</p><p> Init_DS18B20();</p><p> WriteOneChar(0xCC); //跳過讀序號列號的操作</p><p> WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度</p>
48、<p> a=ReadOneChar();//低位</p><p> b=ReadOneChar();//高位</p><p><b> t=b;</b></p><p><b> t<<=8;</b></p><p><b> t=t|a;</b&
49、gt;</p><p> if(b&0x80) </p><p><b> {</b></p><p><b> t=~t+1;</b></p><p> flag_Negative_number = 1;</p><p><b> }</b
50、></p><p> else { flag_Negative_number = 0; }</p><p> tt=t*0.0625;</p><p> t= tt*10+0.5; </p><p> return(t);</p><p><b> }</b></p>
51、<p> /*液晶顯示溫度*/</p><p> void dis_D18B20(void)</p><p><b> {</b></p><p> int temp;</p><p> temp=ReadTemperature();//讀溫度</p><p> bai_
52、18b20=temp%1000/100;//顯示十位</p><p> shi_18b20=temp%100/10;//顯示個位</p><p> ge_18b20=temp%10;//顯示十分位</p><p> if(flag_Negative_number) //負數</p><p><b> {</b>
53、;</p><p> if(bai_18b20==0) //十位為0,則不顯示十位</p><p><b> {</b></p><p> write_lcd_com(0x80+0x40);</p><p> write_lcd_date(0x2D);</p><p> writ
54、e_lcd_date(0x30+shi_18b20);</p><p> write_lcd_date(0x30+ge_18b20);</p><p> write_lcd_date(0xDF);</p><p> write_lcd_date(0x43);</p><p><b> }</b></p>
55、;<p><b> else</b></p><p><b> {</b></p><p> write_lcd_com(0x80+0x40);</p><p> write_lcd_date(0x2D);</p><p> write_lcd_date(0x30+bai_1
56、8b20);</p><p> write_lcd_date(0x30+shi_18b20);</p><p> write_lcd_date(0xDF);</p><p> write_lcd_date(0x43);</p><p><b> }</b></p><p><b>
57、; }</b></p><p> else //正數</p><p><b> {</b></p><p> if(bai_18b20==0) //十位為0,則不顯示十位</p><p><b> {</b></p><p> wr
58、ite_lcd_com(0x80+0x40);</p><p> write_lcd_date(0x30+shi_18b20);</p><p> write_lcd_date(0x2E);</p><p> write_lcd_date(0x30+ge_18b20);</p><p> write_lcd_date(0xDF);&l
59、t;/p><p> write_lcd_date(0x43);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> write_lcd_com(0x80+0x40
60、);</p><p> write_lcd_date(0x30+bai_18b20);</p><p> write_lcd_date(0x30+shi_18b20);</p><p> write_lcd_date(0x2E);</p><p> write_lcd_date(0x30+ge_18b20);</p>&
61、lt;p> write_lcd_date(0xDF);</p><p> write_lcd_date(0x43);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><
62、p> void main()</p><p><b> {</b></p><p> lcd_init();</p><p> TMOD=0x01;</p><p> TH0=(65536-50000)/256; </p><p> TL0=(65536-50000)%256;
63、</p><p><b> TR0=1;</b></p><p><b> ET0=1; </b></p><p> EA=1; //開總中斷</p><p> write_lcd_com(0x80);</p><p> for(num=0;num<1
64、1;num++)</p><p><b> {</b></p><p> write_lcd_date(table[num]);</p><p> //delay_ms(10);</p><p><b> }</b></p><p> //dis_D18B2
65、0();</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(FLAG_DIS==1)</p><p><b> {</b></p><p> FLAG_DIS=0;</p&g
66、t;<p> dis_D18B20(); //讀溫度并顯示</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> timer0() interrupt 1 // </p&
67、gt;<p><b> {</b></p><p> uchar count; </p><p> TH0=(65536-50000)/256; </p><p> TL0=(65536-50000)%256;</p><p><b> count++;</b></p&
68、gt;<p> if(count==60)//每三秒鐘讀一次溫度傳感器溫度</p><p><b> {</b></p><p> FLAG_DIS=1;</p><p><b> count=0;</b></p><p><b> }</b></
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設計---基于單片機的數字溫度計設計
- 單片機課程設計---單片機數字顯示溫度計
- 單片機課程設計--基于單片機的數字溫度計的設計
- 單片機課程設計報告---基于單片機的數字溫度計設計
- 單片機課程設計--單片機控制的數字溫度計
- 單片機課程設計報告--基于單片機的數字溫度計設計
- 單片機課程設計--數字溫度計
- 單片機課程設計--數字溫度計
- 單片機課程設計-數字溫度計
- 單片機課程設計—數字溫度計
- 單片機數字溫度計課程設計
- 單片機課程設計---數字溫度計
- 單片機課程設計-數字溫度計
- 單片機課程設計—數字溫度計
- 單片機課程設計——數字溫度計
- 單片機課程設計—數字溫度計
- 基于單片機數字溫度計課程設計
- 單片機課程設計-數字溫度計
- 數字溫度計--單片機課程設計
- 課程設計--基于單片機數字溫度計設計
評論
0/150
提交評論