基于單片機的數字溫度計設計 畢業(yè)設計_第1頁
已閱讀1頁,還剩48頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢業(yè)設計論文</b></p><p>  設計題目: 基于單片機的數字溫度計設計 </p><p>  專 業(yè): 應用電子技術 </p><p>  班 級: 應電08-3 </p><p>  學

2、 號: </p><p>  姓 名: </p><p>  指導教師: </p><p><b>  二0一0年七月十日</b></p><p>  畢業(yè)設計(論文)任務書&

3、lt;/p><p><b>  目 錄</b></p><p><b>  摘 要1</b></p><p><b>  第1章 緒論2</b></p><p>  第2章 系統(tǒng)方案論證與比較3</p><p>  2.1 方案比較3</p

4、><p>  2.2 方案論證4</p><p>  第3章 硬件設計6</p><p>  3.1主控芯片介紹6</p><p>  3.2 復位電路8</p><p>  3.3 時鐘電路9</p><p>  3.4 矩陣電路10</p><p>  3.5

5、 顯示電路11</p><p>  3.6 測溫電路13</p><p>  3.6.1 DS18B20單線數字溫度傳感器13</p><p>  3.6.2 DS18B20工作原理13</p><p>  3.6.3 DS18B20的性能特點14</p><p>  3.6.4 DS18B20內部結構1

6、4</p><p>  3.7 整機工作原理16</p><p>  第4章 軟件設計17</p><p>  第5章 仿真與調試29</p><p>  5.1 仿真與調試29</p><p>  5.2 調試與運行29</p><p><b>  結 論30</b

7、></p><p><b>  參考文獻31</b></p><p>  附錄1 源程序32</p><p>  附錄2元器件名細表45</p><p>  附錄3仿真電路圖46 </p><p><b>  摘 要</b></p><p&

8、gt;  溫度的檢測與控制是工業(yè)生產過程中比較典型的應用之一,隨著傳感器在生產和生活中的更加廣泛的應用,利用新型單總線式數字溫度傳感器實現對溫度的測試與控制得到更快的開發(fā)。在這里介紹了一種基于DS18B20和AT89C52單片機的溫度測量及控制系統(tǒng)的硬件結構以及C語言程序設計,該系統(tǒng)設計和布線簡單,結構緊湊,體積小,重量輕,抗干擾能力強,性價比高,擴展方便,在大型倉庫,工廠,智能化建筑等領域的多點溫度檢測中有廣闊的應用前景。</p

9、><p>  關鍵詞 DS18B20;AT89C52;溫度測量;控制</p><p><b>  第1章 緒論</b></p><p>  隨著人們生活水平的不斷提高,單片機控制無疑是人們追求的目標之一,它所給人帶來的方便也是不可否定的。溫度測控技術也在各個領域應用越來越廣泛,同時溫度測量也被人們異常關注,一時間涌現出大量各式各樣的測試溫度儀器,這

10、些儀器的原理到底是怎樣的呢?說到底也是所以溫度測控的范疇,其中數字溫度計就是一個典型的例子,但人們對它的要求越來越高,要為現代人工作、科研、學習、生活提供更好的更方便的設施就需要從數字單片機技術入手,一切想著數字化,智能化控制方向發(fā)展。</p><p>  本設計所介紹的數字溫度計與傳統(tǒng)數字溫度計相比,具有讀數方便,測溫范圍廣,測量準確,其輸出采用數字顯示,主要用于對測溫比較準確的地方,或科研實驗室使用,測溫傳感

11、器使用DS18B20,用LCD實現溫度顯示。</p><p>  第2章 系統(tǒng)方案論證與比較</p><p><b>  2.1 方案比較</b></p><p><b>  方案一:</b></p><p>  采用熱電偶溫差電路測溫,溫度檢測部分可以采用低溫熱偶,熱電偶由兩個焊接在一起的異金屬導

12、線組成(熱電偶的組成如圖2-1),熱電偶產生的熱電勢由兩種金屬的接觸電勢和單一導體的溫差電勢組成。通過將參考結點保持在已知溫度并測量該電壓,便可以推測出檢測結點的溫度。數據采集部分則使用帶有A/D通道的單片機,在將隨被溫度變化的電壓或電流采集過來,進行A/D轉換后,就可以用單片機進行數據處理了,在顯示電路上就可以將北側溫度顯示出來。熱電偶的優(yōu)點是工作溫度寬,且體積小,但是也存在輸出電壓小,容易遭受來自導線環(huán)路噪音的影響以及漂移較高的缺點

13、并且這種電路需要用到A/D轉換電路,感溫電路比較麻煩。</p><p><b>  方案二:</b></p><p>  采用數字溫度芯片DS18B20測量溫度,輸出信號全數字化。便于單片機處理和控制,省去傳統(tǒng)的測溫方法的很多外圍電路。且該芯片的物理化學性質穩(wěn)定,它溫用作工業(yè)測溫元件,此元件線性較好。在0-100攝氏度時,最大線性偏差小于1攝氏度。DS18B20的最大

