畢業設計基于51單片機的溫度控制系統設計_第1頁
畢業設計基于51單片機的溫度控制系統設計_第2頁
畢業設計基于51單片機的溫度控制系統設計_第3頁
畢業設計基于51單片機的溫度控制系統設計_第4頁
畢業設計基于51單片機的溫度控制系統設計_第5頁
已閱讀5頁,還剩36頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、基于mcs-51單片機的溫度控制系統設計摘 要本文提出了基于mcs-51系列單片機的數字溫度計的制作電路和編程思想。該數字溫度計以atmel公司的at89s52 單片機為主控,配以達拉斯公司的ds18b20數字溫度傳感器,采用1602雙行英文字符液晶作顯示。實現了對溫度的測量,顯示,和報警等功能。關鍵詞: at89s52單片機;數字傳感器ds18b20;顯示器1602lcd;目 錄摘要iabstractii1 緒論21.1 選題的背景21.2 數字溫度計簡介21.2.1 數字溫度計的特征21.2.2 設計實現的目標32 數字溫度計的方案設計42.1 設計方案論證與比較42.1.1 顯示電路方案

2、42.1.2 測溫電路方案42.2 系統總體方案43 數字溫度計的硬件電路設計53.1 控制電路53.1.1 mcu簡介53.2.2 最小系統模塊63.3 溫度傳感器設計73.3.1 ds18b20簡介73.3.2 溫度傳感器與單片機的連接93.3.3 復位信號及外部復位電路103.4 單片機與報警電路103.5 顯示電路104 軟件設計124.1 ds18b20的讀操作124.2 ds18b20的溫度數據處理134.3 1602顯示部分145 運行測試165.1溫度測試 275.2報警設置 285.3 報警測試 29參考文獻30附錄1 程序源代碼311 緒論1.1 選題的背景隨著現代信息技術

3、的飛速發展和傳統工業改造的逐步實現能夠獨立工作的溫度檢測和顯示系統應用于諸多領域。傳統的溫度檢測以熱敏電阻為溫度敏感元件。熱敏電阻的成本低,但需后續信號處理電路,而且可靠性相對較差,測溫準確度低,檢測系統也有一定的誤差。與傳統的溫度計相比,這里設計的數字溫度計具有讀數方便,測溫范圍廣,測溫精確,數字顯示,適用范圍寬等特點。選用at89s52單片機作為主控制器件,dsl8b20作為測溫傳感器通過lcd1602并行傳送數據,實現溫度顯示。通過dsl8b20直接讀取被測溫度值,進行數據轉換,該器件的物理化學性能穩定,線性度較好,在-55125最大線性偏差小于0.1。該器件可直接向單片機傳輸數字信號,

4、便于單片機處理及控制。另外,該溫度計還能直接采用測溫器件測量溫度,從而簡化數據傳輸與處理過程。1.2 數字溫度計簡介1.2.1 數字溫度計的特征溫度是我們日常生產和生活中實時在接觸到的物理量,但是它是看不到的,僅憑感覺只能感覺到大概的溫度值,傳統的指針式的溫度計雖然能指示溫度,但是精度低,使用不夠方便,顯示不夠直觀,數字溫度計的出現可以讓人們直觀的了解自己想知道的溫度到底是多少度。數字溫度計采用進口芯片組裝精度高、高穩定性,誤差0.5%, 內電源、微功耗、不銹鋼外殼,防護堅固,美觀精致。數字溫度計采用進口高精度、低溫漂、超低功耗集成電路和寬溫型液晶顯示器,內置高能量電池連續工作5年無需敷設供電

5、電纜,是一種精度高、穩定性好、適用性極強的新型現場溫度顯示儀。是傳統現場指針雙金屬溫度計的理想替代產品,廣泛應用于各類工礦企業,大專院校,科研院所。數字溫度計采用溫度敏感元件也就是溫度傳感器(如鉑電阻,熱電偶,半導體,熱敏電阻等),將溫度的變化轉換成電信號的變化,如電壓和電流的變化,溫度變化和電信號的變化有一定的關系,如線性關系,一定的曲線關系等,這個電信號可以使用模數轉換的電路即ad轉換電路將模擬信號轉換為數字信號,數字信號再送給處理單元,如單片機或者pc機等,處理單元經過內部的軟件計算將這個數字信號和溫度聯系起來,成為可以顯示出來的溫度數值,如25.0攝氏度,然后通過顯示單元,如led,l

