2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩32頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《單片機原理及應用》課程設計</p><p>  八路溫度巡回檢測系統</p><p>  摘要:本文介紹一種采用STC公司的STC89C52RC 單片機控制DS18B20數字溫度傳感器采集溫度,最后在共陰極的LED燈上實時顯示溫度值的溫度檢測系統(由于實驗及成本原因本文只做一路傳輸系統)。該系統從實際應用工程出發, 主要對硬件電路設計、電子元件選擇、系統應用軟件設計

2、等方面進行具體探討和研究。系統具有性能穩定可靠、功耗低、成本低、測量準確、傳輸距離遠、維護簡單等優點,系統設計在實際工作中具有一定的借鑒意義。</p><p>  關鍵詞: 溫度檢測; STC89C52RC; DS18B20 </p><p><b>  目 錄</b></p><p>  第一節 引 言3</p>&

3、lt;p>  1.1系統原理及基本框圖3</p><p><b>  1.2設計任務3</b></p><p>  第二節 硬件設計介紹4</p><p>  2.1 STC89C52RC4</p><p>  2.2 DS18B206</p><p>  2.3 三極管9012

4、8</p><p>  2.4 共陰極數碼管8</p><p>  2.5 硬件部分電路圖9</p><p>  第三節 軟件設計介紹14</p><p>  3.1 程序流程圖和實際圖14</p><p><b>  3.2調試18</b></p><p>  

5、第四節 個人心得體會21</p><p><b>  參考文獻24</b></p><p><b>  附錄25</b></p><p><b>  附1:電路圖</b></p><p><b>  附2:元件清單</b></p>&

6、lt;p><b>  附3:程序</b></p><p><b>  引言</b></p><p>  隨著計算機技術和傳感器技術的飛速發展, 在科研、生產和日?;顒又?, 人們對溫度、壓力、流量等模擬物理量的測量要求越來越高。而這些物量中溫度的應用是最為廣泛的。如何將溫度通過傳感器變成電信號, 再經過處理轉換成計算機能夠識別的數字量, 輸入

7、到計算機中, 由計算機將采集到的數字量進行不同的處理, 然后在顯示器顯示出來,并進行實時監控。這已經為當前計算機測量與控制領域的一個重要研究方向。鑒于此, 本文提出一種基于89C52和DS18B20的低成本、遠距離傳輸的溫度檢測系統設計方案。</p><p>  1.1系統原理及基本框圖</p><p>  如圖1.1所示,為系統的基本框圖。</p><p>  該

8、系統由六部分組成:STC89C52RC核心單片機,溫度采集電路,LED顯示電路,報警警電路,復位電路,晶振等,其中溫度采集主要由DS18B20組成,在短時間內把熱力學溫度信號數字,送入單片機,由單片機控制顯示電路顯示,并且判斷是否達到設定溫度,若達到設定溫度,由單片機啟動報警電路,報警。</p><p><b>  1.2 設計任務</b></p><p>  利用單

9、片機與AD轉換器設計一個八路溫度巡回檢測系統,對某糧庫或冷凍廠八點(八個冷凍室或八個糧倉)進行溫度巡回檢測。能夠測量-30~+50oC的溫度范圍,檢測精度要求不大于±1oC。采用數碼管顯示測量值;</p><p>  單片機和AD轉換器型號自選(如單片機可選AT89S51或AT89C51等;AD轉換器可選ADC0809或ADC0804等)。(本文均基于一路溫度檢測系統設計)。</p>&l

10、t;p>  第二節 硬件設計介紹</p><p>  2.1 STC89C52RC</p><p>  2.1.2 STC89C52RC介紹</p><p>  單片機自問世以來,以其極高的性價比受到人們的重視和關注,應用很廣,發展很快。單片機的體積小,重量輕,抗干擾能力強,環境要求不高,價格低,可靠性強,靈活性好,開發較為容易?;谝陨系膬烖c,單片機已經廣泛

