版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 畢業(yè)設(shè)計(jì)(論文)</b></p><p> 基于51單片機(jī)的家用電熱水器設(shè)計(jì)</p><p> Design of Household Electric Water Heater Based on the 51-series singlechip</p><p><b> 摘 要</b&
2、gt;</p><p> 隨著社會(huì)的發(fā)展,人類(lèi)科技的進(jìn)步,各行各業(yè)都在使自己的產(chǎn)品智能化、數(shù)字化,因老式的熱水器使用煤氣或天然氣對(duì)水進(jìn)行燃燒加熱,用手動(dòng)的方式調(diào)節(jié)溫度,不僅不能夠精確的確定使用者需要的水溫,而且還存在一定的危險(xiǎn)性。</p><p> 電熱水器是一種可供浴室、洗手間及廚房使用的家用電器,隨著人們生活質(zhì)量的提高,現(xiàn)代的家用電熱水器已經(jīng)摒棄了以前的做法,而采用一種更加精確、安
3、全的實(shí)施方案。</p><p> C語(yǔ)言對(duì)單片機(jī)編程有諸多優(yōu)點(diǎn),例如:便于移植、句法檢查時(shí)錯(cuò)誤少、堅(jiān)固性好、頭文件種類(lèi)諸多,能夠方便快捷使用各種函數(shù)等。</p><p> 本文采用 AT 89C 52 單片機(jī)作為控制器,使用C語(yǔ)言編寫(xiě)程序,設(shè)計(jì)了一款智能家用電熱水器。使用陣型鍵盤(pán)輸入溫度,溫度可以精確到0.1攝氏度,并使用LED燈顯示,能夠精確提供用戶所需溫度的溫水。采用DS18B20
4、采集溫度,使用LED燈顯示,精確的顯示出采集的水溫。當(dāng)所需溫度高于當(dāng)前采集的水溫時(shí),使用MOC3041芯片觸發(fā)加熱,當(dāng)所需溫度低于當(dāng)前采集的水溫時(shí),則停止加熱。基本實(shí)現(xiàn)了智能控制功能。</p><p> 關(guān)鍵詞:?jiǎn)纹瑱C(jī);C語(yǔ)言;采集;智能;家用電熱水器 </p><p><b> 目 錄</b></p><p><b> 第
5、1章 緒論1</b></p><p> 1.1 家用電熱水器的現(xiàn)狀1</p><p> 1.2 TX-1C單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板簡(jiǎn)介1</p><p> 第2章 系統(tǒng)硬件設(shè)計(jì)2</p><p> 2.1 系統(tǒng)硬件的組成部分2</p><p> 2.2 系統(tǒng)硬件各部分的簡(jiǎn)介2</p>
6、;<p> 2.3 數(shù)碼管顯示3</p><p> 2.3.1 數(shù)碼管簡(jiǎn)介3</p><p> 2.3.2 數(shù)碼管的實(shí)現(xiàn)方法4</p><p> 2.3.3 鎖存器與數(shù)碼管顯示方法6</p><p> 2.4 鍵盤(pán)輸入設(shè)計(jì)7</p><p> 2.4.1 鍵盤(pán)輸入方法7</p
7、><p> 2.4.2 鍵盤(pán)輸入的抖動(dòng)與去抖的方法8</p><p> 2.5 DS18B20溫度采集9</p><p> 2.5.1 DS18B20技術(shù)性能與應(yīng)用范圍9</p><p> 2.5.2 DS18B20的初始化與讀寫(xiě)操作10</p><p> 2.5.3 DS18B20的指令與格式12&l
8、t;/p><p> 2.5.4 DS18B20寄生電源供電方式15</p><p> 2.5.5 DS18B20改進(jìn)的寄生電源供電方式16</p><p> 2.5.6 DS18B20外部電源供電方式17</p><p> 2.5.7 DS18B20寄生電源供電方式18</p><p> 第3章 系統(tǒng)軟件
9、設(shè)計(jì)20</p><p> 3.1 鍵盤(pán)輸入的程序20</p><p> 3.2 DS18B20溫度傳感器設(shè)計(jì)21</p><p> 3.3 主函數(shù)的分析25</p><p> 3.4 顯示函數(shù)的分析26</p><p> 3.5 中斷加熱子函數(shù)的分析33</p><p>
10、 第4章 功能簡(jiǎn)介與成品圖片35</p><p> 4.1 智能熱水器具的功能35</p><p> 4.2 成品圖片35</p><p> 第5章 總結(jié)與展望38</p><p><b> 附錄 程序41</b></p><p><b> 第1章 緒論</b
11、></p><p> 單片機(jī)是一種與我們生活息息相關(guān)的控制器,它存在于許多地方,例如:電子手表、掌上游戲機(jī)、數(shù)碼相機(jī)、錄音筆、電視機(jī)遙控器等等。單片機(jī)主要由中央處理器、內(nèi)存、輸入/輸出設(shè)備組成,它就好像是一臺(tái)小型電腦,它能夠執(zhí)行人們對(duì)它編寫(xiě)的程序,從而發(fā)出各種不同的控制命令,與外部電路結(jié)合后,便可以完成各種各樣的功能。通過(guò)單片機(jī)人們的生活將會(huì)變得更加方便、快捷。</p><p>
12、 1.1 家用電熱水器的現(xiàn)狀</p><p> 我們的生活電熱水器是一種可供浴室、洗手間及廚房使用,按照人們的需要的溫度,提供溫水的家用電器。市場(chǎng)上傳統(tǒng)的機(jī)械式電熱水器控制精度低、可靠性差,甚至存在一定的危險(xiǎn)隱患。隨著社會(huì)的發(fā)展、人們生活質(zhì)量的提高,人們對(duì)電熱水器的要求越來(lái)越趨向于智能化和數(shù)字化,這種老式而簡(jiǎn)單的電熱水器已經(jīng)不能夠滿足人們的需要了。而智能化家用電熱水器正是適應(yīng)現(xiàn)代化智能家用電器趨勢(shì)而出現(xiàn)。它能提
13、供用戶方便快捷的數(shù)字化輸入方式,并且能精確的采集和控制環(huán)境中的水溫,將其提供給用戶,因此備受人們的關(guān)注。</p><p> 1.2 TX-1C單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板簡(jiǎn)介</p><p> 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)試下載接口于一身,完全兼容A
14、TMEL公司的51單片機(jī),除此之外還有很多特點(diǎn),如:無(wú)法解密、低功耗、高速、高可靠、強(qiáng)抗靜電、強(qiáng)抗干擾等。</p><p> 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ù)字化電熱
15、水器的設(shè)計(jì)。</p><p> 第2章 系統(tǒng)硬件設(shè)計(jì)</p><p> 2.1 系統(tǒng)硬件的組成部分</p><p> 系統(tǒng)設(shè)計(jì)硬件原理結(jié)構(gòu)見(jiàn)圖2.1所示。系統(tǒng)以高性價(jià)比的AT89C51單片機(jī)為核心,由鍵盤(pán)輸入、DS18B20溫度采集、數(shù)碼管顯示電路、電源時(shí)鐘復(fù)位電路、雙向可控硅驅(qū)動(dòng)電路MOC3041、雙向可控硅TLC336A組成加熱器控制電路。 </p&
16、gt;<p> 圖2.1 系統(tǒng)設(shè)計(jì)硬件原理結(jié)構(gòu)</p><p> 2.2 系統(tǒng)硬件各部分的簡(jiǎn)介</p><p> 這里AT89C51為總控制器。單片機(jī)的P0口連接74HC573鎖存器,這樣可以節(jié)約單片機(jī)端口,即可多次操作P0口,使其既能控制數(shù)碼管的片選,又能控制數(shù)碼管的位選,從而節(jié)省的單片機(jī)的外部接口,擴(kuò)展了功能。</p><p> 鍵盤(pán)的輸入
17、由P3口完成在第4章節(jié)中會(huì)具體介紹如何實(shí)現(xiàn)。</p><p> 時(shí)鐘復(fù)位電路見(jiàn)圖2.2所示,RET連接單片機(jī)的RESET接口,主要完成單片機(jī)的復(fù)位功能。</p><p> 圖2.2 時(shí)鐘復(fù)位電路</p><p> 溫度采集芯片由DS18B20芯片完成,DS18B20的2號(hào)接口接在單片機(jī)的P2^2口,按協(xié)議傳送以兩個(gè)字節(jié)為一組的溫度數(shù)據(jù),第3章會(huì)介紹具體實(shí)現(xiàn)方法
18、。</p><p> 加熱模塊見(jiàn)圖2.3所示,MOC3041芯片的2號(hào)接口連接單片機(jī)的P2^2口。當(dāng)需要加熱時(shí),P2^2接口送出低電平,即可觸發(fā)加熱器工作。</p><p><b> 圖2.3 加熱模塊</b></p><p><b> 2.3 數(shù)碼管顯示</b></p><p> 2.3.
19、1 數(shù)碼管簡(jiǎn)介</p><p> 單片機(jī)系統(tǒng)中常用的顯示器有:</p><p> 發(fā)光二極管LED(Light Emitting Diode)顯示器、液晶CD(Liquid Crystal Display)顯示器、CRT顯示器等。LED、LCD顯示器有兩種顯示結(jié)構(gòu):段顯示(7段、米字型等)和點(diǎn)陣顯示(5×8、8×8點(diǎn)陣等)。</p><p>
20、 使用LED顯示器時(shí),要注意區(qū)分這兩種不同的接法。為了顯示數(shù)字或字符,必須對(duì)數(shù)字或字符進(jìn)行編碼。七段數(shù)碼管加上一個(gè)小數(shù)點(diǎn),共計(jì)8段。因此為L(zhǎng)ED顯示器提供的編碼正好是一個(gè)字節(jié)。本設(shè)計(jì)采用的TX-C1實(shí)驗(yàn)板是采用共陰LED顯示器,根據(jù)電路連接圖顯示十六進(jìn)制數(shù)的編碼見(jiàn)表2.1所示。</p><p> 表2.1 十六進(jìn)制數(shù)的編碼</p><p> 2.3.2 數(shù)碼管的實(shí)現(xiàn)方法</p&
21、gt;<p> 數(shù)碼管的顯示由P0口完成控制。有兩點(diǎn)需要注意,第一點(diǎn)是要哪一個(gè)數(shù)碼管亮,第二點(diǎn)是亮的數(shù)碼管顯示什么數(shù)字。所以數(shù)碼管有位選和段選之分,位選在程序中用wei表示,單片機(jī)上是P2^7端口,即對(duì)位選操作時(shí)使P2^7呈現(xiàn)高電平,這時(shí)P0的八個(gè)端口對(duì)數(shù)碼管的操作決定了那幾個(gè)數(shù)碼管亮,P0操作完成后使P2^7呈現(xiàn)低電平,這樣位選就已鎖定。段選在程序中由duan表示,單片機(jī)上是P2^6端口,與位選相同,操作時(shí)使P2^6呈
22、現(xiàn)高電平,這時(shí)P0的八個(gè)端口對(duì)數(shù)碼管的操作決定了亮的幾個(gè)數(shù)碼管顯示什么數(shù)字,P0操作完成后使P2^6呈現(xiàn)低電平,這樣段選就已鎖定。</p><p> 見(jiàn)圖2.4所示由于單片機(jī)僅僅起到控制的作用,其輸出電流十分小,所以P0端需要接上拉電阻與5V電源,通過(guò)電壓的變化控制5V電源點(diǎn)亮,想要圖中a端由電流通過(guò)時(shí),即給P0^0一個(gè)低電平,觸發(fā)上拉電阻兩端間的電勢(shì)差,這樣就能促使電流流向a點(diǎn),從而使a端對(duì)應(yīng)的LED燈點(diǎn)亮。
23、</p><p> 圖2.4 單片機(jī)與數(shù)碼管的硬件連接</p><p> 首先選擇位選,再選擇段選。</p><p> uchar code table[]={</p><p> 0x3f,0x06,0x5b,0x4f,</p><p> 0x66,0x6d,0x7d,0x07,</p><
24、;p> 0x7f,0x6f,0xbf,0x86,</p><p> 0xdb,0xcf,0xe6,0xed,</p><p> 0xfd,0x87,0xff,0xef,</p><p> 0x00,0x08,0x88};</p><p> 可以直接設(shè)置數(shù)碼管顯示各數(shù)字的十六進(jìn)制,即P0口應(yīng)賦的十六進(jìn)制,以便操作。如以上數(shù)組,使
25、用時(shí)僅僅將需要的數(shù)組中的其中一個(gè)賦予P0口,這樣可以方便直觀得使數(shù)碼管顯示需要的數(shù)字。</p><p> 選擇位選與選擇片選的過(guò)程相當(dāng)快時(shí),顯示在人眼中就是一排易于識(shí)別的十進(jìn)制數(shù)字,這就是數(shù)碼管的動(dòng)態(tài)顯示。</p><p> 2.3.3 鎖存器與數(shù)碼管顯示方法</p><p> 在這里先介紹74HC573芯片,這是一個(gè)鎖存器芯片,連接方法見(jiàn)圖2.5所示, P2
26、^7、P2^6分別控制位選和段選的L端,例如:當(dāng)P2^7(程序中的全局變量wei)賦高電平時(shí),74HC573輸入端口的值將直接輸送給74HC573芯片的輸出端,當(dāng)輸入端變化時(shí),輸出端也變化。P2^7賦低電平時(shí), 74HC573芯片將記住最近一次L端口是高電平時(shí)芯片輸入端的8位,并將其輸出,當(dāng)輸入端變化時(shí),輸出端不變化。在這里就可以利用鎖存器的特性使P2^7起到控制那個(gè)數(shù)碼管亮的作用,使P2^6控制數(shù)碼管亮什么樣的數(shù)字作用。</p&
27、gt;<p> 圖2.5 74HC573芯片的連接</p><p> 以下數(shù)碼管顯示部分程序。</p><p><b> P0=0xff;</b></p><p><b> wei=1;</b></p><p> P0=srtemp;//wein打開(kāi)后 是低電平亮</p
28、><p><b> wei=0;</b></p><p> srtemp=_crol_(srtemp,1);</p><p><b> P0=0x00;</b></p><p><b> duan=1;</b></p><p> P0=table[
29、dis[i]];</p><p><b> duan=0;</b></p><p><b> delay(1);</b></p><p><b> duan=1;</b></p><p><b> P0=0x00;</b></p>&
30、lt;p><b> duan=0;</b></p><p> 要注意的是位選(程序中的wei變量),位選是低電平時(shí)選擇該數(shù)碼管亮。</p><p> 在顯示時(shí)容易出現(xiàn)不需要亮的LED管微微發(fā)亮的問(wèn)題,這是因?yàn)樗x擇的位選和段選都是通過(guò)P0賦的值,如果先選擇位選的8位值,P0口不還原成0x00,就會(huì)導(dǎo)致段選打開(kāi)后,還未賦予段選P0口需要的數(shù)值之前,這段時(shí)間內(nèi)
31、P0口將剛才位選的8位值賦予了段選鎖存器,這樣就會(huì)在極短的時(shí)間內(nèi),一些不需要的LED燈點(diǎn)亮,在單片機(jī)上就是由LED燈微微亮的情況,所以在這里注意每次P0對(duì)位選賦值以前,都應(yīng)該保證P0口為0x00。</p><p> 2.4 鍵盤(pán)輸入設(shè)計(jì)</p><p> 2.4.1 鍵盤(pán)輸入方法</p><p> 本設(shè)計(jì)中使用的是矩陣式鍵盤(pán),見(jiàn)圖2.6所示。</p>
32、;<p> 圖2.6 矩陣式鍵盤(pán)</p><p> S10到S19分別代表數(shù)字0到9。S20代表確認(rèn)數(shù)字,按下后即可確認(rèn)要輸入數(shù)字的某一位。</p><p> 左側(cè)鍵盤(pán)的引腳由上至下分別是P3^0到P3^7,第一行暫時(shí)不用,從第二行開(kāi)始使用,每一行如P3^1都與P3^4、 P3^5、 P3^6 、P3^7,他們是線與的關(guān)系。因此可以如此操作,對(duì)圖中第二行、第三行、第四行
33、諸行進(jìn)行掃描。掃描第一行時(shí)P3口賦值為0xfd,即為P3^1口賦“0”,P3的其他口賦“1”,當(dāng)?shù)诙袥](méi)有按鍵按下時(shí)P3^4、 P3^5、 P3^6 、P3^7將都是高電平“1”,一旦有按鍵按下時(shí),由于線與關(guān)系,P3^4、 P3^5、 P3^6 、P3^7必定有一個(gè)為“0”,它們之中那一個(gè)為“0”依次代表S10到S13哪個(gè)鍵被按下。依次循環(huán)掃描三行即可時(shí)時(shí)檢測(cè)是否有鍵按下。</p><p> 2.4.2 鍵盤(pán)輸
34、入的抖動(dòng)與去抖的方法</p><p> 在2.4.1節(jié)中談到了如何實(shí)現(xiàn)鍵盤(pán)的掃描,但是理論與實(shí)際還是有一定的差距,當(dāng)按下鍵盤(pán)到檢測(cè)到有電壓變化,這段時(shí)間在實(shí)際中是存在一定的時(shí)間誤差的,經(jīng)過(guò)這段時(shí)間誤差后電壓才會(huì)達(dá)到單片能夠檢測(cè)到的范圍,但這期間單片機(jī)很有可能已經(jīng)完成檢測(cè),見(jiàn)圖2.7所示。</p><p> 圖2.7 抖動(dòng)示意圖</p><p> 如果不去除抖動(dòng)
35、的話,人們手指按下的瞬間單片機(jī)已經(jīng)開(kāi)始檢測(cè),這時(shí)電壓還未降到穩(wěn)定閉合狀態(tài)所以不能檢測(cè)到按下,同理不管是按下,還是是松手都會(huì)有這樣的情況出現(xiàn),不利于操作,所以應(yīng)該加入去抖操作,圖中右側(cè)是硬件去除抖動(dòng),除了硬件去抖以外還可以利用軟件去抖。</p><p> 在本設(shè)計(jì)中采用軟件去抖的方法,原理是檢測(cè)兩次,第一次檢測(cè)到低電平時(shí)延時(shí)一段時(shí)間,再檢測(cè)一次,如果還能檢測(cè)到低電平,則說(shuō)明確實(shí)有鍵按下。具體程序如下:</p
36、><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> P3=0xfd;</b></p><p><b> temp=P3;&l
37、t;/b></p><p> temp=temp&0xf0;</p><p> while(temp!=0xf0)</p><p> 上述程序是兩個(gè)while循環(huán)之間的嵌套,第一個(gè)while()語(yǔ)句判斷有鍵按下后,延時(shí)一段時(shí)間再進(jìn)行判斷,如果第二次判斷也認(rèn)為由鍵按下,則可以確認(rèn)的確由鍵盤(pán)操作,并不是抖動(dòng)。具體按下后的操作可以在后一個(gè)while循環(huán)
38、中書(shū)寫(xiě)。</p><p> 2.5 DS18B20溫度采集</p><p> 2.5.1 DS18B20技術(shù)性能與應(yīng)用范圍</p><p> 圖2.8 DS18B20的外形及管腳圖</p><p> DS18B20是一種可組網(wǎng)數(shù)字溫度傳感器芯片,具有耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測(cè)溫和控制領(lǐng)域。&
39、lt;/p><p> 獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。測(cè)溫范圍 -55℃~+125℃,固有測(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è)溫。工作電源為 3~5V/DC。在使用中不需要任何外圍元件,測(cè)量結(jié)果以9~12位
40、數(shù)字量方式串行傳送。不銹鋼保護(hù)管直徑Φ6,適用于DN15~25, DN40~DN250各種介質(zhì)工業(yè)管道和狹小空間設(shè)備測(cè)溫,標(biāo)準(zhǔn)安裝螺紋 M10X1, M12X1.5, G1/2”任選,PVC電纜直接出線或德式球型接線盒出線,便于與其它電器設(shè)備連接。</p><p> 負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀, 但不能正常工作。DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM 、溫度傳感器、非揮發(fā)的
41、溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。DS18B20的外形及管腳排列見(jiàn)圖2.8所示。</p><p> 該產(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è)溫和控制、汽車(chē)空調(diào)、冰箱、冷柜、以及中低溫干燥箱等。</p><p> 2.5.2 DS18B2
42、0的初始化與讀寫(xiě)操作</p><p> 1. DS18B20的初始化</p><p> ?。?) 先將數(shù)據(jù)線置高電平“1”; </p><p> (2) 延時(shí)(該時(shí)間要求的不是很?chē)?yán)格,但是盡可能的短一點(diǎn));</p><p> (3) 數(shù)據(jù)線拉到低電平“0”; </p><p> ?。?) 延時(shí)750微秒(該時(shí)間的
43、時(shí)間范圍可以從480到960微秒); </p><p> ?。?) 數(shù)據(jù)線拉到高電平“1”; </p><p> ?。?) 延時(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í)控制); </p><p> (7) 若CPU讀到
44、了數(shù)據(jù)線上的低電平“0”后,還要做延時(shí),其延時(shí)的時(shí)間從發(fā)出的高電平算起(第(5)步的時(shí)間算起)最少要480微秒; </p><p> (8) 將數(shù)據(jù)線再次拉高到高電平“1”后結(jié)束。</p><p> DS18B20的的初始化見(jiàn)圖2.9所示。</p><p> 圖2.9 DS18B20的的初始化</p><p> 2. DS18B20的
45、寫(xiě)操作</p><p> (1) 數(shù)據(jù)線先置低電平“0”; </p><p> ?。?) 延時(shí)確定的時(shí)間為15微秒; </p><p> ?。?) 按從低位到高位的順序發(fā)送字節(jié)(一次只發(fā)送一位); </p><p> (4) 延時(shí)時(shí)間為45微秒; </p><p> ?。?) 將數(shù)據(jù)線拉到高電平; </p&g
46、t;<p> ?。?) 重復(fù)上(1)到(6)的操作直到所有的字節(jié)全部發(fā)送完為止; </p><p> (7) 最后將數(shù)據(jù)線拉高。</p><p> 在這里要注意的是(3),寫(xiě)數(shù)據(jù)時(shí)時(shí)1bit單獨(dú)傳送,這里有兩種情況。</p><p> 當(dāng)需要傳送“1”時(shí),單片機(jī)應(yīng)該給DS18B20芯片的DQ接口賦低電平,大約15秒以后,將DQ釋放為高電平,延時(shí)約
47、45微妙即可。</p><p> 當(dāng)需要傳送“0”時(shí),單片機(jī)應(yīng)該給DS18B20芯片的DQ接口賦低電平,并且持續(xù)拉低最少60微妙,然后將DQ釋放為高電平,再延時(shí)約15秒即可。</p><p> DS18B20的寫(xiě)操作時(shí)序圖見(jiàn)圖2.10所示。</p><p> 圖2.10 DS18B20的寫(xiě)操作時(shí)序圖</p><p> 3. DS18B
48、20的讀操作</p><p> (1)將數(shù)據(jù)線拉高“1”; </p><p> ?。?)延時(shí)2微秒; </p><p> ?。?)將數(shù)據(jù)線拉低“0”; </p><p> ?。?)延時(shí)15微秒; </p><p> ?。?)將數(shù)據(jù)線拉高“1”; </p><p> (6)延時(shí)15微秒; &l
49、t;/p><p> (7)讀數(shù)據(jù)線的狀態(tài)得到一個(gè)狀態(tài)位,并進(jìn)行數(shù)據(jù)處理; </p><p> (8)延時(shí)30微秒;</p><p> 這里只要按以上操作將狀態(tài)位的各各bit按順序儲(chǔ)存好即可。</p><p> DS18B20的讀操作時(shí)序圖見(jiàn)圖2.11所示。</p><p> 圖2.11 DS18B20的讀操作時(shí)序
50、圖</p><p> 2.5.3 DS18B20的指令與格式</p><p> DS18B20溫度格式圖見(jiàn)圖2.12所示。</p><p> 圖2.12 DS18B20溫度格式圖</p><p> 這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在DS18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0,這5位為0
51、,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際 溫度。 例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FE6FH,-55℃的數(shù)字輸出為FC90H 。</p><p> DS18B20溫度傳感器的存儲(chǔ)器 DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存RAM和一
52、個(gè)非易失性的可電擦除的EEPRAM,后者存放高溫度和低溫度觸發(fā)器 TH、TL和結(jié)構(gòu)寄存器。配置寄存器,該字節(jié)各位的意義見(jiàn)表2.2所示。</p><p> 表2.2 配置寄存器結(jié)構(gòu)</p><p> 高速暫存存儲(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ò)單線接口讀到該數(shù)據(jù),讀取時(shí)低
53、位在前,高位在后。對(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é)。 </p><p> 表2.3 DS18B20暫存寄存器分布</p><p> 根據(jù)DS18B20的通訊協(xié)議,主機(jī)(單片機(jī))控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過(guò)三個(gè)步驟:每一次讀寫(xiě)之前都要對(duì)DS18B20進(jìn)行復(fù)位操作,復(fù)位成功后發(fā)送一
54、條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,當(dāng)DS18B20收到信號(hào)后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。 ROM指令表見(jiàn)表2.4所示,RAM指令表見(jiàn)表2.5所示。</p><p> 表2.4 ROM指令表</p><p> 表2.5 RAM指令表&l
55、t;/p><p> 2.5.4 DS18B20寄生電源供電方式</p><p> DS18B20測(cè)溫系統(tǒng)具有測(cè)溫系統(tǒng)簡(jiǎn)單、測(cè)溫精度高、連接方便、占用口線少等優(yōu)點(diǎn)。下面就是DS18B20幾個(gè)不同應(yīng)用方式下的 測(cè)溫電路圖:</p><p> DS18B20寄生電源供電方式電路圖,見(jiàn)圖2.13所示,在寄生電源供電方式下,DS18B20從單線信號(hào)線上汲取能量:在信號(hào)線DQ
56、處于高電平期間把能量?jī)?chǔ)存在內(nèi)部電容里,在信號(hào)線處于低電平期間消耗電容上的電能工作,直到高電平到來(lái)再給寄生電源(電容)充電。 </p><p> 獨(dú)特的寄生電源方式有三個(gè)好處: </p><p> 1. 進(jìn)行遠(yuǎn)距離測(cè)溫時(shí),無(wú)需本地電源;</p><p> 2. 可以在沒(méi)有常規(guī)電源的條件下讀取ROM;</p><p> 3. 電路更加簡(jiǎn)潔
57、,僅用一根I/O口實(shí)現(xiàn)測(cè)溫。 </p><p> 要想使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)換溫度或溫度誤差極大。 </p><p> 因此,這種電路只適應(yīng)于單一溫度傳感器測(cè)溫情況下
58、使用,不適宜采用供電系統(tǒng)中。并且工作電源VCC必須保證在5V,當(dāng)電源電壓下降時(shí),寄生電源能夠汲取的能量也降低,會(huì)使溫度誤差變大。 </p><p> 圖2.13 DS18B20寄生電源供電方式</p><p> 2.5.5 DS18B20改進(jìn)的寄生電源供電方式</p><p> DS18B20寄生電源強(qiáng)上拉供電方式電路圖,改進(jìn)的寄生電源供電方式見(jiàn)圖2.14所示
59、,為了使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)換的指令后,必須在最多10μS內(nèi)把I/O線轉(zhuǎn)換到強(qiáng)上拉狀態(tài)。在強(qiáng)上拉方式下可以解決電流供應(yīng)不走的問(wèn)題,因此也適合于多點(diǎn)測(cè)溫應(yīng)用,缺點(diǎn)就是要多占用一根I/O口線進(jìn)行強(qiáng)上拉切換。 </p><p> 圖2.14 改進(jìn)的
60、寄生電源供電方式</p><p> 注意:在見(jiàn)圖2.13所示、見(jiàn)圖2.14所示寄生電源供電方式中,DS18B20的VDD引腳必須接地。</p><p> 2.5.6 DS18B20外部電源供電方式</p><p> DS18B20的外部電源供電方式見(jiàn)圖2.15所示,在外部電源供電方式下,DS18B20工作電源由VDD引腳接入,此時(shí)I/O線不需要強(qiáng)上拉,不存在電
61、源電流不足的問(wèn)題,可以保證轉(zhuǎn)換精度,同時(shí)在總線上理論可以掛接任意多。DS18B20傳感器,組成多點(diǎn)測(cè)溫系統(tǒng)。注意:在外部供電的方式下,DS18B20的GND引腳不能懸空,否則不能轉(zhuǎn)換溫度,讀取的溫度總是85℃。 </p><p> 圖2.15 外部供電方式單點(diǎn)測(cè)溫電路</p><p> 在本次設(shè)計(jì)中采用外部電源供電方式,連接方法見(jiàn)圖2.16所示。</p><p>
62、; 圖2.16 設(shè)計(jì)中采用的測(cè)溫電路</p><p> 直接將DS18B20的I/O口接在單片機(jī)的P2^2上,這樣在硬件方面就可以進(jìn)行數(shù)據(jù)交流,從而達(dá)到溫度數(shù)據(jù)傳輸?shù)哪康摹?lt;/p><p> 2.5.7 DS18B20寄生電源供電方式</p><p> 外部供電方式的多點(diǎn)測(cè)溫電路圖見(jiàn)圖2.17所示,外部電源供電方式是DS18B20最佳的工作方式,工作穩(wěn)定可靠
63、,抗干擾能力強(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),即使電源電壓VCC降到3V時(shí),依然能夠保證溫度量精度。</p><p> 圖2.17 外部供電方式的多點(diǎn)測(cè)溫電路圖</p><p> 第3章 系統(tǒng)軟件設(shè)計(jì)</p
64、><p> 3.1 鍵盤(pán)輸入的程序</p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> P3=0xfd;</b></p&g
65、t;<p><b> temp=P3;</b></p><p> temp=temp&0xf0;</p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P3;</b>&l
66、t;/p><p> switch(temp)</p><p><b> {</b></p><p> case 0xed:num=0;</p><p><b> break;</b></p><p> case 0xdd:num=1;</p><p&
67、gt;<b> break;</b></p><p> case 0xbd:num=2;</p><p><b> break;</b></p><p> case 0x7d:num=3;</p><p><b> break;</b></p><
68、p><b> }</b></p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P3;</b></p><p> temp=temp&0xf0;//****0000</p&g
69、t;<p><b> }</b></p><p><b> }</b></p><p> 在這里使用了_crol_函數(shù),所以頭文件中要增加#include<intrins.h>,這里包括去抖和松手檢測(cè)。經(jīng)過(guò)檢測(cè)以后通過(guò)不同的temp值,使num被賦予相應(yīng)的數(shù)值,這樣num就是要輸入的一個(gè)數(shù)字。</p>
70、<p> 3.2 DS18B20溫度傳感器設(shè)計(jì)</p><p> 連接好電路以后,就可以開(kāi)始設(shè)計(jì)DS18B20的軟件環(huán)節(jié)。首先要初始化DS18B20以下為初始化程序。</p><p> void dsstart()</p><p><b> { </b></p><p> unsigned int
71、 i;</p><p><b> ds=0;</b></p><p> i=100; //拉低約800us, 符合協(xié)議要求的480us以上</p><p> while(i>0) i--;</p><p> ds=1; //產(chǎn)生一個(gè)上升沿, 進(jìn)入等待應(yīng)答狀態(tài) </p><p&g
72、t;<b> i=4;</b></p><p> while(i>0) i--;</p><p><b> }</b></p><p> 然后延時(shí)等待,回應(yīng)。如以下子函數(shù)。</p><p> void dswait()</p><p><b> {
73、</b></p><p> unsigned int i;</p><p> while(ds); //等待應(yīng)答信號(hào)</p><p> while(~ds); //檢測(cè)到應(yīng)答脈沖</p><p><b> i=4;</b></p><p> while(i>0)
74、i--;</p><p><b> }</b></p><p> 以下兩個(gè)子函數(shù)為讀取的數(shù)據(jù)時(shí)用到的??梢栽跍囟炔杉x取時(shí)調(diào)用。</p><p> bit readbit()//讀取一個(gè)bit</p><p><b> {</b></p><p> unsigned
75、 int i;</p><p><b> bit b;</b></p><p><b> ds=0;</b></p><p> i++; //延時(shí)約8us, 符合協(xié)議要求至少保持1us</p><p><b> ds=1;</b></p><p&
76、gt;<b> i++;</b></p><p> i++; //延時(shí)約16us, 符合協(xié)議要求的至少延時(shí)15us以上</p><p><b> b=ds;</b></p><p><b> i=8;</b></p><p> while(i>0) i--;
77、 //延時(shí)約64us, 符合讀時(shí)隙不低于60us要求</p><p><b> return b;</b></p><p><b> }</b></p><p> uchar readbyte()//讀取一個(gè)字節(jié)</p><p><b> {uint b;</b>&l
78、t;/p><p> uchar date,a;</p><p> b=0;date=0;</p><p> while(b<8)</p><p><b> {</b></p><p> a=readbit();</p><p> date=(a<<
79、7)|(date>>1);</p><p><b> b++;</b></p><p><b> }</b></p><p> return date;</p><p><b> }</b></p><p> 以下為寫(xiě)入命令程序。
80、用于操控DS18B20。</p><p> void writeor(uchar order)//寫(xiě)入命令</p><p><b> {</b></p><p><b> uint b;</b></p><p><b> uchar a;</b></p>
81、<p><b> bit bit2;</b></p><p><b> b=0;</b></p><p> for(a=0;a<8;a++)</p><p><b> {</b></p><p> bit2=order&0x01;</p&
82、gt;<p> order>>=1;</p><p> if(bit2)//寫(xiě)入1</p><p><b> {</b></p><p><b> ds=0;</b></p><p><b> b++,b++;</b></p>
83、<p><b> ds=1;</b></p><p> for(b=0;b<8;b++);</p><p><b> }</b></p><p><b> else//0</b></p><p><b> {</b></p&
84、gt;<p><b> ds=0;</b></p><p> for(b=0;b<8;b++);</p><p><b> ds=1;</b></p><p><b> b++;b++;</b></p><p><b> }</b&
85、gt;</p><p><b> }</b></p><p><b> }</b></p><p> 當(dāng)以上程序書(shū)寫(xiě)完成后,準(zhǔn)備工作基本完成?,F(xiàn)在只要調(diào)用這些函數(shù),來(lái)操控DS18B20使其能夠按協(xié)議規(guī)定將溫度數(shù)據(jù)傳送給單片機(jī)。軟件實(shí)施方法如下:</p><p> void changetem
86、p()//溫度轉(zhuǎn)變函數(shù)</p><p><b> {</b></p><p> dsstart();</p><p><b> dswait();</b></p><p><b> delay(1);</b></p><p> writeor
87、(0xcc);// 跳過(guò)讀序號(hào)列號(hào)的操作</p><p> writeor(0x44);// 啟動(dòng)溫度轉(zhuǎn)換 </p><p><b> delay(1);</b></p><p><b> }</b></p><p> uint gettemp()//獲取溫度</p><
88、p><b> {</b></p><p><b> float tt;</b></p><p><b> int temp;</b></p><p> uchar geta,getb;</p><p> dsstart();</p><p&g
89、t;<b> dswait();</b></p><p><b> delay(1);</b></p><p> writeor(0xcc);</p><p> writeor(0xbe);//讀取溫度命令</p><p><b> delay(2);</b><
90、/p><p> geta=readbyte();//讀取兩個(gè)字節(jié)</p><p> getb=readbyte();</p><p> temp=getb;</p><p> temp<<=8;//左移8位</p><p> temp=temp|geta;</p><p>
91、tt=temp*0.0625;//將temp中的數(shù)轉(zhuǎn)化成實(shí)際的溫度值</p><p> temp=tt*10+(temp > 0 ? 0.5 : -0.5);//,變大十倍且 四舍五入</p><p> return(temp);</p><p><b> }</b></p><p> 以上兩個(gè)程序流程為,
92、changetemp()子函數(shù)中先初始化DS18B20,芯片應(yīng)答以后寫(xiě)入兩個(gè)以字節(jié)為一個(gè)單位的命令,0xcc與0x44它們的作用分別為跳過(guò)讀序號(hào)列號(hào)的操作和啟動(dòng)溫度轉(zhuǎn)換。然后溫度獲取gettemp()子函數(shù)完成。在gettemp()子函數(shù)中首先也是初始化DS18B20、等待應(yīng)答,寫(xiě)入命令0xcc跳過(guò)讀序號(hào)列號(hào)的操作和0xbe讀取溫度命令。使用readbyte()讀取兩個(gè)字節(jié)的數(shù)據(jù),分別賦予geta、getb兩個(gè)字符型變量,再將getb賦
93、予temp(temp是一個(gè)整型變量擁有兩個(gè)字節(jié)的容量),這樣temp的低8為就是getb中的值了。temp<<=8的意義是temp=temp<<8,所以temp的低8位將變成temp中的高8位,而C語(yǔ)言規(guī)定低8移位操作后不足的位數(shù)由0補(bǔ)上,這時(shí)的目的就是要將geta中的數(shù)據(jù)賦予temp中的低8位,只需要將temp按位與上geta,geta中位為1與上temp中低8位中的0就是1,而geta中位為0與temp中低8
94、位的0相與就是0,這樣就將geta中的值賦給了temp的低8位。</p><p> 現(xiàn)在已獲得了溫度的數(shù)據(jù),還要通過(guò)軟件計(jì)算出具體傳送數(shù)據(jù)代表的溫度值,在前面已經(jīng)談到數(shù)據(jù)中的1就代表了0.0625攝氏度。直接將temp值乘0.0625就是需要的溫度,temp乘以0.0625后的值賦予tt ,temp=tt*10+(temp > 0 ? 0.5 : -0.5)這句話是先將tt由一個(gè)最高位為十位保留小數(shù)點(diǎn)后一
95、位的數(shù)擴(kuò)大了十倍,變?yōu)榱艘粋€(gè)最高位為百位的三位數(shù),而后面加上的十一個(gè)四舍五入的賦值語(yǔ)句,也就相當(dāng)是一個(gè)if語(yǔ)句,C語(yǔ)言是任何精度高的變量變?yōu)榫鹊偷淖兞繒r(shí),都會(huì)失去一定的精度,而且是向下取整,例如在這里,如果tt是正溫度的話變大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
96、為負(fù)值的情況下的操作,如果temp為負(fù)值,tt變大10倍以后還要減去0.5,這樣就能夠完成tt為負(fù)值情況下的四舍五入。</p><p> 3.3 主函數(shù)的分析</p><p><b> 首先給出主函數(shù):</b></p><p> void main()</p><p><b> {</b>&
97、lt;/p><p> TMOD=0x01;</p><p> TH0=(65536-46000)/256;</p><p> TL0=(65536-46000)%256;</p><p><b> EA=1;</b></p><p><b> ET0=1;</b><
98、;/p><p><b> TR0=1;</b></p><p><b> zd=0;</b></p><p> num=21;aaa=0;bbb=0;</p><p> num1=21;num2=21;num3=21;</p><p><b> while(1
99、)</b></p><p><b> {uint a;</b></p><p><b> uchar b;</b></p><p> changetemp();</p><p> a=gettemp();</p><p> b=scanff();<
100、;/p><p> numy=gettemp();</p><p> display(a,b);</p><p><b> }</b></p><p><b> }</b></p><p> 這里的aaa用于控制是否確定輸入的一個(gè)數(shù)字是需要的數(shù)字,bbb用于標(biāo)記已經(jīng)輸入到
101、了三個(gè)數(shù)字的第幾個(gè)數(shù)字。</p><p> 主函數(shù)首先將所用到的全局變量賦值,然后進(jìn)入大循環(huán)首先進(jìn)入溫度轉(zhuǎn)換函數(shù),使DS18B20啟動(dòng)溫度轉(zhuǎn)換,然后獲取溫度將兩個(gè)字節(jié)的數(shù)值賦給a,而將輸入的溫度賦予b ,再由display(a,b)子函數(shù)輸出所有的值。</p><p> 3.4 顯示函數(shù)的分析</p><p> 以下是display()函數(shù)的具體內(nèi)容。<
102、/p><p> void display(uint a,uchar b)</p><p><b> {</b></p><p> uchar i,temp,srtemp,dis[4];</p><p><b> uint dda;</b></p><p> dda=ab
103、s(a);</p><p> numx=dda/1000;</p><p> num4=dda%1000/100;</p><p> num5=dda%100/10;</p><p> num6=dda%10;</p><p> dis[0]=numx;</p><p> dis[1
104、]=num4;</p><p> dis[2]=num5;</p><p> dis[3]=num6;</p><p> dis[2]+=10;//num5小數(shù)點(diǎn)</p><p> if((dis[0]==0)&&(dis[1]==0))</p><p> dis[1]=20;//如果百位和十
105、位都為0 不顯示</p><p> if(a<0)//負(fù)值 后面加個(gè)小數(shù)點(diǎn)</p><p> dis[3]+=10;</p><p><b> else</b></p><p> {if(dis[0]!=0)//超過(guò)100前面加小數(shù)點(diǎn)</p><p> dis[1]=dis[1]+
106、10;</p><p><b> }</b></p><p> temp=0xfb;</p><p> for(i=1;i<4;i++)</p><p><b> {</b></p><p><b> P0=0xff;</b></p
107、><p><b> wei=1;</b></p><p> temp=_crol_(temp,1);</p><p><b> P0=temp;</b></p><p><b> wei=0;</b></p><p><b> P0=0;
108、</b></p><p><b> duan=1;</b></p><p> P0=table[dis[i]];</p><p><b> duan=0;</b></p><p><b> delay(3);</b></p><p>
109、<b> }</b></p><p><b> duan=1;</b></p><p><b> P0=0x00;</b></p><p><b> duan=0;</b></p><p> if(aaa==1&&ccc!=21)
110、</p><p><b> bbb++;</b></p><p> switch(bbb)</p><p><b> {</b></p><p><b> case 0:</b></p><p><b> dis[1]=b;</
111、b></p><p><b> num1=b;</b></p><p> dis[2]=num2;</p><p> dis[3]=num3;</p><p> if(dis[2]==21)</p><p><b> dis[2]++;</b></p&g
112、t;<p><b> else</b></p><p> dis[2]+=10;</p><p> srtemp=0xfe;</p><p> for(i=1;i<4;i++)</p><p><b> {</b></p><p><b&
113、gt; P0=0xff;</b></p><p><b> wei=1;</b></p><p> P0=srtemp;//wein打開(kāi)后 是低電平亮</p><p><b> wei=0;//</b></p><p> srtemp=_crol_(srtemp,1);<
114、/p><p><b> P0=0x00;</b></p><p><b> duan=1;</b></p><p> P0=table[dis[i]];</p><p><b> duan=0;</b></p><p><b> dela
115、y(1);</b></p><p><b> duan=1;</b></p><p><b> P0=0x00;</b></p><p><b> duan=0;</b></p><p><b> }</b></p>&l
116、t;p><b> break;</b></p><p><b> case 1:</b></p><p> dis[1]=num1;</p><p><b> dis[2]=b;</b></p><p><b> num2=b;</b>&l
117、t;/p><p> dis[3]=num3;</p><p> if(dis[2]==21)</p><p><b> dis[2]++;</b></p><p><b> else</b></p><p> dis[2]+=10;</p><p&g
118、t; srtemp=0xfe;</p><p> for(i=1;i<4;i++)</p><p><b> {</b></p><p><b> P0=0xff;</b></p><p><b> wei=1;</b></p><p>
119、; P0=srtemp;//wein打開(kāi)后 是低電平亮</p><p><b> wei=0;//</b></p><p> srtemp=_crol_(srtemp,1);</p><p><b> P0=0x00;</b></p><p><b> duan=1;</b
120、></p><p> P0=table[dis[i]];</p><p><b> duan=0;</b></p><p><b> delay(1);</b></p><p><b> duan=1;</b></p><p><b&
121、gt; P0=0x00;</b></p><p><b> duan=0;</b></p><p><b> }</b></p><p><b> aaa=0;</b></p><p><b> break;</b></p>
122、;<p><b> case 2:</b></p><p> dis[1]=num1;</p><p> dis[2]=num2;</p><p><b> dis[3]=b;</b></p><p><b> num3=b;</b></p>
123、<p> if(dis[2]==21)</p><p><b> dis[2]++;</b></p><p><b> else</b></p><p> dis[2]+=10;</p><p> srtemp=0xfe;</p><p> for(
124、i=1;i<4;i++)</p><p><b> {</b></p><p><b> P0=0xff;</b></p><p><b> wei=1;</b></p><p> P0=srtemp;//wein打開(kāi)后 是低電平亮</p><
125、;p><b> wei=0;//</b></p><p> srtemp=_crol_(srtemp,1);</p><p><b> P0=0x00;</b></p><p><b> duan=1;</b></p><p> P0=table[dis[i]]
126、;</p><p><b> duan=0;</b></p><p><b> delay(1);</b></p><p><b> duan=1;</b></p><p><b> P0=0x00;</b></p><p>
127、;<b> duan=0;</b></p><p><b> }</b></p><p><b> aaa=0;</b></p><p><b> break;</b></p><p><b> case 3:</b><
128、;/p><p> dis[1]=num1;</p><p> dis[2]=num2;</p><p> dis[3]=num3;</p><p> if(dis[2]==21)</p><p><b> dis[2]++;</b></p><p><b>
129、 else</b></p><p> dis[2]+=10;</p><p> srtemp=0xfe;</p><p> for(i=1;i<4;i++)</p><p><b> {</b></p><p><b> P0=0xff;</b>
130、;</p><p><b> wei=1;</b></p><p> P0=srtemp;//wein打開(kāi)后 是低電平亮</p><p><b> wei=0;//</b></p><p> srtemp=_crol_(srtemp,1);</p><p><b
131、> P0=0x00;</b></p><p><b> duan=1;</b></p><p> P0=table[dis[i]];</p><p><b> duan=0;</b></p><p><b> delay(1);</b></p&
132、gt;<p><b> duan=1;</b></p><p><b> P0=0x00;</b></p><p><b> duan=0;</b></p><p><b> }</b></p><p> aaa=0;num=21;
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文----基于51單片機(jī)的家用電熱水器設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)控制的快熱式家用電熱水器的設(shè)計(jì)
- 基于單片機(jī)的電熱水器畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)-基于單片機(jī)控制的快熱式家用電熱水器的設(shè)計(jì)
- 家用電熱水器的設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 【課程設(shè)計(jì)】-基于單片機(jī)的快熱式家用電熱水器的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---快熱式家用電熱水器的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--快熱式家用電熱水器的設(shè)計(jì)
- 基于單片機(jī)的電熱水器畢業(yè)設(shè)計(jì)開(kāi)題報(bào)告
- -畢業(yè)設(shè)計(jì)----基于at89s51單片機(jī)的智能電熱水器的設(shè)計(jì)
- 快熱式家用電熱水器的設(shè)計(jì)
- 智能家用電熱水器控制器設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)論文基于單片機(jī)的電熱水器控制器設(shè)計(jì)
- 基于單片機(jī)的家電熱水器控制系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 家用電熱水器控制系統(tǒng)設(shè)計(jì)
- 課題實(shí)踐快熱式家用電熱水器的設(shè)計(jì)
- 基于單片機(jī)的電熱水器溫度控制系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的電熱水器定時(shí)控制器設(shè)計(jì)畢業(yè)論文
- 智能家用電熱水器控制器
- 智能家用電熱水器控制器
評(píng)論
0/150
提交評(píng)論