基于51單片機的數(shù)字溫度計設(shè)計_第1頁
基于51單片機的數(shù)字溫度計設(shè)計_第2頁
基于51單片機的數(shù)字溫度計設(shè)計_第3頁
基于51單片機的數(shù)字溫度計設(shè)計_第4頁
基于51單片機的數(shù)字溫度計設(shè)計_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上基于51單片機的數(shù)字溫度計設(shè)計摘要 隨著現(xiàn)代信息技術(shù)的飛速發(fā)展和傳統(tǒng)工業(yè)改造的逐步實現(xiàn)能夠獨立工作的溫度檢測和顯示系統(tǒng)應(yīng)用于諸多領(lǐng)域。這里設(shè)計的數(shù)字溫度計采用DS18B20為傳感器,選用AT89C51型單片機作為主控制器件,通過4位一體共陽極的數(shù)碼管進行溫度顯示。與熱敏電阻為溫度敏感元件的溫度計相比,該數(shù)字溫度計具有讀數(shù)方便,測溫范圍廣,測溫精確等特點。另外,還在該溫度計中加入了秒表計時的功能,能夠?qū)崿F(xiàn)“分,秒”的計時顯示,并且,兩種功能能夠用按鍵實現(xiàn)切換。關(guān)鍵詞:AT89C51;DS18B20傳感器;溫度;秒表Abstract:With the developmen

2、t of modern information technology and the progressive of the traditional industrial transformation. Using DS18B20 as the sensor of the digital thermometer , AT89C51 microcontroller as the main control device,and the four digital tube are used to display. Compared with the thermometer thermistor for

3、 temperature sensitive element,the digital thermometer have many advantages,for example,its can get temperature more convenient, wider,and more accurate.In adition,The digital thermometer also as a stopwatch,according to the minutes and seconds.And with the pressing of the keys,we can choose the dif

4、ferent functions of the digital thermometer.Key words: AT89C51;DS18B20;the temperature;stopwatch目 錄專心-專注-專業(yè)數(shù)字溫度計設(shè)計1 系統(tǒng)硬件設(shè)計方案作品主要利用AT89C51單片機、DS18B20數(shù)字溫度傳感器而設(shè)計的數(shù)字溫度計,實現(xiàn)對空氣溫度的測量。圖1 系統(tǒng)原理結(jié)構(gòu)框圖如圖1所示,該溫度計通過ds18b20數(shù)字傳感器進行采集,將數(shù)據(jù)傳送給單片機,程序通過按鍵對單片機進行操作,然后再數(shù)碼管上顯示。1.1 單片機選擇AT89C51作為溫度測試系統(tǒng)設(shè)計的核心器件。該器件是INTEL公司生產(chǎn)的MCS

5、一5l系列單片機中的基礎(chǔ)產(chǎn)品,采用了可靠的CMOS工藝制造技術(shù),具有高性能的8位單片機,屬于標準的MCS51的CMOS產(chǎn)品。不僅結(jié)合了HMOS的高速和高密度技術(shù)及CHMOS的低功耗特征,而且繼承和擴展了MCS48單片機的體系結(jié)構(gòu)和指令系統(tǒng)。單片機小系統(tǒng)的電路圖如圖2所示。圖2 單片機小系統(tǒng)電路AT89C51單片機的主要特性:(1)與MCS-51 兼容,4K字節(jié)可編程閃爍存儲器;(2)靈活的在線系統(tǒng)編程,掉電標識和快速編程特性;(3)壽命為1000次寫/擦周期,數(shù)據(jù)保留時間可10年以上;(4)全靜態(tài)工作模式:0Hz-33Hz;(5)三級程序存儲器鎖定;(6)128*8位內(nèi)部RAM,32可編程I/

