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

下載本文檔

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

文檔簡介

1、<p><b>  課程設計(論文)</b></p><p>  題 目 名 稱 基于單片機溫度測量系統設計 </p><p>  課 程 名 稱 單片機原理及在電氣測控學科中的應用 </p>&

2、lt;p>  學 生 姓 名 </p><p>  學 號 </p><p>  系 、專 業 </p><p>  課程設計(論文)任務書</p

3、><p>  注:1.此表由指導教師填寫,經系、教研室審批,指導教師、學生簽字后生效;</p><p>  2.此表1式3份,學生、指導教師、教研室各1份。</p><p>  指導教師(簽字): 學生(簽字):</p><p>  學生姓名 學

4、 號 </p><p>  系 專業班級 </p><p>  題目名稱 基于單片機的溫度測量系統設計 課程名稱 單片機原理及在電氣測控學科中的應用 </p><p

5、><b>  一、學生自我總結</b></p><p><b>  二、指導教師評定</b></p><p>  注:1、本表是學生課程設計(論文)成績評定的依據,裝訂在設計說明書(或論文)的“任務書”頁后面;</p><p>  2、表中的“評分項目”及“權重”根據各系的考核細則和評分標準確定。

6、 </p><p><b>  摘 要</b></p><p>  溫度是工業控制中主要的被控參數之一,特別是在冶金、化工、建材、食品、機械、石 油等工業中,具有舉足重輕的作用。隨著電子技術和微型計算機的迅速發展,微機測量和控制技術得到了迅速的發展和廣泛的應用。 采用單片機來對溫度進行控制,不僅具有控制方便、組態簡單和靈活性大等優點,而

7、且可以大幅度提高被控溫度的技術指標,從而能夠大大提高產品的質量和數量。MSP430系列單片機具有處理能強、運行速度快、功耗低等優點,應用在溫度測量與控制方面,控制簡單方便,測量范圍廣,精度較高。</p><p>  本設計主要做了如下幾方面的工作:一是確定系統的的總設計方案,給出系統框圖。本設計以AT89S51單片機為核心的溫度測量系統的工作原理和設計方法。溫度信號由溫度芯片DD18B20采集,并以數字信號的方式

8、傳送給單片機。單片機通過對信號進行相應處理,從而實現溫度測量的目的。二是硬件設計,在這里采用模塊設計方法,設計各單元電路原理圖及元器件參數。主要模塊有:單片機最下系統設計模塊、傳感器溫度采集設計模塊、A/D模數轉換設計模塊、液晶顯示設計模塊。三是軟件設計,包括繪制軟件主程序流程圖、和編寫程序源代碼。四是進行調試及仿真實驗,為了驗證該溫度測量系統設計的正確性,在protues進行硬件軟件聯合調試并完成該測量系統的仿真實驗,仿真結果表明本設

9、計是正確的。 </p><p>  關鍵詞: AT89C51;單片機;DS18B20;溫度測量</p><p><b>  目 錄</b></p><p>  摘要 ………………………………………………………………….……Ⅰ</p><p>  1 總體方案論證 …………………………………………………………1</

10、p><p>  2 硬件電路設計 …………………………………………………………2</p><p>  2.1 最小系統模塊…………………………………………………………2</p><p>  2.2 電源電路設計…………………………………………………………7</p><p>  2.3 溫度傳感器DS18B20溫度采集模塊 ………………………………

11、7</p><p>  2.4 A/D模數轉換…………………………………………………………10</p><p>  2.5 液晶顯示器LM016L顯示模塊 ……………………………………11</p><p>  2.6 系統總體硬件原理圖 ………………………………………………13</p><p>  3 系統軟件設計 …………………………………

12、………………………15</p><p>  3.1軟件流程圖……………………………………………………………15</p><p>  3.2程序源代碼……………………………………………………………16</p><p>  4 系統仿真調試及實物 ………………………………………………….21</p><p>  5 設計總結及心得 …………………

13、……………………….……………23</p><p>  參考文獻………………………………………………………………24</p><p>  附錄Ⅰ…………………………………………………………………25</p><p>  附錄Ⅱ…………………………………………………………………33</p><p>  附錄Ⅲ………………………………………………

14、…………………35</p><p><b>  1 總體方案論證</b></p><p>  本設計以AT89S51單片機為核心的溫度測量系統的工作原理和設計方法。溫度信號由溫度芯片DD18B20采集,并以數字信號的方式傳送給單片機。單片機通過對信號進行相應處理,從而實現溫度測量的目的。系統通過運用用復位按鈕實現測量控制,按下按鍵復位按鈕則刷新測量的溫度值。<

