基于單片機(jī)的溫度檢測(cè)與控制系統(tǒng)設(shè)計(jì)_第1頁
基于單片機(jī)的溫度檢測(cè)與控制系統(tǒng)設(shè)計(jì)_第2頁
基于單片機(jī)的溫度檢測(cè)與控制系統(tǒng)設(shè)計(jì)_第3頁
基于單片機(jī)的溫度檢測(cè)與控制系統(tǒng)設(shè)計(jì)_第4頁
基于單片機(jī)的溫度檢測(cè)與控制系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第一部分:溫度的顯示與控制系統(tǒng)設(shè)計(jì)摘要:本設(shè)計(jì)通過51單片機(jī)控制ds18b20芯片采集溫度,并對(duì)采集溫度進(jìn)行分析,隨后51單片機(jī)對(duì)不同溫度范圍進(jìn)行判斷并做出相應(yīng)的措施,以此實(shí)現(xiàn)了一個(gè)溫度檢測(cè)與控制系統(tǒng),本設(shè)計(jì)的一個(gè)創(chuàng)新就是可以通過矩陣鍵盤對(duì)所需正常溫度進(jìn)行自由設(shè)置,增加本設(shè)計(jì)系統(tǒng)的靈活性。此外,本設(shè)計(jì)都是采用c語言編寫的。仿真軟件proteus與keil vision2開發(fā)環(huán)境介紹1.1、pr0teus軟件介紹(一)、該軟件的特點(diǎn):1、全部滿足我們提出的單片機(jī)軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類產(chǎn)品中具有明顯的優(yōu)勢(shì)。2、具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、rs232 動(dòng)

2、態(tài)仿真、i2c 調(diào)試器、spi 調(diào)試器、鍵盤和lcd系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。3、目前支持的單片機(jī)類型有:68000 系列、8051 系列、avr 系列、pic12 系列、pic16 系列、pic18系列、z80 系列、hc11 系列以及各種外圍芯片。 支持大量的存儲(chǔ)器和外圍芯片??傊?,該軟件是一款集單片機(jī)和spice 分析于一身的仿真軟件,功能極其強(qiáng)大,是其他任何一款軟件不能相比的。(二)、isis智能原理圖輸入系統(tǒng)isis是preoteus系統(tǒng)的中心,具有控制原理圖畫圖的超強(qiáng)的設(shè)計(jì)環(huán)境。isis有以下特性:1、出版質(zhì)量的原理圖isis提供給用戶圖形

3、外觀,包括線寬、填充類型、字符等的全部控制,使用尸能夠生成如雜志上看到的精美的原理圖,畫完圖可以以圖形文件輸出,畫圖的外形由風(fēng)格模板定義。2、良好的用戶界面isis有一個(gè)無連線方式,用戶只需單擊元件的引腳或者先前布好的線,就能實(shí)現(xiàn)布線此外,擺放、編輯、移動(dòng)和刪除操作能夠直接用鼠標(biāo)實(shí)現(xiàn)無需去單擊菜單或圖標(biāo)。3自動(dòng)走線只要單擊想要連接的兩個(gè)引腳,就能簡(jiǎn)單地實(shí)現(xiàn)走線。在特殊的位置需要布線時(shí),使用者只需在中間的角落單擊。自動(dòng)走線也能在元件移動(dòng)的時(shí)候操作,自動(dòng)解決相應(yīng)連線。節(jié)點(diǎn)能夠自動(dòng)布置和移除。既節(jié)約了時(shí)間,又避免了其他可能的錯(cuò)誤。4層次設(shè)計(jì)isis支持層次圖設(shè)計(jì),模塊可畫成標(biāo)準(zhǔn)元件,特殊的元件能夠定

4、義為通過電路圖表示的模塊,能夠任意設(shè)定層次,模塊可畫成標(biāo)準(zhǔn)元件,在使用中可放置和刪除端口的子電路模塊。5、總線支持isis提供的不僅是一根總線,還能用總線引腳定義元件和子電路。因此,一個(gè)連線在處理器和存儲(chǔ)器之間的32位的處理器總線可以用單一的線表示,節(jié)省繪圖的時(shí)間和空間。6元件庫isis的元件庫包含8000個(gè)元件,有標(biāo)準(zhǔn)符號(hào)、三極管、二極管、熱離子管、ttlcmos、ecl、微處理器,以及存儲(chǔ)器元件、pld、模擬ic和運(yùn)算放大器。7可視封裝工具原理圖和pcb庫元件的匹配是由封裝工具簡(jiǎn)化的。在原理圖部分的引腳旁邊將顯示pcb的封裝,并允許每個(gè)引腳名對(duì)應(yīng)文本和圖形的引腳號(hào)碼。8復(fù)合元件isis的元

