版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 電子畢業(yè)設計</b></p><p><b> 數(shù)</b></p><p><b> 字</b></p><p><b> 溫</b></p><p><b> 度</b></p>
2、<p><b> 計</b></p><p> 題目: 數(shù)顯溫度計</p><p> 學院: 電子信息學院</p><p><b> 班級: </b></p><p><b> 學號: </b></p><p>&
3、lt;b> 姓名: </b></p><p><b> 指導老師: </b></p><p><b> 日期:</b></p><p> 數(shù)字溫度計設計任務書</p><p><b> 課程設計目的</b></p><p&g
4、t; 加強學生理論聯(lián)系實際的能力,提高學生的動手能力;</p><p> 學會基本電子元器件的識別和檢測;</p><p> 學會應用EDA軟件Proteus進行電路的設計和仿真;</p><p> 基本掌握單片機的基本原理,并能將其應用于系統(tǒng)的設計。</p><p> 通過實訓,提高學生的學習興趣,激發(fā)自主學習能力,培養(yǎng)創(chuàng)新意識。
5、</p><p><b> 設計任務</b></p><p> 先焊制一個單片機最小系統(tǒng),并以制作的單片機最小系統(tǒng)為核心,設計并制作一個數(shù)字式溫度計應用系統(tǒng)。</p><p> 設計要求具有以下功能:</p><p> 采用DS18B20作為溫度傳感器進行溫度檢測;</p><p> 對
6、采集溫度進行顯示(顯示溫度分辨率0.1℃);</p><p> 采集溫度數(shù)值應采用數(shù)字濾波措施,保證顯示數(shù)據(jù)穩(wěn)定;</p><p> 顯示數(shù)據(jù),無數(shù)據(jù)位必須消隱。</p><p><b> 目錄</b></p><p> 數(shù)字溫度計設計任務書 ……………………………………………… 2</p><
7、;p><b> 設計思路</b></p><p> 設計原理 ………………………………………………………………… 4</p><p> 系統(tǒng)方案及總體設計框圖 ……………………………………………… 4</p><p> 數(shù)字溫度計應用系統(tǒng)的硬件設計</p><p> 單片機小系統(tǒng)基本組成及硬件圖 <
8、/p><p> 外圍電路工作原理及系統(tǒng)硬件圖 </p><p><b> 主要芯片及其功能 </b></p><p><b> 系統(tǒng)軟件程序的設計</b></p><p><b> 軟件流程框圖 </b></p><p><b> 系統(tǒng)調(diào)
9、試</b></p><p><b> 仿真器介紹 </b></p><p><b> 調(diào)試結果及其分析</b></p><p> 系統(tǒng)設計電路的特點和方案的優(yōu)缺點 </p><p><b> 課程設計心得體會</b></p><p>
10、<b> 參考文獻</b></p><p> 附錄 程序清單及注釋</p><p><b> 設計思路:</b></p><p> 設計方案及其總體設計框圖</p><p> 溫度計設計系統(tǒng)流程圖</p><p> 二、數(shù)字溫度計應用系統(tǒng)的硬件設計</p&
11、gt;<p> 1、單片機小系統(tǒng)的基本組成及其選擇</p><p><b> ?。?)單片機</b></p><p><b> 單片機選型參考</b></p><p> ?、?AT89S51、AT89S52 :具備ISP下載功能 ,可以使用USBASP程序下載線或者并口下載 </p><
12、;p> ② STC89C51、STC89C52:使用串口線+MAX232燒寫程序。</p><p> ?、跘T89C51、AT89C52 :可以在最小系統(tǒng)板上使用,但需要另外用編程器燒寫程序 </p><p> 本次課程設計選用AT89S52型號單片機進行操作。</p><p> AT89S52引腳圖 </p&
13、gt;<p> 此外,AT89S52設計和配置了振蕩頻率可為0Hz并可通過軟件設置省電模式??臻e模式下,CPU暫停工作,而RAM定時計數(shù)器,串行口,外中斷 系統(tǒng)可繼續(xù)工作,掉電模式凍結振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復位。同時該芯片還具有PDIP、TQFP和PLCC等三 種封裝形式,以適應不同產(chǎn)品的需求。</p><p><b> 電源</b>
14、</p><p> ?、匐娫催m配器供電:DC座(三個管腳)</p><p><b> ?、趗sb供電:</b></p><p><b> 3、時鐘</b></p><p><b> 4、I/O口&接口</b></p><p> ?、?所有I/
15、O用排針引出</p><p> ?、?串行通信口:P3.0,p3.1</p><p> ?、?ISP:p1.6,p1.7</p><p> 2、外圍電路工作原理及系統(tǒng)硬件圖</p><p> 3、主要芯片及其功能</p><p><b> ?、貯T89S52</b></p>&l
16、t;p> ?。?)AT89S52各引腳及I/O口介紹</p><p> P0口也可用做訪問片外數(shù)據(jù)存儲器和程序存儲器時的低8位地址/數(shù)據(jù)總線的復用口。這種情況下,P0口內(nèi)含上拉電阻。</p><p> 在Flash編程時,P0口輸入代碼數(shù)據(jù);在Flash校驗時,P0口輸出代碼數(shù)據(jù)。在進行編程校驗時,需外接10KΩ的上拉電阻。</p><p> ●P1口—
17、—8位、雙向I/O口,內(nèi)含上拉電阻。</p><p> P1口為用戶使用的通用I/O口,每個引腳可驅(qū)動4個TTL負載。當用做輸入時,每個端口首先置1。</p><p> P1.0和P1.1引腳也用做定時器2的外部計數(shù)輸入(P1.0/T2)和觸發(fā)器輸入(P1.1/T2DX)。</p><p> 在編程和校驗期間,P1口可輸入低字節(jié)地址。</p>&
18、lt;p> ● P2口——8位、雙向I/O口,內(nèi)部具有上拉電阻。</p><p> P2口可用做通用I/O,可以驅(qū)動4個TTL負載。對P2口各位寫入1,可作為輸入。每個引腳由外部負載拉為低電平時,經(jīng)由內(nèi)部上拉電阻向外輸出電流。</p><p> 在訪問16位地址的外部程序存儲器和數(shù)據(jù)存儲器時,P2口提供高8位地址。用MOVX @DPTR類指令訪問外部數(shù)據(jù)存儲器時,P2口為高8位
19、地址(即PCH);用MOVX @R0和MOVX @R1類指令訪問外部數(shù)據(jù)存儲器時,P2口上的內(nèi)容是SFR P2的內(nèi)容。</p><p> 在編程和校驗時,P2口接收地址線的高位和一些控制信號。</p><p> P3口——8位、雙向I/O口,內(nèi)部含有上拉電阻。</p><p> ● P3口可用做通用I/O口,可驅(qū)動4個TTL負載。當用做輸入熟,要先將P3口各位
20、置如外部負載將P3口拉低,則經(jīng)過上拉電阻向外輸出電流。</p><p> 在編程和校驗時,P3口接收某些控制信號。</p><p> ● ——地址鎖存允許/編程脈沖輸入。</p><p> ● ——外部程序存儲器讀選通,低電平有效。</p><p> ● ——片外程序存儲器訪問允許。</p><p>
21、● XTAL1和XTAL2——XTAL1是片內(nèi)振蕩器反相放大器和時鐘發(fā)生器的輸入端,XTAL2是片內(nèi)振蕩器反相放大器的輸出端。</p><p> ?。?)AT89S52實物與仿真的區(qū)別</p><p><b> ?、贒S18B20</b></p><p> DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器
22、,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9-12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點如下:</p><p> ?。?)獨特的單線接口僅需要一個端口引腳進行通信,DS18B20在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。</p><p> ?。?)DS18B20支持多點組網(wǎng)功能,多個DS18B20可以
23、并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)測溫;</p><p> (3)無須外部器件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi);</p><p> ?。?)可通過數(shù)據(jù)線供電,電壓范圍為3.0-5.5V;</p><p><b> (5)零待機功耗;</b></p><p> (6)溫度以9或12位數(shù)字,對應的
24、可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實現(xiàn)高精度測溫;</p><p> ?。?)用戶可定義報警設置;</p><p> ?。?)報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件;</p><p> ?。?)負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作;</p><p> ?。?/p>
25、10)測量結果直接輸出數(shù)字溫度信號,以"一線總線"串行傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力</p><p> DS18B20采用3腳PR35封裝或8腳SOIC封裝,其引腳排列及內(nèi)部結構框圖如圖及測溫原理圖如下所示:</p><p> ?、?602液晶顯示屏</p><p> 1602液晶顯示流程圖:</p>
26、;<p> 三、系統(tǒng)軟件程序的設計(見附錄):</p><p><b> 軟件流程框圖:</b></p><p><b> 四、系統(tǒng)調(diào)試:</b></p><p><b> 1、仿真器的介紹:</b></p><p> ① keil軟件的開發(fā)運用<
27、/p><p> (1)Keil C51單片機軟件開發(fā)系統(tǒng)的整體結構 </p><p> C51工具包的整體結構,uVision與Ishell分別是C51 for Windows和for Dos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及C51編譯器編譯生成目標文件(.OBJ)。目標文件
28、可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標準的Hex文件,以供調(diào)試器dScope51或tScope51使用進行源代碼級調(diào)試,也可由仿真器使用直接對目標板進行調(diào)試,也可以直接寫入程序存貯器如EPROM中。</p><p> (2)使用獨立的Keil仿真器時,注意事項 </p><p> 仿真器標配11.059
29、2MHz的晶振,但用戶可以在仿真器上的晶振插孔中換插其他頻率的晶振。 </p><p> 仿真器上的復位按鈕只復位仿真芯片,不復位目標系統(tǒng)。 </p><p> 仿真芯片的31腳(/EA)已接至高電平,所以仿真時只能使用片內(nèi)ROM,不能使用片外ROM;但仿真器外引插針中的31腳并不與仿真芯片的31腳相連,故該仿真器仍可插入到擴展有外部ROM(其CPU的/EA引腳接至低電平)的目標系統(tǒng)中
30、使用。 </p><p> ?、趐roteus軟件的開發(fā)運用</p><p> (1) Protues 軟件介紹</p><p> Proteus 是目前最好的模擬單片機外圍器件的工具,它可以仿真51系列、AVR,PIC 等常用的MCU 及其外圍電路。本文基于Proteus 6.9 和Keil uVision3 軟件。Proteus 與其它單片機仿真軟件不同的是
31、,它不僅能仿真單片機CPU 的工作情況,也能仿真單片機外圍電路或沒有單片機參與的其它電路的工作情況。因此在仿真和程序調(diào)試時,關心的不再是某些語句執(zhí)行時單片機寄存器和存儲器內(nèi)容的改變,而是從工程的角度直接看程序運行和電路工作的過程和結果。對于這樣的仿真實驗,從某種意義上講,是彌補了實驗和工程應用間脫節(jié)的矛盾和現(xiàn)象。</p><p> ?。?) proteus 的工作過程</p><p>
32、運行proteus 的ISIS 程序后,進入該仿真軟件的主界面。在工作前,要設</p><p> 置view 菜單下的捕捉對齊和system 下的顏色、圖形界面大小等項目。通過工</p><p> 具欄中的p 命令,在pick devices 窗口中選擇電路所需的元件,放置元件并調(diào)</p><p> 整其相對位置,元件參數(shù)設置,元器件間連線,編寫程序;在sou
33、rce 菜單的</p><p> Define code generation tools 菜單命令下,選擇程序編譯的工具、路徑、擴展名等項目;在source 菜單的Add/removesource files 命令下,加入單片機硬件電路的對應程序;通過debug 菜單的相應命令仿真程序和電路的運行情況。</p><p> Proteus 軟件提供了30 多個元件庫,數(shù)千種元件。元件涉
34、及數(shù)字和模擬、交流和直流等。</p><p><b> 2、系統(tǒng)整體調(diào)試</b></p><p><b> ?、僬{(diào)試結果</b></p><p><b> ?、诮Y果分析</b></p><p> 在運行仿真結果時通過改變溫度傳感器DS18B20的溫度,然后調(diào)用各種子函數(shù),可
35、以改變液晶顯示1602的第二行顯示數(shù)據(jù),說明程序編寫正確。</p><p> ?、巯到y(tǒng)設計電路的特點和方案的優(yōu)缺點</p><p> 我們組設計的數(shù)字溫度計系統(tǒng)知識運用簡單的AT89S52芯片的I/O口傳輸功能,通過幾個小的讀數(shù)據(jù)、傳遞數(shù)據(jù)、延時子函數(shù)實現(xiàn)溫度的讀取傳輸功能,是比較簡單,容易實現(xiàn)的,所以我們的系統(tǒng)只是實現(xiàn)了一些簡單的功能,系統(tǒng)整體來說比較簡易,但好像這個溫度計沒有多大的應
36、用價值,所以我們后續(xù)分析覺得這個系統(tǒng)可以加一個溫度復位系統(tǒng)提高AT89S52芯片的功能價值,也提高數(shù)字溫度計的智能價值,還可以增加一個報警子函數(shù),實現(xiàn)智能數(shù)字溫度計更高的應用價值。</p><p> 五、課程設計心得體會:</p><p> 經(jīng)過這次單片機課程設計,終于完成了我的數(shù)字溫度計的設計,雖然不能做到很完美,但從心底里說,還是高興的,畢竟這次設計把實物都做了出來,高興之余不得不
37、深思呀!</p><p> 在本次設計的過程中,我發(fā)現(xiàn)很多的問題,也許是第一次進行這種系統(tǒng)的設計所以感覺完成這樣一次小系統(tǒng)設計我長進了很多,單片機課程設計重點就在于軟件算法的設計,需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個程序并不是一件簡單的事,舉個例子,以前寫的那幾次,數(shù)據(jù)加減時,我用的都是BCD碼,這一次,我全部用的都是16進制的數(shù)直接加減,顯示處理時在用除法去刪分,感覺效果比較好,有好
38、多的東西,只有我們?nèi)ピ囍隽?,才能真正的掌握,只學習理論有些東西是很難理解的,更談不上掌握。</p><p> 從這次的課程設計中,我真真正正的意識到,在以后的學習中,要理論聯(lián)系實際,把我們所學的理論知識用到實際當中,學習單機片機更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設計中的最大收獲。通過這次對數(shù)字溫度計的設計與制作,讓我了解了設計電路的程序,也讓我了解了關于數(shù)字溫度計的原理與設計
39、理念,要設計一個電路總要先用仿真仿真成功之后才實際接線的。但是最后的成品卻不一定與仿真時完全一樣,因為,再實際接線中有著各種各樣的條件制約著。而且,在仿真中無法成功的電路接法,在實際中因為芯片本身的特性而能夠成功。所以,在設計時應考慮兩者的差異,從中找出最適合的設計方法。</p><p> 通過這次學習,讓我對各種電路都有了大概的了解,所以說,坐而言不如立而行,對于這些電路還是應該自己動手實際操作才會有深刻理解
40、。</p><p> 從這次的課程設計中,我真真正正的意識到,在以后的學習中,要理論聯(lián)系實際,把我們所學的理論知識用到實際當中,學習單機片機更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設計中的最大收獲。</p><p><b> 參考文獻:</b></p><p> [2]科技教育創(chuàng)新中國科技信息2010 年第11
41、 期 CHINA SCIENCE AND TECHNOLOGY INFORMATION Jun.2010</p><p><b> 附錄:</b></p><p><b> 程序清單及其注釋:</b></p><p> //使用1602LCD顯示DS18B20轉(zhuǎn)換的溫度值</p><p>
42、#include <reg52.H></p><p> #include <intrins.H></p><p> #include <math.H></p><p> #define uchar unsigned char</p><p> #define uint unsigned int<
43、;/p><p> sbit RS = P2^6; //數(shù)據(jù)/命令選擇端(H/L)</p><p> sbit LCDEN = P2^7; //使能端</p><p> void delayUs() //短延時</p><p><b> {</b></p><p><b
44、> _nop_();</b></p><p><b> }</b></p><p> void delayMs(uint a) //長延時</p><p><b> {</b></p><p> uint i, j;</p><p>
45、for(i = a; i > 0; i--)</p><p> for(j = 100; j > 0; j--);</p><p><b> }</b></p><p> //第一行開始地址為0x80, 第二行開始地址為0xc0;</p><p> //寫命令:RS=0, RW=0;</p>
46、;<p> void writeComm(uchar comm)</p><p><b> {</b></p><p> RS = 0; </p><p> P1 = comm;</p><p> LCDEN = 1;</p><p> delayUs();<
47、/p><p> LCDEN = 0;</p><p> delayMs(1);</p><p><b> }</b></p><p> //寫數(shù)據(jù):RS=1, RW=00</p><p> void writeData(uchar dat)</p><p><b
48、> {</b></p><p><b> RS = 1;</b></p><p><b> P1 = dat;</b></p><p> LCDEN = 1;</p><p> delayUs();</p><p> LCDEN = 0;<
49、/p><p> delayMs(1);</p><p><b> }</b></p><p><b> //初始化函數(shù)</b></p><p> //顯示模式, 固定指令為00111000=0x38, 16*2顯示, 5*7點陣,8位數(shù)據(jù)接口</p><p> //顯示
50、開/關及光標設置00001100=0x0c</p><p> //指令1: 00001DCB : D:開顯示/關顯示(H/L); C:顯示光標/不顯示(H/L), B:光標閃爍/不閃爍(H/L)</p><p> //指令2: 000001NS :</p><p> //N=1, 當讀/寫一個字符后地址指針加1, 且光標也加1; N=0則相反</p>
51、;<p> //S=1, 當寫一個字符, 整屏顯示左移(N=1)或右移(N=0), 但光標不移動; S=0, 整屏不移動</p><p> void init()</p><p><b> {</b></p><p> writeComm(0x38); //顯示模式</p><p> writeC
52、omm(0x0c); //開顯示, 關光標</p><p> writeComm(0x06); //寫字符后地址加1, 光標加1</p><p> writeComm(0x01); //清屏</p><p><b> }</b></p><p> void writeString(uchar * str, uch
53、ar length)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(i = 0; i < length; i++)</p><p><b> {</b></p><p>
54、 writeData(str[i]);</p><p><b> }</b></p><p><b> }</b></p><p> /*****************************DS18B20*******************************/</p><p>
55、 sbit ds = P3^4;</p><p> //初始化DS18B20</p><p> //讓DS18B20一段相對長時間低電平, 然后一段相對非常短時間高電平, 即可啟動</p><p> void dsInit()</p><p><b> {</b></p><p> //
56、對于11.0592MHz時鐘, unsigned int型的i, 作一個i++操作的時間大于為8us</p><p> unsigned int i; </p><p><b> ds = 0;</b></p><p> i = 100; //拉低約800us, 符合協(xié)議要求的480us以上</p><p>
57、 while(i>0) i--;</p><p> ds = 1; //產(chǎn)生一個上升沿, 進入等待應答狀態(tài)</p><p><b> i = 4;</b></p><p> while(i>0) i--;</p><p><b> }</b></p><
58、;p> void dsWait()</p><p><b> {</b></p><p> unsigned int i;</p><p> while(ds); </p><p> while(~ds); //檢測到應答脈沖</p><p><b> i = 4;
59、</b></p><p> while(i > 0) i--;</p><p><b> }</b></p><p> //向DS18B20讀取一位數(shù)據(jù)</p><p> //讀一位, 讓DS18B20一小周期低電平, 然后兩小周期高電平, </p><p> //之后
60、DS18B20則會輸出持續(xù)一段時間的一位數(shù)據(jù)</p><p> bit readBit()</p><p><b> {</b></p><p> unsigned int i;</p><p><b> bit b;</b></p><p><b> d
61、s = 0;</b></p><p> i++; //延時約8us, 符合協(xié)議要求至少保持1us</p><p><b> ds = 1; </b></p><p> i++; i++; //延時約16us, 符合協(xié)議要求的至少延時15us以上</p><p><b> b = ds;
62、</b></p><p><b> i = 8; </b></p><p> while(i>0) i--; //延時約64us, 符合讀時隙不低于60us要求</p><p><b> return b;</b></p><p><b> }</b>
63、;</p><p> //讀取一字節(jié)數(shù)據(jù), 通過調(diào)用readBit()來實現(xiàn)</p><p> unsigned char readByte()</p><p><b> {</b></p><p> unsigned int i;</p><p> unsigned char j, d
64、at;</p><p><b> dat = 0;</b></p><p> for(i=0; i<8; i++)</p><p><b> {</b></p><p> j = readBit();</p><p> //最先讀出的是最低位數(shù)據(jù)</p&
65、gt;<p> dat = (j << 7) | (dat >> 1);</p><p><b> }</b></p><p> return dat;</p><p><b> }</b></p><p> //向DS18B20寫入一字節(jié)數(shù)據(jù)<
66、/p><p> void writeByte(unsigned char dat)</p><p><b> {</b></p><p> unsigned int i;</p><p> unsigned char j;</p><p><b> bit b;</b>
67、</p><p> for(j = 0; j < 8; j++)</p><p><b> {</b></p><p> b = dat & 0x01;</p><p> dat >>= 1;//寫"1", 將DQ拉低15us后, 在15us~60us內(nèi)將DQ拉高,
68、即完成寫1</p><p><b> if(b) </b></p><p><b> {</b></p><p><b> ds = 0;</b></p><p> i++; i++; //拉低約16us, 符號要求15~60us內(nèi)</p><
69、p> ds = 1; </p><p> i = 8; while(i>0) i--; //延時約64us, 符合寫時隙不低于60us要求</p><p><b> }</b></p><p> else //寫"0", 將DQ拉低60us~120us</p><p>&
70、lt;b> {</b></p><p><b> ds = 0;</b></p><p> i = 8; while(i>0) i--; //拉低約64us, 符號要求</p><p><b> ds = 1;</b></p><p> i++; i++; //
71、整個寫0時隙過程已經(jīng)超過60us, 這里就不用像寫1那樣, 再延時64us了</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //向DS18B20發(fā)送溫度轉(zhuǎn)換命令</p>
72、<p> void sendChangeCmd()</p><p><b> {</b></p><p> dsInit(); //初始化DS18B20, 無論什么命令, 首先都要發(fā)起初始化</p><p> dsWait(); //等待DS18B20應答</p><p> delayMs(
73、1); //延時1ms, 因為DS18B20會拉低DQ 60~240us作為應答信號</p><p> writeByte(0xcc); //寫入跳過序列號命令字 Skip Rom</p><p> writeByte(0x44); //寫入溫度轉(zhuǎn)換命令字 Convert T</p><p><b> }</b></p>
74、<p> //向DS18B20發(fā)送讀取數(shù)據(jù)命令</p><p> void sendReadCmd()</p><p><b> {</b></p><p><b> dsInit();</b></p><p><b> dsWait();</b><
75、;/p><p> delayMs(1);</p><p> writeByte(0xcc); //寫入跳過序列號命令字 Skip Rom</p><p> writeByte(0xbe); //寫入讀取數(shù)據(jù)令字 Read Scratchpad</p><p><b> }</b></p><p&g
76、t;<b> //獲取當前溫度值</b></p><p> int getTmpValue()</p><p><b> {</b></p><p> unsigned int tmpvalue;</p><p> int value; //存放溫度數(shù)值</p><p&
77、gt;<b> float t;</b></p><p> unsigned char low, high;</p><p> sendReadCmd();</p><p> //連續(xù)讀取兩個字節(jié)數(shù)據(jù)</p><p> low = readByte(); </p><p> high
78、= readByte();</p><p> //將高低兩個字節(jié)合成一個整形變量</p><p> //計算機中對于負數(shù)是利用補碼來表示的</p><p> //若是負值, 讀取出來的數(shù)值是用補碼表示的, 可直接賦值給int型的value</p><p> tmpvalue = high;</p><p>
79、tmpvalue <<= 8;</p><p> tmpvalue |= low;</p><p> value = tmpvalue;</p><p> //使用DS18B20的默認分辨率12位, 精確度為0.0625度, 即讀回數(shù)據(jù)的最低位代表0.0625度</p><p> t = value * 0.0625;&l
80、t;/p><p> //將它放大10倍, 使顯示時可顯示小數(shù)點后一位, 并對小數(shù)點后第二位進行4舍5入</p><p> //如t=11.0625, 進行計數(shù)后, 得到value = 111, 即11.1 度</p><p> //如t=-11.0625, 進行計數(shù)后, 得到value = -111, 即-11.1 度</p><p>
81、value = t * 10 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0減0.5</p><p> return value;</p><p><b> }</b></p><p> void display(int v) </p><p><b> {&
82、lt;/b></p><p> unsigned char count;</p><p> unsigned char datas[] = {0, 0, 0, 0};</p><p> unsigned int tmp = abs(v);</p><p> datas[0] = tmp / 1000;</p>&l
83、t;p> datas[1] = tmp % 1000 / 100;</p><p> datas[2] = tmp % 100 / 10;</p><p> datas[3] = tmp % 10;</p><p> writeComm(0xc0+3);</p><p><b> if(v < 0)</b
84、></p><p><b> {</b></p><p> writeString("- ", 2);</p><p><b> }</b></p><p><b> else</b></p><p><b>
85、 {</b></p><p> writeString("+ ", 2);</p><p><b> }</b></p><p> if(datas[0] != 0)</p><p><b> {</b></p><p> writ
86、eData('0'+datas[0]);</p><p><b> }</b></p><p> for(count = 1; count != 4; count++)</p><p><b> {</b></p><p> writeData('0'+dat
87、as[count]);</p><p> if(count == 2)</p><p><b> {</b></p><p> writeData('.');</p><p><b> }</b></p><p><b> }</b&
88、gt;</p><p><b> }</b></p><p> /******************************DS18B20*******************************/</p><p> void main()</p><p><b> {</b><
89、/p><p> uchar table[] = "Now Temperature ";</p><p> delayMs(1);</p><p> sendChangeCmd();</p><p><b> init();</b></p><p> writeComm(0
90、x80);</p><p> writeString(table, 16);</p><p><b> while(1)</b></p><p><b> {</b></p><p> delayMs(1000); //溫度轉(zhuǎn)換時間需要750ms以上</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設計數(shù)字溫度計
- 單片機課程設計數(shù)字溫度計
- 數(shù)字溫度計課程設計---基于51單片機數(shù)字溫度計設計
- 溫度計課程設計---基于51單片機數(shù)字溫度計設計
- 數(shù)字溫度計課程設計---基于51單片機數(shù)字溫度計設計
- 基于51單片機數(shù)字溫度計設計報告課程設計
- 單片機課程設計報告--數(shù)字溫度計
- 單片機課程設計報告數(shù)字溫度計
- 單片機課程設計報告--數(shù)字溫度計
- 基于51單片機的數(shù)字溫度計課程設計
- 單片機課程設計--數(shù)字溫度計
- 單片機課程設計--數(shù)字溫度計
- 單片機課程設計-數(shù)字溫度計
- 單片機課程設計—數(shù)字溫度計
- 單片機課程設計報告---數(shù)字溫度計設計
- 單片機數(shù)字溫度計課程設計
- 單片機課程設計---數(shù)字溫度計
- 單片機課程設計-數(shù)字溫度計
- 單片機課程設計—數(shù)字溫度計
- 單片機課程設計——數(shù)字溫度計
評論
0/150
提交評論