15、/p><p>  系統的硬件設計,在這里采用模塊設計方法,設計各單元電路原理圖及元器件參數。主要模塊有:單片機最下系統設計模塊、傳感器溫度采集設計模塊、A/D模數轉換設計模塊、液晶顯示設計模塊。對于軟件設計部分,包括繪制軟件主程序流程圖、和編寫程序源代碼。最后可以通過對系統整體進行調試及仿真實來驗證該系統設計的正確性。</p><p>  系統總體框圖如圖1.1所示。</p>&

16、lt;p>  圖1.1 系統總體框圖</p><p><b>  2 硬件電路設計</b></p><p>  2.1 最小系統模塊設計</p><p>  所謂單片機最小系統,是指在單片機外部增加盡可能少的原件電路,組成一個讓單片機可獨立工作的系統。</p><p>  圖2.1最小系統電路圖</p>

17、;<p>  2.1.1 AT89C51芯片介紹</p><p>  AT89C51是一種帶4K字節閃存可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機。AT89C51是一種帶2K字節閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除100

18、0次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C51是它的一種精簡版本。AT89C51單片機為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。外形及引腳排列如圖2.2所示。</p><p>  圖2.2 AT89C2051引腳圖</p>

19、;<p><b> ?。?)主要特性</b></p><p>  · 與MCS-51單片機產品兼容</p><p>  · 4K字節在系統可編程Flash存儲器</p><p>  · 1000次擦寫周期</p><p>  · 全靜態工作:0Hz—24MHz<

20、/p><p>  · 32個可編程I/O口線</p><p>  · 2個16位定時器/計數器</p><p><b>  · 5個中斷源</b></p><p>  · 全雙工UART串行通道</p><p>  · 低功耗空閑和掉電模式</p

21、><p>  · 掉電后中斷可喚醒</p><p><b>  · 看門狗定時器</b></p><p><b>  · 雙數據指針</b></p><p>  · 靈活的ISP編程(字或字節模式)</p><p>  · 4.0

22、---5.5V電壓工作范圍</p><p>  · 數據保留時間:10年 </p><p>  · 三級程序存儲器鎖定 </p><p>  · 128×8位內部RAM </p><p>  · 可編程串行通道 </p><p>  · 片內振蕩器和時鐘電路

23、</p><p><b> ?。?)內部結構組成</b></p><p>  單片機AT89C51可以劃分為CPU、存儲器、并行口、串行口、定時/計數器和中斷邏輯幾個部分。</p><p>  · CPU由運算器和控制邏輯構成。其中包括若干特殊功能寄存器(SFR)</p><p>  · AT89C5

24、1時鐘有兩種方式產生,即內部方式和外部方式。</p><p>  · AT89C51在物理上有四個存儲空間:片內/片外程序存儲大路、片內/片外數據存儲器。片內有256B數據存儲器RAM和4KB的程序存儲器ROM。除此之外,還可以在片外擴展RAM和ROM,并且和有64KB的尋址范圍。</p><p>  · AT89C51內部有一個可編程的、全雙工的串行接口。它串行收發存

25、儲在特殊功能寄存器SFR的串行數據緩沖器SBUF中的數據。</p><p>  · AT89C51共有4個(P0、P1、P2、P3口)8位并行I/O端口,共32個引腳。P0口雙向I/O口,用于分時傳送低8位地址和8位數據信號;P1、P2、P3口均為準雙向I/O口;其中P2口還用于傳送高8位地址信號;P3口每一引腳還具有特殊功能,用于特殊信號的輸入輸出和控制信號。</p><p>

26、  · AT89C51內部有兩個16位可編程定時器/計數器T0、T1。最大計數值為216-1。工作方式和定時器或計數器的選擇由指令來確定。</p><p>  ·中斷系統允許接受5個獨立的中斷源,即兩個外部中斷,兩個定時器/計數器中斷以及一個串行口中斷。</p><p><b> ?。?)管腳說明:</b></p><p>

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

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

29、接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 </p

30、><p>  P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口同時為閃爍編程和編程校驗接收一些控制信號。P3口也可作為AT89C51的一些特殊功能口,如下表2.1所示。 </p><p>  表2.1 P3端口引腳與復用

31、功能表</p><p>  RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。 </p><p>  ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的

32、是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。 </p><p>  /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現

33、。 </p><p>  /EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 </p><p>  XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。 </

34、p><p>  XTAL2:來自反向振蕩器的輸出。 </p><p><b>  2.1.2時鐘電路</b></p><p>  AT89C51芯片內部有一個高增益反向放大器用于構成振蕩器。反向放大器的輸入端為XATL1,輸出端為XATL2。在XATL1 和XATL2兩端跨接由石英晶體及兩個電容構成的自激振蕩器,電容C1和C2取20pF,選用不同的