5、件庫表達(dá)方式有很多種,無論是單個(gè)元件、同態(tài)復(fù)合元件、異態(tài)復(fù)合元件,還是連接器,都可以在原理圖上以獨(dú)立引腳來表達(dá),不用所有線都連到一個(gè)獨(dú)立元件上。9、元件特性設(shè)計(jì)中的每個(gè)元件都有一定數(shù)日的屬性或特性。某些特性控制軟件的特定功能(如pcb封裝或仿真)用戶也可以添加自己的特性。一旦庫建立,就能提供默認(rèn)值及特性定義。特性定義提供大量的特性描述,當(dāng)修改元件時(shí),將顯示在編輯區(qū)域內(nèi)。10、報(bào)告isis支持許多第三方網(wǎng)表格式,因此能為其他軟件所使使用設(shè)置元件清單后可以添加用戶所需的元件屬性,也可設(shè)置屬性列以挑選一定數(shù)目的屬性。erc報(bào)告可列出可能的連線錯(cuò)誤,如末連接的輸入、矛盾的輸出及未標(biāo)注的網(wǎng)絡(luò)標(biāo)號(hào)。(三)

6、、proteus 6 professional 界面簡(jiǎn)介安裝完proteus 后,運(yùn)行isis 6 professional,會(huì)出現(xiàn)以下窗口界面:1原理圖編輯窗口(the editing window):顧名思義,它是用來繪制原理圖的。藍(lán)色方框內(nèi)為可編輯區(qū),元件要放到它里面。注意,這個(gè)窗口是沒有滾動(dòng)條的,你可用預(yù)覽窗口來改變?cè)韴D的可視范圍。2預(yù)覽窗口(the overview window):它可顯示兩個(gè)內(nèi)容,一個(gè)是:當(dāng)你在元件列表中選擇一個(gè)元件時(shí),它會(huì)顯示該元件的預(yù)覽圖;另一個(gè)是,當(dāng)你的鼠標(biāo)焦點(diǎn)落在原理圖編輯窗口時(shí)(即放置元件到原理圖編輯窗口后或在原理圖編輯窗口中點(diǎn)擊鼠標(biāo)后),它會(huì)顯示整張

7、原理圖的縮略圖,并會(huì)顯示一個(gè)綠色的方框,綠色的方框里面的內(nèi)容就是當(dāng)前原理圖窗口中顯示的內(nèi)容,因此,你可用鼠標(biāo)在它上面點(diǎn)擊來改變綠色的方框的位置,從而改變?cè)韴D的可視范圍。3模型選擇工具欄(mode selector toolbar):主要模型(main modes):1* 選擇元件(components)(默認(rèn)選擇的)2* 放置連接點(diǎn)3* 放置標(biāo)簽(用總線時(shí)會(huì)用到)4* 放置文本5* 用于繪制總線6* 用于放置子電路7* 用于即時(shí)編輯元件參數(shù) (先單擊該圖標(biāo)再單擊要修改的元件配件(gadgets):1* 終端接口(terminals):有vcc、地、輸出、輸入等接口2* 器件引腳:用于繪制各種

8、引腳3* 仿真圖表(graph):用于各種分析,如noise analysis4* 錄音機(jī)5* 信號(hào)發(fā)生器(generators)6* 電壓探針:使用仿真圖表時(shí)要用到7* 電流探針:使用仿真圖表時(shí)要用到8* 虛擬儀表:有示波器等2d 圖形(2d graphics):1* 畫各種直線2* 畫各種方框3* 畫各種圓4* 畫各種圓弧5* 畫各種多邊形6* 畫各種文本7* 畫符號(hào)8* 畫原點(diǎn)等4元件列表(the object selector):用于挑選元件(components)、 終端接口(terminals)、 信號(hào)發(fā)生器( generators )、 仿真圖表( graph )等。舉例, 當(dāng)你

9、選擇“ 元件(components)”,單擊“p”按鈕會(huì)打開挑選元件對(duì)話框,選擇了一個(gè)元件后(單擊了“ok”后),該元件會(huì)在元件列表中顯示,以后要用到該元件時(shí),只需在元件列表中選擇即可。5方向工具欄(orientation toolbar):旋轉(zhuǎn): 旋轉(zhuǎn)角度只能是90的整數(shù)倍。翻轉(zhuǎn): 完成水平翻轉(zhuǎn)和垂直翻轉(zhuǎn)。使用方法:先右鍵單擊元件,再點(diǎn)擊(左擊)相應(yīng)的旋轉(zhuǎn)圖標(biāo)6仿真工具欄仿真控制按鈕1* 運(yùn)行2* 單步運(yùn)行3* 暫停4* 停止(四)、操作簡(jiǎn)介1、繪制原理圖:繪制原理圖要在原理圖編輯窗口中的藍(lán)色方框內(nèi)完成。原理圖編輯窗口的操作是不同于常用的windows 應(yīng)用程序的,正確的操作是:用左鍵放置元

10、件;右鍵選擇元件;雙擊右鍵刪除元件;右鍵拖選多個(gè)元件;先右鍵后左鍵編輯元件屬性;先右鍵后左鍵拖動(dòng)元件;連線用左鍵,刪除用右鍵;改連接線:先右擊連線,再左鍵拖動(dòng);中鍵放縮原理圖。2、定制自己的元件:有三個(gè)個(gè)實(shí)現(xiàn)途徑,一是用proteus vsm sdk 開發(fā)仿真模型,并制作元件;另一個(gè)是在已有的元件基礎(chǔ)上進(jìn)行改造,比如把元件改為bus 接口的;還有一個(gè)是利用已制作好(別人的)的元件,我們可以到網(wǎng)上下載一些新元件并把它們添加到自己的元件庫 里面。由于我沒有proteus vsmsdk,所以我只介紹后兩個(gè)。3、sub-circuits 應(yīng)用:用一個(gè)子電路可以把部分電路封裝起來,這樣可以節(jié)省原理圖窗口

11、的空間。1.2、keil vision2軟件介紹 keil軟件是目前最流行開發(fā)mcs-51系列單片機(jī)的軟件。keil提供包括c編譯器、宏匯編、連接器、庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境visiion2將這些部分組合在一起。keil uvision2是德國keil software公司出品的51系列兼容單片機(jī)c語言軟件開發(fā)系統(tǒng),使用接近于傳統(tǒng)c語言的語法來開發(fā),與匯編相比,c語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用,而且大大的提高了工作效率和項(xiàng)目開發(fā)周期,他還能嵌入?yún)R編,您可以在關(guān)鍵的位置嵌入,使程序達(dá)到接近于匯編的工作效率。ke