14、特點之一是采用了單總數的數據傳輸,由數字溫度計DS18B20和微控制器AT89C52構成溫度測量裝置,它直接輸出溫度的數字信號,可直接和計算機連接。這樣溫度系統(tǒng)的結構就比較簡單,體積也不大。采用51單片機控制軟件編程的自由度大,而且體積小,硬件實現簡單,安裝方便。</p><p>  該系統(tǒng)利用AT89C51芯片控制溫度傳感器DS18B20進行溫度的實時檢測并顯示,能夠實現快速測量環(huán)境溫度,并可以根據需要設置上限

15、報警溫度。</p><p>  從以上兩總方案,容易看出方案一的溫測裝置可測溫度范圍廣,體積小,但是單線性誤差大。</p><p>  方案二的溫測裝置電路簡單,精準度較高,實現方便,軟件設計也比較簡單,故本次設計采用方案二。</p><p>  顯示電路可以采用兩種方案:第一種是通過單片機控制譯碼器將譯碼器輸出的數據送給數碼管進行顯示,但是要單獨增加一個顯示電路,

16、使設計比較復雜。另一種是直接運用LCD液晶顯示,即直接通過單片對其進行顯示以及數據處理較多;因此選擇第二種方案。</p><p><b>  2.2 方案論證</b></p><p>  在日常生活及工農業(yè)生產中經常要檢測溫度,傳統(tǒng)的方式是采用熱電偶或熱電阻。其硬件電路和軟件調試比較復雜,制作成本較高。近年來隨著科技的飛速發(fā)展,單片機的應用正不斷走向深入。所以我們選用

17、單片機作為核心部件進行邏輯控制及信號的產生,用單片機本生的優(yōu)勢節(jié)約成本,使電路更簡單。</p><p>  根據題目的要求,本次設計采用由 AT89C51單片機及DS18B20溫度傳感器組成數據采集電路,加上顯示電路和控制電路等,根據溫度數據測量,通過控制電路對溫度進行控制。本系統(tǒng)具有快速顯示、測量準確、精度高、可調溫控范圍、硬件結構簡單等優(yōu)點,是一種比較經濟的溫度控制系統(tǒng)。</p><p&g

18、t;  A/D轉換器將溫度傳感器采集的溫度模擬信號轉化成數字信號,送入單片機的I/O數據接口,然后通過單片機讀回I/O數據進行溫度的判斷,最后將數據送入顯示譯碼單元。顯示時,譯碼電路是將單片機輸出的BCD碼送入譯碼器,通過其譯碼后送入LCD顯示電路。</p><p><b>  第3章 硬件設計</b></p><p><b>  3.1主控芯片介紹<

19、/b></p><p>  單片機AT89C2051具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電路系統(tǒng)的設計需要,很適合便攜手持式產品的設計使用系統(tǒng)可用二節(jié)電池供電。</p><p>  AT89C51是一個低電壓,高性能CMOS 8位單片機,片內含4k bytes的可反復擦寫的Flash只讀程序存儲器和128 bytes的隨機存取數據存儲器(RAM),器件采用ATM

20、EL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統(tǒng),片內置通用8位中央處理器和Flash存儲單元,內置功能強大的微型計算機的AT89C51提供了高性價比的解決方案。</p><p>  AT89C51是一個低功耗高性能單片機,40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內含2個外中斷口,2個16位可編程定時計數器,2個全雙工串行通信口,AT89C51可以按照常規(guī)方法進行編程,也可以在

21、線編程。其將通用的微處理器和Flash存儲器結合在一起,特別是可反復擦寫的Flash存儲器可有效地降低開發(fā)成本。</p><p>  3-1AT89C51主要功能特性:</p><p>  表3-1AT89C51單片機的管腳功能。</p><p><b>  VCC:供電電壓。</b></p><p><b>

22、  GND:接地。</b></p><p>  P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。</p><p>  P1口:P1口是一個

23、內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。</p><p>  P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并

24、因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。</p><p>  P3口:P3口是8個帶內部上拉電阻的雙向I/O口,可接收輸

25、出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p>  P3口也可作為AT89C51的一些特殊功能口,如下所示:</p><p>  P3口管腳 備選功能</p><p>  P3.0 RXD(串行輸入口)</p><p>

26、;  P3.1 TXD(串行輸出口)</p><p>  P3.2 /INT0(外部中斷0)</p><p>  P3.3 /INT1(外部中斷1)</p><p>  P3.4 T0(計時器0外部輸入)</p><p>  P3.5 T1(計時器1外部輸入)</p><p>  P3.6 /WR(外部數據存儲器寫選通

27、)</p><p>  P3.7 /RD(外部數據存儲器讀選通)</p><p>  P3口同時為閃爍編程和編程校驗接收一些控制信號。</p><p>  RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。</p><p>  ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在F