35、電容對震蕩頻率有微調作用,但石英晶體本身的標定頻率才是單片機振蕩頻率的決定因數。時鐘電路如圖2.4所示。</p><p><b>  圖2.4時鐘電路</b></p><p>  時鐘電路中,兩個電容都選擇20 pF電容,電容一端接與晶振相連,另一端接地。選擇的晶振是頻率為12MHZ。此模塊就是產生像時鐘一樣準確的震蕩電路。</p><p>&

36、lt;b>  2.1.3復位電路</b></p><p>  (1) 手動按鈕復位 手動按鈕復位需要人為在復位輸入端RST上加入高電平。一般采用的辦法是在RST端和正電源Vcc之間接一個按鈕。當人為按下按鈕時,則Vcc的+5V電平就會直接加到RST端。手動按鈕復位的電路如圖2.5所示。由于人的動作再快也會使按鈕保持接通達數十毫秒,所以,完全能夠滿足復位的時間要求。本系統采用的就是手動按鈕

37、復位,電路連接圖如圖2.5所示。</p><p>  圖2.5 復位電路</p><p>  2.2 電源電路設計</p><p>  220V交流電經過變壓器降壓成 12V,經過橋式整流器整流、C1濾波,成為約 14V直流電,再經三端穩壓集成電路7805穩壓,形成5V穩定直流電,作為光電輸入電路、脈沖形成電路(U1-U8 組成電壓比較器) 和計數與顯示電路的工作

38、電源。電源設計電路圖如圖2.6所示,電源電路工作原理如圖2.7所示。 </p><p><b>  圖2.6 電源電路</b></p><p>  圖2.7電路工作原理圖</p><p>  2.3 溫度采集電路</p><p>  2.3.1 DS18B20芯片簡介</p><p>  DS18

39、B20是由美國DALLAS公司生產的單線數字溫度傳感器芯片。與傳統的熱敏電阻有所不同,DS18B20可直接將被測溫度轉化為串行數字信號。通過編程,DS18B20可以實現9~12位的溫度讀數。信息經過單線接口送入DS18B20或從DS18B20送出,因此從微處理器到DS18B20僅需連接一條信號線和地線。讀、寫和執行溫度變換所需的電源可以由數據線本身提供,而不需要外部電源。</p><p>  2.3.2 DS18

40、B20的主要特點</p><p> ?。?)采用單線技術,與單片機通信只需一個引腳;</p><p> ?。?)通過識別芯片各自唯一的產品序列號從而實現單線多掛接,簡化了分布式溫度檢測的應用;</p><p> ?。?)實際應用中不需要外部任何器件即可實現測溫;</p><p> ?。?)可通過數據線供電,電壓的范圍在3~5.5V;</

41、p><p> ?。?)不需要備份電源;</p><p> ?。?)測量范圍為-55~+125℃,在-10~+85℃范圍內誤差為0.5℃;</p><p> ?。?)數字溫度計的分辨率用戶可以在9位到12位之間選擇,可配置實現9~12位的溫度讀數;</p><p> ?。?)將12位的溫度值轉換為數字量所需時間不超過750ms;</p>

42、<p> ?。?)用戶定義的,非易失性的溫度告警設置,用用戶可以自行設定告警的上下限溫度。</p><p>  2.3.3 DS18B20的引腳功能</p><p>  DS18B20的引腳如圖2.8所示。</p><p>  圖2.8 DS18B20引腳圖</p><p>  DS18B20功能如表2.2所示。</p&g

43、t;<p>  表2.2 DS18B20引腳功能表</p><p>  2.3.4 溫度采集電路圖</p><p>  溫度測量系統主要運用了DS18B20和AT89C51。如何使兩者連接實現功能是溫度測量電路的主要設計目的。</p><p>  在硬件上,DS18B20與單片機的連接有兩種方式,一種是VCC接外部電源,GND接地,I/O與單片機I/O

44、線相連;另一種是用寄生電源供電,此時UDD、GND接地,I/O接單片機I/O,內部寄生電源I/O口線要接5千歐左右的上拉電阻。這里采用的是第一種連接方式,如圖2.10所示</p><p>  圖2.10 溫度采集電路</p><p><b>  2.4 模數轉換</b></p><p>  2.4.1 A/D轉換器的基本原理</p>

