2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論