11、的應用在工業自動化控制,自動檢測,智能儀器儀表,機電一體化等各個方面,所以本系統采用單片機做為控制器。單片機中51/52系列最具有代表性。</p><p>  本設計核心采用了STC89C52RC單片機。STC89C51/52單片機系列是在MCS—51/52系列的基礎上發展起來的,STC89C52RC 完全兼容MCS-51 系列單片機的所有功能,并且本身帶有2K 的內存儲器,可以在編程器上實現閃爍式的電擦寫達幾萬

12、次以上,比以往慣用的8031CPU 外加EPROM為核心的單片機系統在硬件上具有更加簡單方便等優點,其外形如圖2.1所示。</p><p>  圖2.1 STC89C52RC芯片</p><p>  2.1.3 STC89C52引腳介紹</p><p>  STC89C52RC的引腳圖如圖2.2所示. </p><p>  圖2.2 ST

13、C89C52引腳圖</p><p>  單片機的引腳功能說明:</p><p><b> ?、匐娫匆_</b></p><p>  VCC(40 腳):電源端,工作電壓為5V。</p><p>  GND(20腳): 接地端。</p><p> ?、跁r鐘電路引腳XTAL1(19 腳)和XTAL2(

14、18 腳)</p><p> ?、蹚臀?RST(9 腳)</p><p> ?、?輸入輸出(I/O)引腳</p><p>  P0.0-P0.7(39腳-32腳):輸入輸出腳,稱為P0 口,是一個8 位漏極開路型雙向I/O 口,內部不帶上拉電阻。</p><p>  P1.0-P1.7(1腳 - 8腳):輸入輸出腳,稱為P1 口,是一個帶內部

15、上拉電阻</p><p>  的8 位雙向I/0 口。</p><p>  P2.0-P2.7(21腳—28腳): 輸入輸出腳,稱為P2 口,是一個帶內部上拉電</p><p>  阻的8 位雙向I/O 口,</p><p>  P3.0-P3.7 (10腳—17腳):輸入輸出腳,稱為P3 口,是一個帶內部上拉電</p><

16、;p>  阻的8 位雙向I/O 口。P3 端口具有復用功能。</p><p>  表2.1 P3口端口引腳與復用功能表</p><p>  2.2 DS18B20 </p><p>  2.2.1 DS18B20性能</p><p>  DS18B20是Dallas公司推出的單線集成數字溫度采集系統,與傳統的熱敏電阻等測溫元件相比,

17、它能直接讀出被測溫度,并且可根據實際要求通過簡單的編程實現9~12位的數字值讀數方式。其實物如圖2.3所示。</p><p>  圖2.3 DS18B20</p><p>  DS18b20內部主要有三個數字部件:64位激光ROM、溫度傳感器、非易失性溫度報警觸發器TH和TL。</p><p>  DS18B20 的性能特點如下:</p><p&

18、gt;  ●獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊;</p><p>  ●多個DS18B20可以并聯在唯一的三線上,實現多點組網功能;</p><p><b>  ●無需外部器件;</b></p><p>  ●可通過數據線供電,電壓范圍:3.0~5.5V;</p&g

19、t;<p>  ●測溫范圍-55℃~+125℃,在-10~+85℃時精度為±0.5℃</p><p><b>  ●零待機功耗</b></p><p>  ●溫度以9或12位數字量讀出;</p><p>  ●用戶可定義的非易失性溫度報警設置;</p><p>  ●具有非易失性上、下限報警設定的

20、功能,用戶可方便地通過編程修改上、下限的數值;</p><p>  ●負電壓特性,電源極性接反時,溫度計不會因發熱而燒毀,但不能正常工作;</p><p>  ●適用于DN15~25, DN40~DN250各種介質工業管道和狹小空間設備測溫。8PVC電纜直接出線或德式球型接線盒出線,便于與其它電器設備連接。</p><p>  ●數字量的轉換精度及轉換時間可通過簡單

21、的編程來控制:9位精度的轉換時間為93.75 ms:10位精度的轉換時間187.5ms:12位精度的轉換時間750ms。</p><p>  2.2.2 DS18B20引腳圖</p><p>  本文用的DS18B20的常用封裝為3腳,如圖2.4所示。:</p><p>  圖2.4 DS18B20引腳圖</p><p>  各腳功能描述如下