6、cd或者電腦屏幕等顯示出來給人觀察。這樣就完成了數字溫度計的基本測溫功能。數字溫度計根據使用的傳感器的不同,ad轉換電路,及處理單元的不同,它的精度,穩定性,測溫范圍等都有區別,這就要根據實際情況選擇符合規格的數字溫度計。1.2.2 設計實現的目標1) 采集測溫范圍為-55+120 .2) 溫度精度在0.1 ;誤差0.2以內.3) 顯示模塊,采用1602液晶顯示.4) 按鍵3個,設置、加、減.5) 報警設置10-90度.低于下限報警,高于上限報警。2 數字溫度計的方案設計2.1 設計方案論證與比較2.1.1 顯示電路方案方案一:采用數碼管動態顯示使用七段led數碼管,采用動態顯示的方法來顯示各

7、項指標,此方法雖然價格成本低,但是顯示單一,且功耗較大。方案二:采用lcd液晶顯示采用1602 lcd液晶顯示,此方案顯示內容相對豐富,且價格不高。綜合上述原因,采用方案二,使用lcd液晶作顯示電路。2.1.2 測溫電路方案方案一:采用模擬溫度傳感器測溫由于本設計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應,在將隨被測溫度變化的電壓或電流采集過來,進行a/d轉換后,就可以用單片機進行數據的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設計需要用到a/d轉換電路,感溫電路比較麻煩。方案二:采用數字溫度傳感器進而考慮到用溫度傳感器,在單片機電路設計中,大多都是使用傳感器,所以這是非常容

8、易想到的,所以可以采用一只溫度傳感器ds18b20,此傳感器,可以很容易直接讀取被測溫度值,進行轉換,就可以滿足設計要求。綜合考慮,很容易看出,采用方案二,電路比較簡單,軟件設計也比較簡單,故采用了方案二。2.2 系統總體方案根據上述方案比較,結合題目要可以將系統分為主控模塊,顯示模塊,溫度采集模塊和報警模塊,其框圖如下: ds18b20溫度數據采集設置按鍵鍵驅動顯示報警電路 mcu圖2-1 系統總體設計框圖3 數字溫度計的硬件電路設計3.1 控制電路3.1.1 mcu簡介cpu是整個控制部分的核心。在考慮經濟性和滿足需求的前提下,本系統選用atmel公司生產的8位at89s52單片機作為整個

9、系統的控制中心。at89s52是atmel公司生產的低功耗,高性能cmos8位單片機,片內含4k bytes的可系統編程的flash只讀程序存儲器,器件采用atmel公司的高密度、非易失性存儲技術生產,兼容標準8051指令系統及引腳,它集flash存儲器既可在線編輯(isp)也可用傳統方法進行編輯及通用8位微處理器于單片芯片中,功能強大at89s52單片機可為您提供許多高性價比的應用場合。器管腳圖如圖3-2:圖3-1 at89s52管腳圖在本系統中,at89s52單片機內部的功能單元已經能夠滿足系統設計需要,不需要系統擴展。at89s52具有以下的特點: 8031 cpu與mcs-51 兼容

10、壽命:1000寫/擦循環 4k字節可編程flash存儲器 全靜態工作:0-24mhz 三級程序存儲器保密鎖定 128*8位內部ram 32條可編程i/o線 兩個16位定時器/計數器 6個中斷源 可編程串行通道 低功耗的閑置和掉電模式 片內振蕩器和時鐘at89s52 是一種低功耗、高性能cmos8位微控制器,具有 8k 在系統可編程flash 存儲器。使用atmel 公司高密度非 易失性存儲器技術制造,與工業80c51 產品指令和引腳完 全兼容。片上flash允許程序存儲器在系統可編程,亦適于 常規編程器。在單芯片上,擁有靈巧的8 位cpu 和在系統 可編程flash,使得at89s52為眾多嵌