12、ilc51標(biāo)準(zhǔn)c編譯器為8051微控制器的軟件開發(fā)提供了c語言環(huán)境,同時(shí)保留了匯編代碼高效,快速的特點(diǎn)。c51編譯器的功能不斷增強(qiáng), 使你可以更加貼近c(diǎn)pu本身,及其它的衍生產(chǎn)品。c51已被完全集成到uvision2的集成開發(fā)環(huán)境中,這個(gè)集成開發(fā)環(huán)境包含:編譯器,匯編器,實(shí)時(shí)操作系統(tǒng),項(xiàng)目管理器,調(diào)試器。uvision2 ide可為它們提供單一而靈活的開發(fā)環(huán)境。keil c51軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全windows界面,使您能在很短的時(shí)間內(nèi)就能學(xué)會(huì)使用keil c51來開發(fā)您的單片機(jī)應(yīng)用程序 。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到keil c5

13、1生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語言的優(yōu)勢(shì)。二、設(shè)計(jì)基本原理本設(shè)計(jì)通過51單片機(jī)對(duì)ds18b20和lcd1602兩款外設(shè)芯片進(jìn)行驅(qū)動(dòng)與控制,以此來實(shí)現(xiàn)系統(tǒng)功能。、51單片機(jī)原理及管教功能1、 簡(jiǎn)介89c51是一種帶4k字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(fperomflash programmable and erasable read only memory)的低電壓、高性能cmos8位微處理器,俗稱單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除100次。該器件采用atmel高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的mcs-51指

14、令集和輸出管腳相兼容。由于將多功能8位cpu和閃爍存儲(chǔ)器組合在單個(gè)芯片中,atmel的89c51是一種高效微控制器,89c2051是它的一種精簡(jiǎn)版本。89c單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。2、 結(jié)構(gòu)特點(diǎn)8位cpu;片內(nèi)振蕩器和時(shí)鐘電路;32根i/o線;外部存貯器尋址范圍rom、ram64k;2個(gè)16位的定時(shí)器/計(jì)數(shù)器;5個(gè)中斷源,兩個(gè)中斷優(yōu)先級(jí);全雙工串行口;布爾處理器;3、 管腳說明vcc:供電電壓。gnd:接地。p0口:p0口為一個(gè)8位漏級(jí)開路雙向i/o口,每腳可吸收8ttl門電流。當(dāng)p1口的管腳第一次寫1時(shí),被定義為高阻輸入。p0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可