45、<p>  模數轉換器即A/D轉換器,或簡稱ADC,是用來把模擬電壓量u1轉換成為與它成比例的二進制數字量Dn的電路。A/D轉換包括量化和編碼兩個過程。所謂量化就是把幅值可連續變化的電壓轉化成為所規定的單位量化電壓的整數倍。編碼就是把量化的結果用代碼表示出來。</p><p>  既然輸入電壓的幅值是連續變化的,它的幅值不一定是其量化單位的整數倍,所以量化過程不可避免會引入誤差,這種誤差叫量化誤差。

46、</p><p>  為了把一個變化范圍0--0.7V的模擬信號轉換為3位二進制數碼,首先把0.7V分成8個離散電平,這8個離散電平為0、0.1V、…0.7V。沒相鄰離散電平的差值相等,都是一個量化單位,為0.1V。這個過程就叫量化。量化過程實際上就是用有限的量化值代替模擬量的過程。為了對量化候的信號進行處理,還應該把量化的結果用二進制代碼獲其他形式表示,這個過程就叫編碼。</p><p>

47、;  模數轉換器最重要的參數是轉換的精度,通常用輸出的數字信號的位數的多少表示。轉換器能夠準確輸出的數字信號的位數越多,表示轉換器能夠分辨輸入信號的能力越強,轉換器的性能也就越好。</p><p>  A/D轉換器的主要技術指標:</p><p> ?。?)分辨率:用二進制表示,位數越高,轉換精度越大。</p><p> ?。?)相對精度:理想下是一條直線,各個轉換

48、點偏離理想特性的誤差。</p><p> ?。?)轉換速度:指完成一次轉換所需時間。</p><p>  2.4.2 ADC0809A/D轉換器芯片</p><p>  ADC0809是CMOS工藝,采用逐次逼近法的8位、A/D轉換芯片28引腳雙列直插式封裝,片內除A/D轉換部分外還有多路模擬開關。多路開關有8路模擬量輸入端,以及8路模擬量分時輸入,共用一個A/D轉

49、換器進行轉換。 </p><p> ?。?)ADC0809的內部邏輯結構</p><p>  由圖2.11可知,ADC0809由一個8路模擬開關、一個地址鎖存與譯碼器、一個A/D轉換器和一個三態輸出鎖存器組成。多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉換器進行轉換。三態輸出鎖器用于鎖存A/D轉換完的數字量,當OE端為高電平時,才可以從三態輸出鎖存器取走轉換完的數據。A

50、DC0809的內部邏輯結構如圖2.11所示。</p><p>  圖2.11 ADC0809的內部邏輯結構圖</p><p> ?。?)ADC0809引腳結構</p><p>  ADC0809引腳結構圖如圖2.11所示。</p><p>  D7-D0:8位數字量輸出引腳。 </p><p>  I

51、N0-IN7:8位模擬量輸入引腳。 </p><p>  VCC:+5V工作電壓。 </p><p>  GND:地。 </p><p>  REF(+):參考電壓正端。 </p><p>  REF(-):參考電壓負端。

52、 </p><p>  START:A/D轉換啟動信號輸入端。</p><p>  ALE:地址鎖存允許信號輸入端。</p><p> ?。ㄒ陨蟽煞N信號用于啟動A/D轉換)</p><p>  A、B、C:地址輸入線。 </p><p>  EOC:轉換結束信號輸出引

53、腳,開始轉換時為低電平,當轉換結束為高電平。</p><p>  OE:輸出允許控制端,用以打開三態數據輸出鎖存器。</p><p>  CLK:時鐘信號輸入端(一般為500KHz)。</p><p>  ADC0809對輸入模擬量要求:信號單極性,電壓范圍是0-5V,若信號太小,必須進行放大;輸入的模擬量在轉換過程中應該保持不變,如若模擬量變化太快,則需在輸入前增

54、加采樣保持電路。</p><p>  地址輸入和控制線:4條</p><p>  ALE為地址鎖存允許輸入線,高電平有效。當ALE線為高電平時,地址鎖存與譯碼器將A,B,C三條地址線的地址信號進行鎖存,經譯碼后被選中的通道的模擬量進轉換器進行轉換。A,B和C為地址輸入線,用于選通IN0-IN7上的一路模擬量輸入。通道選擇表如表2.3所示。</p><p>  表2.

55、3 8位模擬開關功能表</p><p>  2.5 液晶顯示器LM016L顯示模塊</p><p>  2.5.1液晶顯示器LM016L結構功能介紹</p><p>  液晶顯示器是一種將液晶顯示器件、連接器件、集成電路、PCB線路板、背光源,結構器件裝配在一起的組件。LM016L液晶模塊采用HD44780控制器。HD44780具有簡單而功能較強的指令集,可以實現