28、LASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><

29、;p>  /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。</p><p>  /EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLAS

30、H編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p>  XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。</p><p>  XTAL2:來自反向振蕩器的輸出。</p><p><b>  3.2 復位電路</b></p><p>  為確保兩點間溫度控制系統(tǒng)中電路穩(wěn)定可靠工作,復位電路是必

31、不可少的一部分,復位電路的第一功能是上電復位。一般電路正常工作需要供電電源為5V±5%,即4.75~5.25V。</p><p>  復位是單片機的初始化操作,其目的是使CPU及各專用寄存器處于一個確定的初始狀態(tài)。如:把PC的內容初始化為0000H,使單片機從0000H單元開始執(zhí)行程序。除了進入系統(tǒng)的正常初始化之外,當單片機系統(tǒng)在運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,也需要復位以使其恢復正

32、常工作狀態(tài)。</p><p>  RST端的外部復位電路有兩種操作方式:上電自動復位和按鍵手動復位。按鍵手動復位有電平方式和脈沖方式兩種,本系統(tǒng)設計采用上電復位,如圖2-3所示。上電復位是直接將RST端通過電阻接高電平來實現單片機的復位。</p><p><b>  3.3 時鐘電路</b></p><p>  單片機的時鐘信號用來提供單片機內

33、各種微操作的時間基準,時鐘電路用于產生單片機工作所需要的時鐘信號。</p><p>  單片機的時鐘信號用來提供單片機片內各種微操作的時間基準,時鐘信號通常用兩種電路形式得到:內部振蕩和外部振蕩。本系統(tǒng)設計采用內部振蕩方式,如圖2-4所示。MCS-51單片機內部有一個用于構成振蕩器的高增益反向放大器,引腳XTALl和XTAL2分別是此放大電器的輸入端和輸出端,由于采用內部方式時,電路簡單,所得的時鐘信號比較穩(wěn)定,

34、實際使用中常采用這種方式。</p><p><b>  3.4 矩陣電路</b></p><p>  按照鍵盤與單片機的連接方式可分為獨立式鍵盤與矩陣式鍵盤。矩陣式鍵盤是一種常見的輸入裝置,在日常生活中,矩陣式鍵盤在計數機、電話、手機、微波爐等各式電子產品上已經被廣泛應用。在鍵盤中按鍵較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平

35、線和垂直線在交叉處不直接連接,而是通過一個按鍵加以連接。這樣,一個端口就可以構成4x4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數越多,區(qū)別越明顯,比如再多加一條線就可以構成20的鍵盤,而直接用端口線則只能多出一鍵。所以本次設計采用的是矩陣式鍵盤,確定矩陣式鍵盤上的何鍵被按下可以采用行掃描法。</p><p>  判斷鍵盤中有無鍵按下:</p><p>  將全部行線置低電平

36、,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位低于電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則按鍵中無鍵按下。</p><p>  判斷閉合鍵所在位置:</p><p>  在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,在逐行檢測各

37、列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。</p><p><b>  3.5 顯示電路</b></p><p>  在單片機應用系統(tǒng)中,對于系統(tǒng)的運行狀態(tài)和運行結果,通常都需要直觀交互顯示出來。單片機應用系統(tǒng)中最常用的顯示器有LED和LCD兩種。這兩種顯示器都可以顯示數字、字符及系統(tǒng)的狀態(tài),LED和LED數碼顯示最為普遍,本設

38、計采用的是更為環(huán)保的LCD顯示器。</p><p>  字符型液晶顯示模塊是一種專門用于顯示字母,數字,字符等點陣式LCD,目前常用的有16x1,16x2,,20x2,40x2行等模塊。</p><p>  點陣字符型LCD的接口特性</p><p>  點陣字符型LCD是專門用于顯示數字,字母,圖形符號及少量自定義字號的液晶顯示器。這類顯示器把LCD控制器,點陣驅

39、動器,字符存儲器,顯示體及少量的組容元件等集成一個液晶顯示模塊,鑒于字符型液晶顯示模塊目前在國際上已經規(guī)范化,其電特性及接口特性是統(tǒng)一的。因此,只要設計出一種字號的接口電路,在指令上稍加修改即可使用各種規(guī)格的字符型液晶顯示模塊。字符型液晶顯示模塊的控制器大多數為日立公司生產的HD44780及其兼容的控制器。</p><p>  點陣型液晶顯示模塊的基本特點</p><p> ?。?)液晶顯