15、以被定義為數(shù)據(jù)/89c51引腳圖地址的低八位。在fiash編程時(shí),p0 口作為原碼輸入口,當(dāng)fiash進(jìn)行校驗(yàn)時(shí),p0輸出原碼,此時(shí)p0外部必須被拉高。p1口:p1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向i/o口,p1口緩沖器能接收輸出4ttl門電流。p1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,p1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在flash編程和校驗(yàn)時(shí),p1口作為低八位地址接收。p2口:p2口為一個(gè)內(nèi)部上拉電阻的8位雙向i/o口,p2口緩沖器可接收,輸出4個(gè)ttl門電流,當(dāng)p2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),p2口的管腳被外部

16、拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。p2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),p2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),p2口輸出其特殊功能寄存器的內(nèi)容。p2口在flash編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。p3口:p3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向i/o口,可接收輸出4個(gè)ttl門電流。當(dāng)p3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,p3口將輸出電流(ill)這是由于上拉的緣故。p3口也可作為at89c51的一些特殊功能口,如下表所示:口管腳 備選功能p3.

17、0 rxd(串行輸入口)p3.1 txd(串行輸出口)p3.2 /int0(外部中斷0)p3.3 /int1(外部中斷1)p3.4 t0(記時(shí)器0外部輸入)p3.5 t1(記時(shí)器1外部輸入)p3.6 /wr(外部數(shù)據(jù)存儲(chǔ)器寫選通)p3.7 /rd(外部數(shù)據(jù)存儲(chǔ)器讀選通)p3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。rst:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持rst腳兩個(gè)機(jī)器周期的高電平時(shí)間。ale/prog:當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在flash編程期間,此引腳用于輸入編程脈沖。在平時(shí),ale端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6

18、。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ale脈沖。如想禁止ale的輸出可在sfr8eh地址上置0。此時(shí), ale只有在執(zhí)行movx,movc指令是ale才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ale禁止,置位無效。/psen:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/psen有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/psen信號(hào)將不出現(xiàn)。/ea/vpp:當(dāng)/ea保持低電平時(shí),則在此期間為外部程序存儲(chǔ)器(0000h-ffffh),不管是否有內(nèi)部程序存儲(chǔ)器讀取外部rom數(shù)據(jù)。注意加密方

19、式1時(shí),/ea將內(nèi)部鎖定為reset;當(dāng)/ea端保持高電平時(shí),單片機(jī)讀取內(nèi)部程序存儲(chǔ)器。(擴(kuò)展有外部rom時(shí)讀取完內(nèi)部rom后自動(dòng)讀取外部rom)。在flash編程期間,此引腳也用于施加12v編程電源(vpp)。xtal1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。xtal2:來自反向振蕩器的輸出。、ds18b20芯片讀寫原理1、 特性獨(dú)特的一線接口,只需要一條口線通信,簡(jiǎn)化了分布式溫度傳感應(yīng)用 無需外部元件 可用數(shù)據(jù)總線供電,電壓范圍為3.0 v至5.5 v 無需備用電源測(cè)量溫度范圍為-55c至+125華氏相當(dāng)于是-67f到257華氏度 -10c至+85c范圍內(nèi)精度為0.5c。溫度傳感器

20、可編程的分辨率為912位 溫度轉(zhuǎn)換為12位數(shù)字格式最大值為750毫秒 用戶可定義的非易失性溫度報(bào)警設(shè)置 應(yīng)用范圍包括恒溫控制,工業(yè)系統(tǒng),消費(fèi)電子產(chǎn)品溫度計(jì),或任何熱敏感系統(tǒng)。2、 引腳定義(1)、dq為數(shù)字信號(hào)輸入/輸出端; (2)、gnd為電源地; (3)、vdd為外接供電電源輸入端(在寄生電源接線方式時(shí)接地)。3、ds18b20工作原理 ds18b20的讀寫時(shí)序和測(cè)溫原理與ds1820相同,只是得到的溫度值的位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s 減為750ms。低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振 隨溫度變化其振蕩率

21、明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在55所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對(duì) 低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重 新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即 為所測(cè)溫度。斜率累加器用于補(bǔ)償和修正測(cè)溫過程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。4、 ds18b20有4個(gè)主要的數(shù)據(jù)部件 光刻rom中的64位序列號(hào)是出廠前被光刻好的,它可以看作是該ds18b20的地址序列碼。64位光刻r

22、om的排列是:開始8位 (28h)是產(chǎn)品類型標(biāo)號(hào),接著的48位是該ds18b20自身的序列號(hào),最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(crc=x8+x5+x4+1)。光刻rom的作用 是使每一個(gè)ds18b20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)ds18b20的目的。ds18b20中的溫度傳感器可完成對(duì)溫度的測(cè)量,以12位轉(zhuǎn)化為例:用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以 0.0625/lsb形式表達(dá),其中s為符號(hào)位。 表1: ds18b20溫度值格式表 這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18b20的兩個(gè)8比特的ram中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0, 這5位