56、字符移動、閃爍等功能。HD44780控制器由兩個8位寄存器、指令寄存器(IR)和數據寄存器(DR)、忙標志(BF)、顯示數據RAM(DDRAM)、字符發生器ROM(CGROM)、字符發生器RAM(CGRAM)、地址計數器(AC)構成。</p><p>  IR用于寄存指令碼,只能寫入不能讀出;DR用于寄存數據,數據由內部操作自動寫入DDRAM和CGRAM,或者暫存從DDRAM和CGRAM讀出的數據。BF為1時,液

57、晶模塊處于內部處理模式,不響應外部操作指令和接受數據。</p><p>  DDRAM用來存儲顯示的字符,能存儲80個字符碼。</p><p>  CGROM由8位字符碼生成5 x 7點陣字符160種和5×10點陣字符32種,8位字符編碼和字符的對應關系。</p><p>  CGRAM是為用戶編寫特殊字符留用的,它的容量僅64字節??梢宰远x8個5

58、15;7點陣字符或者4個5×10點陣字符。</p><p>  AC可以存儲DDRAM和CGRAM地址,如果地址碼隨指令寫入IR,則IR自動把地址碼裝入AC,同時選擇DDRAM或者CGRAM單元。LMO16L液晶模塊的引腳功能見下表2.4所示。</p><p>  表2.4:LM016L液晶模塊的引腳功能</p><p>  2.5.2 LM016L液晶顯

59、示電路</p><p>  P2.0~P2.7與D0~D7相連,P3. 0~P3.2分別于三個使能端RS、RW、E相連,來控制LMO16L的顯示。如圖2.12所示,為LCD顯示連接電路圖。其為開機顯示的初始狀態。 </p><p>  圖2.12 LCD顯示連接電路圖</p><p>  2.6 系統總體硬件原理圖</p><p>  電路原

60、理圖用Protues軟件繪制而成。首先對硬件系統AT89C51,引腳TXAL1、TXAL2與晶振時鐘電路相連,RST引腳接復位電路。一起構成了單片機的最小系統。P2.0~P2.7與D0~D7相連,P3. 0~P3.2分別于三個使能端RS、RW、E相連,來控制LMO16L的顯示。P1.7連接的是溫度采集電路,采用傳感器DS18B20來進行溫度采集,將采集到的溫度轉換數字,由LMO16L液晶顯示屏顯示。系統原理圖如圖2.13所示:</

61、p><p>  圖2.13 系統硬件電路圖</p><p><b>  3 系統軟件設計</b></p><p>  系統程序主要包括主程序,讀出溫度子程序,溫度轉換命令子程序,計算溫度子程序,顯示數據刷新子程序。</p><p><b>  3.1軟件流程圖</b></p><p&

62、gt;  3.1.1 主程序流程圖</p><p>  主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量的當前溫度值,其程序流程見圖3.1所示。</p><p>  3.1.2溫度轉換命令子程序流程圖</p><p>  溫度轉換命令子程序主要是發溫度轉換開始命令,當采用12位分辨率時轉換時間約為750ms,在本程序設計中采用1s顯示程序延時法等

63、待轉換的完成。溫度轉換命令子程序流程圖如圖3.2所示</p><p>  圖3.1 主程序流程圖圖3.2溫度轉換流程圖</p><p>  3.2各子程序源代碼</p><p>  3.2.1 LCD的C語言源代碼</p><p>  void delayNOP()</p><p><b>  {

64、</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p>

65、<p><b>  _nop_();</b></p><p><b>  }</b></p><p>  bit lcd_busy()</p><p><b>  {</b></p><p>  bit result;</p><p>&l

66、t;b>  lcd_rs=0;</b></p><p><b>  lcd_rw=1;</b></p><p><b>  lcd_en=1;</b></p><p>  delayNOP();</p><p>  result=(bit)(P2&0x80);</p&

67、gt;<p><b>  lcd_en=0;</b></p><p>  return(result);</p><p><b>  }</b></p><p>  void lcd_wdat(uchar date)</p><p><b>  {</b><

68、/p><p>  while(lcd_busy());</p><p><b>  lcd_rs=1;</b></p><p><b>  lcd_rw=0;</b></p><p><b>  lcd_en=0;</b></p><p><b>

69、  P2=date;</b></p><p>  delayNOP();</p><p><b>  lcd_en=1;</b></p><p>  delayNOP();</p><p><b>  lcd_en=0;</b></p><p>  delayNO

70、P();</p><p><b>  }</b></p><p>  void reset()</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  lcd_wcmd(0x38);</p&

71、gt;<p>  lcd_wcmd(0x0c);</p><p>  lcd_wcmd(0x06);</p><p>  lcd_wcmd(0x01); </p><p>  lcd_wcmd(0x00|0x80);</p><p>  for(i=0;i<16;i++)</p><p><b

