




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 畢業(yè)設(shè)計(jì)(論文)畢業(yè)設(shè)計(jì)(論文) 基于基于 51 單片機(jī)的家用電熱水器設(shè)計(jì)單片機(jī)的家用電熱水器設(shè)計(jì) design of household electric water heater based on the 51-series singlechip 作者聲明作者聲明 本人聲明所呈交的論文是我個(gè)人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作及取得的研究 成果,除了文中特別加以標(biāo)注的地方外,沒(méi)有任何剽竊、抄襲、造假等違反學(xué)術(shù) 道德、學(xué)術(shù)規(guī)范的行為,也沒(méi)有侵犯任何其他人或組織的科研成果及專利。與我 一同工作的同志對(duì)本研究所做的任何貢獻(xiàn)均已在論文中作了明確的說(shuō)明并表示了 謝意。如本畢業(yè)設(shè)計(jì)(論文)引起的法律結(jié)果完全
2、由本人承擔(dān)。 畢業(yè)設(shè)計(jì)(論文)成果歸武漢工程大學(xué)郵電與信息工程學(xué)院所有。 特此聲明。 作者專業(yè): 作者學(xué)號(hào): 作者簽名: _年_月_日 摘摘 要要 隨著社會(huì)的發(fā)展,人類科技的進(jìn)步,各行各業(yè)都在使自己的產(chǎn)品智能化、數(shù) 字化,因老式的熱水器使用煤氣或天然氣對(duì)水進(jìn)行燃燒加熱,用手動(dòng)的方式調(diào)節(jié) 溫度,不僅不能夠精確的確定使用者需要的水溫,而且還存在一定的危險(xiǎn)性。 電熱水器是一種可供浴室、洗手間及廚房使用的家用電器,隨著人們生活質(zhì) 量的提高,現(xiàn)代的家用電熱水器已經(jīng)摒棄了以前的做法,而采用一種更加精確、 安全的實(shí)施方案。 c 語(yǔ)言對(duì)單片機(jī)編程有諸多優(yōu)點(diǎn),例如:便于移植、句法檢查時(shí)錯(cuò)誤少、堅(jiān) 固性好、頭文件
3、種類諸多,能夠方便快捷使用各種函數(shù)等。 本文采用 at 89c 52 單片機(jī)作為控制器,使用 c 語(yǔ)言編寫(xiě)程序,設(shè)計(jì)了一款 智能家用電熱水器。使用陣型鍵盤輸入溫度,溫度可以精確到 0.1 攝氏度,并使 用 led 燈顯示,能夠精確提供用戶所需溫度的溫水。采用 ds18b20 采集溫度, 使用 led 燈顯示,精確的顯示出采集的水溫。當(dāng)所需溫度高于當(dāng)前采集的水溫 時(shí),使用 moc3041 芯片觸發(fā)加熱,當(dāng)所需溫度低于當(dāng)前采集的水溫時(shí),則停止 加熱?;緦?shí)現(xiàn)了智能控制功能。 關(guān)鍵詞:關(guān)鍵詞:?jiǎn)纹瑱C(jī);c 語(yǔ)言;采集;智能;家用電熱水器 abstract with the development of
4、 social and program of human technology, every trade all transfer own product into intelligence, digitize, because the water heater of old style uses gas or natural gas to heat water and manually adjust mode conditioning temperature, not only unable to sufficiently accurately recognize the user need
5、 of water temperature, but also exist some certain risk. the electrical water heater is a kind of home appliances that bathroom, loo and kitchen can use, with raising of quality of human live, the modernistic household electrical water heater has abandonned the past way, but adopts a kind of impleme
6、ntation scheme of more accurate ,safety. c language possess many merits for programming of singlechip, such as:is easy to ransplant, having little bug when sentence construction review, fastness good, the head document type is so many that expediently quickly using various function etc. the writer a
7、dopts an at 89 cs 52 singlechip to be the controller and using c languages to write programming ,design a style of intelligence household electrical water heater.use array form keyboard input temperature, the temperature can be accuratly recognized to 0.1 , and use led light display it, can accurate
8、ly provide to the warm water of temperature that user needs.adopt ds18 b20 to collect temperature, use led light display, the accurately displays to collect water temperature.when the temperature needed higher than to collect water temperature at present, use the moc3041 chip lead to heating , when
9、the temperature needed is lower than the collect water temperature at present, stop heating.the simply carry out intelligence control function. key words: singlechip; c language; collect; intelligence; household electric water heater 1 目目 錄錄 第第 1 章章 緒論緒論.1 1 1.1 家用電熱水器的現(xiàn)狀.1 1.2 tx-1c 單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板簡(jiǎn)介.1 第第
10、 2 章章 系統(tǒng)硬件設(shè)計(jì)系統(tǒng)硬件設(shè)計(jì).2 2 2.1 系統(tǒng)硬件的組成部分.2 2.2 系統(tǒng)硬件各部分的簡(jiǎn)介.2 2.3 數(shù)碼管顯示.3 2.3.1 數(shù)碼管簡(jiǎn)介.3 2.3.2 數(shù)碼管的實(shí)現(xiàn)方法.4 2.3.3 鎖存器與數(shù)碼管顯示方法.6 2.4 鍵盤輸入設(shè)計(jì).7 2.4.1 鍵盤輸入方法.7 2.4.2 鍵盤輸入的抖動(dòng)與去抖的方法.8 2.5 ds18b20 溫度采集.9 2.5.1 ds18b20 技術(shù)性能與應(yīng)用范圍.9 2.5.2 ds18b20 的初始化與讀寫(xiě)操作.10 2.5.3 ds18b20 的指令與格式.12 2.5.4 ds18b20 寄生電源供電方式.15 2.5.5 ds1
11、8b20 改進(jìn)的寄生電源供電方式.16 2.5.6 ds18b20 外部電源供電方式.17 2.5.7 ds18b20 寄生電源供電方式.18 第第 3 章章 系統(tǒng)軟件設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì).2020 3.1 鍵盤輸入的程序.20 3.2 ds18b20 溫度傳感器設(shè)計(jì).21 3.3 主函數(shù)的分析.25 3.4 顯示函數(shù)的分析.26 3.5 中斷加熱子函數(shù)的分析.33 2 第第 4 章章 功能簡(jiǎn)介與成品圖片功能簡(jiǎn)介與成品圖片.3535 4.1 智能熱水器具的功能.35 4.2 成品圖片.35 第第 5 章章 總結(jié)與展望總結(jié)與展望.3838 附錄附錄 程序程序.4141 1 第第 1 章章 緒論緒論
12、單片機(jī)是一種與我們生活息息相關(guān)的控制器,它存在于許多地方,例如: 電子手表、掌上游戲機(jī)、數(shù)碼相機(jī)、錄音筆、電視機(jī)遙控器等等。單片機(jī)主要 由中央處理器、內(nèi)存、輸入/輸出設(shè)備組成,它就好像是一臺(tái)小型電腦,它能夠 執(zhí)行人們對(duì)它編寫(xiě)的程序,從而發(fā)出各種不同的控制命令,與外部電路結(jié)合后, 便可以完成各種各樣的功能。通過(guò)單片機(jī)人們的生活將會(huì)變得更加方便、快捷。 1.11.1 家用電熱水器的現(xiàn)狀家用電熱水器的現(xiàn)狀 我們的生活電熱水器是一種可供浴室、洗手間及廚房使用,按照人們的需 要的溫度,提供溫水的家用電器。市場(chǎng)上傳統(tǒng)的機(jī)械式電熱水器控制精度低、 可靠性差,甚至存在一定的危險(xiǎn)隱患。隨著社會(huì)的發(fā)展、人們生活質(zhì)
13、量的提高, 人們對(duì)電熱水器的要求越來(lái)越趨向于智能化和數(shù)字化,這種老式而簡(jiǎn)單的電熱 水器已經(jīng)不能夠滿足人們的需要了。而智能化家用電熱水器正是適應(yīng)現(xiàn)代化智 能家用電器趨勢(shì)而出現(xiàn)。它能提供用戶方便快捷的數(shù)字化輸入方式,并且能精 確的采集和控制環(huán)境中的水溫,將其提供給用戶,因此備受人們的關(guān)注。 1.21.2 tx-1ctx-1c 單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板簡(jiǎn)介單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板簡(jiǎn)介 xt-1c 單片機(jī)開(kāi)發(fā)板是哈爾濱市天祥電子綜合多年開(kāi)發(fā)經(jīng)驗(yàn),在原 tx-1b 基礎(chǔ)上,經(jīng)過(guò)精心設(shè)計(jì)開(kāi)發(fā)出的多功能 51 單片機(jī)開(kāi)發(fā)平臺(tái)。該開(kāi)發(fā)板集常用的 單片機(jī)外圍資源、串口和 usb 口兩種調(diào)試下載接口于一身,完全兼容 atmel
14、公司的 51 單片機(jī),除此之外還有很多特點(diǎn),如:無(wú)法解密、低功耗、高速、高 可靠、強(qiáng)抗靜電、強(qiáng)抗干擾等。 tx 系列單片機(jī)開(kāi)發(fā)板可完全作為各種 51 單片機(jī)的開(kāi)發(fā)板,用匯編語(yǔ)言或 者 c 語(yǔ)言對(duì)其進(jìn)行編程。當(dāng)用 stc 公司的單片機(jī)時(shí),直接用產(chǎn)品套件附帶的串 口線將開(kāi)發(fā)板與計(jì)算機(jī)串口相連,按照 stc 單片機(jī)下載操作教程便可以下載程 序,而且下載速度比起其他下載工具要快的多。本文將使用 tx-1c 開(kāi)發(fā)板完成 數(shù)字化電熱水器的設(shè)計(jì)。 2 3 第第 2 章章 系統(tǒng)硬件設(shè)計(jì)系統(tǒng)硬件設(shè)計(jì) 2.12.1 系統(tǒng)硬件的組成部分系統(tǒng)硬件的組成部分 系統(tǒng)設(shè)計(jì)硬件原理結(jié)構(gòu)見(jiàn)圖 2.1 所示。系統(tǒng)以高性價(jià)比的 a
15、t89c51 單片機(jī) 為核心,由鍵盤輸入、ds18b20 溫度采集、數(shù)碼管顯示電路、電源時(shí)鐘復(fù)位電 路、雙向可控硅驅(qū)動(dòng)電路 moc3041、雙向可控硅 tlc336a 組成加熱器控制電 路。 圖圖 2.12.1 系統(tǒng)設(shè)計(jì)硬件原理結(jié)構(gòu)系統(tǒng)設(shè)計(jì)硬件原理結(jié)構(gòu) 2.22.2 系統(tǒng)硬件各部分的簡(jiǎn)介系統(tǒng)硬件各部分的簡(jiǎn)介 這里 at89c51 為總控制器。單片機(jī)的 p0 口連接 74hc573 鎖存器,這樣可 以節(jié)約單片機(jī)端口,即可多次操作 p0 口,使其既能控制數(shù)碼管的片選,又能控 制數(shù)碼管的位選,從而節(jié)省的單片機(jī)的外部接口,擴(kuò)展了功能。 鍵盤的輸入由 p3 口完成在第 4 章節(jié)中會(huì)具體介紹如何實(shí)現(xiàn)。 時(shí)
16、鐘復(fù)位電路見(jiàn)圖 2.2 所示,ret 連接單片機(jī)的 reset 接口,主要完成單 片機(jī)的復(fù)位功能。 4 圖圖 2.22.2 時(shí)鐘復(fù)位電路時(shí)鐘復(fù)位電路 溫度采集芯片由 ds18b20 芯片完成,ds18b20 的 2 號(hào)接口接在單片機(jī)的 p22 口,按協(xié)議傳送以兩個(gè)字節(jié)為一組的溫度數(shù)據(jù),第 3 章會(huì)介紹具體實(shí)現(xiàn)方 法。 加熱模塊見(jiàn)圖 2.3 所示,moc3041 芯片的 2 號(hào)接口連接單片機(jī)的 p22 口。 當(dāng)需要加熱時(shí),p22 接口送出低電平,即可觸發(fā)加熱器工作。 圖圖 2.32.3 加熱模塊加熱模塊 2.32.3 數(shù)碼管顯示數(shù)碼管顯示 2.3.1 數(shù)碼管簡(jiǎn)介數(shù)碼管簡(jiǎn)介 單片機(jī)系統(tǒng)中常用的顯示
17、器有: 發(fā)光二極管 led(light emitting diode)顯示器、液晶 cd(liquid crystal display)顯示器、crt 顯示器等。led、lcd 顯示器有兩種顯示結(jié)構(gòu):段顯示 (7 段、米字型等)和點(diǎn)陣顯示(58、88 點(diǎn)陣等) 。 使用 led 顯示器時(shí),要注意區(qū)分這兩種不同的接法。為了顯示數(shù)字或字符, 5 必須對(duì)數(shù)字或字符進(jìn)行編碼。七段數(shù)碼管加上一個(gè)小數(shù)點(diǎn),共計(jì) 8 段。因此為 led 顯示器提供的編碼正好是一個(gè)字節(jié)。本設(shè)計(jì)采用的 tx-c1 實(shí)驗(yàn)板是采用共 陰 led 顯示器,根據(jù)電路連接圖顯示十六進(jìn)制數(shù)的編碼見(jiàn)表 2.1 所示。 表表 2.12.1 十六
18、進(jìn)制數(shù)的編碼十六進(jìn)制數(shù)的編碼 十六進(jìn)制編碼數(shù)碼管顯數(shù) 值 十六進(jìn)制編 碼 數(shù)碼管顯數(shù) 值 十六進(jìn)制編 碼 數(shù)碼管顯數(shù) 值 0 x3f00 x7d60 x39c 0 x0610 x0770 x5ed 0 x5b20 x7f80 x79e 0 x4f30 x6f90 x71f 0 x6640 x77a0 x00 無(wú)顯示 0 x6d50 x7cb 2.3.2 數(shù)碼管的實(shí)現(xiàn)方法數(shù)碼管的實(shí)現(xiàn)方法 數(shù)碼管的顯示由 p0 口完成控制。有兩點(diǎn)需要注意,第一點(diǎn)是要哪一個(gè)數(shù)碼 管亮,第二點(diǎn)是亮的數(shù)碼管顯示什么數(shù)字。所以數(shù)碼管有位選和段選之分,位 選在程序中用 wei 表示,單片機(jī)上是 p27 端口,即對(duì)位選操作時(shí)
19、使 p27 呈現(xiàn) 高電平,這時(shí) p0 的八個(gè)端口對(duì)數(shù)碼管的操作決定了那幾個(gè)數(shù)碼管亮,p0 操作 完成后使 p27 呈現(xiàn)低電平,這樣位選就已鎖定。段選在程序中由 duan 表示, 單片機(jī)上是 p26 端口,與位選相同,操作時(shí)使 p26 呈現(xiàn)高電平,這時(shí) p0 的八 個(gè)端口對(duì)數(shù)碼管的操作決定了亮的幾個(gè)數(shù)碼管顯示什么數(shù)字,p0 操作完成后使 p26 呈現(xiàn)低電平,這樣段選就已鎖定。 見(jiàn)圖 2.4 所示由于單片機(jī)僅僅起到控制的作用,其輸出電流十分小,所以 p0 端需要接上拉電阻與 5v 電源,通過(guò)電壓的變化控制 5v 電源點(diǎn)亮,想要圖 中 a 端由電流通過(guò)時(shí),即給 p00 一個(gè)低電平,觸發(fā)上拉電阻兩端間
20、的電勢(shì)差, 6 這樣就能促使電流流向 a 點(diǎn),從而使 a 端對(duì)應(yīng)的 led 燈點(diǎn)亮。 圖圖 2.42.4 單片機(jī)與數(shù)碼管的硬件連接單片機(jī)與數(shù)碼管的硬件連接 首先選擇位選,再選擇段選。 uchar code table= 0 x3f,0 x06,0 x5b,0 x4f, 0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 xbf,0 x86, 0 xdb,0 xcf,0 xe6,0 xed, 0 xfd,0 x87,0 xff,0 xef, 0 x00,0 x08,0 x88; 可以直接設(shè)置數(shù)碼管顯示各數(shù)字的十六進(jìn)制,即 p0 口應(yīng)賦的十六進(jìn)制,以 便操作。如以上數(shù)組,
21、使用時(shí)僅僅將需要的數(shù)組中的其中一個(gè)賦予 p0 口,這樣 可以方便直觀得使數(shù)碼管顯示需要的數(shù)字。 選擇位選與選擇片選的過(guò)程相當(dāng)快時(shí),顯示在人眼中就是一排易于識(shí)別的 十進(jìn)制數(shù)字,這就是數(shù)碼管的動(dòng)態(tài)顯示。 7 2.3.3 鎖存器與數(shù)碼管顯示鎖存器與數(shù)碼管顯示方法方法 在這里先介紹 74hc573 芯片,這是一個(gè)鎖存器芯片,連接方法見(jiàn)圖 2.5 所 示, p27、p26 分別控制位選和段選的 l 端,例如:當(dāng) p27(程序中的全局 變量 wei)賦高電平時(shí),74hc573 輸入端口的值將直接輸送給 74hc573 芯片的 輸出端,當(dāng)輸入端變化時(shí),輸出端也變化。p27 賦低電平時(shí), 74hc573 芯片
22、將 記住最近一次 l 端口是高電平時(shí)芯片輸入端的 8 位,并將其輸出,當(dāng)輸入端變 化時(shí),輸出端不變化。在這里就可以利用鎖存器的特性使 p27 起到控制那個(gè)數(shù) 碼管亮的作用,使 p26 控制數(shù)碼管亮什么樣的數(shù)字作用。 圖圖 2.52.5 74hc57374hc573 芯片的連接芯片的連接 以下數(shù)碼管顯示部分程序。 p0=0 xff; wei=1; p0=srtemp;/wein 打開(kāi)后 是低電平亮 wei=0; srtemp=_crol_(srtemp,1); p0=0 x00; duan=1; p0=tabledisi; duan=0; delay(1); 8 duan=1; p0=0 x00
23、; duan=0; 要注意的是位選(程序中的 wei 變量) ,位選是低電平時(shí)選擇該數(shù)碼管亮。 在顯示時(shí)容易出現(xiàn)不需要亮的 led 管微微發(fā)亮的問(wèn)題,這是因?yàn)樗x擇的 位選和段選都是通過(guò) p0 賦的值,如果先選擇位選的 8 位值,p0 口不還原成 0 x00,就會(huì)導(dǎo)致段選打開(kāi)后,還未賦予段選 p0 口需要的數(shù)值之前,這段時(shí)間內(nèi) p0 口將剛才位選的 8 位值賦予了段選鎖存器,這樣就會(huì)在極短的時(shí)間內(nèi),一些 不需要的 led 燈點(diǎn)亮,在單片機(jī)上就是由 led 燈微微亮的情況,所以在這里 注意每次 p0 對(duì)位選賦值以前,都應(yīng)該保證 p0 口為 0 x00。 2.42.4 鍵盤輸入設(shè)計(jì)鍵盤輸入設(shè)計(jì) 2
24、.4.1 鍵盤輸入方法鍵盤輸入方法 本設(shè)計(jì)中使用的是矩陣式鍵盤,見(jiàn)圖 2.6 所示。 圖圖 2.62.6 矩陣式鍵盤矩陣式鍵盤 s10 到 s19 分別代表數(shù)字 0 到 9。s20 代表確認(rèn)數(shù)字,按下后即可確認(rèn)要輸 入數(shù)字的某一位。 左側(cè)鍵盤的引腳由上至下分別是 p30 到 p37,第一行暫時(shí)不用,從第二 行開(kāi)始使用,每一行如 p31 都與 p34、 p35、 p36 、p37,他們是線與的 9 關(guān)系。因此可以如此操作,對(duì)圖中第二行、第三行、第四行諸行進(jìn)行掃描。掃 描第一行時(shí) p3 口賦值為 0 xfd,即為 p31 口賦“0”,p3 的其他口賦“1”,當(dāng)?shù)诙?行沒(méi)有按鍵按下時(shí) p34、 p3
25、5、 p36 、p37 將都是高電平“1”,一旦有按鍵 按下時(shí),由于線與關(guān)系,p34、 p35、 p36 、p37 必定有一個(gè)為“0”,它們 之中那一個(gè)為“0”依次代表 s10 到 s13 哪個(gè)鍵被按下。依次循環(huán)掃描三行即可時(shí) 時(shí)檢測(cè)是否有鍵按下。 2.4.2 鍵盤輸入的抖動(dòng)與去抖的方法鍵盤輸入的抖動(dòng)與去抖的方法 在 2.4.1 節(jié)中談到了如何實(shí)現(xiàn)鍵盤的掃描,但是理論與實(shí)際還是有一定的差 距,當(dāng)按下鍵盤到檢測(cè)到有電壓變化,這段時(shí)間在實(shí)際中是存在一定的時(shí)間誤 差的,經(jīng)過(guò)這段時(shí)間誤差后電壓才會(huì)達(dá)到單片能夠檢測(cè)到的范圍,但這期間單 片機(jī)很有可能已經(jīng)完成檢測(cè),見(jiàn)圖 2.7 所示。 圖圖 2.72.7
26、抖動(dòng)示意圖抖動(dòng)示意圖 如果不去除抖動(dòng)的話,人們手指按下的瞬間單片機(jī)已經(jīng)開(kāi)始檢測(cè),這時(shí)電 壓還未降到穩(wěn)定閉合狀態(tài)所以不能檢測(cè)到按下,同理不管是按下,還是是松手 都會(huì)有這樣的情況出現(xiàn),不利于操作,所以應(yīng)該加入去抖操作,圖中右側(cè)是硬 件去除抖動(dòng),除了硬件去抖以外還可以利用軟件去抖。 在本設(shè)計(jì)中采用軟件去抖的方法,原理是檢測(cè)兩次,第一次檢測(cè)到低電平 時(shí)延時(shí)一段時(shí)間,再檢測(cè)一次,如果還能檢測(cè)到低電平,則說(shuō)明確實(shí)有鍵按下。 10 具體程序如下: while(temp!=0 xf0) delay(5); p3=0 xfd; temp=p3; temp=temp while(temp!=0 xf0) 上述程序
27、是兩個(gè) while 循環(huán)之間的嵌套,第一個(gè) while()語(yǔ)句判斷有鍵按 下后,延時(shí)一段時(shí)間再進(jìn)行判斷,如果第二次判斷也認(rèn)為由鍵按下,則可以確 認(rèn)的確由鍵盤操作,并不是抖動(dòng)。具體按下后的操作可以在后一個(gè) while 循環(huán) 中書(shū)寫(xiě)。 2.52.5 ds18b20ds18b20 溫度采集溫度采集 2.5.1 ds18b20 技術(shù)性能與應(yīng)用范圍技術(shù)性能與應(yīng)用范圍 圖圖 2 2. .8 8 d ds s1 18 8b b2 20 0 的的外外形形及及管管腳腳 圖圖 ds18b20 是一種可組網(wǎng)數(shù)字溫度傳感器芯片,具有耐磨耐碰,體積小, 使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測(cè)溫和控制領(lǐng)域。
28、 11 獨(dú)特的單線接口方式, ds18b20 在與微處理器連接時(shí)僅需要一條口線 即可實(shí)現(xiàn)微處理器與 ds18b20 的雙向通訊。測(cè)溫范圍 55125, 固有測(cè)溫分辨率 0.5。支持多點(diǎn)組網(wǎng)功能,多個(gè) ds18b20 可以并聯(lián)在唯 一的三線上,最多只能并聯(lián) 8 個(gè),如果數(shù)量過(guò)多,會(huì)使供電電源電壓過(guò)低, 從而造成信號(hào)傳輸?shù)牟环€(wěn)定,實(shí)現(xiàn)多點(diǎn)測(cè)溫。工作電源為 35v/dc。在使 用中不需要任何外圍元件,測(cè)量結(jié)果以912 位數(shù)字量方式串行傳送。不銹 鋼保護(hù)管直徑 6,適用于 dn1525, dn40dn250 各種介質(zhì)工業(yè)管道和狹 小空間設(shè)備測(cè)溫,標(biāo)準(zhǔn)安裝螺紋 m10x1, m12x1.5, g1/2”
29、任選,pvc 電纜 直接出線或德式球型接線盒出線 ,便于與其它電器設(shè)備連接。 負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀, 但不能正常工 作。ds18b20 內(nèi)部結(jié)構(gòu)主要由四部分組成: 64 位光刻 rom 、溫度傳感器、 非揮發(fā)的溫度報(bào)警觸發(fā)器 th 和 tl、配置寄存器。 ds18b20 的外形及管腳 排列見(jiàn)圖 2.8 所示。 該產(chǎn)品適用于冷凍庫(kù),糧倉(cāng),儲(chǔ)罐,電訊機(jī)房,電力機(jī)房,電纜線槽等 測(cè)溫和控制領(lǐng)域、軸瓦,缸體,紡機(jī),空調(diào),等狹小空間工業(yè)設(shè)備測(cè)溫和控 制、供熱/制冷管道熱量計(jì)量,中央空調(diào)分戶熱能計(jì)量和工業(yè)領(lǐng)域測(cè)溫和控制、 汽車空調(diào)、冰箱、冷柜、以及中低溫干燥箱等。 2.5.2 d
30、s18b20 的初始化與讀寫(xiě)操作的初始化與讀寫(xiě)操作 1 1. . ds18b20 的的初初始始化化 (1) 先將數(shù)據(jù)線置高電平 “1”; (2) 延時(shí)(該時(shí)間要求的不是很嚴(yán)格,但是盡可能的短一點(diǎn)); (3) 數(shù)據(jù)線拉到低電平 “0”; (4) 延時(shí) 750 微秒(該時(shí)間的時(shí)間范圍可以從 480 到 960 微秒); (5) 數(shù)據(jù)線拉到高電平 “1”; (6) 延時(shí)等待(如果初始化成功則在 15 到 60 毫秒時(shí)間之內(nèi)產(chǎn)生一 個(gè)由 ds18b20 所返回的低電平 “0”。據(jù)該狀態(tài)可以來(lái)確定它的存在,但是應(yīng) 注意不能無(wú)限的進(jìn)行等待,不然會(huì)使程序進(jìn)入死循環(huán),所以要進(jìn)行超時(shí)控制) ; (7) 若 cp
31、u 讀到了數(shù)據(jù)線上的低電平 “0”后,還要做延時(shí),其延時(shí) 的時(shí)間從發(fā)出的高電平算起(第( 5)步的時(shí)間算起)最少要 480 微秒; 12 (8) 將數(shù)據(jù)線再次拉高到高電平 “1”后結(jié)束。 ds18b20 的的初始化見(jiàn)圖 2.9 所示。 圖圖 2 2. .9 9 d ds s1 18 8b b2 20 0 的的的的初初始始化化 2 2. . ds18b20 的的寫(xiě)寫(xiě)操操作作 (1) 數(shù)據(jù)線先置低電平 “0”; (2) 延時(shí)確定的時(shí)間為 15 微秒; (3) 按從低位到高位的順序發(fā)送字節(jié)(一次只發(fā)送一位); (4) 延時(shí)時(shí)間為 45 微秒; (5) 將數(shù)據(jù)線拉到高電平 ; (6) 重復(fù)上(1)到(
32、6)的操作直到所有的字節(jié)全部發(fā)送完為止 ; (7) 最后將數(shù)據(jù)線拉高 。 在這里要注意的是( 3),寫(xiě)數(shù)據(jù)時(shí)時(shí) 1bit 單獨(dú)傳送,這里有兩種情況。 當(dāng)需要傳送“1”時(shí),單片機(jī)應(yīng)該給 ds18b20 芯片的 dq 接口賦低電平, 大約 15 秒以后,將 dq 釋放為高電平,延時(shí)約 45 微妙即可。 當(dāng)需要傳送“0”時(shí),單片機(jī)應(yīng)該給 ds18b20 芯片的 dq 接口賦低電平, 并且持續(xù)拉低最少 60 微妙,然后將 dq 釋放為高電平,再延時(shí)約 15 秒即 可。 ds18b20 的寫(xiě)操作時(shí)序圖 見(jiàn)圖 2.10 所示。 13 圖圖 2 2. .1 10 0 d ds s1 18 8b b2 20
33、0 的的寫(xiě)寫(xiě)操操作作時(shí)時(shí)序序圖圖 3 3. . ds18b20 的的讀讀操操作作 (1)將數(shù)據(jù)線拉高 “1”; (2)延時(shí) 2 微秒; (3)將數(shù)據(jù)線拉低 “0”; (4)延時(shí) 15 微秒; (5)將數(shù)據(jù)線拉高 “1”; (6)延時(shí) 15 微秒; (7)讀數(shù)據(jù)線的狀態(tài)得到一個(gè)狀態(tài)位,并進(jìn)行數(shù)據(jù)處理; (8)延時(shí) 30 微秒; 這里只要按以上操作將狀態(tài)位的各各bit 按順序儲(chǔ)存好即可 。 ds18b20 的讀操作時(shí)序圖見(jiàn) 圖 2.11 所示。 圖圖 2 2. .1 11 1 d ds s1 18 8b b2 20 0 的的讀讀操操作作時(shí)時(shí)序序圖圖 2.5.3 ds18b20 的指令與格式的指令與
34、格式 ds18b20 溫度格式圖見(jiàn)圖 2.12 所示。 14 圖圖 2 2. .1 12 2 d ds s1 18 8b b2 20 0 溫溫度度格格式式圖圖 這是 12 位轉(zhuǎn)化后得到的 12 位數(shù)據(jù),存儲(chǔ)在 ds18b20 的兩個(gè) 8 比特的 ram 中,二進(jìn)制中的前面 5 位是符號(hào)位,如果測(cè)得的溫度大于0,這 5 位 為 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ù)字輸出
35、為 fe6fh,-55的數(shù)字輸出為 fc90h 。 ds18b20 溫度傳感器的存儲(chǔ)器 ds18b20 溫度傳感器的內(nèi)部存儲(chǔ)器包括 一個(gè)高速暫存 ram 和一個(gè)非易失性的可電擦除的 eepram,后者存放高溫 度和低溫度觸發(fā)器 th、tl 和結(jié)構(gòu)寄存器。配置寄存器, 該字節(jié)各位的意 義見(jiàn)表 2.2 所示。 表表 2.22.2 配配置置寄寄存存器器結(jié)結(jié)構(gòu)構(gòu) 溫度數(shù)據(jù)輸出(二進(jìn)制)數(shù)據(jù)輸出(十六進(jìn)制) +125 0000 0111 1101 000007d0 +85 0000 0101 0101 00000550 +25.0625 0000 0001 1001 00010191 +10.125 0
36、000 0000 1010 001000a2 +0.5 0000 0000 0000 10000008 0 0000 0000 0000 00000000 -0.5 1111 1111 1111 1000fff8 -10.125 1111 1111 0101 1110ff5e -25.0625 1111 1110 0110 1111fe6f -55 1111 1100 1001 0000fc90 15 高速暫存存儲(chǔ)器由 9 個(gè)字節(jié)組成。 其分配見(jiàn)表 2.3 所示,當(dāng)溫度轉(zhuǎn)換 命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在高速暫存存儲(chǔ)器 的第 0 和第 1 個(gè)字節(jié)。單片 機(jī)可通過(guò)單線接口讀
37、到該數(shù)據(jù),讀取時(shí)低位在前, 高位在后。對(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)制值。第九個(gè)字節(jié)是冗余 檢驗(yàn)字節(jié)。 表表 2 2. .3 3 d ds s1 18 8b b2 20 0 暫暫存存寄寄存存器器分分布布 寄存器內(nèi)容字節(jié)地址 溫度值低位 (ls byte) 0 溫度值高位 (ms byte) 1 高溫限值(th) 2 低溫限值(tl) 3 配置寄存器 4 保留 5 保留 6 保留 7 crc 校驗(yàn)值 8 根據(jù) ds18b20 的通訊協(xié)議,主機(jī)(單片機(jī))控制ds18b20 完成溫度 轉(zhuǎn)換必須經(jīng)過(guò)三個(gè)步驟:每一次讀寫(xiě)之
38、前都要對(duì)ds18b20 進(jìn)行復(fù)位操作, 復(fù)位成功后發(fā)送一條 rom 指令,最后發(fā)送 ram 指令,這樣才能對(duì) ds18b20 進(jìn)行預(yù)定的操作。復(fù)位要求主 cpu 將數(shù)據(jù)線下拉 500 微秒,然后 釋放,當(dāng) ds18b20 收到信號(hào)后等待 1660 微秒左右,后發(fā)出 60240 微 秒的存在低脈沖,主 cpu 收到此信號(hào)表示復(fù)位成功。 rom 指令表見(jiàn)表 2.4 所示,ram 指令表見(jiàn)表 2.5 所示。 16 表表 2 2. .4 4 r ro om m 指指令令表表 指 令約定代碼功 能 讀 rom 33h 讀 ds1820 溫度傳感器 rom 中的編碼(即 64 位地址) 符合 rom 55
39、h 發(fā)出此命令之后,接著發(fā)出 64 位 rom 編碼,訪問(wèn)單總線 上與該編碼相對(duì)應(yīng)的 ds1820 使之作出響應(yīng),為下一步對(duì) 該 ds1820 的讀寫(xiě)作準(zhǔn)備。 搜索 rom 0foh 用于確定掛接在同一總線上 ds1820 的個(gè)數(shù)和識(shí)別 64 位 rom 地址。為操作各器件作好準(zhǔn)備。 跳過(guò) rom 0cch 忽略 64 位 rom 地址,直接向 ds1820 發(fā)溫度變換命令。 適用于單片工作。 警告搜索命令 0ech 執(zhí)行后只有溫度超過(guò)設(shè)定值上限或下限的片子才做出響應(yīng) 。 表表 2 2. .5 5 r ra am m 指指令令表表 指 令約定代碼功 能 溫度變換 44h 啟動(dòng) ds1820 進(jìn)
40、行溫度轉(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)容 寫(xiě)暫存器 4eh 發(fā)出向內(nèi)部 ram 的 3、4 字節(jié)寫(xiě)上、下限溫度數(shù)據(jù)命令, 緊跟該命令之后,是傳送兩字節(jié)的數(shù)據(jù)。 復(fù)制暫存器 48h 將 ram 中第 3 、4 字節(jié)的內(nèi)容復(fù)制到 eeprom 中。 重調(diào) eeprom 0b8h 將 eeprom 中內(nèi)容恢復(fù)到 ram 中的第 3 、4 字節(jié)。 讀供電方式 0b4h 讀 ds1820 的供電模式。寄生供電時(shí) ds1820 發(fā)送“ 0 ” ,外接電源供電 ds1820 發(fā)送“
41、 1 ”。 2.5.4 ds18b20 寄生電源供電方式寄生電源供電方式 ds18b20 測(cè)溫系統(tǒng)具有測(cè)溫系統(tǒng)簡(jiǎn)單、測(cè)溫精度高、連接方便、占用口 線少等優(yōu)點(diǎn)。下面就是 ds18b20 幾個(gè)不同應(yīng)用方式下的 測(cè)溫電路圖: 17 ds18b20 寄生電源供電方式電路圖 ,見(jiàn)圖 2.13 所示,在寄生電源供電 方式下,ds18b20 從單線信號(hào)線上汲取能量:在信號(hào)線dq 處于高電平期 間把能量?jī)?chǔ)存在內(nèi)部電容里,在信號(hào)線處于低電平期間消耗電容上的電能工 作,直到高電平到來(lái)再給寄生電源(電容)充電。 獨(dú)特的寄生電源方式有三個(gè)好處: 1. 進(jìn)行遠(yuǎn)距離測(cè)溫時(shí),無(wú)需本地電源 ; 2. 可以在沒(méi)有常規(guī)電源的條件
42、下讀取rom; 3. 電路更加簡(jiǎn)潔,僅用一根 i/o 口實(shí)現(xiàn)測(cè)溫。 要想使 ds18b20 進(jìn)行精確的溫度轉(zhuǎn)換, i/o 線必須保證在溫度轉(zhuǎn)換期 間提供足夠的能量,由于每個(gè) ds18b20 在溫度轉(zhuǎn)換期間工作電流達(dá)到 1ma,當(dāng)幾個(gè)溫度傳感器掛在同一根 i/o 線上進(jìn)行多點(diǎn)測(cè)溫時(shí),只靠 4.7k 上拉電阻就無(wú)法提供足夠的能量,會(huì)造成無(wú)法轉(zhuǎn)換溫度或溫度誤差極大。 因此,這種電路只適應(yīng)于單一溫度傳感器測(cè)溫情況下使用,不適宜采用 供電系統(tǒng)中。并且工作電源 vcc 必須保證在 5v,當(dāng)電源電壓下降時(shí),寄 生電源能夠汲取的能量也降低,會(huì)使溫度誤差變大。 圖圖 2 2. .1 13 3 d ds s1 1
43、8 8b b2 20 0 寄寄生生電電源源供供電電方方式式 2.5.5 ds18b20 改進(jìn)的寄生電源供電方式改進(jìn)的寄生電源供電方式 ds18b20 寄生電源強(qiáng)上拉供電方式電路圖 ,改進(jìn)的寄生電源供電方式 見(jiàn)圖 2.14 所示,為了使 ds18b20 在動(dòng)態(tài)轉(zhuǎn)換周期中獲得足夠的電流供應(yīng), 當(dāng)進(jìn)行溫度轉(zhuǎn)換或拷貝到 e2 存儲(chǔ)器操作時(shí),用 mosfet 把 i/o 線直接拉 到 vcc 就可提供足夠的電流,在發(fā)出任何涉及到拷貝到e2 存儲(chǔ)器或啟動(dòng) 溫度轉(zhuǎn)換的指令后,必須在最多 10s 內(nèi)把 i/o 線轉(zhuǎn)換到強(qiáng)上拉狀態(tài)。在強(qiáng) 18 上拉方式下可以解決電流供應(yīng)不走的問(wèn)題,因此也適合于多點(diǎn)測(cè)溫應(yīng)用,缺
44、點(diǎn)就是要多占用一根 i/o 口線進(jìn)行強(qiáng)上拉切換。 圖圖 2 2. .1 14 4 改改進(jìn)進(jìn)的的寄寄生生電電源源供供電電方方式式 注意:在見(jiàn)圖 2.13 所示、見(jiàn)圖 2.14 所示寄生電源供電方式中, ds18b20 的 vdd 引腳必須接地 。 2.5.6 ds18b20 外部電源供電方式外部電源供電方式 ds18b20 的外部電源供電方式 見(jiàn)圖 2.15 所示,在外部電源供電方式下, ds18b20 工作電源由 vdd 引腳接入,此時(shí) i/o 線不需要強(qiáng)上拉,不存在電 源電流不足的問(wèn)題,可以保證 轉(zhuǎn)換精度, 同時(shí)在總線上理論可以掛接任意 多。ds18b20 傳感器,組成多點(diǎn)測(cè)溫系統(tǒng)。注意:在
45、外部供電的方式下, ds18b20 的 gnd 引腳不能懸空 ,否則不能轉(zhuǎn)換溫度,讀取的溫度總是 85。 19 圖圖 2 2. .1 15 5 外外部部供供電電方方式式單單點(diǎn)點(diǎn)測(cè)測(cè)溫溫電電路路 在本次設(shè)計(jì)中 采用外部電源供電方式 ,連接方法見(jiàn)圖 2.16 所示。 圖圖 2 2. .1 16 6 設(shè)設(shè)計(jì)計(jì)中中采采用用的的 測(cè)測(cè)溫溫電電路路 直接將 ds18b20 的 i/o 口接在單片機(jī)的 p22 上,這樣在硬件方面就可以 進(jìn)行數(shù)據(jù)交流,從而達(dá)到溫度數(shù)據(jù)傳輸?shù)哪康摹?2.5.7 ds18b20 寄生電源供電方式寄生電源供電方式 外部供電方式的多點(diǎn)測(cè)溫電路圖見(jiàn)圖2.17 所示,外部電源供電方式是
46、ds18b20 最佳的工作方式,工作穩(wěn)定可靠,抗干擾能力強(qiáng),而且電路也比較 簡(jiǎn)單,可以開(kāi)發(fā)出穩(wěn)定可靠的多點(diǎn)溫度監(jiān)控系統(tǒng)。站長(zhǎng)推薦大家在開(kāi)發(fā)中使 用外部電源供電方式,畢竟比寄生電源方式只多接一根vcc 引線。在外接 電源方式下,可以充分發(fā)揮 ds18b20 寬電源電壓范圍的優(yōu)點(diǎn),即使電源電 20 壓 vcc 降到 3v 時(shí),依然能夠保證溫度量精度。 圖圖 2 2. .1 17 7 外外部部供供電電方方式式的的多多點(diǎn)點(diǎn)測(cè)測(cè)溫溫電電路路圖圖 21 第第 3 章章 系統(tǒng)軟件設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì) 3.13.1 鍵盤輸入的程序鍵盤輸入的程序 while(temp!=0 xf0) delay(5); p3=0
47、xfd; temp=p3; temp=temp while(temp!=0 xf0) temp=p3; switch(temp) case 0 xed:num=0; break; case 0 xdd:num=1; break; case 0 xbd:num=2; break; case 0 x7d:num=3; break; while(temp!=0 xf0) temp=p3; temp=temp/*0000 22 在這里使用了_crol_函數(shù),所以頭文件中要增加#include,這里包 括去抖和松手檢測(cè)。經(jīng)過(guò)檢測(cè)以后通過(guò)不同的 temp 值,使 num 被賦予相應(yīng)的 數(shù)值,這樣 num
48、就是要輸入的一個(gè)數(shù)字。 3.23.2 ds18b20ds18b20 溫度傳感器設(shè)計(jì)溫度傳感器設(shè)計(jì) 連接好電路以后,就可以開(kāi)始設(shè)計(jì) ds18b20 的軟件環(huán)節(jié)。首先要初始化 ds18b20 以下為初始化程序。 void dsstart() unsigned int i; ds=0; i=100; /拉低約 800us, 符合協(xié)議要求的 480us 以上 while(i0) i-; ds=1; /產(chǎn)生一個(gè)上升沿, 進(jìn)入等待應(yīng)答狀態(tài) i=4; while(i0) i-; 然后延時(shí)等待,回應(yīng)。如以下子函數(shù)。 void dswait() unsigned int i; while(ds); /等待應(yīng)答信
49、號(hào) while(ds); /檢測(cè)到應(yīng)答脈沖 i=4; while(i0) i-; 以下兩個(gè)子函數(shù)為讀取的數(shù)據(jù)時(shí)用到的。可以在溫度采集讀取時(shí)調(diào)用。 bit readbit()/讀取一個(gè) bit 23 unsigned int i; bit b; ds=0; i+; /延時(shí)約 8us, 符合協(xié)議要求至少保持 1us ds=1; i+; i+; /延時(shí)約 16us, 符合協(xié)議要求的至少延時(shí) 15us 以上 b=ds; i=8; while(i0) i-; /延時(shí)約 64us, 符合讀時(shí)隙不低于 60us 要求 return b; uchar readbyte()/讀取一個(gè)字節(jié) uint b; uch
50、ar date,a; b=0;date=0; while(b8) a=readbit(); date=(a1); b+; return date; 以下為寫(xiě)入命令程序。用于操控 ds18b20。 void writeor(uchar order)/寫(xiě)入命令 uint b; 24 uchar a; bit bit2; b=0; for(a=0;a=1; if(bit2)/寫(xiě)入 1 ds=0; b+,b+; ds=1; for(b=0;b8;b+); else/0 ds=0; for(b=0;b8;b+); ds=1; b+;b+; 當(dāng)以上程序書(shū)寫(xiě)完成后,準(zhǔn)備工作基本完成。現(xiàn)在只要調(diào)用這些函數(shù),來(lái)
51、 操控 ds18b20 使其能夠按協(xié)議規(guī)定將溫度數(shù)據(jù)傳送給單片機(jī)。軟件實(shí)施方法如 下: void changetemp()/溫度轉(zhuǎn)變函數(shù) dsstart(); dswait(); 25 delay(1); writeor(0 xcc);/ 跳過(guò)讀序號(hào)列號(hào)的操作 writeor(0 x44);/ 啟動(dòng)溫度轉(zhuǎn)換 delay(1); uint gettemp()/獲取溫度 float tt; int temp; uchar geta,getb; dsstart(); dswait(); delay(1); writeor(0 xcc); writeor(0 xbe);/讀取溫度命令 delay(2)
52、; geta=readbyte();/讀取兩個(gè)字節(jié) getb=readbyte(); temp=getb; temp 0 ? 0.5 : -0.5);/,變大十倍且 四舍五入 return(temp); 以上兩個(gè)程序流程為,changetemp()子函數(shù)中先初始化 ds18b20,芯片應(yīng) 答以后寫(xiě)入兩個(gè)以字節(jié)為一個(gè)單位的命令,0 xcc 與 0 x44 它們的作用分別為跳 過(guò)讀序號(hào)列號(hào)的操作和啟動(dòng)溫度轉(zhuǎn)換。然后溫度獲取 gettemp()子函數(shù)完成。在 gettemp()子函數(shù)中首先也是初始化 ds18b20、等待應(yīng)答,寫(xiě)入命令 0 xcc 跳過(guò)讀 26 序號(hào)列號(hào)的操作和 0 xbe 讀取溫度
53、命令。使用 readbyte()讀取兩個(gè)字節(jié)的數(shù)據(jù), 分別賦予 geta、getb 兩個(gè)字符型變量,再將 getb 賦予 temp(temp 是一個(gè)整型變 量擁有兩個(gè)字節(jié)的容量),這樣 temp 的低 8 為就是 getb 中的值了。temp=8 的意義是 temp=temp 0 ? 0.5 : -0.5)這句話是先將 tt 由一個(gè)最高位為十位保留小數(shù)點(diǎn)后一位的數(shù)擴(kuò)大了 十倍,變?yōu)榱艘粋€(gè)最高位為百位的三位數(shù),而后面加上的十一個(gè)四舍五入的賦 值語(yǔ)句,也就相當(dāng)是一個(gè) if 語(yǔ)句,c 語(yǔ)言是任何精度高的變量變?yōu)榫鹊偷淖?量時(shí),都會(huì)失去一定的精度,而且是向下取整,例如在這里,如果 tt 是正溫度 的
54、話變大 10 倍以后,小數(shù)點(diǎn)后一位是無(wú)論是 1 還是 9,都默認(rèn)舍去,如果要對(duì) 正數(shù)的 tt 進(jìn)行四舍五入應(yīng)該先給 tt 加上 0.5,再將它賦給精度較低的 temp,這 樣就可以有四舍五入的功能,而這里沒(méi)有這么簡(jiǎn)單,這個(gè) if 語(yǔ)句的還要考慮 tt 為負(fù)值的情況下的操作,如果 temp 為負(fù)值,tt 變大 10 倍以后還要減去 0.5,這 樣就能夠完成 tt 為負(fù)值情況下的四舍五入。 3.33.3 主函數(shù)的分析主函數(shù)的分析 首先給出主函數(shù): void main() tmod=0 x01; th0=(65536-46000)/256; tl0=(65536-46000)%256; ea=1;
55、27 et0=1; tr0=1; zd=0; num=21;aaa=0;bbb=0; num1=21;num2=21;num3=21; while(1) uint a; uchar b; changetemp(); a=gettemp(); b=scanff(); numy=gettemp(); display(a,b); 這里的 aaa 用于控制是否確定輸入的一個(gè)數(shù)字是需要的數(shù)字,bbb 用于標(biāo)記 已經(jīng)輸入到了三個(gè)數(shù)字的第幾個(gè)數(shù)字。 主函數(shù)首先將所用到的全局變量賦值,然后進(jìn)入大循環(huán)首先進(jìn)入溫度轉(zhuǎn)換 函數(shù),使 ds18b20 啟動(dòng)溫度轉(zhuǎn)換,然后獲取溫度將兩個(gè)字節(jié)的數(shù)值賦給 a,而 將輸入的溫度
56、賦予 b ,再由 display(a,b)子函數(shù)輸出所有的值。 3.43.4 顯示函數(shù)的分析顯示函數(shù)的分析 以下是 display()函數(shù)的具體內(nèi)容。 void display(uint a,uchar b) uchar i,temp,srtemp,dis4; uint dda; dda=abs(a); numx=dda/1000; 28 num4=dda%1000/100; num5=dda%100/10; num6=dda%10; dis0=numx; dis1=num4; dis2=num5; dis3=num6; dis2+=10;/num5 小數(shù)點(diǎn) if(dis0=0)/如果百位和十
57、位都為 0 不顯示 if(a0)/負(fù)值 后面加個(gè)小數(shù)點(diǎn) dis3+=10; else if(dis0!=0)/超過(guò) 100 前面加小數(shù)點(diǎn) dis1=dis1+10; temp=0 xfb; for(i=1;i4;i+) p0=0 xff; wei=1; temp=_crol_(temp,1); p0=temp; wei=0; p0=0; duan=1; p0=tabledisi; duan=0; delay(3); 29 duan=1; p0=0 x00; duan=0; if(aaa=1 switch(bbb) case 0: dis1=b; num1=b; dis2=num2; dis3=
58、num3; if(dis2=21) dis2+; else dis2+=10; srtemp=0 xfe; for(i=1;i4;i+) p0=0 xff; wei=1; p0=srtemp;/wein 打開(kāi)后 是低電平亮 wei=0;/ srtemp=_crol_(srtemp,1); p0=0 x00; duan=1; p0=tabledisi; duan=0; delay(1); duan=1; 30 p0=0 x00; duan=0; break; case 1: dis1=num1; dis2=b; num2=b; dis3=num3; if(dis2=21) dis2+; else
59、 dis2+=10; srtemp=0 xfe; for(i=1;i4;i+) p0=0 xff; wei=1; p0=srtemp;/wein 打開(kāi)后 是低電平亮 wei=0;/ srtemp=_crol_(srtemp,1); p0=0 x00; duan=1; p0=tabledisi; duan=0; delay(1); duan=1; p0=0 x00; duan=0; 31 aaa=0; break; case 2: dis1=num1; dis2=num2; dis3=b; num3=b; if(dis2=21) dis2+; else dis2+=10; srtemp=0 xf
60、e; for(i=1;i4;i+) p0=0 xff; wei=1; p0=srtemp;/wein 打開(kāi)后 是低電平亮 wei=0;/ srtemp=_crol_(srtemp,1); p0=0 x00; duan=1; p0=tabledisi; duan=0; delay(1); duan=1; p0=0 x00; duan=0; aaa=0; 32 break; case 3: dis1=num1; dis2=num2; dis3=num3; if(dis2=21) dis2+; else dis2+=10; srtemp=0 xfe; for(i=1;i4;i+) p0=0 xff;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 灌云教育城域網(wǎng)培訓(xùn)教材
- 女性健康懷孕醫(yī)學(xué)科普
- 急診科護(hù)士工作總結(jié)模版
- 小兒斜視全麻術(shù)后護(hù)理
- 2024二年級(jí)上黃山奇石教學(xué)設(shè)計(jì)
- 4曹沖稱象 課件
- 醫(yī)學(xué)研究生文獻(xiàn)閱讀匯報(bào)
- 三年級(jí)下冊(cè)《體驗(yàn)下排鍵》教學(xué)設(shè)計(jì)
- 面試技巧培訓(xùn)課件
- 大學(xué)生職業(yè)規(guī)劃大賽《電氣工程及其自動(dòng)化專業(yè)》生涯發(fā)展展示
- 福州市歷史建筑保護(hù)管理辦法(試行)
- JHA及SCL風(fēng)險(xiǎn)評(píng)價(jià)方法講解(參考)
- DB11T 1933-2021 人乳庫(kù)建立與運(yùn)行規(guī)范
- 1.3.1動(dòng)量守恒定律課件(共13張PPT)
- 國(guó)網(wǎng)北京市電力公司授權(quán)委托書(shū)(用電)
- 白黑白裝飾畫(huà)欣賞黑白裝飾畫(huà)的特點(diǎn)黑白裝飾畫(huà)的表現(xiàn)形式黑白裝飾 bb
- 中小學(xué)教育懲戒規(guī)則(試行)全文解讀ppt課件
- 調(diào)度指揮與統(tǒng)計(jì)分析課程教學(xué)設(shè)計(jì)
- 常暗之廂(7規(guī)則-簡(jiǎn)體修正)
- 終端塔基礎(chǔ)預(yù)偏值(抬高值)計(jì)算表格
- 海外醫(yī)療服務(wù)委托合同協(xié)議書(shū)范本模板
評(píng)論
0/150
提交評(píng)論