11、入式控制應用系統提 供高靈活、超有效的解決方案。at89s52具有以下標準功能: 8k字節flash,256字節ram, 32 位i/o 口線,看門狗定時器,2 個數據指針,三個16 位 定時器/計數器,一個6向量2級中斷結構,全雙工串行口, 片內晶振及時鐘電路。此外, at89s52 可降至0hz 靜態邏 輯操作,支持2種軟件可選擇節電模式??臻e模式下,cpu 停止工作,允許ram、定時器/計數器、串口、中斷繼續工 作。掉電保護方式下,ram內容被保存,振蕩器被凍結, 單片機一切工作停止,直到下一個中斷或硬件復位為止。8 位微控制器 8k 字節在系統可編程 flash。同時該芯片還具有pdi

12、p、tqfp和plcc等三種封裝形式,以適應不同產品的需求。3、at89s52引腳功能at89s52 單片機為40 引腳芯片見圖3.2.1-2。圖3.2.1-2 at89s52引腳圖(1)口線:p0、p1、p2、p3 共四個八位口。p0 口:p0口是一個8位漏極開路的雙向i/o口。作為輸出口,每位能驅動8個ttl邏輯電平。 對p0端口寫“1”時,引腳用作高阻抗輸入。 當訪問外部程序和數據存儲器時,p0口也被作為低8位地址/數據復用。在這種模式下,p0不具有內部上拉電阻。 在flash編程時,p0口也用來接收指令字節;在程序校驗時,輸出指令字節。程序校驗時,需要外部上拉電阻。 p1口:p1 口是

13、一個具有內部上拉電阻的8 位雙向i/o 口,p1 輸出緩沖器能驅動4 個ttl 邏輯電平。對p1 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(iil)。 此外,p1.0和p1.1分別作定時器/計數器2的外部計數輸入(p1.0/t2)和定時器/計數器2的觸發輸入(p1.1/t2ex),具體如下表所示。 在flash編程和校驗時,p1口接收低8位地址字節。 引腳號第二功能: p1.0 t2(定時器/計數器t2的外部計數輸入),時鐘輸出 p1.1 t2ex(定時器/計數器t2的捕捉/重載觸發信號和方向控制) p1.5

14、 mosi(在系統編程用) p1.6 miso(在系統編程用) p1.7 sck(在系統編程用)p2口:p2 口是一個具有內部上拉電阻的8 位雙向i/o 口,p2 輸出緩沖器能驅動4 個ttl 邏輯電平。對p2 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(iil)。 在訪問外部程序存儲器或用16位地址讀取外部數據存儲器(例如執行movx dptr) 時,p2 口送出高八位地址。在這種應用中,p2 口使用很強的內部上拉發送1。在使用8位地址(如movx ri)訪問外部數據存儲器時,p2口輸出p2鎖存器的內容。 在

15、flash編程和校驗時,p2口也接收高8位地址字節和一些控制信號。 p3 口:p3 口是一個具有內部上拉電阻的8 位雙向i/o 口,p3 輸出緩沖器能驅動4 個ttl 邏輯電平。對p3 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(iil)。 p3口亦作為at89s52特殊功能(第二功能)使用。 在flash編程和校驗時,p3口也接收一些控制信號。 此外,p3口還接收一些用于flash閃存編程和程序校驗的控制信號。 (2)其他引腳說明:rst:復位輸入。晶振工作時,rst腳持續2 個機器周期高電平將使單片機復位。