40、示屏是以若干5x8或5x11點陣塊組成的顯示字符群。每個點陣塊為一個字符位,字符間距和行距都為一個點的寬度。</p><p> ?。?)主控電路電路為HD44780-及其他公司的全兼容電路。因此從程序員的角度來說,LCD的顯示接口與編程是面向HD44780的,只要了解HD44780的編程結構即可進行LCD的顯示編程。</p><p> ?。?)內部具有字符發(fā)生器ROM,可顯示192種字符。

41、</p><p> ?。?)具有64字節(jié)的自定義字符RAM,可以定義8個5x8點陣字符或4個5x11點陣字符。</p><p>  (5)具有64字節(jié)的數據顯示RAM,共進行顯示編程時使用。</p><p> ?。?)標準接口,與M68HC08系列MCU容易接口。</p><p>  (7)模塊結構緊湊,輕巧,裝備容易。</p>

42、<p> ?。?)單+5V電源供電。</p><p> ?。?)低功耗,高可靠性。</p><p> ?。?0)HD44780的引腳與時序</p><p> ?。?1)HD44780的外部接口信號一般有16條,與MCU的接口有8條數據線DB0~DB7和3條控制線RS,RW,E,HD44780的引腳功能如表3-2所示。</p><p&g

43、t;  表3-2 HD47780的引腳功能表</p><p>  控制器HD44780的信號功能控制如表3-3</p><p>  3-3控制器HD44780的信號功能</p><p>  圖3-5 LCD顯示電路</p><p><b>  3.6 測溫電路</b></p><p>  3.6

44、.1 DS18B20單線數字溫度傳感器</p><p>  由DALLAS半導體公司生產的DS18B20型單線智能溫度傳感器,屬于新一代適配微處理器的智能溫度傳感器,可廣泛用于工業(yè)、民用、軍事等領域的溫度測量及控制儀器、測控系統(tǒng)和大型設備中。它具有體積小,接口方便,傳輸距離遠等特點。</p><p>  產品的主要技術指標:</p><p> ?。?)測量范圍:-5

45、5℃~+125℃;</p><p> ?。?)測量精度:0.5℃;</p><p> ?。?)反應時間≤500ms。</p><p>  3.6.2 DS18B20工作原理</p><p>  溫度傳感器DS18B20將被測環(huán)境溫度轉化成帶符號的數字信號(以十六位補碼形式,占兩個字節(jié))在通過單片機發(fā)出命令送給顯示器。它的輸出腳I/O直接與單片

46、機相連,并接一個上拉電阻,傳感器采用外部電源供電。傳感器控制程序是按照DS18B20的通信協議編制。系統(tǒng)的工作是在程序控制下,完成對傳感器的讀寫和對溫度的顯示。</p><p>  3.6.3 DS18B20的性能特點</p><p>  (1) 采用單總線專用技術,既可通過串行口線,也可通過其它I/O口線與微機接口,無須經過其它變換電路,直接輸出被測溫度值(9位二進制數,含符號位);&

47、lt;/p><p>  (2) 測溫范圍為-55℃~+125℃,測量分辨率為0.0625℃;</p><p>  (3) 內含64位經過激光修正的只讀存儲器ROM;</p><p>  (4) 適配各種單片機或系統(tǒng)機;</p><p>  (5) 用戶可分別設定各路溫度的上、下限;</p><p>  (6) 內含寄生電源

48、。</p><p>  3.6.4 DS18B20內部結構</p><p>  DS18B20內部結構主要由四部分組成:64位光刻ROM,溫度傳感器,非揮發(fā)的溫度報警觸發(fā)器TH和TL,高速暫存器。DS18B20的管腳排列如圖3-5所示。64位光刻ROM是出廠前被光刻好的,它可以看作是該DS18B20的地址序列號。不同的器件地址序列號不同。</p><p>  圖3-

49、6 DS18B20引腳分布圖</p><p>  表3-4 DS18B20引腳功能</p><p>  表3-5 DS18B20信號功能</p><p>  以12位轉化為例說明溫度高低字節(jié)存放形式及計算:12位轉化后得到的12位數據,存儲在DS18B20的兩個高低兩個8位的RAM中,二進制中的前面5位是符號位。如果測得的溫度大于0,這5位為0,只要將測到的數值乘于

50、0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于0.0625才能得到實際溫度。3.6.5 DS18B20控制方法</p><p>  在硬件上,DS18B20與單片機的連接有兩種方法,一種是VCC接外部電源,GND接地,I/O與單片機的I/O線相連;另一種是用寄生電源供電,此時UDD、GND接地,I/O接單片機I/O。無論是內部寄生電源還是外部供電,I/O口線要接5KΩ左右

51、的上拉電阻。此次設計選擇的是前面一種控制。表3-2 DS18B20有六條控制命令</p><p>  CPU對DS18B20的訪問流程是:先對DS18B20初始化,再進行ROM操作命令,最后才能對存儲器操作,數據操作。DS18B20每一步操作都要遵循嚴格的工作時序和通信協議。如主機控制DS18B20完成溫度轉換這一過程,根據DS18B20的通訊協議,須經三個步驟:每一次讀寫之前都要對DS18B20進行復位,復位成