72、>  {</b></p><p>  lcd_wdat(dis1[i]);</p><p>  delayNOP();</p><p><b>  }</b></p><p>  lcd_wcmd(0X40|0x80);</p><p>  for(i=0;i<5;i++)

73、</p><p><b>  {</b></p><p>  lcd_wdat(dis2[i]);</p><p>  delayNOP();</p><p><b>  }</b></p><p><b>  }</b></p><

74、p>  3.2.2 DS18B20 C語言源代碼</p><p>  ds18b20_rst()</p><p><b>  {</b></p><p><b>  dq=1;</b></p><p><b>  delay(8);</b></p><

75、p><b>  dq=0;</b></p><p>  delay(90);</p><p><b>  dq=1;</b></p><p>  delay(14);</p><p><b>  x=dq;</b></p><p>  delay(

76、20);</p><p>  return (x);</p><p><b>  }</b></p><p>  ds18b20_rd()</p><p><b>  {</b></p><p>  uchar dat=0;</p><p><b

77、>  uchar i;</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p><b>  dq=0;</b></p><p><b>  dat>>=1;</b></p&g

78、t;<p><b>  dq=1;</b></p><p><b>  if(dq)</b></p><p>  dat=dat|0x80;</p><p>  delay(10);</p><p><b>  }</b></p><p>

79、  return(dat);</p><p><b>  }</b></p><p>  void ds18b20_wr(uchar com)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>

80、  for(i=0;i<8;i++)</p><p><b>  {</b></p><p><b>  dq=0;</b></p><p>  dq=com&0x01;</p><p>  delay(10);</p><p><b>  dq=1;

81、</b></p><p><b>  com>>=1;</b></p><p><b>  }</b></p><p><b>  delay(4);</b></p><p><b>  }</b></p><p

82、>  read_temp()</p><p><b>  { </b></p><p><b>  int tt;</b></p><p><b>  bit c;</b></p><p>  ds18b20_rst();</p><p>  ds

83、18b20_wr(0xcc);</p><p>  ds18b20_wr(0x44);</p><p>  ds18b20_rst();</p><p>  ds18b20_wr(0xcc);</p><p>  ds18b20_wr(0xbe);</p><p>  temp_data[0]=ds18b20_rd()

84、;</p><p>  temp_data[1]=ds18b20_rd();</p><p>  temp_data[1]<<=4;</p><p>  c=temp_data[1]&0x80;</p><p><b>  if(c==0)</b></p><p><b&

85、gt;  {</b></p><p><b>  symbol=0;</b></p><p>  t=((temp_data[0])+(temp_data[1]<<=4))*0.0625;</p><p><b>  }</b></p><p><b>  if(c

86、==1)</b></p><p><b>  {</b></p><p><b>  symbol=1;</b></p><p>  tt=~((temp_data[0])+(temp_data[1]<<=4))+1;</p><p>  t=tt*0.0625;</p

87、><p><b>  }</b></p><p>  return(t);</p><p><b>  } </b></p><p>  void ds18b20_disp()</p><p><b>  {</b></p><p>

88、  uchar flagdat;</p><p>  disdata[0]=t/100+0x30;</p><p>  disdata[1]=t%100/10+0x30;</p><p>  disdata[2]=t%10+0x30;</p><p>  disdata[4]=temp_data[0]&0x0f;</p>

89、<p>  disdata[3]=ditab[disdata[4]]+0x30;</p><p>  if(symbol==0)</p><p>  flagdat=0x20;</p><p><b>  else</b></p><p>  flagdat=0x2d;</p><p&g

90、t;  if(disdata[0]==0x30&&disdata[1]==0x30)</p><p><b>  {</b></p><p>  disdata[0]=0x20;</p><p>  disdata[1]=0x20;</p><p>  } if(disdata[0]==0x30&

91、amp;&disdata[1]!=0x30)</p><p>  disdata[0]=0x20;</p><p><b>  4 系統仿真及調試</b></p><p><b>  4.1仿真及調試</b></p><p> ?。?)安裝keil 與 proteus。</p>

92、<p> ?。?)軟件調試,在Keil軟件上輸入程序,進行編譯、連接。</p><p>  圖4.1 keil軟件下編寫程序</p><p> ?。?)在proteus進行硬件仿真。</p><p> ?。?)仿真結果:運行程序,LCD首先顯示的溫度數據與溫度傳感器DS18B20的數據一致,如圖4.2所示。按下復位鍵,顯示當時測量的室內溫度:“weath

