2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩49頁(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>  目 錄</b></p><p><b>  第一章引言1</b></p><p><b>  1.1 前言1</b></p><p>  1.2 設(shè)計(jì)內(nèi)容概述2</p><p>  1.3 報(bào)告概述4</p><

2、p>  第二章課程設(shè)計(jì)要求5</p><p>  2.1 課題要求5</p><p>  2.2 元器件清單5</p><p>  第三章總體結(jié)構(gòu)設(shè)計(jì)7</p><p>  3.1 總體設(shè)計(jì)方案7</p><p>  3.2 PID算法8</p><p>  3.3 數(shù)據(jù)處

3、理流程9</p><p>  第四章硬件電路設(shè)計(jì)11</p><p>  4.1 SL-I型51單片機(jī)綜合實(shí)驗(yàn)箱11</p><p>  4.1.1 單片機(jī)最小系統(tǒng)11</p><p>  4.1.2 數(shù)碼管顯示模塊12</p><p>  4.1.3 按鍵模塊13</p><p>

4、;  4.1.4 報(bào)警模塊15</p><p>  4.2 DS18B20溫度傳感器16</p><p>  4.2.1 DS18B20簡(jiǎn)介16</p><p>  4.2.2 DS18B20原理16</p><p>  4.2.3 控制器對(duì)18B20操作流程17</p><p>  4.2.4 DS18B2

5、0芯片與單片機(jī)的接口18</p><p>  4.2.5 DS28B20芯片ROM指令表19</p><p>  4.3 繼電器電路設(shè)計(jì)20</p><p>  第五章系統(tǒng)軟件設(shè)計(jì)22</p><p>  5.1 主程序設(shè)計(jì)22</p><p>  5.2 數(shù)碼管顯示程序23</p><

6、;p>  5.3 鍵盤掃描程序24</p><p>  5.4 DB18B20通信程序24</p><p>  第六章加熱爐溫控系統(tǒng)使用方法27</p><p>  6.1 系統(tǒng)連接方法27</p><p>  6.2 系統(tǒng)使用方法27</p><p><b>  第七章總結(jié)28<

7、/b></p><p><b>  參考文獻(xiàn)XXIX</b></p><p>  附錄A 系統(tǒng)程序代碼XXXI</p><p><b>  引言</b></p><p><b>  前言</b></p><p>  單片微機(jī)是單片微型計(jì)算機(jī)SC

8、MC(Single Chip Micro Computer)的譯名簡(jiǎn)稱,在國(guó)內(nèi)也常簡(jiǎn)稱為“ 單片微機(jī)” 或“單片機(jī)” 。它包括CPU、RAM、ROM、中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器、串行口和I/O等。</p><p>  除了工業(yè)控制領(lǐng)域,單片微機(jī)在家用電器、電子玩具、通信、高級(jí)音響、圖形處理、語(yǔ)言設(shè)備、機(jī)器人、計(jì)算機(jī)等各個(gè)領(lǐng)域迅速發(fā)展。</p><p>  目前單片微機(jī)的世界年產(chǎn)量已超過(guò)

9、100億片,而在中國(guó)大陸地區(qū)的年應(yīng)用量已達(dá)6億多片。</p><p>  8051是美INTEL公司在1980年推出的MCS-51系列的第一個(gè)成員,MCS是INTEL公司的注冊(cè)商標(biāo)。其它公司生產(chǎn)的以8051為核心單元的其它派生單片微機(jī)只能稱為8051系列。</p><p>  80C51系列包括Intel公司的MCS-51,又包括了以8051為核心單元的世界許多公司生產(chǎn)的單片微機(jī),比如PH

10、ILIPS 的83C552及51LPC系列等、SIEMENS 的SAB80512等、AMD(先進(jìn)微器件公司) 的8053等、OKI(日本沖電氣公司) 的MSM80C154等、ATMEL公司的89C51等、DALLAS公司的DS5000/DS5001等、華邦公司的W78C51及W77C51等。</p><p>  單片微機(jī)的應(yīng)用正從根本上改變著傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)的大部

11、分控制功能,現(xiàn)在已能使用單片微機(jī)通過(guò)軟件方法實(shí)現(xiàn)了。這種以軟件取代硬件,并能提高系統(tǒng)性能的控制技術(shù),稱之為微控制技術(shù)。這標(biāo)志著一種全新概念的建立。</p><p>  單片微機(jī)在以下領(lǐng)域應(yīng)用廣泛:</p><p><b>  1.家用電器領(lǐng)域</b></p><p><b>  2.辦公自動(dòng)化領(lǐng)域</b></p>

12、;<p>  3.工業(yè)自動(dòng)化領(lǐng)域的在線應(yīng)用 </p><p>  4. 智能儀器儀表與集成智能傳感器領(lǐng)域</p><p>  5.汽

13、車電子與航空航天電子系統(tǒng)</p><p><b>  設(shè)計(jì)內(nèi)容概述</b></p><p>  本次計(jì)算機(jī)控制課程設(shè)計(jì)是應(yīng)用計(jì)算機(jī)的實(shí)時(shí)監(jiān)控和溫度測(cè)量技術(shù),采用單片機(jī)、溫度檢測(cè)電路、溫度控制電路等,實(shí)現(xiàn)電阻爐爐溫的實(shí)時(shí)監(jiān)控。</p><p>  本次設(shè)計(jì)使用的STC12C5A60S2系列單片機(jī)是宏晶科技生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī),是

14、高速/低功耗/超強(qiáng)抗干擾的新一代8051單片機(jī),指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),針對(duì)電機(jī)控制,強(qiáng)干擾場(chǎng)合。</p><p>  本系列單片機(jī)有豐富的內(nèi)部資源,極大地?cái)U(kuò)展了8051系列單片機(jī)的用途:</p><p>  1.增強(qiáng)型8051 CPU,1T,單時(shí)鐘/機(jī)器周期,指令代碼完全兼容

15、傳統(tǒng)8051;</p><p>  2.工作電壓:STC12C5A60S2系列工作電壓:5.5V-3.3V(5V單片機(jī))STC12LE5A60S2系列工作電壓:3.6V-2.2V(3V單片機(jī));</p><p>  3.工作頻率范圍:0 - 35MHz,相當(dāng)于普通8051的 0~420MHz;</p><p>  4.用戶應(yīng)用程序空間8K /16K / 20K /

16、32K / 40K / 48K / 52K / 60K / 62K字節(jié);</p><p>  5.片上集成1280字節(jié)RAM;</p><p>  6.通用I/O口(36/40/44個(gè)),復(fù)位后為:準(zhǔn)雙向口/弱上拉(普通8051傳統(tǒng)I/O口),可設(shè)置成四種模式:準(zhǔn)雙向口/弱上拉,推挽/強(qiáng)上拉,僅為輸入/高阻,開漏,每個(gè)I/O口驅(qū)動(dòng)能力均可達(dá)到20mA,但整個(gè)芯片最大不要超過(guò)55Ma;<