22、: </p><p>  DQ:數字信號輸入/輸出端。</p><p><b>  GND:電源地端。</b></p><p>  VDD:外接供電電源輸入端(在寄生電源接線時此腳應接地)。</p><p>  2.3 三極管9012</p><p>  三極管的工作原理 三極管是一種控

23、制元件,主要用來控制電流的大小,以共發射極接法為例(信號從基極輸入,從集電極輸出,發射極接地),當基極電壓UB有一個微小的變化時,基極電流IB也會隨之有一小的變化,受基極電流IB的控制,集電極電流IC會有一個很大的變化,基極電流IB越大,集電極電流IC也越大,反之,基極電流越小,集電極電流也越小,即基極電流控制集電極電流的變化。但是集電極電流的變化比基極電流的變化大得多,這就是三極管的放大作用。IC 的變化量與IB變化量之比叫做三極管的

24、放大倍數β(β=ΔIC/ΔIB, Δ表示變化量。),三極管的放大倍數β一般在幾十到幾百倍。 三極管在放大信號時,首先要進入導通狀態,即要先建立合適的靜態工作點,也叫建立偏置,否則會放大失真。</p><p>  9012是一種最常用的普通三極管。它是一種低電壓,大電流,小信號的PNP型硅三極管:</p><p>  集電極電流Ic:Max -500mA </p><p

25、>  集電極-基極電壓Vcbo: -40V </p><p>  工作溫度:-55℃ to +150℃ </p><p>  和9013(NPN)相對 </p><p><b>  主要用途: </b></p><p><b>  開關應用 </b></p><p>&

26、lt;b>  射頻放大</b></p><p>  2.4 共陰極數碼管</p><p>  數碼管由8個發光二極管(以下簡稱字段)構成,通過不同的組合可用來顯示數字0 9、字符A F、H、L、P、R、 U、Y、符號“”及小數點“”。數碼管的外形結構如下圖2.5所示。數碼管又分為共陰極和共陽極兩種結構。</p><p>  圖2.5 共陰極四

27、位一體數碼管</p><p>  共陰極數碼管的8個發光二極管的陰極(二極管負端)連接在一起。通常,公共陰極接低電平(一般接地),其它管腳接段驅動電路輸出端。當某段驅動電路的輸出端為高電平時,則該端所連接的字段導通并點亮,根據發光字段的不同組合可顯示出各種數字或字符。此時,要求段驅動電路能提供額定的段導通電流,還需根據外接電源及額定段導通電流來確定相應的限流電阻。</p><p>  使用

28、時,既可以用半導體三極管驅動,也可以直接用TTL與非門驅動。需要加限流電阻。數碼管的工作電壓一般為1.5至3伏,工作電流只需幾到十幾毫安。且壽命長,響應速度快。</p><p>  2.5 硬件部分電路圖</p><p><b>  2.5.1復位電路</b></p><p>  在振蕩器運行時,有兩個機器周期(24 個振蕩周期)以上的高電平出

29、現在此引腳時,將使單片機復位,只要這個腳保持高電平,52 芯片便循環復位。復位后P0-P3 口均置1 引腳表現為高電平,程序計數器和特殊功能寄存器SFR 全部清零。當復位腳由高電平變為低電平時,芯片為ROM 的0000H 處開始運行程序。該芯片的復位腳為9腳,所以復位電路接STC89C52RC的9腳,具體電路如下圖2.6所示。當采用的晶體頻率是6 MHZ時,可取C=22UF,R=1K;當采用的晶體頻率為12MHZ時,可取C=10UF,R

30、=8.2K。不過這都是最佳的組合,也可以有其它大小的電容電阻,只要符合電路要求就可以,如本文就采用22UF的電容和10K的電阻,經試驗也滿足要求。</p><p><b>  圖2.6 復位電路</b></p><p><b>  2.5.2 晶振</b></p><p>  為了產生時鐘信號,在8052 內部設置了一個反