6、O線;(7)兩個16位定時器/計數(shù)器,6個中斷源;(8)全雙工串行UART通道,低功耗的閑置和掉電模式;(9)看門狗(WDT)及雙數(shù)據(jù)指針;(9)片內(nèi)振蕩器和時鐘電路;1.2 溫度傳感器介紹 DS18B20可以程序設(shè)定912位的分辨率,精度為0.5C??蛇x更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報警溫度存儲在EPROM中,掉電后依然保存。溫度傳感器DS18B20引腳如圖3所示。 8引腳封裝 TO92封裝圖3 溫度傳感器引腳功能說明: NC :空引腳,懸空不使用; VDD :可選電源腳,電源電壓范圍35.5V。當工作于寄生電源時,此引腳必須接地。 DQ :數(shù)據(jù)輸入/輸出腳。漏

7、極開路,常態(tài)下高電平。 GND :為電源地DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器(如圖4)。圖4 DS18B20內(nèi)部結(jié)構(gòu)圖光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。 DS18B20中的溫度傳感器可完

8、成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴展的二進制補碼讀數(shù)形式提供,以0.0625/LSB形式表達,其中S為符號位。 DS18B20溫度傳感器的內(nèi)部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的E2RAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。 暫存存儲器包含了8個連續(xù)字節(jié),前兩個字節(jié)是測得的溫度信息,第一個字節(jié)的內(nèi)容是溫度的低八位,第二個字節(jié)是溫度的高八位。圖5 溫度寄存器格式第三個和第四個字節(jié)是TH、TL的易失性拷貝,第五個字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個字節(jié)的內(nèi)容在每一次上電復(fù)位時被刷新。第六、七、八個字節(jié)用于內(nèi)部計算。第九個字節(jié)是冗余檢驗字節(jié)。 該字節(jié)

9、各位的意義如下:TM R1 R0 1 1 1 1 1低五位一直都是1 ,TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設(shè)置為0,用戶不要去改動。R1和R0用來設(shè)置分辨率,如表1所示:(DS18B20出廠時被設(shè)置為12位) 表1 DS18B20溫度轉(zhuǎn)換時間表R1R0分辨率/位溫度最大轉(zhuǎn)向時間00993.750110187.510113751112750根據(jù)DS18B20的通訊協(xié)議,主機控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20

10、進行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號后等待1660微秒左右,后發(fā)出60240微秒的存在低脈沖,主CPU收到此信號表示復(fù)位成功。1.3 溫度傳感器與單片機的連接溫度傳感器的單總線(數(shù)據(jù)線DQ)與單片機的/P3.3口連接(如圖5)。圖6 DS18B20和單片機的接口連接程序設(shè)計時通過P3.3口對DS18B20進行操作,實現(xiàn)初始化和溫度讀取等功能。1.4 復(fù)位電路MCS-51單片機的復(fù)位是靠外部電路實現(xiàn)的。MCS-51單片機工作后,只要在它的RESET引線上加載10ms以上的高電平,單片機就能有效地復(fù)位。上電復(fù)位:上電復(fù)位電路是種簡單的復(fù)位電路,只

11、要在RST復(fù)位引腳接一個電容到VCC,接一個電阻到地就可以了。上電復(fù)位是指在給系統(tǒng)上電時,復(fù)位電路通過電容加到RST復(fù)位引腳一個短暫的高電平信號,這個復(fù)位信號隨著VCC對電容的充電過程而回落,所以RST引腳復(fù)位的高電平維持時間取決于電容的充電時間。為了保證系統(tǒng)安全可靠的復(fù)位,RST引腳的高電平信號必須維持足夠長的時間。圖7 復(fù)位電路1.5 時鐘電路時鐘是單片機的心臟,單片機各功能部件的運行都是以時鐘頻率為基準,有條不紊的一拍一拍地工作。因此,時鐘頻率直接影響單片機的速度,時鐘電路的質(zhì)量也直接影響單片機系統(tǒng)的穩(wěn)定性。常用的時鐘電路有兩種方式:一種是內(nèi)部時鐘方式,另一種為外部時鐘方式。設(shè)計采用的是