23、為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際 溫度。 例如+125的數(shù)字輸出為07d0h,+25.0625的數(shù)字輸出為0191h,-25.0625的數(shù)字輸出為ff6fh,-55的數(shù)字輸出為fc90h 。 表2: ds18b20溫度數(shù)據(jù)表 (3)ds18b20溫度傳感器的存儲(chǔ)器 ds18b20溫度傳感器的內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存ram和一個(gè)非易失性的可電擦除的eepram,后者存放高溫度和低溫度觸發(fā)器 th、tl和結(jié)構(gòu)寄存器。 (4)配置寄存器 該字節(jié)各位的意義如下: 表3: 配置寄存器結(jié)構(gòu) tmr1r

24、011111低五位一直都是1,tm是測(cè)試模式位,用于設(shè)置ds18b20在工作模式還是在測(cè)試模式。在ds18b20出廠時(shí)該位被設(shè)置為0,用 戶不要去改動(dòng)。r1和r0用來設(shè)置分辨率,如下表所示:(ds18b20出廠時(shí)被設(shè)置為12位) 表4: 溫度分辨率設(shè)置表 r1r0分辨率溫度最大轉(zhuǎn)換時(shí)間009位93.75ms 0110位187.5ms 1011位375ms 1112位750ms 4、高速暫存存儲(chǔ)器 高速暫存存儲(chǔ)器由9個(gè)字節(jié)組成,其分配如表5所示。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在 高速暫存存儲(chǔ)器的第0和第1個(gè)字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時(shí)低位在前,高位在

25、后,數(shù)據(jù)格式如表1所示。對(duì)應(yīng)的溫度計(jì)算: 當(dāng)符號(hào)位s=0時(shí),直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)s=1時(shí),先將補(bǔ)碼變?yōu)樵a,再計(jì)算十進(jìn)制值。表 2是對(duì)應(yīng)的一部分溫度值。第九個(gè)字節(jié)是 冗余檢驗(yàn)字節(jié)。 表5: ds18b20暫存寄存器分布 寄存器內(nèi)容 字節(jié)地址溫度值低位 (ls byte)0溫度值高位 (ms byte)1高溫限值(th)2低溫限值(tl)3配置寄存器4保留5保留6保留7crc校驗(yàn)值8根據(jù)ds18b20的通訊協(xié)議,主機(jī)(單片機(jī))控制ds18b20完成溫度轉(zhuǎn)換必須經(jīng)過三個(gè)步驟:每一次讀寫之前都要對(duì)ds18b20進(jìn)行 復(fù)位操作,復(fù)位成功后發(fā)送一條rom指令,最后發(fā)送ram指令,這樣才能對(duì)ds

26、18b20進(jìn)行預(yù)定的操作。復(fù)位要求主cpu將數(shù)據(jù)線下拉500微秒,然后 釋放,當(dāng)ds18b20收到信號(hào)后等待1660微秒左右,后發(fā)出60240微秒的存在低脈沖,主cpu收到此信號(hào)表示復(fù)位成功。 表6: rom指令表 指 令 約定代碼功 能讀rom33h讀ds1820溫度傳感器rom中的編碼(即64位地址) 符合 rom 55h發(fā)出此命令之后,接著發(fā)出 64 位 rom 編碼,訪問單總線上與該編碼相對(duì)應(yīng)的 ds1820 使之作出響應(yīng),為下一步對(duì)該 ds1820 的讀寫作準(zhǔn)備。 搜索 rom 0foh用于確定掛接在同一總線上 ds1820 的個(gè)數(shù)和識(shí)別 64 位 rom 地址。為操作各器件作好準(zhǔn)備

27、。 跳過 rom 0cch忽略 64 位 rom 地址,直接向 ds1820 發(fā)溫度變換命令。適用于單片工作。 告警搜索命令 0ech執(zhí)行后只有溫度超過設(shè)定值上限或下限的片子才做出響應(yīng)。 表6: ram指令表 指 令 約定代碼功 能溫度變換44h啟動(dòng)ds1820進(jìn)行溫度轉(zhuǎn)換,12位轉(zhuǎn)換時(shí)最長(zhǎng)為750ms(9位為93.75ms)。結(jié)果存入內(nèi)部9字節(jié)ram中。 讀暫存器 0beh 讀內(nèi)部ram中9字節(jié)的內(nèi)容 寫暫存器 4eh 發(fā)出向內(nèi)部ram的3、4字節(jié)寫上、下限溫度數(shù)據(jù)命令,緊跟該命令之后,是傳送兩字節(jié)的數(shù)據(jù)。 復(fù)制暫存器 48h 將ram中第3 、4字節(jié)的內(nèi)容復(fù)制到eeprom中。 重調(diào) ee