17、;/p><p>  7. ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無(wú)需專用編程器,無(wú)需專用仿真器 可通過(guò)串口(P3.0/P3.1)直接下載用戶程序,數(shù)秒即可完成一片;</p><p>  8.有EEPROM功能(STC12C5A62S2/AD/PWM無(wú)內(nèi)部EEPROM);</p><p><b>  9. 看門狗;</b></p&g

18、t;<p>  10.內(nèi)部集成MAX810專用復(fù)位電路(外部晶體12M以下時(shí),復(fù)位腳可直接1K電阻到地);</p><p>  11.外部掉電檢測(cè)電路:在P4.6口有一個(gè)低壓門檻比較器,5V單片機(jī)為1.32V,誤差為+/-5%,3.3V單片機(jī)為1.30V,誤差為+/-3%;</p><p>  12.時(shí)鐘源:外部高精度晶體/時(shí)鐘,內(nèi)部R/C振蕩器(溫漂為+/-5%到+/-10

19、%以內(nèi)) 1用戶在下載用戶程序時(shí),可選擇是使用內(nèi)部R/C振蕩器還是外部晶體/時(shí)鐘,常溫下內(nèi)部R/C振蕩器頻率為:5.0V單片機(jī)為:11MHz~15.5MHz,3.3V單片機(jī)為:8MHz~12MHz,精度要求不高時(shí),可選擇使用內(nèi)部時(shí)鐘,但因?yàn)橛兄圃煺`差和溫漂,以實(shí)際測(cè)試為準(zhǔn);</p><p>  13.共4個(gè)16位定時(shí)器 兩個(gè)與傳統(tǒng)8051兼容的定時(shí)器/計(jì)數(shù)器,16位定時(shí)器T0和T1,沒(méi)有定時(shí)器2,但有獨(dú)立波特

20、率發(fā)生器 做串行通訊的波特率發(fā)生器 再加上2路PCA模塊可再實(shí)現(xiàn)2個(gè)16位定時(shí)器;</p><p>  14. 2個(gè)時(shí)鐘輸出口,可由T0的溢出在P3.4/T0輸出時(shí)鐘,可由T1的溢出在P3.5/T1輸出時(shí)鐘;</p><p>  15.外部中斷I/O口7路,傳統(tǒng)的下降沿中斷或低電平觸發(fā)中斷,并新增支持上升沿中斷的PCA模塊, Power Down模式可由外部中斷喚醒,INT0/P3

21、.2,INT1/P3.3,T0/P3.4, T1/P3.5, RxD/P3.0,CCP0/P1.3(也可通過(guò)寄存器設(shè)置到P4.2 ), CCP1/P1.4 (也可通過(guò)寄存器設(shè)置到P4.3);</p><p>  16. PWM(2路)/PCA(可編程計(jì)數(shù)器陣列,2路):</p><p>  ——也可用來(lái)當(dāng)2路D/A使用</p><p>  ——也可用來(lái)再實(shí)現(xiàn)2個(gè)定時(shí)

22、器</p><p>  ——也可用來(lái)再實(shí)現(xiàn)2個(gè)外部中斷(上升沿中斷/下降沿中斷均可分別或同時(shí)支持);</p><p>  17.A/D轉(zhuǎn)換, 10位精度ADC,共8路,轉(zhuǎn)換速度可達(dá)250K/S(每秒鐘25萬(wàn)次)18.通用全雙工異步串行口(UART),由于STC12系列是高速的8051,可再用定時(shí)器或PCA軟件實(shí)現(xiàn)多串口;</p><p>  19. STC12C5A

23、60S2系列有雙串口,后綴有S2標(biāo)志的才有雙串口,RxD2/P1.2(可通過(guò)寄存器設(shè)置到P4.2),TxD2/P1.3(可通過(guò)寄存器設(shè)置到P4.3);</p><p>  20.工作溫度范圍:-40 - +85℃(工業(yè)級(jí)) / 0 - 75℃(商業(yè)級(jí))21.封裝:PDIP-40,LQFP-44,LQFP-48 I/O口不夠時(shí),可用2到3根普通I/O口線外接 74HC164/165/595(均可級(jí)聯(lián))來(lái)擴(kuò)展I/

24、O口, 還可用A/D做按鍵掃描來(lái)節(jié)省I/O口,或用雙CPU,三線通信,還多了串口。</p><p><b>  報(bào)告概述</b></p><p>  這份技術(shù)報(bào)告中,詳盡地介紹了本系統(tǒng)的整體結(jié)構(gòu)、硬件電路、軟件控制算法、調(diào)試方法等,并附有單片機(jī)程序和詳細(xì)的操作方法。</p><p>  本文主要介紹基于STC12C5A60S2單片機(jī)的爐溫控制

25、設(shè)計(jì)流程,介紹了爐溫控制方案以及各個(gè)主要模塊的工作原理和設(shè)計(jì)思路。本文并涉及溫度傳感器系統(tǒng)、繼電器系統(tǒng)、顯示系統(tǒng)、輸入系統(tǒng)的設(shè)計(jì)。</p><p>  由于系統(tǒng)的復(fù)雜性和硬件使用要求以及人力、時(shí)間等方面的制約,考慮到系統(tǒng)的實(shí)時(shí)性和運(yùn)算能力,系統(tǒng)并沒(méi)有采用復(fù)雜的處理算法和控制算法,一切以實(shí)用為主。對(duì)于溫度控制算法還有待進(jìn)一步的研究和改進(jìn)。同時(shí),在電路保護(hù)方面的設(shè)計(jì)有待進(jìn)一步地學(xué)習(xí)和實(shí)踐。</p>&l

26、t;p><b>  課程設(shè)計(jì)要求</b></p><p><b>  課題要求</b></p><p>  用單片機(jī)及相應(yīng)的組成部件組成電阻爐溫的自動(dòng)控制系統(tǒng),要求測(cè)溫范圍0~100℃,使其控制系統(tǒng)控制的溫度保溫值的變化范圍為30~60℃。</p><p>  要求:(1)完成電阻爐溫度控制系統(tǒng)設(shè)計(jì),包括硬件電路設(shè)計(jì)

27、和軟件程序設(shè)計(jì);</p><p>  (2)能夠顯示控溫時(shí)的實(shí)際爐溫和恒溫時(shí)間;</p><p>  (3)對(duì)其主電路和控制電路設(shè)計(jì)相應(yīng)的保護(hù)電路,使其安全可靠地工作。</p><p><b>  元器件清單</b></p><p>  另有剪刀、鑷子等工具</p><p>  表2.1 元器件清

28、單</p><p><b>  總體結(jié)構(gòu)設(shè)計(jì)</b></p><p><b>  總體設(shè)計(jì)方案</b></p><p>  本系統(tǒng)采用STC12C5A60S作為系統(tǒng)的主控芯片,負(fù)責(zé)加熱爐的溫度檢測(cè)與控制。其主要任務(wù)是:</p><p>  1、讀取DS18B20的溫度數(shù)據(jù)。</p>&

29、lt;p>  2、控制繼電器通斷,保證溫度達(dá)到設(shè)定值并保溫。</p><p>  3、讀取鍵盤設(shè)置的溫度值。</p><p>  4、在LED上顯示設(shè)置的溫度、當(dāng)前溫度以及恒溫時(shí)間。</p><p>  5、當(dāng)溫度到達(dá)警戒值的時(shí)候控制蜂鳴器報(bào)警。</p><p><b>  總體結(jié)構(gòu)圖</b></p>

30、<p>  由于加熱爐僅能通過(guò)通斷電路控制,不具備良好的可控性,且加熱所需的速度和精度要求并不高,這里無(wú)需使用PID算法這樣的高速跟蹤算法,只要使用二次線性化的方法控制,就可以很好地實(shí)現(xiàn)爐子的加熱和恒溫控制了。</p><p><b>  PID算法</b></p><p>  按反饋控制系統(tǒng)偏差的比例( proportional)、積分( integra

31、l )和微分( differential )規(guī)律進(jìn)行控制的調(diào)節(jié)器,簡(jiǎn)稱為PID調(diào)節(jié)器,是控制系統(tǒng)中應(yīng)用最為廣泛的一種控制規(guī)律。</p><p>  PID算法的表達(dá)式為: </p><p>  對(duì)應(yīng)的模擬PID調(diào)節(jié)器的傳遞函數(shù)為: </p><p><b>  位置式PID公式:</b></p><p><b>

32、;  增量式PID公式:</b></p><p><b>  PID控制流程圖</b></p><p>  在工程實(shí)際中,應(yīng)用最為廣泛的調(diào)節(jié)器控制規(guī)律為比例、積分、微分控制,簡(jiǎn)稱PID控制,又稱PID調(diào)節(jié)。PID控制器問(wèn)世至今已有近70年歷史,它 以其結(jié)構(gòu)簡(jiǎn)單、穩(wěn)定性好、工作可靠、調(diào)整方便而成為工業(yè)控制的主要技術(shù)之一。當(dāng)被控對(duì)象的結(jié)構(gòu)和參數(shù)不能完

33、全掌握,或得不到精確的數(shù)學(xué)模型時(shí),控制理論的 其它技術(shù)難以采用時(shí),系統(tǒng)控制器的結(jié)構(gòu)和參數(shù)必須依靠經(jīng)驗(yàn)和現(xiàn)場(chǎng)調(diào)試來(lái)確定,這時(shí)應(yīng)用PID控制技術(shù)最為方便。即當(dāng)我們不完全了解一個(gè)系統(tǒng)和被控對(duì)象,或 不能通過(guò)有效的測(cè)量手段來(lái)獲得系統(tǒng)參數(shù)時(shí),最適合用PID控制技術(shù)。PID控制,實(shí)際中也有PI和PD控制。PID控制器就是根據(jù)系統(tǒng)的誤差,利用比例、 積分、微分計(jì)算出控制量進(jìn)行控制的。 比例(P)控制 

34、;比例控制是一種最簡(jiǎn)單的控制方式。其控制器的輸出與輸入誤差信號(hào)成比例關(guān)系。當(dāng)僅有比例控制時(shí)系統(tǒng)輸出存在穩(wěn)態(tài)誤差(Steady-state error)。 積分(I)控制 在積分控制中,控制器的輸出與輸入誤差信號(hào)的積分成正比關(guān)系。對(duì)一個(gè)自動(dòng)控制系統(tǒng),如果在進(jìn)入穩(wěn)態(tài)后存在穩(wěn)態(tài)誤差,則稱這個(gè)控制系統(tǒng)是有穩(wěn)態(tài)誤差的 或簡(jiǎn)稱有差系統(tǒng)(System with Steady-</

35、p><p><b>  數(shù)據(jù)處理流程</b></p><p>  首先使用循環(huán)查詢的方法依次讀取按鍵的鍵值,判斷用戶的指令,并以此為依據(jù)選擇LED顯示的數(shù)據(jù)。輸入過(guò)程結(jié)束后,開始爐溫控制模塊,首先讀取DS18B20數(shù)據(jù),再與設(shè)定值比較,決定繼電器的通斷時(shí)間,控制加熱爐溫度及警報(bào)器超限報(bào)警。 </p><p><b>  數(shù)據(jù)處理流程圖&l

36、t;/b></p><p><b>  硬件電路設(shè)計(jì)</b></p><p>  SL-I型51單片機(jī)綜合實(shí)驗(yàn)箱</p><p><b>  單片機(jī)最小系統(tǒng)</b></p><p>  STC12C5A60S2系列單片機(jī)是宏晶科技生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī),是高速/低功耗/超強(qiáng)抗干

37、擾的新一代8051單片機(jī),指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),針對(duì)電機(jī)控制,強(qiáng)干擾場(chǎng)合。</p><p>  最小系統(tǒng)如圖4.1.1所示:</p><p><b>  單片機(jī)最小系統(tǒng)</b></p><p><b>  數(shù)碼管顯示模塊

38、</b></p><p>  數(shù)碼管的顯示原理不論是共陰還是共陽(yáng),其基本原理是一樣的,都是靠點(diǎn)亮內(nèi)部的LED來(lái)發(fā)光。一位數(shù)碼管的引腳是十個(gè),顯示一個(gè)8字需要7個(gè)小段,另外還有一個(gè)小數(shù)點(diǎn)。</p><p><b>  數(shù)碼管內(nèi)部原理圖</b></p><p>  實(shí)際實(shí)驗(yàn)時(shí),為了保證編程的方便和通常將數(shù)碼管的數(shù)字所對(duì)應(yīng)的八位數(shù)字記錄在

39、數(shù)組中,程序中直接使用查表的方法,可以提高程序的效率,也使程序的編寫更加簡(jiǎn)單方便。</p><p>  我們實(shí)驗(yàn)箱中的LED數(shù)碼管是四位數(shù)碼管,因此為了控制方便,四個(gè)數(shù)碼管的“段選端”是連在一起的,他們的GND或VCC端作為“位選端”來(lái)輸入控制信號(hào),這樣單片機(jī)就可以通過(guò)程序來(lái)控制顯示的字符。</p><p>  下圖是實(shí)驗(yàn)箱開發(fā)板中的數(shù)碼管電路圖:</p><p>

40、<b>  實(shí)驗(yàn)箱數(shù)碼管電路</b></p><p><b>  按鍵模塊</b></p><p>  彈性按鍵被按下時(shí)閉合,松手后自動(dòng)斷開。單片機(jī)檢測(cè)按鍵的原理是:?jiǎn)纹瑱C(jī)的I/O口既可以作為輸出也可作為輸入使用,當(dāng)檢測(cè)按鍵時(shí)使用的是它的輸入功能,把按鍵的一端接地,另一端與單片機(jī)的某一個(gè)I/O口相連,開始時(shí)先給I/O口賦一高電平,然后讓單片機(jī)不斷

41、地檢測(cè)該I/O口是否變成低電平,當(dāng)按鍵閉合時(shí),即相當(dāng)于該I/O口通過(guò)按鍵與地相連,變成低電平,程序一旦檢測(cè)到I/O口變?yōu)榈碗娖絼t說(shuō)明按鍵被按下,然后執(zhí)行相應(yīng)的指令。</p><p>  按鍵按下時(shí)電壓的變化</p><p>  從圖4.4可以看出,理想波形與實(shí)際波形之間是有區(qū)別的,實(shí)際波形在按下和釋放的瞬間都有抖動(dòng)現(xiàn)象,抖動(dòng)時(shí)間的長(zhǎng)短和按鍵的機(jī)械特性有關(guān),一般為5~10ms。通常我們手動(dòng)按

42、時(shí)都要加上去抖動(dòng)操作,有專用的去抖動(dòng)電路,也有專用的去抖動(dòng)芯片,但通常我們軟件延時(shí)的方法就能很容易解決抖動(dòng)問(wèn)題,而沒(méi)有必要再添加多余的硬件電路。</p><p><b>  按鍵檢測(cè)流程圖</b></p><p>  無(wú)論獨(dú)立鍵盤還是矩陣鍵盤,單片機(jī)檢測(cè)其是否被按下的依據(jù)都是一樣的,也就是檢測(cè)該鍵對(duì)應(yīng)的I/O口是否為低電平。獨(dú)立鍵盤有一端固定為低電平,單片機(jī)寫程序檢測(cè)

43、時(shí)比較方便。而矩陣鍵盤兩端都與單片機(jī)I/O口連接,因此在檢測(cè)時(shí)需人為通過(guò)單片機(jī)I/O口送出低電平。檢測(cè)時(shí),先送一列為低電平,其余幾列為高電平,然后然后立即輪流檢測(cè)一次各行是否有低電平,若檢測(cè)到某一行為低電平,就可以確定當(dāng)前被按下的按鍵是哪一行哪一列的,用同樣的方法輪流各列送一次低電平,再輪流檢測(cè)一次各行是否變?yōu)榈碗娖剑@樣既可檢測(cè)完所有的按鍵。</p><p><b>  按鍵電路圖</b>

44、</p><p><b>  報(bào)警模塊</b></p><p>  報(bào)警模塊的結(jié)構(gòu)比較簡(jiǎn)單,只是一個(gè)蜂鳴器模塊,當(dāng)溫度高于設(shè)定值較大時(shí),單片機(jī)在I/O口上輸入一個(gè)低電平,就可以是蜂鳴器報(bào)警。</p><p><b>  報(bào)警電路</b></p><p>  DS18B20溫度傳感器</p>

45、;<p><b>  DS18B20簡(jiǎn)介</b></p><p>  Dallas 半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持 “一線總線”接口的溫度傳感器。一線總線獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測(cè)量系統(tǒng)的構(gòu)建引入全新概念?,F(xiàn)在,新一代的“DS1820”體積更小、更經(jīng)濟(jì)、更靈活。使您可以充分發(fā)揮“一線總線”的長(zhǎng)處。速度分配策略。</p

46、><p>  DS18B20可以程序設(shè)定9~12位的分辨率,精度為±0.5°C。可選更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報(bào)警溫度存儲(chǔ)在EEPROM中,掉電后依然保存。</p><p><b>  DS18B20原理</b></p><p>  DS18B20的溫度檢測(cè)與數(shù)字?jǐn)?shù)據(jù)輸出全集成于一個(gè)芯片之上,從

47、而抗干擾力更強(qiáng)。其一個(gè)工作周期可分為兩個(gè)部分,即溫度檢測(cè)和數(shù)據(jù)處理。在講解其工作流程之前我們有必要了解18B20的內(nèi)部存儲(chǔ)器資源。18B20共有三種形態(tài)的存儲(chǔ)器資源,它們分別是: </p><p>  ROM 只讀存儲(chǔ)器,用于存放DS18B20ID編碼,其前8位是單線系列編碼(DS18B20的編碼是19H),后面48位是芯片唯一的序列號(hào),最后8位是以上56的位的CRC碼(冗余校驗(yàn))。數(shù)據(jù)在出產(chǎn)時(shí)設(shè)置不由用戶更改。

48、DS18B20共64位ROM。 </p><p>  RAM 數(shù)據(jù)暫存器,用于內(nèi)部計(jì)算和數(shù)據(jù)存取,數(shù)據(jù)在掉電后丟失,DS18B20共9個(gè)字節(jié)RAM,每個(gè)字節(jié)為8位。第1、2個(gè)字節(jié)是溫度轉(zhuǎn)換后的數(shù)據(jù)值信息,第3、4個(gè)字節(jié)是用戶EEPROM(常用于溫度報(bào)警值儲(chǔ)存)的鏡像。在上電復(fù)位時(shí)其值將被刷新。第5個(gè)字節(jié)則是用戶第3個(gè)EEPROM的鏡像。第6、7、8個(gè)字節(jié)為計(jì)數(shù)寄存器,是為了讓用戶得到更高的溫度分辨率而設(shè)計(jì)的,同樣

49、也是內(nèi)部溫度轉(zhuǎn)換、計(jì)算的暫存單元。第9個(gè)字節(jié)為前8個(gè)字節(jié)的CRC碼。EEPROM 非易失性記憶體,用于存放長(zhǎng)期需要保存的數(shù)據(jù),上下限溫度報(bào)警值和校驗(yàn)數(shù)據(jù),DS18B20共3位EEPROM,并在RAM都存在鏡像,以方便用戶操作。</p><p>  控制器對(duì)18B20操作流程</p><p>  1, 復(fù)位:首先我們必須對(duì)DS18B20芯片進(jìn)行復(fù)位,復(fù)位就是由控制器(單片機(jī))給DS18B20

50、單總線至少480uS的低電平信號(hào)。當(dāng)18B20接到此復(fù)位信號(hào)后則會(huì)在15~60uS后回發(fā)一個(gè)芯片的存在脈沖。 </p><p>  2, 存在脈沖:在復(fù)位電平結(jié)束之后,控制器應(yīng)該將數(shù)據(jù)單總線拉高,以便于在15~60uS后接收存在脈沖,存在脈沖為一個(gè)60~240uS的低電平信號(hào)。至此,通信雙方已經(jīng)達(dá)成了基本的協(xié)議,接下來(lái)將會(huì)是控制器與18B20間的數(shù)據(jù)通信。如果復(fù)位低電平的時(shí)間不足或是單總線的電路斷路都不會(huì)接到存在

51、脈沖,在設(shè)計(jì)時(shí)要注意意外情況的處理。 </p><p>  3, 控制器發(fā)送ROM指令:雙方打完了招呼之后最要將進(jìn)行交流了,ROM指令共有5條,每一個(gè)工作周期只能發(fā)一條,ROM指令分別是讀ROM數(shù)據(jù)、指定匹配芯片、跳躍ROM、芯片搜索、報(bào)警芯片搜索。ROM指令為8位長(zhǎng)度,功能是對(duì)片內(nèi)的64位光刻ROM進(jìn)行操作。其主要目的是為了分辨一條總線上掛接的多個(gè)器件并作處理。誠(chéng)然,單總線上可以同時(shí)掛接多個(gè)器件,并通過(guò)每個(gè)器件

52、上所獨(dú)有的ID號(hào)來(lái)區(qū)別,一般只掛接單個(gè)18B20芯片時(shí)可以跳過(guò)ROM指令(注意:此處指的跳過(guò)ROM指令并非不發(fā)送ROM指令,而是用特有的一條“跳過(guò)指令”)。ROM指令在下文有詳細(xì)的介紹。 </p><p>  4, 控制器發(fā)送存儲(chǔ)器操作指令:在ROM指令發(fā)送給18B20之后,緊接著(不間斷)就是發(fā)送存儲(chǔ)器操作指令了。操作指令同樣為8位,共6條,存儲(chǔ)器操作指令分別是寫RAM數(shù)據(jù)、讀RAM數(shù)據(jù)、將RAM數(shù)據(jù)復(fù)制到EE

53、PROM、溫度轉(zhuǎn)換、將EEPROM中的報(bào)警值復(fù)制到RAM、工作方式切換。存儲(chǔ)器操作指令的功能是命令18B20作什么樣的工作,是芯片控制的關(guān)鍵。 </p><p>  5, 執(zhí)行或數(shù)據(jù)讀寫:一個(gè)存儲(chǔ)器操作指令結(jié)束后則將進(jìn)行指令執(zhí)行或數(shù)據(jù)的讀寫,這個(gè)操作要視存儲(chǔ)器操作指令而定。如執(zhí)行溫度轉(zhuǎn)換指令則控制器(單片機(jī))必須等待18B20執(zhí)行其指令,一般轉(zhuǎn)換時(shí)間為500uS。如執(zhí)行數(shù)據(jù)讀寫指令則需要嚴(yán)格遵循18B20的讀寫時(shí)

54、序來(lái)操作。數(shù)據(jù)的讀寫方法將有下文有詳細(xì)介紹。 </p><p>  若要讀出當(dāng)前的溫度數(shù)據(jù)我們需要執(zhí)行兩次工作周期,第一個(gè)周期為復(fù)位、跳過(guò)ROM指令、執(zhí)行溫度轉(zhuǎn)換存儲(chǔ)器操作指令、等待500uS溫度轉(zhuǎn)換時(shí)間。緊接著執(zhí)行第二個(gè)周期為復(fù)位、跳過(guò)ROM指令、執(zhí)行讀RAM的存儲(chǔ)器操作指令、讀數(shù)據(jù)(最多為9個(gè)字節(jié),中途可停止,只讀簡(jiǎn)單溫度值則讀前2個(gè)字節(jié)即可)。其它的操作流程也大同小異,在此不多介紹。</p>

55、<p>  DS18B20芯片與單片機(jī)的接口</p><p>  DS18B20芯片與單片機(jī)連接</p><p>  如圖所示,DS18B20只需要接到控制器(單片機(jī))的一個(gè)I/O口上,由于單總線為開漏所以需要外接一個(gè)4.7K的上拉電阻。如要采用寄生工作方式,只要將VDD電源引腳與單總線并聯(lián)即可。但在程序設(shè)計(jì)中,寄生工作方式將會(huì)對(duì)總線的狀態(tài)有一些特殊的要求。</p>

56、<p>  DS28B20芯片ROM指令表</p><p>  Read ROM(讀ROM)[33H] (方括號(hào)中的為16進(jìn)制的命令字) </p><p>  這個(gè)命令允許總線控制器讀到DS18B20的64位ROM。只有當(dāng)總線上只存在一個(gè)DS18B20的時(shí)候才可以使用此指令,如果掛接不只一個(gè),當(dāng)通信時(shí)將會(huì)發(fā)生數(shù)據(jù)沖突。 </p><p>  Match

57、ROM(指定匹配芯片)[55H] </p><p>  這個(gè)指令后面緊跟著由控制器發(fā)出了64位序列號(hào),當(dāng)總線上有多只DS18B20時(shí),只有與控制發(fā)出的序列號(hào)相同的芯片才可以做出反應(yīng),其它芯片將等待下一次復(fù)位。這條指令適應(yīng)單芯片和多芯片掛接。 </p><p>  Skip ROM(跳躍ROM指令)[CCH] </p><p>  這條指令使芯片不對(duì)ROM編碼做出反應(yīng)

58、,在單總線的情況之下,為了節(jié)省時(shí)間則可以選用此指令。如果在多芯片掛接時(shí)使用此指令將會(huì)出現(xiàn)數(shù)據(jù)沖突,導(dǎo)致錯(cuò)誤出現(xiàn)。 </p><p>  Search ROM(搜索芯片)[F0H] </p><p>  在芯片初始化后,搜索指令允許總線上掛接多芯片時(shí)用排除法識(shí)別所有器件的64位ROM。 </p><p>  Alarm Search(報(bào)警芯片搜索)[ECH] <

59、/p><p>  在多芯片掛接的情況下,報(bào)警芯片搜索指令只對(duì)附合溫度高于TH或小于TL報(bào)警條件的芯片做出反應(yīng)。只要芯片不掉電,報(bào)警狀態(tài)將被保持,直到再一次測(cè)得溫度什達(dá)不到報(bào)警條件為止。 </p><p>  DS28B20芯片存儲(chǔ)器操作指令表: </p><p>  Write Scratchpad (向RAM中寫數(shù)據(jù))[4EH] </p><p&g

60、t;  這是向RAM中寫入數(shù)據(jù)的指令,隨后寫入的兩個(gè)字節(jié)的數(shù)據(jù)將會(huì)被存到地址2(報(bào)警RAM之TH)和地址3(報(bào)警RAM之TL)。寫入過(guò)程中可以用復(fù)位信號(hào)中止寫入。 </p><p>  Read Scratchpad (從RAM中讀數(shù)據(jù))[BEH] </p><p>  此指令將從RAM中讀數(shù)據(jù),讀地址從地址0開始,一直可以讀到地址9,完成整個(gè)RAM數(shù)據(jù)的讀出。芯片允許在讀過(guò)程中用復(fù)位信號(hào)

61、中止讀取,即可以不讀后面不需要的字節(jié)以減少讀取時(shí)間。 </p><p>  Copy Scratchpad (將RAM數(shù)據(jù)復(fù)制到EEPROM中)[48H] </p><p>  此指令將RAM中的數(shù)據(jù)存入EEPROM中,以使數(shù)據(jù)掉電不丟失。此后由于芯片忙于EEPROM儲(chǔ)存處理,當(dāng)控制器發(fā)一個(gè)讀時(shí)間隙時(shí),總線上輸出“0”,當(dāng)儲(chǔ)存工作完成時(shí),總線將輸出“1”。在寄生工作方式時(shí)必須在發(fā)出此指令后

62、立刻超用強(qiáng)上拉并至少保持10MS,來(lái)維持芯片工作。 </p><p>  Convert T(溫度轉(zhuǎn)換)[44H] </p><p>  收到此指令后芯片將進(jìn)行一次溫度轉(zhuǎn)換,將轉(zhuǎn)換的溫度值放入RAM的第1、2地址。此后由于芯片忙于溫度轉(zhuǎn)換處理,當(dāng)控制器發(fā)一個(gè)讀時(shí)間隙時(shí),總線上輸出“0”,當(dāng)儲(chǔ)存工作完成時(shí),總線將輸出“1”。在寄生工作方式時(shí)必須在發(fā)出此指令后立刻超用強(qiáng)上拉并至少保持500MS

63、,來(lái)維持芯片工作。 </p><p>  Recall EEPROM(將EEPROM中的報(bào)警值復(fù)制到RAM)[B8H] </p><p>  此指令將EEPROM中的報(bào)警值復(fù)制到RAM中的第3、4個(gè)字節(jié)里。由于芯片忙于復(fù)制處理,當(dāng)控制器發(fā)一個(gè)讀時(shí)間隙時(shí),總線上輸出“0”,當(dāng)儲(chǔ)存工作完成時(shí),總線將輸出“1”。另外,此指令將在芯片上電復(fù)位時(shí)將被自動(dòng)執(zhí)行。這樣RAM中的兩個(gè)報(bào)警字節(jié)位將始終為EE

64、PROM中數(shù)據(jù)的鏡像。 </p><p>  Read Power Supply(工作方式切換)[B4H] </p><p>  此指令發(fā)出后發(fā)出讀時(shí)間隙,芯片會(huì)返回它的電源狀態(tài)字,“0”為寄生電源狀態(tài),“1”為外部電源狀態(tài)。</p><p><b>  繼電器電路設(shè)計(jì)</b></p><p>  本系統(tǒng)采用單相固態(tài)繼電

65、器SSR/1P-10A,當(dāng)單片機(jī)給繼電器供5V電壓時(shí),繼電器導(dǎo)通??梢酝ㄟ^(guò)這個(gè)原理將加熱爐的電源線火線分別接入繼電器兩端,所以單片機(jī)的I/O口供給低電平,繼電器就可以導(dǎo)通,這樣就可以控制加熱爐的加熱了。</p><p><b>  如圖所示:</b></p><p><b>  繼電器結(jié)構(gòu)</b></p><p>  由于

66、考慮到單片機(jī)引腳的驅(qū)動(dòng)能力可能不足,因此制作了驅(qū)動(dòng)電路,放大驅(qū)動(dòng)電流,并在繼電器兩端加上續(xù)流二極管保證加熱時(shí)間夠長(zhǎng)。</p><p><b>  電路如下:</b></p><p><b>  驅(qū)動(dòng)電路</b></p><p><b>  系統(tǒng)軟件設(shè)計(jì)</b></p><p>

67、<b>  主程序設(shè)計(jì)</b></p><p>  為了更簡(jiǎn)單的完成溫度控制的任務(wù),采用如下算法控制繼電器,程序的軟件流程圖如下:</p><p><b>  軟件流程圖</b></p><p>  首先在程序的開頭先讀取用戶的按鍵命令,當(dāng)沒(méi)有按鍵時(shí),數(shù)碼管僅顯示實(shí)際溫度;若按下“b”鍵,則數(shù)碼管顯示用戶的設(shè)定溫度;按下“

68、c”鍵,則進(jìn)入設(shè)置溫度子程序,用戶通過(guò)1~9數(shù)字鍵就可以設(shè)置用戶所需溫度,這樣就完成了用戶的操作。接下來(lái)讀取DS18B20的數(shù)據(jù),并按格式裝配成數(shù)碼管可以顯示的類型。最后根據(jù)當(dāng)前的溫度值控制繼電器的通斷。</p><p>  主程序就是以上述流程往復(fù)運(yùn)行。</p><p><b>  數(shù)碼管顯示程序</b></p><p><b> 

69、 數(shù)碼管顯示段選碼:</b></p><p>  unsigned char code Seg_Table[13] = {0xC0,/*0*/0xF9,/*1*/0xA4,/*2*/0xB0,/*3*/0x99,/*4*/0x92,/*5*/0x82,/*6*/0xF8,/*7*/0x80,/*8*/0x90,/*9*/</p&

70、gt;<p>  0x9c,/*10*/ //上框 代表實(shí)際溫度 0xa3,/*11*/ //下框 代表設(shè)定溫度 </p><p>  0xff//all off</p><p><b>  };</b></p><p><b>  數(shù)碼管顯示照片</b><

71、;/p><p><b>  鍵盤掃描程序</b></p><p>  這里使用4×4矩陣鍵盤作為命令輸入,采用行列賦值的方法分別確定按鍵的行值和列值。</p><p><b>  鍵盤掃描</b></p><p>  DB18B20通信程序</p><p>  DS18

72、B20測(cè)溫原理為圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振 隨溫度變化其振蕩率明顯改變,所產(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ì)

73、數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即 為所測(cè)溫度。斜率累加器用于補(bǔ)償和修正測(cè)溫過(guò)程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。</p><p>  轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0, 這5位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.

74、0625即可得到實(shí)際 溫度。 例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H 。</p><p>  根據(jù)DS18B20的通訊協(xié)議,主機(jī)(單片機(jī))控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過(guò)三個(gè)步驟:每一次讀寫之前都要對(duì)DS18B20進(jìn)行 復(fù)位操作,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS1

75、8B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后 釋放,當(dāng)DS18B20收到信號(hào)后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。</p><p>  DS18B20使用方法</p><p>  加熱爐溫控系統(tǒng)使用方法</p><p><b>  系統(tǒng)連接方法</b></p&

76、gt;<p>  實(shí)驗(yàn)板的USB口連接電腦,用作5V電源輸入,DS18B20的VCC和GND分別接UART的VCC和GND;數(shù)據(jù)端口接UART的RX。這樣單片機(jī)就可以讀取DS18B20的溫度數(shù)據(jù)了,但是為了準(zhǔn)確的測(cè)量加熱爐溫度,還要將芯片貼于加熱爐的杯壁上,這樣可以大致準(zhǔn)確地檢測(cè)爐溫。</p><p>  然后是繼電器的連接,先將電源線的火線斷開,分別接在繼電器220V的兩個(gè)引腳上,再將繼電器的控制

77、端分別接在放大器驅(qū)動(dòng)電路的集電極和地線上,而驅(qū)動(dòng)電路用實(shí)驗(yàn)箱上的5V輸出供電,最后將放大器的基級(jí)經(jīng)由一個(gè)2K的電阻接入實(shí)驗(yàn)箱UART的TX端。這樣,單片機(jī)就通過(guò)控制TX端的高低電平,控制繼電器的開合。</p><p><b>  系統(tǒng)使用方法</b></p><p>  程序燒寫完畢以后,重新打開開關(guān),數(shù)碼管就可以顯示當(dāng)前的溫度,按下鍵盤上的“*”號(hào)鍵,就可以使用0~

78、9數(shù)字鍵設(shè)置溫度(默認(rèn)溫度為50度)。按下“#”號(hào)鍵,可以查看用戶設(shè)定溫度。按下“D”鍵,可以看到恒溫時(shí)間(在距設(shè)定溫度0.8°C的時(shí)候開始啟動(dòng)計(jì)時(shí)器)。</p><p>  加熱爐的保溫范圍大致在設(shè)定溫度上下0.5°C的范圍內(nèi),當(dāng)超過(guò)設(shè)定溫度0.5°C時(shí),就會(huì)啟動(dòng)蜂鳴器報(bào)警。</p><p><b>  總結(jié)</b></p>

79、<p>  本文主要介紹基于STC12C5A60S2單片機(jī)的爐溫控制設(shè)計(jì)流程,介紹了爐溫控制方案以及各個(gè)主要模塊的工作原理和設(shè)計(jì)思路。本文并涉及溫度傳感器系統(tǒng)、繼電器系統(tǒng)、顯示系統(tǒng)、輸入系統(tǒng)的設(shè)計(jì)。</p><p>  由于系統(tǒng)的復(fù)雜性和硬件使用要求以及人力、時(shí)間等方面的制約,考慮到系統(tǒng)的實(shí)時(shí)性和運(yùn)算能力,系統(tǒng)并沒(méi)有采用復(fù)雜的處理算法和控制算法,一切以實(shí)用為主。對(duì)于溫度控制算法還有待進(jìn)一步的研究和改

80、進(jìn)。同時(shí),在電路保護(hù)方面的設(shè)計(jì)有待進(jìn)一步地學(xué)習(xí)和實(shí)踐。</p><p>  總結(jié)整個(gè)設(shè)計(jì)過(guò)程,不僅使我們得到了對(duì)已有知識(shí)進(jìn)行實(shí)踐的機(jī)會(huì),更培養(yǎng)了一定的科研能力,拓寬了知識(shí)面,加深了對(duì)知識(shí)的理解和運(yùn)用。</p><p><b>  參考文獻(xiàn)</b></p><p>  郭天祥. 《51單片機(jī)C語(yǔ)言教程》.北京.電子工業(yè)出版社.2008</p

81、><p>  宏晶STC單片機(jī)官方網(wǎng)站.《STC12C5A60S2器件手冊(cè)》.2010 </p><p>  DoYoung.net等.《18B20溫度傳感器應(yīng)用解析》.2007</p><p>  附錄A 系統(tǒng)程序代碼</p><p>  DS18B20通信程序</p><p>  #define uchar unsig

82、ned char</p><p>  #define DELAY_TIME1 8</p><p>  sbit DQ=P3^0; //改成P3^0</p><p>  void ds18b20_delay(int time)//延時(shí)時(shí)間為(time * 6 us)</p><p><b>  {</b></p>

83、;<p>  int i,s,temp;</p><p>  temp=time;</p><p>  for(i=0;i<DELAY_TIME1;i++)</p><p><b>  {</b></p><p><b>  s=temp;</b></p><

84、p>  while(s>0)s--;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //*********************18B20復(fù)位函數(shù)*********************//</p><p>  void Init

85、_DS18B20(void)</p><p><b>  {</b></p><p>  unsigned char x=1,j;</p><p>  DQ=1;//先將數(shù)據(jù)口拉高</p><p>  for(j=0;j<DELAY_TIME1;j++){</p><p>  _nop_()

86、;_nop_();_nop_();//延時(shí)大約2us</p><p><b>  }</b></p><p>  while(x) //進(jìn)行判斷,當(dāng)數(shù)據(jù)口返回一個(gè)0時(shí),跳出循環(huán)。初始化成功</p><p><b>  {</b></p><p>  DQ=0; //拉低&l

87、t;/p><p>  ds18b20_delay(80);//延時(shí)大約850us,晶振為11.0592</p><p>  DQ=1;//拉高</p><p>  ds18b20_delay(8);//延時(shí)50us</p><p>  if(DQ==1) //設(shè)置判斷條件,看ds1820的返回值,0則跳出while循環(huán)</p&g

88、t;<p><b>  x=1;</b></p><p><b>  else</b></p><p><b>  x=0;</b></p><p>  ds18b20_delay(40);//延時(shí)500us</p><p><b>  }</b&

89、gt;</p><p><b>  }</b></p><p>  //*********************18B20寫命令函數(shù)*********************//</p><p>  void WriteOneChar(uchar val)</p><p><b>  {</b>&

90、lt;/p><p>  uchar i,j;</p><p>  for (i = 8; i > 0; i--) //定義 8 bit,寫 8 bit</p><p><b>  {</b></p><p><b>  DQ = 1;</b></p><p>  for(j

91、=0;j<DELAY_TIME1;j++)</p><p><b>  {_nop_();</b></p><p><b>  _nop_();}</b></p><p><b>  DQ = 0;</b></p><p>  for(j=0;j<DELAY_TIM

92、E1;j++){</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p>

93、<p>  _nop_();//5us</p><p><b>  }</b></p><p>  DQ = val & 0x01; //最低位移出,并寫入總線</p><p>  ds18b20_delay(6); //66us</p><p>  val = val >

94、;> 1; //右移一位,倒數(shù)第二位變?yōu)樽畹臀?lt;/p><p><b>  }</b></p><p><b>  DQ = 1;</b></p><p>  ds18b20_delay(1); //高電平維持11us,寫結(jié)束</p><p><b> 

95、 }</b></p><p>  //*********************18B20讀1個(gè)字節(jié)函數(shù)*********************//</p><p>  uchar ReadOneChar(void)</p><p><b>  {</b></p><p>  uchar i,j;</

96、p><p>  uchar value = 0;</p><p>  for (i = 8; i > 0; i--)</p><p><b>  {</b></p><p><b>  DQ = 1;</b></p><p>  for(j=0;j<DELAY_TIM

97、E1;j++)</p><p><b>  {</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  }</b></p><p>  valu

98、e >>= 1; //右移一位</p><p><b>  DQ = 0;</b></p><p>  for(j=0;j<DELAY_TIME1;j++)</p><p><b>  {</b></p><p><b>  _nop_();</b&

99、gt;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  _nop_(); //4us</p><p><b>  }</b></p><p><b&g

100、t;  DQ = 1;</b></p><p>  for(j=0;j<DELAY_TIME1;j++)</p><p><b>  {</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b><

101、/p><p><b>  _nop_();</b></p><p>  _nop_(); //4us ,讀時(shí)隙</p><p><b>  }</b></p><p><b>  if (DQ)</b></p><p>  value |= 0x80;

102、 //DQ=1,則寫入為 10000000</p><p>  ds18b20_delay(6); //66us</p><p><b>  }</b></p><p><b>  DQ = 1;</b></p><p>  return(value);</p>

103、<p><b>  }</b></p><p>  float ReadTemperature(void)</p><p><b>  {</b></p><p>  uchar n = 0; //存儲(chǔ)符號(hào)</p><p>  unsigned int t;</p>

104、<p>  uchar a,b;</p><p>  //*********************讀出溫度函數(shù)*********************//</p><p>  Init_DS18B20(); //總線復(fù)位</p><p>  WriteOneChar(0xCC); // 發(fā)Skip ROM命令</p><

105、;p>  WriteOneChar(0xBE); // 發(fā)讀命令</p><p>  a = ReadOneChar(); //溫度低8位</p><p>  b = ReadOneChar(); //溫度高8位</p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC); //

106、Skip ROM</p><p>  WriteOneChar(0x44); // 發(fā)轉(zhuǎn)換命令</p><p>  t = (b << 8) + a;</p><p>  return (t*0.0625);</p><p><b>  }</b></p><p><b> 

107、 鍵盤掃描程序</b></p><p>  #include<STC12C5A60S2.h></p><p>  #include"shuma.h"</p><p>  extern unsigned char KeyCounter;</p><p>  extern bit KeyFlag;<

108、;/p><p>  extern bit SetFlag;</p><p>  extern bit DisFlag;</p><p>  extern bit ShowTimeFlag;</p><p>  unsigned char code keycode[16]={</p><p>  0x77,0x7b,0x7d

109、,0x7e, //1,2,3,A</p><p>  0xb7,0xbb,0xbd,0xbe, //4,5,6,B</p><p>  0xd7,0xdb,0xdd,0xde, //7,8,9,C</p><p>  0xe7,0xeb,0xed,0xee, //*,0,#,D</p><p><b>

110、;  };</b></p><p>  unsigned char Key_Scan() //返回的是keycode[]數(shù)組的位數(shù)</p><p><b>  {</b></p><p>  unsigned char i,X,Y;</p><p>  unsigned char KeyCode;<

111、/p><p>  P2 = 0x0f;</p><p>  if(P2 != 0x0f)</p><p><b>  {</b></p><p>  Delay(500);</p><p>  if(P2 != 0x0f)</p><p><b>  {</b&

112、gt;</p><p><b>  X = P2;</b></p><p>  P2 = 0xf0;</p><p>  if(P2 != 0xf0)</p><p><b>  {</b></p><p><b>  Y = P2;</b></p

113、><p>  while(P2!=0xf0); //如果不松鍵 則一直停在這邊</p><p><b>  }</b></p><p>  KeyCode = X|Y;</p><p><b>  }</b></p><p><b>  }</b>

114、</p><p><b>  else</b></p><p><b>  {</b></p><p>  KeyCode = 0xff; </p><p><b>  }</b></p><p>  for(i=0;i<16;i++)</

115、p><p>  if(KeyCode==keycode[i])</p><p><b>  return i;</b></p><p>  return 255; </p><p><b>  }</b></p><p>  unsigned char Get_Code()&

116、lt;/p><p><b>  {</b></p><p>  unsigned char i=0xff,j=0xff;</p><p>  i=Key_Scan();</p><p><b>  switch(i)</b></p><p><b>  {</b&

117、gt;</p><p>  case 0:j=1;KeyFlag=1;break;</p><p>  case 1:j=2;KeyFlag=1;break;</p><p>  case 2:j=3;KeyFlag=1;break;</p><p>  case 3:break; //'A"</p>&

118、lt;p>  case 4:j=4;KeyFlag=1;break;</p><p>  case 5:j=5;KeyFlag=1;break;</p><p>  case 6:j=6;KeyFlag=1;break;</p><p>  case 7:break; //'B'</p><p>  case 8:

119、j=7;KeyFlag=1;break;</p><p>  case 9:j=8;KeyFlag=1;break;</p><p>  case 10:j=9;KeyFlag=1;break;</p><p>  case 11:break; //'C'</p><p>  case 12:j='a';K

120、eyFlag=1;SetFlag=1;KeyCounter=0;break;</p><p>  case 13:j=0;KeyFlag=1;break;</p><p>  case 14:j='b';KeyFlag=1;DisFlag=~DisFlag;</p><p><b>  break;</b></p>

121、<p>  case 15:j='c';KeyFlag=1;ShowTimeFlag=~ShowTimeFlag;break; //'D' //'D'</p><p>  default:KeyFlag=0;break;</p><p><b>  }</b></p><p>

122、<b>  return j;</b></p><p><b>  }</b></p><p><b>  數(shù)碼管顯示</b></p><p>  #include<STC12C5A60S2.h></p><p>  sbit SegDin=P3^6; //顯示數(shù)據(jù)

123、高地位</p><p>  sbit SegClk=P3^7; //數(shù)據(jù)顯示時(shí)鐘</p><p>  unsigned char code Seg_Table[13] = {</p><p>  0xC0,/*0*/</p><p>  0xF9,/*1*/</p><p>  0xA4,/*2*/</p>

124、<p>  0xB0,/*3*/</p><p>  0x99,/*4*/</p><p>  0x92,/*5*/</p><p>  0x82,/*6*/</p><p>  0xF8,/*7*/</p><p>  0x80,/*8*/</p><p>  0x90,/*9*

溫馨提示

  • 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)論