12、內(nèi)部時鐘方式。圖8 時鐘電路1.6 按鍵電路按鍵的開關(guān)狀態(tài)通過一定的電路轉(zhuǎn)換為高、低電平狀態(tài)。當按鍵按下時,在單片機的相應(yīng)I/O口產(chǎn)生負脈沖,閉合和釋放過程都要經(jīng)過一定的過程才能達到穩(wěn)定,這一過程是處于高、低電平之間的一種不穩(wěn)定狀態(tài),稱為抖動。抖動持續(xù)時間的常長短與開關(guān)的機械特性有關(guān),一般在5-10ms之間。為了避免CPU多次處理按鍵的一次閉合,應(yīng)采用措施消除抖動;消抖一般是通過在程序中給一定的延時再檢測信號。本設(shè)計中采用的是獨立式按鍵,每個按鍵的工作狀態(tài)不會產(chǎn)生互相影響,直接用I/O口線構(gòu)成單個按鍵電路,每個按鍵占用一條I/O口線,這樣只需要對單片機單個I/O口進行操作就能實現(xiàn)按鍵功能(如圖

13、9)。圖9 按鍵電路1.7 顯示電路LED數(shù)碼管使用發(fā)光二極管構(gòu)成顯示字型,LED數(shù)碼管連接方式分類:共陰極數(shù)碼管和共陽極數(shù)碼管(如圖10)。共陰極數(shù)碼管:將數(shù)碼管陰極接地,相應(yīng)段上的陽極接正電壓。共陽極數(shù)碼管:將數(shù)碼管陽極接地,相應(yīng)段上的陰極接正電壓。圖10 共陰和共陽數(shù)碼管根據(jù)數(shù)碼管連接方式的不同,在應(yīng)用中,要實現(xiàn)數(shù)字顯示,則需要用不同的編碼,從低到高位為:a b c d e f g h。如:數(shù)字“5”,需要相應(yīng)二極管亮的是:a f g c d;共陽極編碼為:(0x92),共陰極則正好相反。表2 09共陽極數(shù)碼管編碼(不含小數(shù)點)需要顯示數(shù)字編碼需要顯示數(shù)字編碼0c0H(1100 0000

14、)592H(1001 0010)1f9H(1111 1001)682H(1000 0010)2a4H(1010 0100)7f8H(1111 1000)3b0H(1011 0000)880H(1000 0000)499H(1001 1001)990H(1001 0000)同理可得09共陽極數(shù)碼管編碼(含小數(shù)點):40H,79H,24H,30H,19H,12H,02H,78H,00H,10H本設(shè)計中采用的是4位一體的數(shù)碼管(圖11),與單個數(shù)碼管相比,有4個位選線A1,A2,A3,A4,通過接高電平實現(xiàn)對每一位的操作,數(shù)據(jù)線的原理則與單個數(shù)碼管一樣。圖11 四位一體數(shù)碼管引腳圖如圖12,數(shù)碼管上

15、拉電阻采用共陽極方式,以單片機P2口為位選信號,由于直接使用單片機I/O口不足以驅(qū)動數(shù)碼管,因此在顯示電路上加入了三級管驅(qū)動,采用的是s9012三極管,s9012是PNP型的三級管,基極通過1k電阻接單片機的P2口,發(fā)射極接正電壓,集電極接數(shù)碼管位選信號;由于是PNP型三級管,只有當單片機P2口為低時,數(shù)碼管的相應(yīng)的位選才選中。圖12 顯示電路圖1.8 電源電路和系統(tǒng)供電由于該系統(tǒng)需要穩(wěn)定的5 V電源,因此必須采用能滿足電壓、電流和穩(wěn)定性要求的電源。設(shè)計采用外部的5V電源供電,在電源兩端并連上了兩個電容(如圖13)。圖13 電源電路圖設(shè)計中外部供電采用的是Mini-usb(B型)接口,由于并沒

16、有用到數(shù)據(jù)的傳輸,只是單純供電,所以設(shè)計中只用到了Pin 1(V Bus)和Pin 5(GND)。圖14 mini-usb引腳圖對系統(tǒng)供電的設(shè)計,可采用以下方法:直流穩(wěn)壓電源,單片機開發(fā)板,手機電池,迷你USB接口;其中利用迷你USB接口供電可以通過手機充電器、電腦USB接口等,可以讓溫度計在使用起來更方便,這也是本設(shè)計中的特點之一。2 軟件設(shè)計2.1 DS18B20測溫2.1.1 DS18B20復(fù)位圖15 DS18B20復(fù)位時序DS18B20復(fù)位時序:1單片機拉低總線480950us,然后釋放總線(拉高電平);2DS18B20會拉低電平60240us表示應(yīng)答;3DS18B20拉低電平的602