28、prom 0b8h 將eeprom中內(nèi)容恢復(fù)到ram中的第3 、4字節(jié)。 讀供電方式 0b4h 讀ds1820的供電模式。寄生供電時(shí)ds1820發(fā)送“ 0 ”,外接電源供電 ds1820發(fā)送“ 1 ”。 (三)、1602lcd特性+5v電壓,對(duì)比度可調(diào)內(nèi)含復(fù)位電路提供各種控制命令,如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能有80字節(jié)顯示數(shù)據(jù)存儲(chǔ)器ddram內(nèi)建有160個(gè)5x7點(diǎn)陣的字型的字符發(fā)生器cgrom8個(gè)可由用戶自定義的5x7的字符發(fā)生器cgram字符型lcd1602通常有14條引腳線或16條引腳線的lcd,多出來的2條線是背光電源線vcc(15腳)和地線gnd(16腳)圖3、16

29、02各引腳的定義hd44780內(nèi)置了ddram(顯示數(shù)據(jù)存儲(chǔ)ram)、cgrom(字符存儲(chǔ)rom)和cgram(用戶自定義ram)。 ddram就是顯示數(shù)據(jù)ram,用來寄存待顯示的字符代碼。共80個(gè)字節(jié),其地址和屏幕的對(duì)應(yīng)關(guān)系如下表: 也就是說想要在lcd1602屏幕的第一行第一列顯示一個(gè)“a”字,就要向ddram的00h地址寫入“a”的代碼就行了。但具體的寫入是要按lcd模塊的指令格式來進(jìn)行的,后面我會(huì)講到的。一行有40個(gè)地址 在1602中我們就用前16個(gè)就行了。第二行也一樣用前16個(gè)地址。對(duì)應(yīng)如下: ddram地址與顯示位置的對(duì)應(yīng)關(guān)系 1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(cgrom)已經(jīng)

30、存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如下表所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常 用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“a”的代碼是01000001b(41h),顯示時(shí)模塊把地址41h中的點(diǎn) 陣字符圖形顯示出來,我們就能看到字母“a” 圖4、1602字符表上表中的字符代碼與我們pc中的字符代碼是基本一致的。因此我們?cè)谙騞dram寫c51字符代碼程序時(shí)甚至可以直接用p1a這樣的方法。pc在編譯時(shí)就把“a”先轉(zhuǎn)為41h代碼了。字符代碼0x000x0f為用戶自定義的字符圖形ram(對(duì)于5x8點(diǎn)陣的字符,可以存放8組),就是cgram了。對(duì)ddram的內(nèi)容

31、和地址操作,hd44780的指令集及其設(shè)置說明,共有11條指令:基本操作時(shí)序: 讀狀態(tài) 輸入:rs=l,rw=h,e=h輸出:db0db7=狀態(tài)字 寫指令 輸入:rs=l,rw=l,e=下降沿脈沖,db0db7=指令碼 輸出:無 讀數(shù)據(jù) 輸入:rs=h,rw=h,e=h 輸出:db0db7=數(shù)據(jù) 寫數(shù)據(jù) 輸入:rs=h,rw=l,e=下降沿脈沖,db0db7=數(shù)據(jù) 輸出:無 1.清屏指令 功能: 清除液晶顯示器,即將ddram的內(nèi)容全部填入“空白”的字符碼20h; 光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方; 將地址計(jì)數(shù)器(ac)的值設(shè)為0。 2.光標(biāo)歸位指令 功能: 把光標(biāo)撤回到顯示器的左上方

32、; 把地址計(jì)數(shù)器(ac)的值設(shè)置為0; 保持ddram的內(nèi)容不變 3.輸入模式設(shè)置指令 功能:設(shè)定每次寫入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫入的一個(gè)字符是否移動(dòng)。參數(shù)設(shè)定的情況如下所示: 位名設(shè)置 i/d0=寫入新數(shù)據(jù)后光標(biāo)左移 1=寫入新數(shù)據(jù)后光標(biāo)右移 s0=寫入新數(shù)據(jù)后顯示屏不移動(dòng) 1=寫入新數(shù)據(jù)后顯示屏整體右移1個(gè)字 4. 顯示開關(guān)控制指令功能:控制顯示器開/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。參數(shù)設(shè)定的情況如下: 位名設(shè)置 d0=顯示功能關(guān) 1=顯示功能開 c0=無光標(biāo) 1=有光標(biāo) b0=光標(biāo)不閃爍 1=光標(biāo)閃爍 5. 設(shè)定顯示屏或光標(biāo)移動(dòng)方向指令 功能:使光標(biāo)移位或使整個(gè)顯示屏