93、er forecast tem:41.0”;重復按下復位鍵鍵,LCD刷新測量的溫度值。</p><p>  圖4.2 仿真結果電路圖</p><p>  4.2 實物過程與步驟</p><p> ?。?)查找相關元器件的使用及連接方式。如DS18B20與AT89C51的連接方式。</p><p> ?。?)對系統原理圖進行調試與分析。<

94、;/p><p> ?。?)領取元器件和耗材。</p><p> ?。?)按照元器件清單找出元器件,確認元器件質量和參數。</p><p> ?。?)完成在通用電路板上元器件的布置和焊接。</p><p> ?。?)將程序寫入單片機并裝到電路板上,接通5V電源在電路板上電調試。</p><p>  4.3 實物結果與分析&l

95、t;/p><p> ?。?)實物圖結果分析:</p><p>  如實物圖所示本次設計的基于單片機89C51的溫度測量儀實物圖,其顯示端和測量端通過一系列的元件連接起來。為了驗證數據轉換的可靠性,設計時安裝了LCD顯示器,在測試中通過觀察顯示端與測量端是否顯示相同的溫度值來檢驗數據傳送的可靠性。圖中為實物圖,測得現場的環境溫度為29度,與實際情況相符,驗證了測量端電路能夠有效工作,同時顯示端溫

96、度值與測量端溫度值保持一致,證明了數據傳送的可靠性,此外,當按下復位鍵時,顯示端的溫度值和測量端的溫度值同時發生改變,DS18B20傳感器則重新測量溫度,重復上一次的系統信號轉換,LCD顯示器重新顯示當前值。此設計在環境惡劣的情況下依然可以觀察到環境溫度的變化,尤其是需要測惡劣環境下溫度時,避免了人員直接置身其中,保障了其安全性。</p><p> ?。?)實驗操作結果列表如下</p><p&

97、gt;  表4.1 實驗操作項目表</p><p><b>  5 設計總結及心得</b></p><p>  在為期兩周的單片機課程設計中,我們要設計一個溫度測量系統。軟件使用Keil軟件進行仿真調試。硬件使用單片機仿真器、編程器、實驗儀三合一綜合開發平臺上的DS18B20數字溫度采集模塊和LMO16L液晶顯示模塊。唐博士首先給我們詳細講解了芯片的功能和工作原理,

98、并給了一份參考程序。在機房進行實驗時,我們也遇到了很多困難,例如在做實物圖時我們將溫度傳感器的引腳接反了,經過再三細心檢查和查資料最終才更正過來。在對參考程序進行仿真時,結果也出了問題。然后,我思考設計要求對程序進行修改,初次修改沒有成功,我詢問了老師,老師給我講解了思路。經過再三的請教、修改程序,反復調試,最后成功了,心里非常高興,這次是我獨自思考,獨立完成的,也使我對整個程序有了更深的理解。</p><p>

99、  通過這次的課程設計作品的制作讓我對單片機的理論有了更加深入的了解,同時在具體的制作過程中我們發現現在書本上的知識與實際的應用存在著不小的差距,書本上的知識很多都是理想化后的結論,忽略了很多實際的因素,或者涉及的不全面,可在實際的應用時這些是不能被忽略的,我們不得不考慮這方的問題,這讓我們無法根據書上的理論就輕易得到預想中的結果,有時結果甚至很差別很大。通過這次實踐使我更深刻的體會到了理論聯系實際的重要性,我們在今后的學習工作中會更加

100、的注重實際,避免稱為只會紙上談兵。</p><p><b>  參考文獻:</b></p><p>  [1]樓然苗. 單片機課程設計指導[M].北京:北京航空航天大學出版社,2007:35—47.</p><p>  [2]張克農.數字電子技術基礎[M].北京:高等教育出版社,2003:255—271.</p><p>

101、;  [3]胡宴如.模擬電子技術基礎[M].北京:高等教育出版社,2001:91—111.</p><p>  [4]李朝青.單片機原理及接口技術[M].北京:北京航空航天大學出版社,1999:17—277.</p><p>  [5]謝自美.電子線路設計、實驗、測試[M].武漢:華中理工大學出版社,2003:23—57.</p><p>  [6]康華光.電子技術

102、基礎[M].北京:高等教育出版社,2002:13—34.</p><p>  [7]李強.數字電子技術基礎教程[M].北京:電子工業出版社,2002:25—45.</p><p>  [8]趙志杰.集成電路應用識圖方法[M].北京:機械工業出版社,2003:10—31.</p><p><b>  附錄Ⅰ:</b></p><

103、;p>  #include<reg51.h></reg51.h> </p><p>  #include<intrins.h></intrins.h></p><p>  #include<absacc.h></absacc.h></p><p>  #define uchar unsi