17、40us之間,單片機讀取總線電平,為低則復(fù)位成功,為高則復(fù)位失敗;4DS18B20拉低電平60240us之后,會釋放總線。2.1.2 DS18B20讀寫邏輯0與1圖16 DS18B20寫邏輯0與1DS18B20寫邏輯0與1時序:1 單片機拉低電平約1015us;2 單片機持續(xù)拉低“0”(高“1”)電平約2045us;3 釋放總線。圖17 DS18B20讀邏輯0與1DS18B20讀邏輯0與1時序:1 讀取時單片機拉低總線1us;2 單片機釋放總線,讀取總線電平;3 DS18B20會拉低“0”(高“1”)電平;4 讀取電平后延時4045us。2.1.3單片機訪問DS18B20DS18B20充當從機

18、,單片機是主機,而單片機作為主機通過一線總線訪問DS18B20需要經(jīng)過以下步驟:1DS18B20復(fù)位指令;2執(zhí)行ROM指令;3執(zhí)行DS18B20功能指令(RAM指令)。設(shè)計程序中需要用到的DS18B20功能指令有:10xcc:跳過讀序號列;20x44:啟動溫度轉(zhuǎn)換;30xbe:讀取溫度寄存器。2.1.4 DS18B20程序設(shè)計圖18 DS18B20程序測溫流程DS18B20可以精確到0.0625,對于正的溫度直接將高八位和低八位進行整合,即可求出溫度;對于負的溫度,讀出的高8位的最高4位代表了溫度的符號位(0000則代表溫度為正,1111代表了溫度為負),可以對這4位進行判斷,如果為1111,

19、說明溫度為負,則需要將temp取反再補1,圖18為DS18B20程序測溫流程圖。2.2 秒表程序設(shè)計秒表程序?qū)崿F(xiàn)的是計時功能,分為4位顯示:分十位,分個位,秒十位,秒個位。把定時器的定時時間定為50ms,這樣,計數(shù)溢出20次即可得到時鐘的最小計時單位秒(若計數(shù)2次則得到的秒表精度為0.1s);秒計時是采用中斷方式進行溢出次數(shù)的累積,計滿20次,即得到秒計時。當秒計時到“59”時,秒清零,分個位加“1”。圖19為秒表計時程序流程圖。圖19 秒表計時程序流程圖2.3 按鍵功能設(shè)計中共有5個按鍵,其中一個用于對AT89C51的復(fù)位,當按鍵按下時復(fù)位成功;另外四個按鍵分別定義為KEY1測溫,KEY2秒

20、表,KEY3秒表暫停/開始,KEY4秒表清零;圖20為按鍵處理流程圖。圖20 按鍵處理流程程序開始:KEY1按下:測溫功能,顯示溫度為xx.xC(正溫度)或xx.xE(負溫度);KEY2按下:開始秒表計時,顯示當前計時xx分,xx秒;KEY3按下:定時器0的定時控制位TR0=TR0,開始時TR0=1,第一次按下時,秒表暫停,以后每次按下,TR0取反,即第二次按下,TR0=1,則實現(xiàn)秒表開始計時;KEY4按下:關(guān)定時器中斷,使定時器定時控制位置0,令min和sec為零,即實現(xiàn)清零。3 系統(tǒng)測試3.1 測試方案 1硬件測試把系統(tǒng)板分為幾個部分,分別單獨測試,然后再整體測試。2軟件仿真測試利用軟件仿