16、看門狗計時完成后,rst 腳輸出96 個晶振周期的高電平。特殊寄存器auxr(地址8eh)上的disrto位可以使此功能無效。disrto默認狀態下,復位高電平有效。 ale/prog當訪問外部程序存儲器或數據存儲器時,ale(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節。一般情況下,ale仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數據存儲器時將跳過一個ale脈沖。 對flash存儲器編程期間,該引腳還用于輸入編程脈沖(prog)。 如有必要,可通過對特殊功能寄存器(sfr)區中的8eh單元的d0位置位,可禁止ale操作。該位置位

17、后,只有一條movx和movc指令才能將ale激活。此外,該引腳會被微弱拉高,單片機執行外部程序時,應設置ale禁止位無效。 psen程序儲存允許(psen)輸出是外部程序存儲器的讀選通信號,當at89s52由外部程序存儲器取指令(或數據)時,每個機器周期兩次psen有效,即輸出兩個脈沖,在此期間,當訪問外部數據存儲器,將跳過兩次psen信號。 ea/vpp外部訪問允許,欲使cpu僅訪問外部程序存儲器(地址為0000h-ffffh),ea端必須保持低電平(接地)。需注意的是:如果加密位lb1被編程,復位時內部會鎖存ea端狀態。 如ea端為高電平(接vcc端),cpu則執行內部程序存儲器的指令。

18、 flash存儲器編程時,該引腳加上+12v的編程允許電源vpp,當然這必須是該器件是使用12v編程電壓vpp。 xtal1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。 xtal2:來自反向振蕩器的輸出。 xtal1,xtal2接石英晶體振蕩器。如圖3.2.1-3所示外接晶體引腳圖。 c2 xtal2 懸空 xtal2 c1 xtal1 外部振蕩信號 xtal1 gnd gnd 接地 接地a內部方式 b外部方式圖3.2.1-3晶振外接結構引腳圖xtal1是片內振蕩器的反相放大器輸入端,xtal2則是輸出端,使用外部振蕩器時,外部振蕩信號應直接加到xtal1,而xtal2懸空。內部方式時,時

19、鐘發生器對振蕩脈沖二分頻,如晶振為12mhz,時鐘頻率就為6mhz。晶振的頻率可以在1mhz-24mhz內選擇,在本設計電路中選用了12mhz。電容取20pf左右。機器周期12時間周期,如12mhz的機器周期為1微秒。(3)控制或復位引腳reset 此腳為高電平時(約2個機器周期)可將單片機復位。rst/vpd當出現兩個機器周期高電平時,單片機復位。復位后,p0p3輸出高電平;sp寄存器為07h;其它寄存器全部清0;不影響ram狀態。如圖3.2.1-4所示。 圖3.2.1-4 按鍵電平復位 at89sxx系列單片機實現了isp下載功能,故而取代了89cxx系列的下載方式,也是因為這樣,atme

20、l公司已經停止生產89cxx系列的單片機,現在市面上的at89cxx多是停產前的庫存產品。 4、at89s52的編程方法 編程前,須按編程模式表設置好地址、數據及控制信號;順序如下: 在地址線上加上要編程單元的地址信號。 在數據線上加上要寫入的數據字節。 激活相應的控制信號。 將ea/vpp端加上+12v編程電壓。 每對flash存儲陣列寫入一個字節或每寫入一個程序機密位,加上一個ale/prog編程脈沖。每個字節寫入周期是自身定時的,大多數約為50us。改變編程單元的地址和寫入的數據,重復步驟,直到全部文件編程結束。單片機的現狀及發展方向:單片機是為了工業控制需要滿足而誕生的,是自動控制系統

21、的核心部件,因而也主要用于工業控制、智能化儀器儀表、家用電器中。它具有體積小,功能多、價格低、使用方便、系統設計靈活等優點,應用領域不斷擴大,除了工業控制,智能化儀表,通訊,家用電器外,在智能化高檔電子玩具產品中也大量采用單片機芯片作為核心控制部件。由于單片機主要面向工業控制,工作環境比較惡劣,入高溫,強電磁干擾,甚至含有腐蝕性氣體,在太空中工作的單片機控制系統,還必須具有抗輻射能力,這決定了單片機cpu于通用微機cpu具有不同的技術特征和發展方向:(1) 可靠性高;(2) 控制功能往往很強,數值計算交叉;(3) 指令系統比通用微處理器慢的多;(4) x系列芯片取代;(5) 抗干擾性強,工作溫

22、度范圍寬。3.2.2 最小系統模塊本次設計中,選用atmel公司的51系列單片機at89s52芯片作為電子密碼電源開關的數據處理及操作控制芯片。只有單片機芯片無法完成數據處理及控制功能,必須有附加的電路,使單片機芯片組成一個可運行的系統才能實現其功能。本次設計中,由at89s52芯片連同附加電路構成的單片機最小系統作為數據處理及控制模塊,其中,使用p1口作為1602液晶的數據傳輸口,p3口作1602的命令數據控制、時鐘、讀寫控制、和使能控制接口,p2口作按鍵掃描接口,p2.3作ds18b20的總線接口。p2.5,p2.7作報警控制接口。其電路連接圖3-3如下:圖3-2 數據處理及控制模塊3.3

23、 溫度傳感器設計3.3.1 ds18b20簡介ds18b20可以程序設定912位的分辨率,精度為0.5c??蛇x更小的封裝方式,更寬的電壓適用范圍。分辨率設定,及用戶設定的報警溫度存儲在eprom中,掉電后依然保存。溫度傳感器ds18b20引腳如圖3-4所示。圖3-3 ds18b20to92封裝溫度傳感器引腳功能說明:vdd :可選電源腳,電源電壓范圍35.5v。當工作于寄生電源時,此引腳必須接地。dq :數據輸入/輸出腳。漏極開路,常態下高電平。gnd :為電源地圖3-4 ds18b20內部結構圖ds18b20內部結構主要由四部分組成:64位光刻rom、溫度傳感器、非揮發的溫度報警觸發器th和

24、tl、配置寄存器。光刻rom中的64位序列號是出廠前被光刻好的,它可以看作是該ds18b20的地址序列碼。64位光刻rom的排列是:開始8位(28h)是產品類型標號,接著的48位是該ds18b20自身的序列號,最后8位是前面56位的循環冗余校驗碼(crc=x8+x5+x4+1)。光刻rom的作用是使每一個ds18b20都各不相同,這樣就可以實現一根總線上掛接多個ds18b20的目的。 ds18b20中的溫度傳感器可完成對溫度的測量,以12位轉化為例:用16位符號擴展的二進制補碼讀數形式提供,以0.0625/lsb形式表達,其中s為符號位。 這是12位轉化后得到的12位數據,存儲在18b20的兩

25、個8比特的ram中,二進制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于0.0625即可得到實際溫度。 例如+125的數字輸出為07d0h,+25.0625的數字輸出為0191h,-25.0625的數字輸出為ff6fh,-55的數字輸出為fc90h。 ds18b20溫度傳感器的內部存儲器包括一個高速暫存ram和一個非易失性的可電擦除的e2ram,后者存放高溫度和低溫度觸發器th、tl和結構寄存器。 暫存存儲器包含了8個連續字節,前兩個字節是測得的溫度信息,第一個字節的內容是溫度的

26、低八位,第二個字節是溫度的高八位。第三個和第四個字節是th、tl的易失性拷貝,第五個字節是結構寄存器的易失性拷貝,這三個字節的內容在每一次上電復位時被刷新。第六、七、八個字節用于內部計算。第九個字節是冗余檢驗字節。 該字節各位的意義如下:tm r1 r0 1 1 1 1 1低五位一直都是1 ,tm是測試模式位,用于設置ds18b20在工作模式還是在測試模式。在ds18b20出廠時該位被設置為0,用戶不要去改動。r1和r0用來設置分辨率,如表1所示:(ds18b20出廠時被設置為12位)表3-3 ds18b20溫度轉換時間表r1r0分辨率/位溫度最大轉向時間00993.750110187.510

27、113751112750根據ds18b20的通訊協議,主機控制ds18b20完成溫度轉換必須經過三個步驟:每一次讀寫之前都要對ds18b20進行復位,復位成功后發送一條rom指令,最后發送ram指令,這樣才能對ds18b20進行預定的操作。復位要求主cpu將數據線下拉500微秒,然后釋放,ds18b20收到信號后等待1660微秒左右,后發出60240微秒的存在低脈沖,主cpu收到此信號表示復位成功。3.3.2 溫度傳感器與單片機的連接溫度傳感器的單總線(1-wire)與單片機的p20連接,p20是單片機的高位地址線a8。p2端口是一個帶內部上拉電阻的8位雙向io,其輸出緩沖級可驅動(吸收或輸出

28、電流)4個ttl邏輯門電路。對該端口寫“1”,可通過內部上拉電阻將其端口拉至高電平,此時可作為輸入口使用,這是因為內部存在上拉電阻,某一引腳被外部信號拉低時會輸出一個電流。在訪問外部程序存儲器或16位地址的外部數據存儲器時。如執行movx dptr指令,則表示p2端口送出高8位的地址數據。在訪問8位地址的外部數據存儲器時,可執行movx ri指令,p2端口內容即為特殊功能寄存器(sfr)區中r2寄存器內容,整個訪問期間不改變。在flash編程和程序校驗時,p2端口也接收高位地址和其他控制信號。圖3-5為dsl8820內部結構。圖3-6為dsl8820與單片機的接口電路。圖3-5 ds18b20

29、和單片機的接口連接3.3.3 復位信號及外部復位電路該復位信號高電平有效,其有效時間應持續24個振蕩脈沖周期即兩個機器周期以上。若使用頻率為12 mhz的晶體振蕩器,則復位信號持續時間應超過2s才完成復位操作。圖3-6 復位電路3.4 單片機與報警電路系統中的報警電路是由發光二極管和限流電阻組成,并與單片機的p2.6端口連接。3.5 顯示電路1、應用簡介模塊內部自帶字符發生存儲器(cgrom),字符有:阿拉伯數字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“a”的代碼是(41h),顯示時模塊把代碼41h發給液晶模塊,我們就能在液晶上看到字母“a

30、”。1602液晶模塊內部的控制器共有11條控制指令,豐富的指令可以完成液晶的時序控制、工作方式式設置和數據顯示等。采用的lcd1602液晶模塊是標準16針插座,接口電路如圖3.2.3所示:關于lcd1602的詳細資料見表3.2.3-1和表3.2.3-2。圖3.2.3 顯示電路的連接圖4 軟件設計4.1 ds18b20的讀操作dsl8b20的主要數據元件有:64位激光lasered rom,溫度靈敏元件和非易失性溫度告警觸發器th和tl。dsl8b20可以從單總線獲取電源,當信號線為高電平時,將能量貯存在內部電容器中;當單信號線為低電平時,將該電源斷開,直到信號線變為高電平重新接上寄生(電容)電

31、源為止。此外,還可外接5 v電源,給dsl8b20供電。dsl8b20的供電方式靈活,利用外接電源還可增加系統的穩定性和可靠性。ds18b20讀寫時序如圖4-14-3:圖4-1 ds18b20的復位時序圖圖4-2 ds18b20的寫數據時序圖圖4-3 ds18b20的讀數據時序圖由時序圖可知,ds18b20在復位時需要480us的低電平,等待15us后mcu將總線拉高,等待ds18b20的響應信號;ds18b20在寫數據時分為寫“0”和寫“1”操作,寫“0”操作時,ds18b20需要至少60us的總線被拉低,然后在60us內將“0”寫入ds18b20中,持續時間至少1us,寫“1”操作是只需將

32、寫入的“0”改為“1”即可;ds18b20讀操作也分為讀“0”和讀“1”操作,讀“0”操作時,總線需要15us被拉低,再拉高45us,然后再15us內將數據讀走,讀“1”操作同讀“0”操作。程序流程圖如圖4-4:開始ds18b20的初始化啟動溫度轉換讀取溫度寄存器跳過讀序列號的操作跳過讀序列號的操作ds18b20的初始化retlow-低八位 high-高八位圖4-4 ds18b20讀取溫度的流程圖4.2 ds18b20的溫度數據處理讀出溫度數據后,low的低四位為溫度的小數部分,可以精確到0.0625,low的高四位和high的低四位為溫度的整數部分,high的高四位全部為1表示負數,全為0表

33、示正數。所以先將數據提取出來,分為三個部分:小數部分、整數部分和符號部分。小數部分進行四舍五入處理:大于0.5的話,向個位進1;小于0.5的時候,舍去不要。當數據是個負數的時候,顯示之前要進行數據轉換,將其整數部分取反加一。還因為ds18b20最低溫度只能為-55,所以可以將整數部分的最高位換成一個“-”,表示為負數。圖4-2為溫度數據處理程序的流程圖。開始提取整數部分存入ht提取小數部分存入ltlt右移三位,將精度降低到0.5攝氏度ht+將小數部分整數化提取符號部分存入signlt是否大于5是否為負數ret負數標志flag=1ynny圖4-5 溫度數據處理流程圖4.3 1602顯示部分160

34、2的讀寫時序圖如下:圖4-6 1602液晶的讀時序圖圖4-7 1602的寫時序圖根據以上時序圖可以得出讀寫程序流程圖如下:開始選擇寫數據寫命令rs=1|rs=0選擇寫操作rw=1使能en準備好寫入的數據db0db7禁止en結束開始選擇寫數據寫命令rs=1|rs=0選擇讀操作rw=0使能en禁止en結束圖4-8 1602的寫流程圖圖4-8 1602的讀流程圖5 運行測試5.1.開機溫度測試5.2.設置溫度測試5.3報警測試6 結語本文重點介紹了單片機和數字傳感器ds18b20的原理和功能,并用ds18b20與at89s52單片機、lcd1602組成數字溫度計,有超溫報警功能。 在本次設計的過程中

35、,我發現很多的問題,雖然以前還做過這樣的設計但這次設計真的讓我長進了很多,單片機課程設計重點就在于軟件算法的設計,需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個程序并不是一件簡單的事,舉個例子,以前寫的那幾次,數據加減時,我用的都是bcd碼,這一次,我全部用的都是16進制的數直接加減,顯示處理時在用除法去刪分,感覺效果比較好,有好多的東西,只有我們去試著做了,才能真正的掌握,只學習理論有些東西是很難理解的,更談不上掌握。參考文獻【1】作著:姜濤【2】書名:基于單片機的數字式溫度計設計【3】出版社:西北電力學?!?】出版年月:2012.3.19【5】頁碼:27頁附錄一:仿真電路圖

36、附錄二:系統程序清單#include#include#define uint unsigned int#define uchar unsigned char/-sbit s1=p20; /設置 上下限sbit s2=p21; /加sbit s3=p22; /減/-lcd1602-/p0-7= d0-7#define lcddata p1sbit rs=p30;sbit wela=p31;sbit lcden=p32;/-sbit dq1=p23; /傳感器1sbit led1=p26; /報警顯示燈sbit buz=p27; /蜂鳴器uchar dq1_set2; /dq1上下限設置 dq1_

37、set0 下限 dq1_set1 上限;uchar temp; /溫度報警uchar count; /蜂鳴器定時用uchar mode; /mode=1正常顯示 mode=2 設置下限模式 mode=3設置上限 uchar code table=temper ;/ds18b20/uchar ng; /負號標志uchar code df_table= 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9; /溫度小數位對照表uchar currentt = 0; /當前讀取的溫度整數部分uchar temp_value=0x00,0x00; /從ds18b20讀取的溫度值uchar d

38、isplay_digit=0,0,0,0,0,0,0,0;/待顯示的各溫度數位bit ds18b20_is_ok = 1; /傳感器正常/ds18b20/延時/*/ 函數: lcd_delay()/ 描述: 延時t ms函數/ 參數: t / 返回: 無/ 備注: 12mhz t=1延時時間約1ms/ 版本: 2011/01/01 first version/*/void delay_ms(unsigned int t)unsigned int i,j;for(i=0;it;i+)for(j=0;j0;x-)for(y=120;y0;y-);void write_com(uchar com)

39、/1602液晶寫指令rs=0;lcden=0;lcddata=com;delayms(1);lcden=1;delayms(2);lcden=0;void write_date(uchar date) /1602液晶寫數據 rs=1;lcden=0;lcddata=date;delayms(1);lcden=1;delayms(2);lcden=0;void init_lcd(void) /初始化液晶,及畫面初始化uchar num;wela=0;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);wr