33、幕移位。參數(shù)設(shè)定的情況如下: s/c r/l設(shè)定情況 0 0光標(biāo)左移1格,且ac值減1 0 1光標(biāo)右移1格,且ac值加1 1 0顯示器上字符全部左移一格,但光標(biāo)不動(dòng) 1 1顯示器上字符全部右移一格,但光標(biāo)不動(dòng) 6.功能設(shè)定指令 功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下: 位名設(shè)置 dl 0=數(shù)據(jù)總線為4位 1=數(shù)據(jù)總線為8位 n 0=顯示1行 1=顯示2行 f0=57點(diǎn)陣/每字符1=510點(diǎn)陣/每字符 7.設(shè)定cgram地址指令功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的cgram的地址。8.設(shè)定ddram地址指令 功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的cgram的地址。 (注意這里我們送地址的時(shí)候

34、應(yīng)該是0x80+address,這也是前面說到寫地址命令的時(shí)候要加上0x80的原因) 9.讀取忙信號(hào)或ac地址指令 功能: 讀取忙碌信號(hào)bf的內(nèi)容,bf=1表示液晶顯示器忙,暫時(shí)無法接收單片機(jī)送來的數(shù)據(jù)或指令; 當(dāng)bf=0時(shí),液晶顯示器可以接收單片機(jī)送來的數(shù)據(jù)或指令; 讀取地址計(jì)數(shù)器(ac)的內(nèi)容。 10.數(shù)據(jù)寫入ddram或cgram指令 功能: 將字符碼寫入ddram,以使液晶顯示屏顯示出相對(duì)應(yīng)的字符; 將用戶自己設(shè)計(jì)的圖形存入cgram。 11.從cgram或ddram讀出數(shù)據(jù)的指令功能:讀取ddram或cgram中的內(nèi)容。 基本操作時(shí)序: 讀狀態(tài) 輸入:rs=l,rw=h,e=h輸出:

35、db0db7=狀態(tài)字 寫指令 輸入:rs=l,rw=l,e=下降沿脈沖,db0db7=指令碼 輸出:無 讀數(shù)據(jù) 輸入:rs=h,rw=h,e=h輸出:db0db7=數(shù)據(jù) 寫數(shù)據(jù) 輸入:rs=h,rw=l,e=下降沿脈沖,db0db7=數(shù)據(jù) 輸出:無 三、實(shí)訓(xùn)成果系統(tǒng)設(shè)計(jì)原理圖(2)、流程圖開始 是否設(shè)置 正常溫度范圍采用 溫度? 否 初始化或者已設(shè)置范圍 是 設(shè)置最大溫度值max 設(shè)置最小溫度值min 采集當(dāng)前溫度num 并在lcd顯示 nummax 電機(jī)轉(zhuǎn)動(dòng)、高溫?zé)?? 是 閃爍、蜂鳴器報(bào)警 否 nummin 低溫指示燈亮 、 ? 是 加熱燈開啟 否 正常溫度指示燈亮、高溫及低溫 指示燈滅、

36、關(guān)閉電機(jī)、關(guān)閉加熱 燈、關(guān)閉蜂鳴器。(三)、)程序代碼及注釋#include#include /包含_nop_()函數(shù)定義的頭文件#define uchar unsigned char#define uint unsigned intuchar code digit=0123456789-+.; /定義字符數(shù)組顯示數(shù)字及正負(fù)號(hào)uchar code table1=current temperature;uchar code table2=cent;uchar code table3=high: ;uchar code table4=low:;sbit lcden=p07; /定義lcd使能位sb

37、it lcdrs=p06; /定義lcd的rs位sbit motor=p30; /定義電機(jī)驅(qū)動(dòng)位sbit lamp=p31; /定義加熱燈驅(qū)動(dòng)位sbit dq=p36; /定義ds18b20的數(shù)據(jù)位sbit led1=p05; /定義高溫指示燈驅(qū)動(dòng)位sbit led2=p02; /定義正常指示燈驅(qū)動(dòng)位sbit led3=p01; /定義低溫指示燈驅(qū)動(dòng)位sbit buzzer=p03;uchar time,flag,flag1,flag2,flag3,flag4,flag5,flag6,flag7,num,i2;uint temp,num1;volatile uint numt,numt1,nu

38、mt2;char numhigh,numlow; /定義高溫度,低溫度void delay(uint z) /粗略延時(shí)子程序 uint x,y; for(x=z;x0;x-) for(y=10;y0;y-);void delay1ms()/1毫秒延時(shí)子程序 unsigned int i,j; for(i=0;i4;i+); for(j=0;j33;j+) ; void delaynms(unsigned char n)/延時(shí)多毫秒子程序 unsigned char i; for(i=0;in;i+) delay1ms(); void write_com(uchar com) /lcd寫指令子程