21、真,分別實現(xiàn)溫度測試,秒表測試,按鍵測試。3 軟件硬件聯(lián)合測試把程序下載到C51單片機上,進行系統(tǒng)測試。具體操作:將寫好的C程序通過單片機開發(fā)板下載到AT89C51上,再將單片機安裝在系統(tǒng)板上,供5v直流電,操作按鍵看是否能進行測溫和秒表功能。3.2 測試條件與儀器 測試條件:檢查多次,仿真電路和硬件電路必須與系統(tǒng)原理圖完全相同,并且檢查無誤,硬件電路保證無虛焊。硬件測試儀器:萬用表,直流穩(wěn)壓電源、示波器、單片機開發(fā)板;3.3 測試結(jié)果及分析Protus 仿真測試(見附頁):綜合測試(如圖21):分別顯示:溫度為17.8C; 秒表計時到146秒。 測空氣中的溫度 秒表計時圖21 綜合測試圖剛開

22、始測試的時候,發(fā)現(xiàn)數(shù)碼管不夠亮,后來自己查找了許多資料,找到了原因:三級管驅(qū)動沒有工作,后來我自己用面包板焊接了一個三極管驅(qū)動,再修改了程序進行檢測,最后數(shù)碼管能很好的顯示溫度;結(jié)合自己的系統(tǒng)板,我將單片機的P2口作為數(shù)碼管的位選端,重新設(shè)計了一下原有的驅(qū)動,采用1k電阻和S9012 PNP型三級管。最后我在系統(tǒng)的供電端加入了迷你usb接口,這樣整個系統(tǒng)就能采用usb接口與電腦連接和手機充電器供電。結(jié)合軟件和硬件的測試結(jié)果看,該溫度計能實現(xiàn)對溫度的測量,并且能隨接觸物的溫度改變而改變。4 系統(tǒng)特色 系統(tǒng)的特色主要有:采用多種供電方式,采用迷你USB接口能實現(xiàn)多種方式的使用,如:手機充電器,電腦

23、,手機等;采用數(shù)字溫度傳感器DS18B20更精確的獲得溫度值;在測量溫度功能的基礎(chǔ)上加入了秒表計時的功能,秒表可用于長時間的計時,并且用戶可以通過按鍵實現(xiàn)功能之間的相互轉(zhuǎn)換。5 心得和體會通過這次對數(shù)字溫度計的設(shè)計,我發(fā)現(xiàn)自己還有許多需要加強的地方,比如:畫PCB板和畫原理圖;缺少對以前許多學過的C語言、模電等課程的溫習;過程中我也查找了許多資料,同時我也學到了許多東西,在調(diào)適過程中,動手寫程序和改程序,一步步將結(jié)果調(diào)適出來,在動手能力和解決問題能力的有所提高。更重要的是團隊的協(xié)作,有這樣一句話:如果我用個人的能力,可以賺一個億,可能100%是我的;但我用十個人的時候,我們可能賺到十個億,可能

24、我只有10%,我同樣是一個億,但我們的事業(yè)變大了。在做這次課題的過程中,我明白了一個人的力量是有限的,只有協(xié)調(diào)好團隊才能獲得最多的成就。6 參考文獻1電子技術(shù)基礎(chǔ)模擬部分/康華光主編2單片微機原理、匯編與C51及接口技術(shù) 清華大學出版社3C程序設(shè)計(第三版) 譚浩強(著) 清華大學出版社附錄1:電路原理圖附錄2:實物圖 附錄3:仿真測試圖溫度仿真測試:顯示13.0C即13.0攝氏度秒表仿真測試:附錄4:源程序/*程序說明: 主要兩大功能:DS18B20測溫,秒表計時(精確到秒);顯示:測溫顯示為xx.xC(xx.xE) 溫度為正,最后一位顯示字母C;溫度為負,最后一位顯示字母E; 秒表顯示為x

25、x分xx秒;當秒增加到59時,秒清零,分+1;精度為秒; 按鍵說明:按鍵1KEY1 選擇測溫功能; 按鍵2KEY2 選擇秒表功能; 按鍵3KEY3 按下秒表暫停,再次按下秒表開始; 按鍵4KEY4 按下秒表清零;*/#include #include #define uchar unsigned char #define uint unsigned int/*變量定義*/sbit KEY1 = P10; /按鍵,低有效;KEY1測溫,KEY2秒表;sbit KEY2 = P11;sbit KEY3 = P12; /秒表模式暫停sbit KEY4 = P13; /秒表開始sbit DQ = P3