31、相放大器,XTAL1 是片內振蕩器反相放大器的輸入端,XTAL2 是片內振蕩器反相放大器的輸出端,也是內部時鐘發生器的輸入端。當使用自激振蕩方式時,XTAL1 和XTAL2 外接石英晶振,使內部振蕩器按照石英晶振的頻率振蕩,就產生時鐘信號。晶振一般使用石英晶體,其頻率由系統需要和器件決定,在頻率穩定度要求不高時也可以使用陶瓷濾波器。使用石英晶體時C1、C2為C1=C2=30(±10)pF,使用陶瓷濾波器時,C1=C2=40(&

32、#177;10)pF。本系統用12MHZ的石英晶振,接STC89C52RC的18和19腳,具體電路如圖2.7所示。</p><p>  圖2.7 時鐘信號電路(晶振)</p><p>  2.5.3 一路傳輸電路</p><p>  在傳統的模擬信號遠距離溫度測量系統中,需要很好的解決引線誤差補償問題、多點測量切換誤差問題和放大電路零點漂移誤差問題等技術問題,才能

33、夠達到較高的測量精度。另外一般監控現場的電磁環境都非常惡劣,各種干擾信號較強,模擬溫度信號容易受到干擾而產生測量誤差,影響測量精度。因此,在溫度測量系統中,本文采用抗干擾能力強的新型數字溫度傳感器是解決這些問題的最有效方案,新型數字溫度傳感器DS18B20具有體積更小、精度更高、適用電壓更寬、采用一線總線、可組網等優點,在實際應用中取得了良好的測溫效果。</p><p>  DS18B20有三個引腳。VDD管腳接

34、 5V電壓給傳感器供電。DQ管腳為數據線 ,與STC89C51RC的 P1.0連接的同時,還要接一個 4.7K的上拉電阻,并接到 5V的電源上,使數據線在空閑狀態下能自動上拉為高電平。GND管腳接地。具體電路如圖2.8所示。之所以接P1口,是因為P1口的驅動力最強,完全可以驅DS18B20的正常運行。</p><p>  圖2.8 一路傳輸電路</p><p>  2.5.4 LED顯示電

35、路</p><p>  顯示電路采用靜態顯示,4位LED數碼管。所謂靜態顯示,就是每一個顯示器都要占用單獨的具有鎖存功能的I/O接口用于比劃段字形代碼。這樣單片機只要把顯示的字形代碼發送到接口電路,就不用管它了,直到要顯示顯示新的數據時,再發送心的字形碼,因此,使用這種方法,單片機中的CPU的開銷小。本文的顯示電路如圖2.9所示。其中P0口作為7斷碼和小數點的選擇,P2口作為位碼的選擇,在斷碼和P0口之間還需加上

36、1K的上拉電阻,以保證LED燈的正常顯示。</p><p><b>  . </b></p><p>  圖2.9 LED顯示電路</p><p>  2.5.5 報警電路</p><p>  本文中當某一通道的溫度測量值超出預先設定的上、下限報警值或系統運行出現故障時, 系統發出聲光報警以提醒用戶注意。報警電路中光報警

37、采用發光二極管, 聲報警采用蜂鳴器來設計,蜂鳴器電路中, 9012晶體管起開關作用, P2.6輸出低電平時, 管腳輸出電壓經過lK限流電阻分壓后, 到達9012基極的電壓為使得晶體管發射結正偏,集電結反偏, 晶體管導通, 蜂鳴器上電而產生聲響。發光二極管電路中, 主要是限流電阻的設計,由于發光二極管工作電流是3 mA-30 mA, 導通壓降為1.8 V; 而單片機工作在5 V電壓時, I/O口輸出低電平的最大灌入電流是16 mA, 輸出

38、的低電平是Vss+0.6 V 這樣在限流電阻上的壓降就是5-1.8-0.6=2.6 V, 而電流要限定在8 mA左右, 所以電阻阻值為2.6 V/8 mA=325歐姆, 在實際電路中選用330歐姆的電阻即能滿足要求。具體電路如圖2.10所示。</p><p>  圖2.10 報警電路</p><p>  2.5.6下載程序電路</p><p>  本文中將PC機上的

39、程序拷貝到單片機中是通過如圖2.11所示的,連接單片機的10和11腳串行接口到插件上,再和PC機之間進行通訊。</p><p><b>  .</b></p><p>  圖2.11 下載程序電路</p><p>  2.5.7 完整電路</p><p>  圖2.12 完整電路</p><p>

40、  第三節 軟件設計介紹</p><p>  3.1 程序流程圖和實物圖</p><p>  系統程序主要包括主程序,讀出溫度子程序,溫度轉換命了子程序,計算溫度子程序,顯示刷新溫度子程序等。</p><p><b>  3.1.1 主程序</b></p><p>  主程序的主要功能是負責溫度的實時顯示、讀出并處理D

41、S18B20的測量的當前溫度值。溫度測量每1S進行一次,這樣可以在1S 之內測量一次被測溫度,其程序流程見圖3.1所示。</p><p>  圖3.1 系統主程序流程</p><p>  3.1.2 顯示電路框圖</p><p>  顯示數據刷新子程序主要是對顯示緩沖器中的顯示數據進行刷新操作,當最高位顯示為0時將符號顯示位移入下一位。程序流程圖如圖3.2所示。&l

42、t;/p><p>  圖3.2 顯示電路框圖</p><p>  3.1.3 讀出溫度子程序</p><p>  溫度轉換命令子程序主要是發溫度轉換開始命令,當采用12位分辨率時轉換時間約為750ms,在本程序設計中采用1S顯示程序延時法等待轉換的完成。溫度轉換命令子程序流程圖如圖3.3所示。</p><p>  圖3.3 溫度轉換流程圖<

43、/p><p>  3.1.4 計算溫度子程序</p><p>  計算溫度子程序將RAM中讀取值進行BCD碼的轉換運算,并進行溫度值正負的判定,其程序流程圖如圖3.4所示。</p><p>  圖3.4 計算溫度流程圖</p><p><b>  3.2 調試</b></p><p>  3.2.1

44、硬件調試</p><p>  硬件調試是利用開發系統、基本測試儀器(萬用表、顯示器)等,檢查系統硬件中存在的故障。</p><p>  靜態調試 靜態調試是在系統未工作時的一種調試。步驟如下:</p><p>  第一步:目測。檢查外部的各種原器件或者是電路是否有斷點。</p><p>  第二步:用萬用表檢測。先用萬用表復核目測中有疑問的連

45、接點,在檢測各種電源線與接地線之間是否有短路現象。</p><p>  第三步:加電檢測。給電路板加電,檢測所有的插座或者是硬件的電源是否符合要求的值。</p><p>  第四步:聯機檢查。因為只有單片機開發系統才能完成對用戶系統的調試。</p><p>  動態調試 動態調試是在用戶系統工作的情況下發現和排除系統硬件中存在的器件內部故障、器件連接邏輯錯誤等的一

46、種硬件檢查,動態調試的一般方法是由近及遠、由分到合。</p><p>  由近及遠 是將信號流經的各器件按照距離單片機的邏輯距離進行由近及遠的分層,然后分層調試。調試時,仞采用去掉無關元件的方法,逐層調試下去,就會定位故障元件了。</p><p>  由分到合 是指首先按照邏輯功能將系統硬件電路分為若干塊,當調試電路時,與該元件無關的器件全部從系統中去掉,這樣可以將故障范圍限定在某個局部的

47、電路上。當各塊電路無故障后,將各電路逐塊加入系統中,再對各塊電路功能及各電路之間可能存在的相互聯系進行調試,</p><p>  3.2.2 軟件調試</p><p>  軟件調試是通過對程序的匯編(或者C語言)、連接、執行來發現程序中存在的語法錯誤與邏輯錯誤并加以排除糾正的過程,查看程序是否有邏輯的錯誤。</p><p>  在對硬件調試后再對軟件進行,因為先對硬

48、件檢查沒問題的情況下再對軟件進行調試,編譯軟件可以通過編譯去檢查程序上的語法錯誤,然后可以在它的基礎上在對它進行一些修改達到沒有錯誤為止,然后將軟件拿到硬件上去運行。</p><p>  通過仿真后,如無誤,方可將程序灌輸如單片機中。</p><p><b>  3.2.3 實物</b></p><p>  圖3.5 調試前電路板</p&

49、gt;<p>  圖3.6 調試時電路板</p><p>  圖3.7 調試后溫度顯示</p><p>  第五節 個人心得體會</p><p>  做本課程設計,讓我清楚的了解了電子設計大體分三個階段:設計與計算階段(預設計階段)、安裝與調試階段、撰寫總結報告階段。</p><p>  在拿到一個課題時首先要做的事就是對課題

50、的任務,要求和條件進行仔細的分析和研究,找出關鍵問題,根據關鍵問題提出實現的原理和方法,并畫出原理框圖。</p><p>  提出原理方案是一個關系到設計全局的問題,應廣泛收集與查閱有關資料,廣開思路,利用已有的各種理論知識,提出盡可能多的方案,以便作出更合理的選擇。所提出的方案中,對關鍵部分的可行性,一般應通過試驗加以確認。根據整個課題的技術要求,明確該功能框對單元電路的技術要求,必要時應詳細擬定單元電路的性能

51、指標,然后進行單元電路結構形式的選擇或設計,但滿足功能框圖要求的單元電路可能不止一個,因此必須進行分析比較,擇優選擇。就如我們這個課題當初我就提出了三種方案,最后基于簡單,可實行選擇了如今這種方案。</p><p>  然后是元器件的選擇,元器件的品種規格繁多,性能、價格和體積各異,選擇器件需進行分析比較。首先考慮滿足單元電路對元器件性能指標的要求,其次考慮價格、貨源和元器件體積等,最好是使用實驗室已有的元器件。

52、</p><p>  元器件選好了就是參數的計算了,值得指出的是,滿足性能指標要求的參數值通常不是唯一的,這就要求對各組參數進行綜合性的分析,仔細考慮元器件之間的參數配合、元器件價格、體積和貨源等因素,恰當地選取一組適合的參數。</p><p>  在各單元電路確定后,還要認真考慮它們之間的級聯問題,如:電氣特性的相互匹配、信號耦合方式、時序配合,以及相互干擾等問題,保證整個電路能正常工作

53、。</p><p>  這些都做好后,總體實驗電路就出來了,接下來的事情就是焊接工作,實施焊接的主要工具是電烙鐵,其次還有松香、焊錫、吸水棉、連接線等,焊接的主要步驟為準備施焊——加熱被焊件——加焊錫絲——移開焊錫絲——移開電烙鐵。在焊接電路時一定做到認真仔細、一絲不茍。注意連線正確,焊接規范,盡量做到整齊美觀并保證接觸良好;集成塊插牢并注意方向;電源和地線不要短路,以避免人為故障。</p><

54、;p>  最后就是對電路進行調試。一個組裝好的電子電路不可能不經調試即可滿足設計要求。調試中出現的各種現象和問題,需要我們提出解決的辦法。只有這樣,才能順利做好調試工作,才能通過此次設計得到實際訓練。在調試當中一般常見故障源為:接觸不良(特別是當電源線接觸不良時可能工作不穩定)、焊接錯誤(錯焊、漏焊或虛焊)、接線錯誤(錯接、漏接或短路)、器件本身損壞(需單獨測試其功能方能確定確實損壞)、集成塊插錯位置或方向插反、多余控制輸入端未正

55、確處理(一般若懸空會有較大干擾,應接固定電平)、設計上有缺陷(出現預先估計不到的現象,這就需要改變某些元件的參數或更換元器件,甚至需要修改方案)。在此次設計當中,由于電路設計和焊接工作都非常仔細認真的完成,所以在調試當中幾乎很少出現電路的問題,因此本設計才順利的完成了。</p><p>  我通過實踐課的綜合練習,課程設計的實際操作,將課堂理論學習貫穿其中,全面系統的把單片機課程的知識聯系在一起,做到融會貫通,使

56、我真正感受到理論應用于實踐的樂趣。這次設計是一次鍛煉的好機會,使我在學習和鞏固新、老知識的同時,訓練了自己綜合運用知識的能力、分析解決新問題的能力,同時也提高了自己工程實踐能力;在設計的過程中,我與同學一同學習、一同討論,大家集思廣益,發揚了團隊協作精神。在課程設計過程中,我發現了自己的不足,今后應加強學習,并且加強理論與實踐的相結合,把所學的知識應用于實際當中。</p><p><b>  參考文獻&

57、lt;/b></p><p>  [1] 李朝青.《單片機原理及接口技術(第3版)》[M].北京:航空航天大學出版社,2005</p><p>  [2] 陳世和.《電工電子實習教程》[M]. 北京:航空航天大學出版社,2007</p><p>  [3] 孫進生等.《電子產品設計實例教程》[M]. 北京:冶金工業出版社,2004</p><

58、;p>  [4] 張偉等.《Protel 99SE實用教程 》[M].北京:人民電郵出版社,2008</p><p>  [5] 白瑞青,金功偉.《單片機溫度巡回監測系統》[J].測試技術學報,98年第12卷第3期</p><p>  [6] 李紅剛,方佳,王強,錢雙艷.《基于At89C51的八路溫度巡回檢測系統設計》[J].熱帶農業工程,2010年第34卷第1期</p>

59、<p><b>  附錄</b></p><p><b>  附1</b></p><p><b>  表1 元件清單</b></p><p>  注:封裝都為標準封裝</p><p><b>  附2</b></p><

60、p>  圖1 一路傳輸溫度測量系統完整電路圖</p><p><b>  附3</b></p><p><b>  源程序</b></p><p>  #include "reg52.h"</p><p>  #include "intrins.h"

61、 //_nop_();延時函數用</p><p>  #define Disdata P0 //段碼輸出口</p><p>  #define discan P2 //掃描口</p><p>  #d

62、efine uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit DQ=P1^0; //溫度輸入口</p><p>  sbit DIN=P0^7;

63、 //LED小數點控制</p><p>  uint h; </p><p>  uint temp;</p><p>  //**************溫度小數部分用查表法***********//</p><p>  uchar code ditab[16]=</p><p>  {0x0

64、0,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};</p><p><b>  //</b></p><p>  uchar code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xf