40、ite_com(0x80);for(num=0;num13;num+) / temper: ;write_date(tablenum);delay(10); /-1602-/初始化ds18b20uchar init_ds18b20() uchar status; dq1 = 1;delay(8); /延時dq1 = 0;delay(90);/延時dq1 = 1;delay(8);status = dq1;delay(100);dq1 = 1;return status;/讀一個字節uchar readonebyte() uchar i,dat=0;dq1 = 1;_nop_();for(i=0

41、;i= 1;dq1 = 1;_nop_();_nop_();if(dq1)dat |= 0x80;delay(30);dq1 = 1;return (dat); /寫一個字節void writeonebyte(uchar dat) uchar i;for(i=0;i= 1; /讀溫度值void read_temperature() ea=0; if(init_ds18b20()=1)ds18b20_is_ok=0;else writeonebyte(0xcc); /跳過序列號writeonebyte(0x44); /啟動溫度轉換init_ds18b20();writeonebyte(0xcc);/跳過序列號writeonebyte(0xbe);/讀取溫度寄存器temp_value0 = readonebyte(); /溫度低8位temp_value1 = readonebyte();/溫度高8位ds18b20_is_ok=1;ea=1;/處理溫度值void display_temperature()/ uchar i;uchar t = 150;/,延時 ng = 0; /與負值標志if(temp_value1&0xf8)=0xf8) temp_value1 = temp_value1;temp_value0 = temp_value0

溫馨提示

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

評論

0/150

提交評論