26、3; /原理圖中ds18b20接INT1,INT1為P3.3口;sbit wei4 = P27; /位選口sbit wei3 = P26;sbit wei2 = P25;sbit wei1 = P24;uchar flagnum; /按鍵標志uchar wenbiao; /溫度標志,溫度為負 wenbiao=0;溫度為正 wenbiao=1;uchar min,sec;/秒表分、秒uchar k;/定時50msuint temp;/溫度變量/*共陽極數(shù)碼管不含小數(shù)點編碼*/uchar code Tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0

27、x90;/*共陽極數(shù)碼管不含小數(shù)點編碼*/uchar code Tab1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;/*函數(shù)聲明*/ void Delay_ms(uint n); /毫秒延時 void Delay_us(uchar n); /微秒延時 void Display2(); /分、秒顯示 void System_Ini(); /定時器0初始化 void timer0 (); /定時器0中斷1 void DS18b20_Reset(); /DS18b20復(fù)位 bit Read_bit(); /讀1位 uchar DS18b20_

28、Read(); /讀1個字節(jié) void Write_bit(bit bitval); /寫1位 void DS18b20_Write(uchar byte); /寫1個字節(jié) void Changtemp(); /開啟溫度轉(zhuǎn)換 uchar Readtemp(); /讀取溫度 void Display1(uint z); /溫度顯示 void Wenduji(); /溫度計 uchar Keycheck(); /按鍵檢測 void Key_ser(uchar num); /按鍵實現(xiàn)功能轉(zhuǎn)換/*函數(shù)名稱:void main()函數(shù)功能:主函數(shù)輸入?yún)?shù):無函數(shù)變量:num1函數(shù)調(diào)用:void Syst

29、em_Ini(); void Wenduji(); uchar Keycheck(); void Key_ser(uchar num);返回值: 無函數(shù)說明:無*/void main()uchar num1;System_Ini();while(1) if(flagnum = 1)Wenduji();num1 = Keycheck();Key_ser(num1); /*函數(shù)名稱:void Delay_ms(uint n)函數(shù)功能:毫秒延時輸入?yún)?shù):n函數(shù)變量:i,j函數(shù)調(diào)用:無 返回值: 無函數(shù)說明:無*/void Delay_ms(uint n) /毫秒延時 uint i,j;for(i=n

30、;i0;i-) for(j=110;j0;j-); /*函數(shù)名稱:void Delay_us(uchar n)函數(shù)功能:微秒延時輸入?yún)?shù):n函數(shù)變量:無函數(shù)調(diào)用:無 返回值: 無函數(shù)說明:無*/void Delay_us(uchar n) /微秒延時 while(n-); /*秒表模塊*/*函數(shù)名稱:void Display2()函數(shù)功能:分、秒顯示輸入?yún)?shù):無函數(shù)變量:無函數(shù)調(diào)用:void Delay_ms(uint n);返回值: 無函數(shù)說明:無*/void Display2()wei1 = 0; P0 = Tabsec%10;Delay_ms(2);wei1 = 1;P0 = 0xff;

31、 /消影wei2 = 0; P0 = Tabsec/10;Delay_ms(2);wei2 = 1;P0 = 0xff;wei3 = 0; P0 = Tabmin%10;Delay_ms(2);wei3 = 1;P0 = 0xff;wei4 = 0; P0 = Tabmin/10; Delay_ms(2);wei4 = 1;P0 = 0xff; /*函數(shù)名稱:void System_Ini()函數(shù)功能:定時器初始化輸入?yún)?shù):無函數(shù)變量:無函數(shù)調(diào)用:無 返回值: 無函數(shù)說明:無*/void System_Ini() /定時器初始化TMOD= 0x01; /定時器0方式1TH0=(65535-50

32、000)/256; TL0=(65535-50000)%256; ET0 = 1; TR0 = 0;EA=1;/*中斷1*/void timer0 () interrupt 1 TH0=(65535-50000)/256; TL0=(65535-50000)%256; k+; if( k=20 ) /定時器定時50ms,20次就是1秒 k = 0; sec+; if(sec59) sec = 0; min+; if(min59) min = 0; /*溫度計模塊*/*函數(shù)名稱:void DS18b20_Reset()函數(shù)功能:DS18b20復(fù)位輸入?yún)?shù):無函數(shù)變量:DQ函數(shù)調(diào)用:void De