65、f,0xbf};</p><p>  uchar code scan_con[4]={0xFE,0xFD,0xFB,0xF7}; //列掃描控制字</p><p>  uchar data temp_data[2]={0x00,0x00}; //讀出溫度暫放</p><p>  uchar data display[5]={0x00,0

66、x00,0x00,0x00,0x00}; //顯示單元數據,共4個數據和一個運算暫用</p><p>  /*****************11us延時函數*************************/</p><p>  void delay(uint t)</p><p><b>  {</b></p><

67、;p>  for (;t>0;t--);</p><p><b>  }</b></p><p>  /****************顯示掃描函數***************************/</p><p><b>  scan()</b></p><p><b>

68、;  {</b></p><p><b>  char k;</b></p><p>  for(k=0;k<4;k++) //4位LED掃描控制</p><p><b>  {</b></p><p>  Disdata=0XFF-dis_

69、7[display[k]]; //數據顯示</p><p>  if (k==1){DIN=1;} //小數點顯示</p><p>  discan=scan_con[k]; //位選</p><p>  delay(300);</p><p><b&

70、gt;  }</b></p><p><b>  }</b></p><p>  /****************DS18B20復位函數************************/</p><p>  ow_reset(void)</p><p><b>  {</b></

71、p><p>  char presence=1;</p><p>  while(presence)</p><p><b>  {</b></p><p>  while(presence)</p><p><b>  {</b></p><p>  D

72、Q=1;_nop_();_nop_();//從高拉倒低</p><p>  DQ=0; </p><p>  delay(50); //550 us</p><p>  DQ=1; </p

73、><p>  delay(6); //66 us</p><p>  presence=DQ; //presence=0 復位成功,繼續下一步</p><p><b>  } </b></p><p>  delay(45); //延時500 us</p>

74、;<p>  presence=~DQ; </p><p><b>  }</b></p><p>  DQ=1; //拉高電平</p><p><b>  }</b></p><p>  /****************DS18B

75、20寫命令函數************************/</p><p>  //向1-WIRE 總線上寫1個字節</p><p>  void write_byte(uchar val)</p><p><b>  { </b></p><p><b>  uchar i;</b><

76、/p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ=1;_nop_();_nop_(); //從高拉倒低</p><p>  DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us&l

77、t;/p><p>  DQ=val&0x01; //最低位移出</p><p>  delay(6); //66 us</p><p>  val=val/2; //右移1位</p>

78、<p><b>  }</b></p><p><b>  DQ=1;</b></p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  /****************DS18B20讀

79、1字節函數************************/</p><p>  //從總線上取1個字節</p><p>  uchar read_byte(void)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p&g

80、t;  uchar value=0;</p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ=1;_nop_();_nop_();</p><p>  value>>=1;</p><p>  DQ=0;_nop_(

81、);_nop_();_nop_();_nop_(); //4 us</p><p>  DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us</p><p>  if(DQ)value|=0x80;</p><p>  delay(6);

82、 //66 us</p><p><b>  }</b></p><p><b>  DQ=1;</b></p><p>  return(value);</p><p><b>  }</b></p><p><b>  //<

83、;/b></p><p>  /****************讀出溫度函數************************/</p><p><b>  //</b></p><p>  read_temp()</p><p><b>  {</b></p><p>

84、  ow_reset(); //總線復位</p><p>  delay(200);</p><p>  write_byte(0xcc); //發命令</p><p>  write_byte(0x44); //發轉換命令</p><p>  ow_reset()

85、; </p><p><b>  delay(1);</b></p><p>  write_byte(0xcc); //發命令</p><p>  write_byte(0xbe);</p><p>  temp_data[0]=read_byte(); //讀溫度值的低字節</p&g

86、t;<p>  temp_data[1]=read_byte(); //讀溫度值的高字節</p><p>  temp=temp_data[1];</p><p>  temp<<=8; </p><p>  temp=temp|temp_da

87、ta[0]; // 兩字節合成一個整型變量。</p><p>  return temp; //返回溫度值</p><p><b>  }</b></p><p><b>  //</b></p><p>  /****************溫度數據處理函

88、數************************/</p><p>  //二進制高字節的低半字節和低字節的高半字節組成一字節,這個</p><p>  //字節的二進制轉換為十進制后,就是溫度值的百、十、個位值,而剩</p><p>  //下的低字節的低半字節轉化成十進制后,就是溫度值的小數部分</p><p>  /*********

89、***********************************************/</p><p>  work_temp(uint tem)</p><p><b>  {</b></p><p>  uchar n=0;</p><p>  if(tem>6348)

90、 // 溫度值正負判斷</p><p>  {tem=65536-tem;n=1;} // 負溫度求補碼,標志位置1</p><p>  display[4]=tem&0x0f; // 取小數部分的值</p><p>  display[0]=ditab[display[4]]; // 存入小數部分顯

91、示值</p><p>  display[4]=tem>>4; // 取中間八位,即整數部分的值</p><p>  display[3]=display[4]/100; // 取百位數據暫存</p><p>  display[1]=display[4]%100; // 取后兩位數據暫存</p>&

92、lt;p>  display[2]=display[1]/10; // 取十位數據暫存</p><p>  display[1]=display[1]%10; </p><p>  /******************符號位顯示判斷**************************/</p><p>  if(!display[3]) <

93、/p><p><b>  {</b></p><p>  display[3]=0x0a; //最高位為0時不顯示</p><p>  if(!display[2])</p><p><b>  {</b></p><p>  display[2]=0x0a;

94、 //次高位為0時不顯示</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(n){display[3]=0x0b;} //負溫度時最高位顯示"-"</p><p><b>  }</b

95、></p><p>  /****************主函數************************/</p><p><b>  main()</b></p><p><b>  {</b></p><p>  Disdata=0xff; //初始

96、化端口</p><p>  discan=0xff;</p><p>  for(h=0;h<4;h++) //開機顯示"0000"</p><p>  {display[h]=0;} </p><p>  ow_reset(); //開機先轉換一次<

97、;/p><p>  write_byte(0xcc); //Skip ROM</p><p>  write_byte(0x44); //發轉換命令</p><p>  for(h=0;h<100;h++) //開機顯示"0000"</p><p>&

98、lt;b>  {scan();}</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  work_temp(read_temp()); //處理溫度數據</p><p>  scan();

溫馨提示

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

評論

0/150

提交評論