52、功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進行預定的操做。</p><p><b>  圖3-7測溫電路</b></p><p>  3.7 整機工作原理</p><p>  當接通電源以后,溫度傳感器正常工作,溫度傳感器將根據被測溫度的不同來采集不同的數據,然后將所采集到的數據傳送到比較器到中,然后由比較器將采集到的

53、數據轉變成高低電平,在送入單片機,單片機通過控制各個引腳電平的高低來來控制溫度的顯示輸出,當溫度顯示TH為110°C,TL為—20°C,通過矩陣鍵盤電路可以調節(jié)TH和TL的初始值,并且還可以調節(jié)當前的顯示的溫度值,按一次鍵盤TH和TL的值自加一或自減一,當減到低于20°C或高于110°時,將自動返回初始值。整機電路圖如圖3-8所示</p><p><b>  第4

54、章 軟件設計</b></p><p>  整個系統(tǒng)的功能是由硬件電路配合軟件來實現的,當硬件基本定型的時候軟件也基本定下拉了,從軟件的功能不同,可以分為兩的類:一是主程序,它是整個軟件的核心,專門用來協調各個執(zhí)行模塊和操作者的聯系。二是子程序,它是用來完成各種實質性的工作的,如測量、計算、顯示、通訊等。每一個執(zhí)行軟件就是一個小的執(zhí)行模塊,這里將每一個模塊一一列出來,并為每個執(zhí)行模塊進行功能定義和接口定

55、義。各執(zhí)行模塊規(guī)劃好以后,就可以規(guī)劃監(jiān)控軟件了。首先要根據系統(tǒng)的總體功能選擇一種最合適的主程序結構,然后根據實時性的條件,合理安排監(jiān)控軟件和執(zhí)行軟件之間的調度關系。</p><p><b>  4.1主程序模塊</b></p><p>  主程序主要完成硬件初始化,子程序調用等功能</p><p>  圖4-1主程序流程圖</p>