33、lay_us(uchar n); 返回值: 無函數(shù)說明:無*/void DS18b20_Reset()DQ = 1; _nop_(); /1usDQ = 0; /拉低總線 Delay_us(80); /延時530us_nop_(); DQ = 1; /拉高總線(釋放數(shù)據(jù)線)Delay_us(5);_nop_();_nop_();_nop_();Delay_us(30);_nop_();_nop_();DQ = 1; /拉高總線,讓總線處于空閑狀態(tài)/*函數(shù)名稱:bit Read_bit()函數(shù)功能:讀1位輸入?yún)?shù):無函數(shù)變量:b ; DQ函數(shù)調(diào)用:void Delay_us(uchar n);

34、返回值: b函數(shù)說明:無*/bit Read_bit()bit b;DQ = 0; /拉低總線1us_nop_();DQ = 1; /釋放總線 _nop_();_nop_();b = DQ;Delay_us(7); /延時4050微秒return(b); /*函數(shù)名稱:uchar DS18b20_Read()函數(shù)功能:讀1個字節(jié)輸入?yún)?shù):無函數(shù)變量:i , j, byte;函數(shù)調(diào)用:無 返回值: byte函數(shù)說明:無*/uchar DS18b20_Read()uchar i,j,byte;byte = 0;for(i=0;i8;i+) j = Read_bit(); byte = (j1);

35、/讀出的數(shù)據(jù)最低位在前面 return(byte); /*函數(shù)名稱:void Write_bit(bit bitval)函數(shù)功能:寫1位輸入?yún)?shù):bitval函數(shù)變量:DQ , bitval;函數(shù)調(diào)用:void Delay_us(uchar n); 返回值: 無函數(shù)說明:無*/void Write_bit(bit bitval)DQ = 0;Delay_us(2); /拉低總線1015usif(bitval=1) /如果寫1就拉高總線DQ = 1;Delay_us(5); /延時2045uselseDQ = 0;Delay_us(5);DQ = 1; /釋放總線 _nop_(); _nop_(

36、);/*函數(shù)名稱:void DS18b20_Write(uchar byte)函數(shù)功能:寫1個字節(jié)輸入?yún)?shù):byte函數(shù)變量:i ,temp;函數(shù)調(diào)用:void Write_bit(bit bitval); 返回值: 無函數(shù)說明:無*/void DS18b20_Write(uchar byte)uchar i,temp;for(i=0;ii; /分別將temp的每一位移到最低位temp = temp&0x01; /將temp的最低位取出來Write_bit(temp);/*函數(shù)名稱:void Changtemp()函數(shù)功能:開啟溫度轉(zhuǎn)換輸入?yún)?shù):無函數(shù)變量:無函數(shù)調(diào)用:void DS18b20

37、_Reset() void DS18b20_Write(uchar byte) 返回值: 無函數(shù)說明:無*/void Changtemp() DS18b20_Reset();DS18b20_Write(0xcc); / 跳過讀序號列號的操作DS18b20_Write(0x44); / 啟動溫度轉(zhuǎn)換/*函數(shù)名稱:uchar Readtemp()函數(shù)功能:讀取溫度函數(shù)輸入?yún)?shù):無函數(shù)變量:temp1 ,temp2 ,fuhao,wendu,wenbiao;函數(shù)調(diào)用:void DS18b20_Reset() void DS18b20_Write(uchar byte) uchar DS18b20_Read() 返回值: wenbiao函數(shù)說明:無*/uchar Readtemp() uint temp1 = 0,temp2 = 0; uint fuhao;float wendu;DS18b20_Reset();DS18b20_Write(0

溫馨提示

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

評論

0/150

提交評論