版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 目錄</b></p><p><b> 1 設計概述2</b></p><p> 1.1 設計目標和要求2</p><p> 1.2 設計思路2</p><p> 2 系統(tǒng)方案及硬件設計3</p><p> 2.1 設計方案3
2、</p><p> 2.2 方案的硬件總體方框圖3</p><p> 2.3 溫度傳感器DS18B20測溫原理4</p><p> 2.4 硬件設計8</p><p> 2.4.1 主控制器ATmega168</p><p> 2.4.2 復位電路8</p><p> 2.
3、4.3 時鐘振蕩電............................................................................................8</p><p> 2.4.4 報警點調節(jié)電路..................................................................................
4、..9 </p><p> 2.4.5顯示電路10</p><p><b> 3 軟件設計10</b></p><p> 3.1系統(tǒng)分析10</p><p> 3.2 各子程序及其流程圖設計11</p><p> 3.2.1 初始化子程序11</p><
5、p> 3.2.2 DS1820的讀寫字節(jié)子程序12</p><p> 3.2.3 溫度讀取及轉換子程序13</p><p> 3.2.4計算溫度子程序14</p><p> 3.2.5溫度顯示子程序15</p><p> 3.2.6報警子程序16</p><p> 4 proteus軟件仿真
6、18</p><p> 4.1 系統(tǒng)仿真設計18</p><p> 4.2仿真結果分析18</p><p> 5 系統(tǒng)原理圖19</p><p><b> 6 心得體會20</b></p><p><b> 1 設計概述</b></p>&l
7、t;p> 1.1 設計目標和要求</p><p> 1.用所學的單片機知識設計制作數字溫度計;</p><p> 2.測溫范圍是-20℃---70℃;</p><p> 3.誤差小于0.5℃;</p><p> 4.所測的溫度值可以由LCD數碼管直接顯示;</p><p> 5.可以任意設置上下限溫度
8、的報警功能;</p><p> 6.進一步熟悉proteus,protel,word軟件的功能和使用方法;</p><p><b> 1.2 設計思路</b></p><p> 首先確定我們所設計的是一個數字溫度計,由單片機、溫度傳感器以及其他電路共同實現。</p><p> 根據所要實現的功能,先在proteu
9、s軟件上仿真。根據所選用的硬件可以將整個軟件設計分為若干子程序,有初始化、查詢時間、發(fā)送指令、讀取數據、顯示溫度等構成,可將以上子程序分別設計,實現各自的功能,再在子程序中調用,就可以實現預期的目標。</p><p> 在proteus軟件里畫出相應的電路圖,將編寫好的程序的編譯后的文件下載到proteus電路圖的單片機里,進行仿真,對溫度傳感器設置不同的參數,看是否達到了我們設計所要求的目標,如果不符合要求,
10、需要檢查程序算法和硬件連接是否有誤。若仿真成功,就按照電路圖焊接硬件。</p><p> 2 系統(tǒng)方案及硬件設計</p><p><b> 2.1 設計方案</b></p><p> 采用數字溫度芯片DS18B20 測量溫度,輸出信號全數字化。采用了單總線的數據傳輸,由數字溫度計DS18B20和ATmega16單片機構成的溫度測量裝置,它
11、直接輸出溫度的數字信號,也可直接與計算機連接。采用ATmega16單片機控制,軟件編程的自由度大,可通過編程實現各種各樣的算術算法和邏輯控制,而且體積小,硬件實現簡單,安裝方便。該系統(tǒng)利用ATmega16芯片控制溫度傳感器DS18B20進行實時溫度檢測并顯示,能夠實現快速測量環(huán)境溫度,并可以根據需要設定上下限溫度。該系統(tǒng)擴展性非常強。該測溫系統(tǒng)電路簡單、精確度較高、實現方便、軟件設計也比較簡單。</p><p>
12、 2.2 方案的硬件總體方框圖</p><p> 基于增強的AVR RISC結構的低功耗8 位CMOS微控制器ATmega16,溫度傳感器采用的DS18B20,用四位數碼管顯示溫度。</p><p><b> 圖1</b></p><p> 2.3 溫度傳感器DS18B20測溫原理</p><p> DS18B
13、20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據實際要求通過簡單的編程實現9-12位的數字值讀數方式。DS18B20的性能特點如下:</p><p> ?。?)獨特的單線接口僅需要一個端口引腳進行通信,DS18B20在與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊。</p><
14、;p> ?。?)DS18B20支持多點組網功能,多個DS18B20可以并聯(lián)在惟一的三線上,實現多點組網測溫;</p><p> ?。?)無須外部器件,全部傳感元件及轉換電路集成在形如一只三極管的集成電路內;</p><p> ?。?)可通過數據線供電,電壓范圍為3.0-5.5V;</p><p><b> ?。?)零待機功耗;</b>&l
15、t;/p><p> (6)溫度以9或12位數字,對應的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實現高精度測溫;</p><p> (7)用戶可定義報警設置;</p><p> ?。?)報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件;</p><p> ?。?)負電壓特性,電源極性接反時,溫度計不會因
16、發(fā)熱而燒毀,但不能正常工作;</p><p> ?。?0)測量結果直接輸出數字溫度信號,以"一線總線"串行傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力</p><p> DS18B20采用3腳PR35封裝或8腳SOIC封裝,其引腳排列及內部結構框圖如圖2及圖3以及圖4的測溫原理圖如下所示:</p><p><b>
17、 圖2 引腳排列</b></p><p><b> 圖3 內部結構框圖</b></p><p> 圖4 DS18B20測溫原理圖</p><p> 64位ROM的結構開始8位是產品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前面56位的CRC檢驗碼,這也是多個DS18B20可以采用一線進行通信的原因。溫度報警
18、觸發(fā)器TH和TL,可通過軟件寫入戶報警上下限。</p><p> DS18B20溫度傳感器的內部存儲器還包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結構為8字節(jié)的存儲器,結構如圖4所示。頭2個字節(jié)包含測得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復位時被刷新。第5個字節(jié),為配置寄存器,它的內容用于確定溫度值的數字轉換分辨率。DS18B20工作時寄存器中的分辨率
19、轉換為相應精度的溫度數值。該字節(jié)各位的定義如圖5所示。低5位一直為1,TM是工作模式位,用于設置DS18B20在工作模式還是在測試模式,DS18B20出廠時該位被設置為0,用戶不要去改動,R1和R0決定溫度轉換的精度位數,來設置分辨率。</p><p> 圖5 DS18B20的字節(jié)定義</p><p> DS18B20的分辨率定義如表2-1所示</p><p>
20、 表2-1 分辨率設置表</p><p> 由表1可見,DS18B20溫度轉換的時間比較長,而且分辨率越高,所需要的溫度數據轉換時間越長。因此,在實際應用中要將分辨率和轉換時間權衡考慮。</p><p> 主機控制DS18B20完成溫度轉換過程是:每一次讀寫之前都要對DS18B20進行復位,即將數據總線下拉500us,然后釋放,DS18B20收到信
21、號后等待16-60us左右,之后發(fā)出60-240us的存在低脈沖,主CPU收到此此信號表示復位成功;復位成功后發(fā)送一條ROM指令,然后發(fā)送RAM指令,這樣才能對DS18B20進行預訂的讀寫操作。</p><p> 表2-2 ROM指令集</p><p> 表2-3 RAM指令集</p>
22、<p> DS18B20的測溫原理是這這樣的,器件中低溫度系數晶振的振蕩頻率受溫度的影響很小,用于產生固定頻率的脈沖信號送給減法計數器1;高溫度系數晶振隨溫度變化其振蕩頻率明顯改變,所產生的信號作為減法計數器2的脈沖輸入。器件中還有一個計數門,當計數門打開時,DS18B20就對低溫度系數振蕩器產生的時鐘脈沖進行計數進而完成溫度測量。計數門的開啟時間由高溫度系數振蕩器來決定,每次測量前,首先將最低溫所對應的一個基數分別置入減
23、法計數器1、溫度寄存器中,計數器1和溫度寄存器被預置在最低溫所對應的一個基數值。</p><p> 減法計數器1對低溫度系數晶振產生的脈沖信號進行減法計數,當減法計數器1的預置值減到0時,溫度寄存器的值將加1,減法計數器1的預置將重新被裝入,減法計數器1重新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環(huán)直到減法計數器計數到0時,停止溫度寄存器的累加,此時溫度寄存器中的數值就是所測溫度值。其輸出用于修正減法
24、計數器的預置值,只要計數器門仍未關閉就重復上述過程,直到溫度寄存器值大致被測溫度值。</p><p><b> 2.4 硬件設計</b></p><p> 2.4.1 主控制器ATmega16</p><p> ATmega16是基于增強的AVR RISC結構的低功耗8 位CMOS微控制器。由于其先進的指令集以及單時鐘周期指令執(zhí)行時間,A
25、Tmega16 的數據吞吐率高達1 MIPS/MHz,從而可以緩減系統(tǒng)在功耗和處理速度之間的矛盾。 ATmega16 AVR 內核具有豐富的指令集和32 個通用工作寄存器。所有的寄存器都直接與算邏單元(ALU) 相連接,使得一條指令可以在一個時鐘周期內同時訪問兩個獨立的寄存器。這種結構大大提高了代碼效率,并且具有比普通的CISC 微控制器最高至10 倍的數據吞吐率。 </p><p> 2.4.22.4.2
26、 復位電路</p><p> 在這里采用的是按鈕加上電復位,系統(tǒng)每次上電和每次按下復位按鈕,系統(tǒng)就會復位。</p><p> 2.4.3 時鐘振蕩電路</p><p> 采用的是1MHZ的晶振頻率,它與單片機的硬件連接電路如圖7所示</p><p><b> 圖7 晶振電路</b></p><
27、p> 2.4.4報警點調節(jié)電路</p><p> 可以通過微動開關,任意調節(jié)報警點的上下限,電路如圖8所示</p><p> 圖8 報警點調節(jié)電路</p><p><b> 2.4.5顯示電路</b></p><p> 顯示電路采用集成的四位一體的數碼管,為共陰極結構,通過設置不同的段碼可以顯示溫度。&l
28、t;/p><p><b> 圖9顯示電路</b></p><p><b> 3 軟件設計</b></p><p><b> 3.1系統(tǒng)分析</b></p><p> 系統(tǒng)程序主要包括DS1820初始化程序,向DS1820讀字節(jié)程序,向DS1820寫字節(jié)程序,讀取溫度及轉換程
29、序,溫度顯示程序,報警程序。</p><p><b> 圖10主程序流程圖</b></p><p> 3.2 各子程序及其流程圖設計</p><p> 3.2.1 初始化子程序</p><p> 令P2.7為高電平,延遲一段時間后令P2.7為低電平觸發(fā)DS1820的初始化,低電平持續(xù)一段時間,然后讀取P2.7的狀
30、態(tài),直到P2.7的狀態(tài)回到高電平時說明初始化完成。</p><p> #include <at89x51.h></p><p> #define DQ P2_7</p><p> #define dm P0</p><p> sbit w0=P2^3;</p><p> sbit w1=P2^4;
31、</p><p> sbit w2=P2^5;</p><p> sbit w3=P2^6;</p><p> sbit jia=P2^0;</p><p> sbit jian=P2^1;</p><p> sbit xuan=P2^2;</p><p> //sbit p2_7
32、=P2^7;</p><p> sbit speaker=P1^0;</p><p> #define uint unsigned int </p><p> #define uchar unsigned char</p><p> uint mark;</p><p> uint xiaoshu;</
33、p><p> int temp1=0;</p><p> uint H_t=10,L_t=-5;</p><p> uchar table_dm[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p> uchar table_dm1[]={0xbf,0x86,0xdb
34、,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};</p><p> uchar table_fuhao[]={0x00,0x40};</p><p> void delay(unsigned int i)</p><p><b> { </b></p><p> while(i--
35、); } //初始化函數</p><p> 圖11 初始化流程圖</p><p> 3.2.2 DS1820的讀寫字節(jié)子程序</p><p> 單片機向DS1820讀寫字節(jié)都是從最低位開始的。</p><p> Init_DS18B20(void)</p><p><b> {<
36、;/b></p><p> unsigned char x=0;</p><p> DQ = 1; </p><p><b> delay(8);</b></p><p> DQ = 0; </p><p> delay(80);</p><p>&
37、lt;b> DQ = 1; </b></p><p> delay(14);</p><p> x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗</p><p> delay(20);</p><p> } //讀一個
38、字節(jié)</p><p> 圖12 讀操作 圖13寫操作</p><p> 3.2.3 溫度讀取及轉換子程序</p><p> 在讀取溫度值命令前,應使用溫度轉換命令才能保證讀入的是當前溫度值轉換過程中DS1820會拉低總線直至轉換完成,因此可以讀取溫度總線的狀態(tài)來判斷溫度轉換是否完成。</p><p> Rea
39、dOneChar(void)</p><p><b> {</b></p><p> unsigned char i=0;</p><p> unsigned char dat = 0;</p><p> for (i=8;i>0;i--)</p><p><b> {&
40、lt;/b></p><p><b> DQ = 0;</b></p><p><b> dat>>=1;</b></p><p><b> DQ = 1;</b></p><p><b> if(DQ)</b></p>
41、;<p> dat|=0x80;</p><p><b> delay(4);</b></p><p><b> }</b></p><p> return(dat);</p><p> } //寫一個字節(jié)</p><p&
42、gt; 圖14溫度讀取及轉換</p><p> 3.2.4計算溫度子程序</p><p> 計算溫度子程序將RAM中讀取值進行BCD碼的轉換運算,并進行溫度值正負的判定,其程序流程圖如圖14所示:</p><p> WriteOneChar(unsigned char dat)</p><p><b> {</b&g
43、t;</p><p> unsigned char i=0;</p><p> for (i=8; i>0; i--)</p><p><b> {</b></p><p><b> DQ = 0;</b></p><p> DQ = dat&0x01
44、;</p><p><b> delay(5);</b></p><p><b> DQ = 1;</b></p><p><b> dat>>=1;</b></p><p><b> }</b></p><p>
45、;<b> delay(4);</b></p><p><b> }</b></p><p><b> //讀取</b></p><p><b> 圖 15溫度計算</b></p><p> 3.2.5溫度顯示子程序</p><
46、;p> void delayms(uchar t)</p><p><b> {</b></p><p><b> uint i;</b></p><p> while(t--)</p><p><b> {</b></p><p>
47、for(i=0;i<100;i++);</p><p><b> }</b></p><p><b> }//顯示</b></p><p><b> 其流程圖如下所示:</b></p><p><b> 圖16 溫度顯示</b></p
48、><p> 3.2.6報警子程序</p><p><b> 其流程圖如下:</b></p><p> ReadTemperature(void)</p><p><b> {</b></p><p> unsigned char a=0;</p><
49、p> unsigned char b=0;</p><p> unsigned char i=0,t;</p><p> Init_DS18B20();</p><p> WriteOneChar(0xCC);</p><p> WriteOneChar(0x44);</p><p> Init_DS
50、18B20();</p><p> WriteOneChar(0xCC);</p><p> WriteOneChar(0xBE);</p><p> a=ReadOneChar(); </p><p> b=ReadOneChar(); </p><p> i=b; /*若b為1則為負溫 */&l
51、t;/p><p><b> i=(i>>4);</b></p><p><b> if(i==0)</b></p><p><b> {</b></p><p><b> mark=0;</b></p><p>
52、t=((a>>4)|(b<<4));</p><p> a=(a&0x0f);</p><p> xiaoshu=a;</p><p><b> if (a>8)</b></p><p><b> {</b></p><p>&l
53、t;b> t=(t+1);</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p
54、><b> mark=1;</b></p><p><b> a=a>>4; </b></p><p><b> b=b<<4; </b></p><p><b> t=(a|b);</b></p><p><b
55、> t=~t;</b></p><p><b> t=(t+1);</b></p><p><b> }</b></p><p><b> EA=1;</b></p><p> return(t);</p><p><b
56、> }</b></p><p><b> 圖17報警</b></p><p> 4 proteus軟件仿真</p><p> 4.1 系統(tǒng)仿真設計</p><p> 本設計是在Proteus環(huán)境下進行仿真的,仿真所用到的器件有:單片機ATmega16,DS1820溫度傳感器,蜂鳴器,液晶顯示器
57、,一些電阻,電容等。</p><p><b> 4.2仿真結果分析</b></p><p> 本設計在仿真的條件下可以正確的顯示溫度,并在溫度超過所設置的最高溫度或最低溫度時,蜂鳴器將發(fā)出滴滴的警告聲。且本設計溫度顯示可以精確到0.1滿足設計要求。仿真時溫度顯示如圖18所示</p><p><b> 圖18</b>&
58、lt;/p><p><b> 5 系統(tǒng)原理圖</b></p><p> 通過Proteus進行元器件的查找與連接仿真得到下圖</p><p><b> 圖19</b></p><p><b> 6 心得體會</b></p><p> 單片機的設計至
59、今為止已經進入了令人鼓舞的階段,在進行了長達兩周的時間的摸索與實驗,使我不僅僅是對于單片機入門軟件與硬件的常用設計與功能,還使我對于一項設計研究的制作過程所需要的詳細步驟和具體的實現方法的力度的掌握。基于此作品作為單片機課程設計設計的創(chuàng)作成果,在當其中機器的功能等方面并非處于一個成熟的階段,而且僅僅是因為xx老師的要求以及我們的初步嘗試,當中的缺點是無可非議地存在著。</p><p> 當然在這次寶貴的課程設計
60、活動中,經驗才是對于我們最大的收獲,而且還增強了自身對未知問題以及對知識的深化認識的能力,用受益匪淺這個詞語來概括這次難忘的活動我覺得再合適不過了。但是,光是完成了作品還是不可以自我滿足的,在從一開始的時候就懷著將作品制作得更加人性化,更加令人滿意,更加地使功能完美又方便地被應用領域這個最終目的下,隨著對單片機這門學科的認識加深,到達了拓展的程度,我想這個目的將在不遠的時期內被實現。</p><p> 總之,這
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設計報告--數字溫度計
- 單片機課程設計報告數字溫度計
- 單片機課程設計報告--數字溫度計
- 單片機課程設計報告---基于單片機的數字溫度計設計
- 基于單片機的數字溫度計課程設計報告
- 溫度計課程設計---基于51單片機數字溫度計設計
- 數字溫度計課程設計---基于51單片機數字溫度計設計
- 基于單片機數字溫度計課程設計
- 單片機課程設計報告--基于單片機的數字溫度計設計
- 單片機課程設計--數字溫度計
- 單片機課程設計--數字溫度計
- 單片機課程設計-數字溫度計
- 單片機課程設計—數字溫度計
- 單片機課程設計報告---數字溫度計設計
- 單片機數字溫度計課程設計
- 單片機課程設計---數字溫度計
- 單片機課程設計-數字溫度計
- 單片機課程設計—數字溫度計
- 基于單片機的數字溫度計課程設計
- 單片機課程設計-- 基于單片機的數字溫度計設計
評論
0/150
提交評論