56、<p><b>  主程序函數如下:</b></p><p>  Void main()</p><p>  { setds18b20(TH,TL,RS); //設置上下限報警溫度和分辨率</p><p>  delay(100); </p><p><b>

57、  while(1)</b></p><p><b>  { </b></p><p>  pt=ReadTemperature(); </p><p>  temper_LCD(); </p><p>  user_temper_LCD(user_temper);</p>

58、<p>  alarm_LCD(TH,TL); </p><p>  LCD_Initial();</p><p>  LCD_Print(0,0,TempBuffer0);</p><p>  LCD_Print(0,1,TempBuffer1); </p><p>  scan_full();

59、 //看有無鍵按下</p><p>  if(key_ok) //如有鍵按下則看到底哪個鍵按下</p><p><b>  {</b></p><p>  key_value=key_scan(); //調用鍵盤掃描程序</p><p

60、>  key_command(key_value); //鍵盤命令處理函數</p><p><b>  }</b></p><p><b>  }</b></p><p>  圖4-2 DS18B20初始化流程圖</p><p>  DS18B20初始化函數</p>

61、;<p>  void Init_DS18B20(void)</p><p><b>  {</b></p><p>  unsigned char x=0;</p><p>  DQ = 0; //單片機將DQ拉低</p><p>  delay_18B20(80); //精確延時 大

62、于 480us</p><p>  DQ = 1; //拉高總線</p><p>  delay_18B20(14);</p><p><b>  x=DQ;</b></p><p>  delay_18B20(20);</p><p><b>  }</b>

63、;</p><p>  /***********ds18b20讀一個字節(jié)**************/</p><p>  unsigned char ReadOneChar(void)</p><p><b>  {</b></p><p>  unsigned char i=0;</p><p&g

64、t;  unsigned char dat = 0;</p><p>  for (i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ = 0; // 給脈沖信號</p><p><b>  dat>>=1;</b></p>&

65、lt;p>  DQ = 1; // 給脈沖信號</p><p><b>  if(DQ)</b></p><p>  dat|=0x80;</p><p>  delay_18B20(4);</p><p><b>  }</b></p><p>  return(da

66、t);</p><p><b>  }</b></p><p>  溫度測量的結果以二進補碼形式來存放,分辨力12位的測量結果用帶5個符號的16位二進制格式來表示,高低8位分別存儲在兩個RAM單元中,前面5位S代表符號位,DS18B20函數的作用就是完成這一過程的</p><p><b>  N</b></p>

67、<p>  圖4-3DS18B20寫字節(jié)流程圖</p><p>  DS18B20寫函數</p><p>  void setds18b20(unsigned char TH,unsigned char TL,unsigned char RS)</p><p><b>  {</b></p><p>  I

68、nit_DS18B20();</p><p>  WriteOneChar(0xCC); //跳過讀序號列號的操作</p><p>  WriteOneChar(0x4E);</p><p>  WriteOneChar(TH); //寫入想設定的溫度報警上限</p><p>  WriteOneChar(TL); //寫入想設定的溫

69、度報警下限</p><p>  WriteOneChar(RS); </p><p><b>  }</b></p><p>  LCD上電時,都必須按照一定的時序對LCD進行初始化操作,主要任務是設置LCD的工作方式,顯示狀態(tài),清屏,輸入方式,光標位置等。</p><p>  圖4-3LCD初始化流程圖</p&

70、gt;<p>  要想把顯示字符顯示在某一指定位置,就必須先將顯示數據寫在相應的DDRAM地址中,寫數據操作函數就是完成這一過程的函數</p><p>  圖4-4LCD寫數據流程圖</p><p>  void LCD_Wait(void)</p><p><b>  {</b></p><p>  Lc

71、dRs=0; //RS=0表示選擇指令寄存器</p><p>  LcdRw=1;_nop_();//RW=1表示進行讀操作</p><p>  LcdEn=1;_nop_(); //在EN為下降沿的時候鎖存據</p><p>  while(DBPort&0x80)</p><p><b>  

72、{</b></p><p><b>  LcdEn=0;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_()</b></p><p><b>  LcdEn=1;</b></p>

73、<p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  } </b></p><p>  LcdEn=0;</p><p><b>  }</b></p>

74、<p>  LCD要能讀寫數據,必須對LCD進行讀寫操作,讀操作時,先設置RS和R/W狀態(tài),在設置E信號為高,這時從數據口讀取數據,寫操作時,使能E信號下降沿有效</p><p>  圖4-5LCD讀寫操作流程圖</p><p><b>  LCD寫指令函數</b></p><p>  #define LCD_COMMAND

75、</p><p>  #define LCD_DATA</p><p>  #define LCD_CLEAR_SCREEN // 清屏</p><p>  #define LCD_HOMING // 光標返回原點</p><p>  void LCD_Write(bit style, unsi

76、gned char input)</p><p><b>  {</b></p><p><b>  LcdEn=0;</b></p><p>  LcdRs=style;</p><p>  LcdRw=0;_nop_();</p><p>  DBPort=input

77、;_nop_(); </p><p>  LcdEn=1;_nop_(); </p><p>  LcdEn=0;_nop_();</p><p>  LCD_Wait();</p><p><b>  }</b></p><p>  //設置顯示模式****

78、********************************************************</p><p>  #define LCD_SHOW//顯示開</p><p>  #define LCD_HIDE//顯示關 </p><p>  #define LCD_CURSOR//顯示光標</p><p&

79、gt;  #define LCD_NO_CURSOR//無光標 </p><p>  #define LCD_FLASH//光標閃動</p><p>  #define LCD_NO_FLASH//光標不閃動</p><p>  void LCD_SetDisplay(unsigned char DisplayMode)</p>&

80、lt;p><b>  {</b></p><p>  LCD_Write(LCD_COMMAND, 0x08|DisplayMode);</p><p><b>  }</b></p><p>  #define LCD_AC_UP</p><p>  #define LCD_AC_D

81、OWN</p><p>  #define LCD_MOVE// 畫面可平移</p><p>  #define LCD_NO_MOVE</p><p>  void LCD_SetInput(unsigned char InputMode)</p><p><b>  { </b></p>

82、;<p>  LCD_Write(LCD_COMMAND, 0x04|InputMode);</p><p><b>  }</b></p><p>  最常見的矩陣式鍵盤按鍵識別方法是編程掃描,這里采用的是列掃描方法。</p><p><b>  NO</b></p><p><

83、;b>  YES</b></p><p><b>  NO</b></p><p><b>  YES</b></p><p>  圖4-5矩陣鍵盤流程圖</p><p>  鍵盤掃描函數</p><p>  sfr key_port=0x90

84、; //定義P1口為鍵盤掃描口</p><p>  //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數據端口</p><p>  bit key_ok=0; //有鍵按下的標志</p><p>  /*************延時子程序*************</p><p>  ****調用一次用

85、時18微秒,t每加1,用時增加6微秒*/</p><p>  void delay(unsigned char t)</p><p><b>  {</b></p><p>  while(t--);</p><p><b>  }</b></p><p>  unsigne

86、d char r_left(unsigned char x)</p><p><b>  {</b></p><p><b>  x<<=1;</b></p><p><b>  x++;</b></p><p>  return(x);</p>&l

87、t;p><b>  }</b></p><p>  /*************粗判有無鍵按下**********</p><p>  ****有鍵按下則將key_ok置1************/</p><p>  void scan_full(void)</p><p><b>  {</b&

88、gt;</p><p>  unsigned char temp;</p><p>  key_port=0xf0; </p><p><b>  temp=P1;</b></p><p>  if(temp!=0xf0)</p><p><b>  key_ok=1;</b&

89、gt;</p><p>  else key_ok=0;</p><p><b>  }</b></p><p>  /************鍵盤掃描程序*************************</p><p>  ****功能:返回鍵值,當無鍵按下時,返回0*************/</p>

90、<p>  unsigned char key_scan(void)</p><p><b>  {</b></p><p>  unsigned char temp,count=0x01,key_value;</p><p>  unsigned char x_scan=0xfe,y_scan=0xef;</p>&

91、lt;p>  unsigned char i,j,y; </p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  scan_full(); //粗判是否有鍵按下</p><p>  if(k

92、ey_ok==1)</p><p><b>  {</b></p><p><b>  key_ok=0;</b></p><p>  delay(200); //延時去抖動</p><p>  scan_full(); //再次粗判是否有鍵按下<

93、/p><p>  if(key_ok==1)</p><p><b>  {</b></p><p>  for(i=0;i<4;i++)</p><p><b>  {</b></p><p>  key_port=x_scan;</p><p&g

94、t;  for(j=0;j<4;j++) </p><p><b>  {</b></p><p>  temp=key_port;</p><p>  temp=temp&0xf0;</p><p>  y=y_scan&0xf0;</p><p>  i

95、f(temp==y)</p><p><b>  {</b></p><p>  while(key_ok!=0) //等待按鍵松開</p><p><b>  {</b></p><p>  scan_full();</p><p><b>  }</b

96、></p><p>  key_value=count;</p><p>  return(key_value);</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {&l

97、t;/b></p><p><b>  count++;</b></p><p>  y_scan=r_left(y_scan);</p><p><b>  } </b></p><p><b>  }</b></p><p>  y_scan

98、=0xef; </p><p>  x_scan=r_left(x_scan); </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  return(k

99、ey_value);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  第5章 仿真與調試</b></p><p><b>  5.1 仿真與調試</b></p><p> 

100、 此設計的電路在Proteus軟件中進行仿真,運行 Proteus 的 ISIS 程序后,進入該仿真軟件的主界面。主界面由菜單欄、工具欄、預覽窗口、元件選擇按鈕、元件列表窗口、原理圖繪制窗口和仿真進程控制按鈕組成(如圖7-2所示)。通過元件選擇按鈕 P (從庫中選擇元件命令) 命令,在彈出的 Pick Devices 窗口中選擇電路所需的元件,放置元件并調整其相對位置,對元件參數設置及元器件間連線,完成單片機系統(tǒng)的硬件原理圖繪制。仿真電

101、路圖見附錄3</p><p><b>  5.2 調試與運行</b></p><p> ?。?)首先啟動KEIL C51軟件的集成開發(fā)環(huán)境,從桌面上雙擊uVision圖標以啟動軟件。</p><p> ?。?)建立工程文件。通常單片機應用系統(tǒng)軟件包含多個源程序文件,KEIL C51使用工程這一概念,將這些參數設置和所需的所有文件都加在一個工程中

102、。因此,需要建立一個工程文件,并為這個工程選擇CPU,確定編譯,匯編,連接的參數,指定調試的方式。</p><p> ?。?)建立并添加源文件。使用菜單或者單擊工具欄的新建文件按鈕,出現文本便捷窗口,在該窗口中輸入新編制的源程序并保存該文件。</p><p>  然后,我打開已經畫好的仿真圖,再將生成的HEX文件導入單片機里,點擊開始按鈕,電路正常工作,并且能夠實現預先設想的所有功能,而且

103、效果很好,從而驗證了我的程序的正確性。</p><p><b>  結 論</b></p><p>  在我的畢業(yè)設計中,主要是以AT89C51單片機為核心的,對溫度的檢測與顯示進行了簡單的設計與闡述。本次設計可以說是軟硬結合,又以硬件為主。當今科技發(fā)展迅速,單片機嵌入式開發(fā)有著光明的前景。由于單片機經濟實用、開發(fā)簡便等特點依然在工業(yè)控制、家電等領域占據了廣泛的市場。

104、所以我選擇這樣的畢業(yè)設計課題,并且能通過此次設計來提高自己軟件編制和硬件電路設計的能力。在我完成這次畢業(yè)設計的過程中,當看到自己將專業(yè)知識用于解決實際的問題時,那份成就感和喜悅感是難以形容的。但是,在實際的編程以及調試程序過程中,我發(fā)現自己應該學的太多太多。光靠自己在書本上所學過的這點知識是遠遠不夠的,真正地認識到了工作就是學習的道理。</p><p>  由于我以前對51單片機的C語言沒有認真鉆研過,所以感覺畢

105、業(yè)設計的任務十分緊迫。通過對本系統(tǒng)的設計,我學習到了硬件開發(fā)和軟件開發(fā)的基本流程并有了一定的駕御此開發(fā)過程的能力。編程的過程中,雖然不乏辛苦,但更多的是程序調試成功后的喜悅。</p><p>  總之,這次畢業(yè)設計對我來說是一次比較全面的、富有創(chuàng)造性和探索性的鍛煉,完成了我選題時的心愿。令我深有感觸,對于我今后的學習、工作和生活都將是受益非淺的!</p><p><b>  參考

106、文獻</b></p><p>  [1] 王靜霞.《單片機應用技術》.電子工業(yè)出版社,2009</p><p>  [2] 何立民.《單片機高等教程》.北京航空航天大學出版社,2000 </p><p>  [3] 雄建云.《Protel99 se EDA技術及應用》.北京機械工業(yè)出版社,2007</p><p>  [4] 華永

107、平,陳松編著.《電子線路課程設計》.東南大學出版社</p><p>  [5] 林春方.《電子線路學習指導與實訓》.北京電子工業(yè)出版社,2004</p><p>  [6] 楊寶清,宋文貴主編.《實用電路手冊》.機械工業(yè)出版社 2002</p><p>  [7] 張存禮,韓愛娟主編.《電子技術綜合實訓》.北京師范大學出版社</p><p>

108、<b>  附錄1 源程序</b></p><p>  //#include <at89x51.h>//用AT89C51時就用這個頭文件</p><p>  #include <reg52.h>//用華邦W78E58B時必須用這個頭文件</p><p>  sbit DQ = P3^7;//定義DQ引腳為P3.7&

109、lt;/p><p>  /***********ds18b20延遲子函數(晶振12MHz )*******/ </p><p>  /************DS18B20對時間要求很嚴,但只能長不能短</p><p>  *************在11.0592M下也行,因為時間長些********/</p><p>  void delay

110、_18B20(unsigned int i)</p><p><b>  {</b></p><p>  while(i--);</p><p><b>  }</b></p><p>  /**********ds18b20初始化函數**********************/</p>

111、;<p>  void Init_DS18B20(void) </p><p><b>  {</b></p><p>  unsigned char x=0;</p><p>  DQ = 0; //單片機將DQ拉低</p><p>  delay_18B20(80); //精確延時

112、大于 480us</p><p>  DQ = 1; //拉高總線</p><p>  delay_18B20(14);</p><p>  x=DQ; </p><p>  delay_18B20(20);</p><p><b>  }</b></

113、p><p>  /***********ds18b20讀一個字節(jié)**************/ </p><p>  unsigned char ReadOneChar(void)</p><p><b>  {</b></p><p>  unsigned char i=0;</p><p>  

114、unsigned char dat = 0;</p><p>  for (i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ = 0; //給脈沖信號</p><p><b>  dat>>=1;</b></p

115、><p>  DQ = 1; //給脈沖信號</p><p><b>  if(DQ)</b></p><p>  dat|=0x80;</p><p>  delay_18B20(4);</p><p><b>  }</b></p><

116、;p>  return(dat);</p><p><b>  }</b></p><p>  /*************ds18b20寫一個字節(jié)****************/ </p><p>  void WriteOneChar(unsigned char dat)</p><p><b>

117、  {</b></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 = d

118、at&0x01;</p><p>  delay_18B20(5);</p><p><b>  DQ = 1;</b></p><p><b>  dat>>=1;</b></p><p><b>  }</b></p><p>&

119、lt;b>  }</b></p><p>  /****************設置DS18B20工作狀態(tài)*******************</p><p>  TH和TL分別是上限報警和下限報警溫度,RS是顯示分辨率的設置</p><p>  **************************************************

120、*****/</p><p>  void setds18b20(unsigned char TH,unsigned char TL,unsigned char RS)</p><p><b>  {</b></p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC);

121、 //跳過讀序號列號的操作</p><p>  WriteOneChar(0x4E); </p><p>  WriteOneChar(TH);//寫入想設定的溫度報警上限</p><p>  WriteOneChar(TL);//寫入想設定的溫度報警下限</p><p>  WriteOneChar(RS);//寫配置寄

122、存器,格式為0 R1 R0 1,1 1 1 1</p><p>  //R1R0=00分辨率婁9位,R1R0=11分辨率為12位</p><p><b>  }</b></p><p>  /**************讀取ds18b20當前溫度************/</p><p>  unsigned char

123、*ReadTemperature(void)</p><p>  {unsigned char tt[2];</p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC); // 跳過讀序號列號的操作</p><p>  WriteOneChar(0x44); // 啟動溫度轉換&l

124、t;/p><p>  delay_18B20(70); // 溫度轉化要一段時間</p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC); //跳過讀序號列號的操作</p><p>  WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是

溫馨提示

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

評論

0/150

提交評論