104、gned char </p><p>  #define uint unsigned int</p><p>  sbit lcd_rs=P3^0; </p><p>  sbit lcd_rw=P3^1;</p><p>  sbit lcd_en=P3^2;</p><p>  sbit

105、dq=P1^7;</p><p>  uchar code dis1[]={"Weather forecast"};</p><p>  uchar code dis2[]={"temp:"};</p><p>  temp_data[]={0x00,0x00};</p><p>  disdata[]

106、={0x00,0x00,0x00,0x00,0x00};</p><p>  uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,</p><p>  0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};</p><p><b>  bit x;</

107、b></p><p><b>  uint t;</b></p><p>  uchar symbol;</p><p>  /*******************************************************/</p><p>  void delay(uint ms)</

108、p><p><b>  {</b></p><p>  while(ms--);</p><p><b>  }</b></p><p>  void delayNOP()</p><p><b>  {</b></p><p>&l

109、t;b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();<

110、;/b></p><p><b>  }</b></p><p>  /***************************************************/</p><p>  /*檢查LCD忙狀態 */ /*lcd_busy為1時,忙,等待。</p><p>  lcd-busy為0時,閑,可

111、寫指令與數據。 */ /**************************************************/</p><p>  bit lcd_busy()</p><p><b>  {</b></p><p>  bit result;</p><p><b>  lcd_rs=0;&l

112、t;/b></p><p><b>  lcd_rw=1;</b></p><p><b>  lcd_en=1;</b></p><p>  delayNOP();</p><p>  result=(bit)(P2&0x80);</p><p><b&

113、gt;  lcd_en=0;</b></p><p>  return(result);</p><p><b>  }</b></p><p>  /*寫指令數據到LCD */ </p><p>  /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */ /*********************

114、***************************/</p><p>  void lcd_wcmd(uchar cmd)</p><p><b>  {</b></p><p>  while(lcd_busy());</p><p><b>  lcd_rs=0;</b></p>

115、<p><b>  lcd_rw=0;</b></p><p><b>  lcd_en=0;</b></p><p><b>  P2=cmd;</b></p><p>  delayNOP();</p><p><b>  lcd_en=1;<

116、/b></p><p>  delayNOP();</p><p><b>  lcd_en=0;</b></p><p>  delayNOP();</p><p><b>  }</b></p><p>  /****************************

117、*********************/ </p><p>  /*寫顯示數據到LCD */ </p><p>  /*RS=H,RW=L,E=高脈沖,D0-D7=數據。 */ /***********************************************/</p><p>  void lcd_wdat(uchar date)</p&g

118、t;<p><b>  {</b></p><p>  while(lcd_busy());</p><p><b>  lcd_rs=1;</b></p><p><b>  lcd_rw=0;</b></p><p><b>  lcd_en=0;&

119、lt;/b></p><p><b>  P2=date;</b></p><p>  delayNOP();</p><p><b>  lcd_en=1;</b></p><p>  delayNOP();</p><p><b>  lcd_en=0;&

120、lt;/b></p><p>  delayNOP();</p><p><b>  }</b></p><p>  /* LCD初始化設定 */ </p><p>  /*****************************************************/</p><p&

121、gt;  void reset()</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  lcd_wcmd(0x38); //16*2顯示,5*7點陣,8位數據</p><p>  lcd_wcmd(0x0c); //顯示開,關光標<

122、/p><p>  lcd_wcmd(0x06); //移動光標</p><p>  lcd_wcmd(0x01); //清除LCD的顯示內容</p><p>  /* 設定顯示位置 */ </p><p>  /****************************************************/</p><

123、;p>  lcd_wcmd(0x00|0x80); //數據指針=80+地址變量</p><p>  /*自定義字符寫入CGRAM */ </p><p>  /****************************************************/</p><p>  for(i=0;i&lt;16;i++)</p>

124、<p><b>  {</b></p><p>  lcd_wdat(dis1[i]);</p><p>  delayNOP();</p><p><b>  }</b></p><p>  /*us級延時函數 */</p><p>  /************

125、****************************************/</p><p>  lcd_wcmd(0X40|0x80);</p><p>  for(i=0;i&lt;5;i++)</p><p><b>  {</b></p><p>  lcd_wdat(dis2[i]);</p

126、><p>  delayNOP();</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*初始化ds1820 */ </p><p>  /********************************************

127、**/</p><p>  ds18b20_rst()</p><p><b>  {</b></p><p>  dq=1; //拉高總線</p><p>  delay(8); //稍做延時</p><p>  dq=0; //DQ復位</p><p>  delay(

溫馨提示

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

評論

0/150

提交評論