39、序 lcdrs=0; p2=com; delay(5); lcden=1; delay(5); lcden=0;void write_data(uchar date) /lcd寫數(shù)據(jù)子程序 lcdrs=1 p2=date; delay(5); lcden=1; delay(5); lcden=0;void lcd_init() /lcd初始化子程序 lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80);bit init_ds18b20() /ds18b20初始化子

40、程序 bit flag; /儲(chǔ)存ds18b20是否存在的標(biāo)志,flag=0,表示存在;flag=1,表示不存在 dq = 1; /先將數(shù)據(jù)線拉高 for(time=0;time2;time+) /略微延時(shí)約6微秒 ; dq = 0; /再將數(shù)據(jù)線從高拉低,要求保持480960us for(time=0;time200;time+) ; /略微延時(shí)約600微秒 ; /以向ds18b20發(fā)出一持續(xù)480960us的低電平復(fù)位脈沖 dq = 1; /釋放數(shù)據(jù)線(將數(shù)據(jù)線拉高) for(time=0;time10;time+) ; /延時(shí)約30us(釋放總線后需等待1560us讓ds18b20輸 出存

41、在脈沖) flag=dq; /讓單片機(jī)檢測(cè)是否輸出了存在脈沖(dq=0表示存在) for(time=0;time200;time+) ; /延時(shí)足夠長(zhǎng)時(shí)間,等待存在脈沖輸出完畢 return (flag); /返回檢測(cè)成功標(biāo)志unsigned char readonechar()/ds18b20讀子程序 unsigned char i=0; unsigned char dat; /儲(chǔ)存讀出的一個(gè)字節(jié)數(shù)據(jù) for (i=0;i8;i+) dq =1; / 先將數(shù)據(jù)線拉高 _nop_(); /等待一個(gè)機(jī)器周期 dq = 0; /單片機(jī)從ds18b20讀書據(jù)時(shí),將數(shù)據(jù)線從高拉低即啟動(dòng)讀時(shí)序 _nop

42、_(); /等待一個(gè)機(jī)器周期 dq = 1; /將數(shù)據(jù)線人為拉高,為單片機(jī)檢測(cè)ds18b20的輸出電平作準(zhǔn)備 for(time=0;time=1; if(dq=1) dat|=0x80; /如果讀到的數(shù)據(jù)是1,則將1存入dat else dat|=0x00;/如果讀到的數(shù)據(jù)是0,則將0存入dat /將單片機(jī)檢測(cè)到的電平信號(hào)dq存入ri for(time=0;time8;time+); /延時(shí)3us,兩個(gè)讀時(shí)序之間必須有大于1us的恢復(fù) return(dat); /返回讀出的十六進(jìn)制數(shù)據(jù)writeonechar(unsigned char dat)/ds18b20寫子程序 unsigned ch

43、ar i=0; for (i=0; i8; i+) dq =1; / 先將數(shù)據(jù)線拉高_(dá)nop_(); /等待一個(gè)機(jī)器周期 dq=0; /將數(shù)據(jù)線從高拉低時(shí)即啟動(dòng)寫時(shí)序 dq=dat&0x01; /利用與運(yùn)算取出要寫的某位二進(jìn)制數(shù)據(jù), /并將其送到數(shù)據(jù)線上等待ds18b20采樣 for(time=0;time10;time+);/ /延時(shí)約30us,ds18b20在拉低后的約1560us/期間從數(shù)據(jù)線上采樣dq=1; /釋放數(shù)據(jù)線 for(time=0;time=1; /將dat中的各二進(jìn)制位數(shù)據(jù)右移1位 for(time=0;time4;time+) ; /稍作延時(shí),給硬件一點(diǎn)反應(yīng)時(shí)間void

44、 readyreadtemp() /ds18b20讀準(zhǔn)備子程序 init_ds18b20(); /將ds18b20初始化 writeonechar(0xcc); / 跳過讀序號(hào)列號(hào)的操作 writeonechar(0x44); / 啟動(dòng)溫度轉(zhuǎn)換 delaynms(200); /轉(zhuǎn)換一次需要延時(shí)一段時(shí)間 init_ds18b20(); /將ds18b20初始化 writeonechar(0xcc); /跳過讀序號(hào)列號(hào)的操作 writeonechar(0xbe); /讀取溫度寄存器,前兩個(gè)分別是溫度的低位和高位void disply_init0() /lcd顯示0子程序 for(num=0;num4;num+) write_data(table2num); delay(20);void disply_init1()/lcd顯示1子程序 for(num=0;num19;num+) write_data(table1num); delay(20);

溫馨提示

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

評(píng)論

0/150

提交評(píng)論