版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 基于51單片機的溫度控制系統(tǒng)設(shè)計</p><p> 姓 名:XXX</p><p> 學(xué) 號:XXX</p><p> 專 業(yè):電器自動化</p><p><b> 指導(dǎo)教師:XXX</b></p><p> 完成時間:2013.XX.XX<
2、/p><p><b> 摘要</b></p><p> 本文提出了基于MCS-51系列單片機的數(shù)字溫度計的制作電路和編程思想。該數(shù)字溫度計以ATMEL公司的AT89S52 單片機為主控,配以達拉斯公司的DS18B20數(shù)字溫度傳感器,采用1602雙行英文字符液晶作顯示。實現(xiàn)了對溫度的測量,顯示,和報警等功能。</p><p> 關(guān)鍵詞: AT
3、89S52單片機;數(shù)字傳感器DS18B20;顯示器1602LCD;</p><p><b> 目 錄</b></p><p><b> 摘要I</b></p><p> ABSTRACT錯誤!未定義書簽。</p><p><b> 1 緒論3</b></p
4、><p> 1.1 選題的背景3</p><p> 1.2 數(shù)字溫度計簡介3</p><p> 1.2.1 數(shù)字溫度計的特征3</p><p> 1.2.2 設(shè)計實現(xiàn)的目標4</p><p> 2 數(shù)字溫度計的方案設(shè)計5</p><p> 2.1 設(shè)計方案論證與比較5<
5、/p><p> 2.1.1 顯示電路方案5</p><p> 2.1.2 測溫電路方案5</p><p> 2.2 系統(tǒng)總體方案5</p><p> 3 數(shù)字溫度計的硬件電路設(shè)計6</p><p> 3.1 控制電路6</p><p> 3.1.1 MCU簡介6</p&
6、gt;<p> 3.2.2 最小系統(tǒng)模塊12</p><p> 3.3 溫度傳感器設(shè)計13</p><p> 3.3.1 DS18B20簡介13</p><p> 3.3.2 溫度傳感器與單片機的連接15</p><p> 3.3.3 復(fù)位信號及外部復(fù)位電路16</p><p> 3
7、.4 單片機與報警電路17</p><p> 3.5 顯示電路17</p><p><b> 4 軟件設(shè)計19</b></p><p> 4.1 DS18b20的讀操作19</p><p> 4.2 DS18b20的溫度數(shù)據(jù)處理20</p><p> 4.3 1602顯示部分
8、21</p><p><b> 5 運行測試23</b></p><p> 5.1溫度測試 27</p><p> 5.2報警設(shè)置
9、 27</p><p> 5.3 報警測試 27</p><p><b> 參考文獻30</b></p><p> 附錄1 程序源代碼錯誤!未定義書簽。</p><p><b>
10、 1 緒論</b></p><p><b> 1.1 選題的背景</b></p><p> 隨著現(xiàn)代信息技術(shù)的飛速發(fā)展和傳統(tǒng)工業(yè)改造的逐步實現(xiàn).能夠獨立工作的溫度檢測和顯示系統(tǒng)應(yīng)用于諸多領(lǐng)域。傳統(tǒng)的溫度檢測以熱敏電阻為溫度敏感元件。熱敏電阻的成本低,但需后續(xù)信號處理電路,而且可靠性相對較差,測溫準確度低,檢測系統(tǒng)也有一定的誤差。與傳統(tǒng)的溫度計相比,這里
11、設(shè)計的數(shù)字溫度計具有讀數(shù)方便,測溫范圍廣,測溫精確,數(shù)字顯示,適用范圍寬等特點。選用AT89S52單片機作為主控制器件,DSl8B20作為測溫傳感器通過LCD1602并行傳送數(shù)據(jù),實現(xiàn)溫度顯示。通過DSl8B20直接讀取被測溫度值,進行數(shù)據(jù)轉(zhuǎn)換,該器件的物理化學(xué)性能穩(wěn)定,線性度較好,在-55℃~125℃最大線性偏差小于0.1℃。該器件可直接向單片機傳輸數(shù)字信號,便于單片機處理及控制。另外,該溫度計還能直接采用測溫器件測量溫度,從而簡化數(shù)
12、據(jù)傳輸與處理過程。</p><p> 1.2 數(shù)字溫度計簡介</p><p> 1.2.1 數(shù)字溫度計的特征</p><p> 溫度是我們?nèi)粘Ia(chǎn)和生活中實時在接觸到的物理量,但是它是看不到的,僅憑感覺只能感覺到大概的溫度值,傳統(tǒng)的指針式的溫度計雖然能指示溫度,但是精度低,使用不夠方便,顯示不夠直觀,數(shù)字溫度計的出現(xiàn)可以讓人們直觀的了解自己想知道的溫度到底是多
13、少度。</p><p> 數(shù)字溫度計采用進口芯片組裝精度高、高穩(wěn)定性,誤差≤0.5%, 內(nèi)電源、微功耗、不銹鋼外殼,防護堅固,美觀精致。數(shù)字溫度計采用進口高精度、低溫漂、超低功耗集成電路和寬溫型液晶顯示器,內(nèi)置高能量電池連續(xù)工作≥5年無需敷設(shè)供電電纜,是一種精度高、穩(wěn)定性好、適用性極強的新型現(xiàn)場溫度顯示儀。是傳統(tǒng)現(xiàn)場指針雙金屬溫度計的理想替代產(chǎn)品,廣泛應(yīng)用于各類工礦企業(yè),大專院校,科研院所。</p>
14、<p> 數(shù)字溫度計采用溫度敏感元件也就是溫度傳感器(如鉑電阻,熱電偶,半導(dǎo)體,熱敏電阻等),將溫度的變化轉(zhuǎn)換成電信號的變化,如電壓和電流的變化,溫度變化和電信號的變化有一定的關(guān)系,如線性關(guān)系,一定的曲線關(guān)系等,這個電信號可以使用模數(shù)轉(zhuǎn)換的電路即AD轉(zhuǎn)換電路將模擬信號轉(zhuǎn)換為數(shù)字信號,數(shù)字信號再送給處理單元,如單片機或者PC機等,處理單元經(jīng)過內(nèi)部的軟件計算將這個數(shù)字信號和溫度聯(lián)系起來,成為可以顯示出來的溫度數(shù)值,如25.0
15、攝氏度,然后通過顯示單元,如LED,LCD或者電腦屏幕等顯示出來給人觀察。這樣就完成了數(shù)字溫度計的基本測溫功能。數(shù)字溫度計根據(jù)使用的傳感器的不同,AD轉(zhuǎn)換電路,及處理單元的不同,它的精度,穩(wěn)定性,測溫范圍等都有區(qū)別,這就要根據(jù)實際情況選擇符合規(guī)格的數(shù)字溫度計。</p><p> 1.2.2 設(shè)計實現(xiàn)的目標</p><p> 采集測溫范圍為-55~+120 ℃.</p>&
16、lt;p> 溫度精度在0.1 ℃;誤差±0.2℃以內(nèi).</p><p> 顯示模塊,采用1602液晶顯示.</p><p> 按鍵3個,設(shè)置、加、減.</p><p> 報警設(shè)置10-90度.低于下限報警,高于上限報警。</p><p> 2 數(shù)字溫度計的方案設(shè)計</p><p> 2.1
17、設(shè)計方案論證與比較</p><p> 2.1.1 顯示電路方案</p><p> 方案一:采用數(shù)碼管動態(tài)顯示</p><p> 使用七段LED數(shù)碼管,采用動態(tài)顯示的方法來顯示各項指標,此方法雖然價格成本低,但是顯示單一,且功耗較大。</p><p> 方案二:采用LCD液晶顯示</p><p> 采用1602
18、 LCD液晶顯示,此方案顯示內(nèi)容相對豐富,且價格不高。</p><p> 綜合上述原因,采用方案二,使用LCD液晶作顯示電路。</p><p> 2.1.2 測溫電路方案</p><p> 方案一:采用模擬溫度傳感器測溫</p><p> 由于本設(shè)計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測溫度變化的電壓或電流采
19、集過來,進行A/D轉(zhuǎn)換后,就可以用單片機進行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設(shè)計需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。</p><p> 方案二:采用數(shù)字溫度傳感器</p><p> 進而考慮到用溫度傳感器,在單片機電路設(shè)計中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進行轉(zhuǎn)
20、換,就可以滿足設(shè)計要求。</p><p> 綜合考慮,很容易看出,采用方案二,電路比較簡單,軟件設(shè)計也比較簡單,故采用了方案二。</p><p> 2.2 系統(tǒng)總體方案</p><p> 根據(jù)上述方案比較,結(jié)合題目要可以將系統(tǒng)分為主控模塊,顯示模塊,溫度采集模塊和報警模塊,其框圖如下:</p><p> 圖2-1 系統(tǒng)總體設(shè)計框圖&
21、lt;/p><p> 3 數(shù)字溫度計的硬件電路設(shè)計</p><p><b> 3.1 控制電路</b></p><p> 3.1.1 MCU簡介</p><p> CPU是整個控制部分的核心。在考慮經(jīng)濟性和滿足需求的前提下,本系統(tǒng)選用ATMEL公司生產(chǎn)的8位AT89S52單片機作為整個系統(tǒng)的控制中心。</p&g
22、t;<p> AT89S52是ATMEL公司生產(chǎn)的低功耗,高性能CMOS8位單片機,片內(nèi)含4k bytes的可系統(tǒng)編程的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準8051指令系統(tǒng)及引腳,它集Flash存儲器既可在線編輯(ISP)也可用傳統(tǒng)方法進行編輯及通用8位微處理器于單片芯片中,功能強大AT89S52單片機可為您提供許多高性價比的應(yīng)用場合。器管腳圖如圖3-2:</p&
23、gt;<p> 圖3-1 AT89S52管腳圖</p><p> 在本系統(tǒng)中,AT89S52單片機內(nèi)部的功能單元已經(jīng)能夠滿足系統(tǒng)設(shè)計需要,不需要系統(tǒng)擴展。</p><p> AT89S52具有以下的特點:</p><p> ● 8031 CPU與MCS-51 兼容</p><p> ● 壽命:1000寫/擦循環(huán)<
24、;/p><p> ● 4K字節(jié)可編程FLASH存儲器</p><p> ● 全靜態(tài)工作:0--24MHz</p><p> ● 三級程序存儲器保密鎖定</p><p> ● 128*8位內(nèi)部RAM</p><p> ● 32條可編程I/O線</p><p> ● 兩個16位定時器/計數(shù)器
25、</p><p><b> ● 6個中斷源</b></p><p><b> ● 可編程串行通道</b></p><p> ● 低功耗的閑置和掉電模式</p><p> ● 片內(nèi)振蕩器和時鐘</p><p> AT89S52 是一種低功耗、高性能CMOS8位微控制器
26、,具有 8K 在系統(tǒng)可編程Flash 存儲器。使用Atmel 公司高密度非 易失性存儲器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完 全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于 常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng) 可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提 供高靈活、超有效的解決方案。</p><p> AT89S52具有以下標準功能: 8k字節(jié)Flash
27、,256字節(jié)RAM, 32 位I/O 口線,看門狗定時器,2 個數(shù)據(jù)指針,三個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時鐘電路。</p><p> 此外, AT89S52 可降至0Hz 靜態(tài)邏 輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工 作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié), 單片機一切工作停止
28、,直到下一個中斷或硬件復(fù)位為止。8 位微控制器 8K 字節(jié)在系統(tǒng)可編程 Flash。同時該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。</p><p> 3、AT89S52引腳功能</p><p> AT89S52 單片機為40 引腳芯片見圖3.2.1-2。</p><p> 圖3.2.1-2 AT89S52引腳圖</p
29、><p> ?。?)口線:P0、P1、P2、P3 共四個八位口。</p><p> P0 口:P0口是一個8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動8個TTL邏輯電平。 </p><p> 對P0端口寫“1”時,引腳用作高阻抗輸入。 </p><p> 當訪問外部程序和數(shù)據(jù)存儲器時,P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,
30、P0不具有內(nèi)部上拉電阻。 </p><p> 在flash編程時,P0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。 </p><p> P1口:P1 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平。對P1 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于
31、內(nèi)部電阻的原因,將輸出電流(IIL)。 </p><p> 此外,P1.0和P1.1分別作定時器/計數(shù)器2的外部計數(shù)輸入(P1.0/T2)和定時器/計數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。 </p><p> 在flash編程和校驗時,P1口接收低8位地址字節(jié)。 </p><p><b> 引腳號第二功能: </b>&l
32、t;/p><p> P1.0 T2(定時器/計數(shù)器T2的外部計數(shù)輸入),時鐘輸出 </p><p> P1.1 T2EX(定時器/計數(shù)器T2的捕捉/重載觸發(fā)信號和方向控制) </p><p> P1.5 MOSI(在系統(tǒng)編程用) </p><p> P1.6 MISO(在系統(tǒng)編程用) </p><p> P1.7
33、 SCK(在系統(tǒng)編程用)</p><p> P2口:P2 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平。對P2 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。 </p><p> 在訪問外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器(例如執(zhí)行MOV
34、X @DPTR) 時,P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強的內(nèi)部上拉發(fā)送1。</p><p> 在使用8位地址(如MOVX @RI)訪問外部數(shù)據(jù)存儲器時,P2口輸出P2鎖存器的內(nèi)容。 </p><p> 在flash編程和校驗時,P2口也接收高8位地址字節(jié)和一些控制信號。 </p><p> P3 口:P3 口是一個具有內(nèi)部上拉電阻的8 位雙
35、向I/O 口,p3 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平。對P3 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。 </p><p> P3口亦作為AT89S52特殊功能(第二功能)使用。 </p><p> 在flash編程和校驗時,P3口也接收一些控制信號。 </p>&l
36、t;p> 此外,P3口還接收一些用于FLASH閃存編程和程序校驗的控制信號。 </p><p> (2)其他引腳說明:</p><p> RST:復(fù)位輸入。晶振工作時,RST腳持續(xù)2 個機器周期高電平將使單片機復(fù)位??撮T狗計時完成后,RST 腳輸出96 個晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認狀態(tài)下,復(fù)位高電平有效
37、。 </p><p> ALE/PROG——當訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。 </p><p> 對FLASH存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。 <
38、;/p><p> 如有必要,可通過對特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳會被微弱拉高,單片機執(zhí)行外部程序時,應(yīng)設(shè)置ALE禁止位無效。 </p><p> PSEN——程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當AT89S52由外部程序存儲器取指令(或數(shù)據(jù))時,每個機器
39、周期兩次PSEN有效,即輸出兩個脈沖,在此期間,當訪問外部數(shù)據(jù)存儲器,將跳過兩次PSEN信號。 </p><p> EA/VPP——外部訪問允許,欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。 </p><p> 如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲器的指
40、令。 </p><p> FLASH存儲器編程時,該引腳加上+12V的編程允許電源Vpp,當然這必須是該器件是使用12V編程電壓Vpp。</p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。 </p><p> XTAL2:來自反向振蕩器的輸出。 </p><p> XTAL1,XTAL2接石英晶體振蕩器。如圖
41、3.2.1-3所示外接晶體引腳圖。</p><p> C2 XTAL2</p><p> 懸空 XTAL2</p><p> C1 XTAL1 外部振蕩信號 XTAL1</p><p> GND
42、 GND</p><p> 接地 接地</p><p> a.內(nèi)部方式 b.外部方式</p><p> 圖3.2.1-3晶振外接結(jié)構(gòu)引腳圖</p&
43、gt;<p> XTAL1是片內(nèi)振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時,外部振蕩信號應(yīng)直接加到XTAL1,而XTAL2懸空。內(nèi)部方式時,時鐘發(fā)生器對振蕩脈沖二分頻,如晶振為12MHz,時鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內(nèi)選擇,在本設(shè)計電路中選用了12MHz。電容取20PF左右。機器周期=12×時間周期,如12MHz的機器周期為1微秒。</p>&l
44、t;p> ?。?)控制或復(fù)位引腳</p><p> RESET 此腳為高電平時(約2個機器周期)可將單片機復(fù)位。</p><p> RST/VPD——當出現(xiàn)兩個機器周期高電平時,單片機復(fù)位。復(fù)位后,P0~P3輸出高電平;SP寄存器為07H;其它寄存器全部清0;不影響RAM狀態(tài)。如圖3.2.1-4所示。 </p><p> 圖3.2.1-4 按鍵電平復(fù)位&
45、lt;/p><p> AT89SXX系列單片機實現(xiàn)了ISP下載功能,故而取代了89CXX系列的下載方式,也是因為這樣,ATMEL公司已經(jīng)停止生產(chǎn)89CXX系列的單片機,現(xiàn)在市面上的AT89CXX多是停產(chǎn)前的庫存產(chǎn)品。 </p><p> 4、AT89S52的編程方法 </p><p> 編程前,須按編程模式表設(shè)置好地
46、址、數(shù)據(jù)及控制信號;順序如下:</p><p> ?、?在地址線上加上要編程單元的地址信號。</p><p> ?、?在數(shù)據(jù)線上加上要寫入的數(shù)據(jù)字節(jié)。</p><p> ?、?激活相應(yīng)的控制信號。</p><p> ④ 將EA/Vpp端加上+12V編程電壓。</p><p> ⑤ 每對Flash存儲陣列寫入一個字節(jié)
47、或每寫入一個程序機密位,加上一個ALE/PROG編程脈沖。每個字節(jié)寫入周期是自身定時的,大多數(shù)約為50us。改變編程單元的地址和寫入的數(shù)據(jù),重復(fù)①—⑤步驟,直到全部文件編程結(jié)束。</p><p> 單片機的現(xiàn)狀及發(fā)展方向:</p><p> 單片機是為了工業(yè)控制需要滿足而誕生的,是自動控制系統(tǒng)的核心部件,因而也主要用于工業(yè)控制、智能化儀器儀表、家用電器中。它具有體積小,功能多、價格低、
48、使用方便、系統(tǒng)設(shè)計靈活等優(yōu)點,應(yīng)用領(lǐng)域不斷擴大,除了工業(yè)控制,智能化儀表,通訊,家用電器外,在智能化高檔電子玩具產(chǎn)品中也大量采用單片機芯片作為核心控制部件。</p><p> 由于單片機主要面向工業(yè)控制,工作環(huán)境比較惡劣,入高溫,強電磁干擾,甚至含有腐蝕性氣體,在太空中工作的單片機控制系統(tǒng),還必須具有抗輻射能力,這決定了單片機CPU于通用微機CPU具有不同的技術(shù)特征和發(fā)展方向:</p><p
49、><b> (1) 可靠性高;</b></p><p> (2) 控制功能往往很強,數(shù)值計算交叉;</p><p> (3) 指令系統(tǒng)比通用微處理器慢的多;</p><p> (4) X系列芯片取代;</p><p> (5) 抗干擾性強,工作溫度范圍寬。</p><p> 3.
50、2.2 最小系統(tǒng)模塊</p><p> 本次設(shè)計中,選用ATMEL公司的51系列單片機AT89S52芯片作為電子密碼電源開關(guān)的數(shù)據(jù)處理及操作控制芯片。只有單片機芯片無法完成數(shù)據(jù)處理及控制功能,必須有附加的電路,使單片機芯片組成一個可運行的系統(tǒng)才能實現(xiàn)其功能。本次設(shè)計中,由AT89S52芯片連同附加電路構(gòu)成的單片機最小系統(tǒng)作為數(shù)據(jù)處理及控制模塊,其中,使用P1口作為1602液晶的數(shù)據(jù)傳輸口,P3口作1602的命令
51、數(shù)據(jù)控制、時鐘、讀寫控制、和使能控制接口,P2口作按鍵掃描接口,P2.3作DS18B20的總線接口。P2.5,P2.7作報警控制接口。其電路連接圖3-3如下:</p><p> 圖3-2 數(shù)據(jù)處理及控制模塊</p><p> 3.3 溫度傳感器設(shè)計</p><p> 3.3.1 DS18B20簡介</p><p> DS18B20可以
52、程序設(shè)定9~12位的分辨率,精度為±0.5°C??蛇x更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報警溫度存儲在EPROM中,掉電后依然保存。</p><p> 溫度傳感器DS18B20引腳如圖3-4所示。</p><p> 圖3-3 DS18B20TO-92封裝溫度傳感器</p><p><b> 引腳功能說明:
53、</b></p><p> VDD :可選電源腳,電源電壓范圍3~5.5V。當工作于寄生電源時,此引腳必須接地。</p><p> DQ :數(shù)據(jù)輸入/輸出腳。漏極開路,常態(tài)下高電平。</p><p><b> GND :為電源地</b></p><p> 圖3-4 DS18B20內(nèi)部結(jié)構(gòu)圖</
54、p><p> DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。</p><p> 光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗碼(CRC=X8
55、+X5+X4+1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。 </p><p> DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴展的二進制補碼讀數(shù)形式提供,以0.0625℃/LSB形式表達,其中S為符號位。 </p><p> 這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比
56、特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。 例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。 </p><p> DS18B20溫度傳感器
57、的內(nèi)部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的E2RAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。 </p><p> 暫存存儲器包含了8個連續(xù)字節(jié),前兩個字節(jié)是測得的溫度信息,第一個字節(jié)的內(nèi)容是溫度的低八位,第二個字節(jié)是溫度的高八位。第三個和第四個字節(jié)是TH、TL的易失性拷貝,第五個字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個字節(jié)的內(nèi)容在每一次上電復(fù)位時被刷新。第六、七、八個字節(jié)用于內(nèi)部計算
58、。第九個字節(jié)是冗余檢驗字節(jié)。 </p><p> 該字節(jié)各位的意義如下:</p><p> TM R1 R0 1 1 1 1 1</p><p> 低五位一直都是1 ,TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設(shè)置為0,用戶不要去改動。R1和R0用來設(shè)置分辨率,如表1所示:(DS18B20出廠時被設(shè)置為12位
59、)</p><p> 表3-3 DS18B20溫度轉(zhuǎn)換時間表</p><p> 根據(jù)DS18B20的通訊協(xié)議,主機控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號后等待16~60微
60、秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號表示復(fù)位成功。</p><p> 3.3.2 溫度傳感器與單片機的連接</p><p> 溫度傳感器的單總線(1-Wire)與單片機的P2.0連接,P2.0是單片機的高位地址線A8。P2端口是一個帶內(nèi)部上拉電阻的8位雙向I/O,其輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對該端口寫“1”,可通過內(nèi)部上拉電阻將其
61、端口拉至高電平,此時可作為輸入口使用,這是因為內(nèi)部存在上拉電阻,某一引腳被外部信號拉低時會輸出一個電流。在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器時。如執(zhí)行MOVX DPTR指令,則表示P2端口送出高8位的地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲器時,可執(zhí)行MOVX RI指令,P2端口內(nèi)容即為特殊功能寄存器(SFR)區(qū)中R2寄存器內(nèi)容,整個訪問期間不改變。在Flash編程和程序校驗時,P2端口也接收高位地址和其他控制信號。圖3-5為
62、DSl8820內(nèi)部結(jié)構(gòu)。圖3-6為DSl8820與單片機的接口電路。</p><p> 圖3-5 DS18B20和單片機的接口連接</p><p> 3.3.3 復(fù)位信號及外部復(fù)位電路</p><p> 該復(fù)位信號高電平有效,其有效時間應(yīng)持續(xù)24個振蕩脈沖周期即兩個機器周期以上。若使用頻率為12 MHz的晶體振蕩器,則復(fù)位信號持續(xù)時間應(yīng)超過2μs才完成復(fù)位操
63、作。</p><p> 圖3-6 復(fù)位電路</p><p> 3.4 單片機與報警電路</p><p> 系統(tǒng)中的報警電路是由發(fā)光二極管和限流電阻組成,并與單片機的P2.6端口連接。</p><p><b> 3.5 顯示電路</b></p><p><b> 1、應(yīng)用簡介&
64、lt;/b></p><p> 模塊內(nèi)部自帶字符發(fā)生存儲器(CGROM),字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是(41H),顯示時模塊把代碼41H發(fā)給液晶模塊,我們就能在液晶上看到字母“A”。</p><p> 1602液晶模塊內(nèi)部的控制器共有11條控制指令,豐富的指令可以完成液晶的時序控制、
65、工作方式式設(shè)置和數(shù)據(jù)顯示等。</p><p> 采用的LCD1602液晶模塊是標準16針插座,接口電路如圖3.2.3所示:關(guān)于LCD1602的詳細資料見表3.2.3-1和表3.2.3-2。</p><p> 圖3.2.3 顯示電路的連接圖</p><p><b> 4 軟件設(shè)計</b></p><p> 4.1
66、 DS18b20的讀操作</p><p> DSl8B20的主要數(shù)據(jù)元件有:64位激光Lasered ROM,溫度靈敏元件和非易失性溫度告警觸發(fā)器TH和TL。DSl8B20可以從單總線獲取電源,當信號線為高電平時,將能量貯存在內(nèi)部電容器中;當單信號線為低電平時,將該電源斷開,直到信號線變?yōu)楦唠娖街匦陆由霞纳?電容)電源為止。此外,還可外接5 V電源,給DSl8B20供電。DSl8B20的供電方式靈活,利用外接電
67、源還可增加系統(tǒng)的穩(wěn)定性和可靠性。DS18B20讀寫時序如圖4-1~4-3:</p><p> 圖4-1 DS18B20的復(fù)位時序圖</p><p> 圖4-2 DS18B20的寫數(shù)據(jù)時序圖</p><p> 圖4-3 DS18B20的讀數(shù)據(jù)時序圖</p><p> 由時序圖可知,DS18B20在復(fù)位時需要480us的低電平,等待
68、15us后MCU將總線拉高,等待DS18B20的響應(yīng)信號;DS18B20在寫數(shù)據(jù)時分為寫“0”和寫“1”操作,寫“0”操作時,DS18B20需要至少60us的總線被拉低,然后在60us內(nèi)將“0”寫入DS18B20中,持續(xù)時間至少1us,寫“1”操作是只需將寫入的“0”改為“1”即可;DS18B20讀操作也分為讀“0”和讀“1”操作,讀“0”操作時,總線需要15us被拉低,再拉高45us,然后再15us內(nèi)將數(shù)據(jù)讀走,讀“1”操作同讀“0”
69、操作。程序流程圖如圖4-4:</p><p> 圖4-4 DS18B20讀取溫度的流程圖</p><p> 4.2 DS18b20的溫度數(shù)據(jù)處理</p><p> 讀出溫度數(shù)據(jù)后,LOW的低四位為溫度的小數(shù)部分,可以精確到0.0625℃,LOW的高四位和HIGH的低四位為溫度的整數(shù)部分,HIGH的高四位全部為1表示負數(shù),全為0表示正數(shù)。所以先將數(shù)據(jù)提取出來,
70、分為三個部分:小數(shù)部分、整數(shù)部分和符號部分。小數(shù)部分進行四舍五入處理:大于0.5℃的話,向個位進1;小于0.5℃的時候,舍去不要。當數(shù)據(jù)是個負數(shù)的時候,顯示之前要進行數(shù)據(jù)轉(zhuǎn)換,將其整數(shù)部分取反加一。還因為DS18B20最低溫度只能為-55℃,所以可以將整數(shù)部分的最高位換成一個“-”,表示為負數(shù)。圖4-2為溫度數(shù)據(jù)處理程序的流程圖。</p><p> 圖4-5 溫度數(shù)據(jù)處理流程圖</p><
71、p> 4.3 1602顯示部分</p><p> 1602的讀寫時序圖如下:</p><p> 圖4-6 1602液晶的讀時序圖</p><p> 圖4-7 1602的寫時序圖</p><p> 根據(jù)以上時序圖可以得出讀寫程序流程圖如下:</p><p><b> 5 運行測試</
72、b></p><p> 5.1.開機溫度測試</p><p> 5.2.設(shè)置溫度測試</p><p><b> 5.3報警測試</b></p><p><b> 6 結(jié)語</b></p><p> 本文重點介紹了單片機和數(shù)字傳感器DS18B20的原理和功能,并
73、用DS18B20與AT89S52單片機、LCD1602組成數(shù)字溫度計,有超溫報警功能。</p><p> 在本次設(shè)計的過程中,我發(fā)現(xiàn)很多的問題,雖然以前還做過這樣的設(shè)計但這次設(shè)計真的讓我長進了很多,單片機課程設(shè)計重點就在于軟件算法的設(shè)計,需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個程序并不是一件簡單的事,舉個例子,以前寫的那幾次,數(shù)據(jù)加減時,我用的都是BCD碼,這一次,我全部用的都是16進制的
74、數(shù)直接加減,顯示處理時在用除法去刪分,感覺效果比較好,有好多的東西,只有我們?nèi)ピ囍隽?,才能真正的掌握,只學(xué)習(xí)理論有些東西是很難理解的,更談不上掌握。</p><p><b> 參考文獻</b></p><p><b> 【1】作著:姜濤</b></p><p> 【2】書名:基于單片機的數(shù)字式溫度計設(shè)計</p
75、><p> 【3】出版社:西北電力學(xué)校</p><p> 【4】出版年月:2012.3.19</p><p><b> 【5】頁碼:27頁</b></p><p><b> 附錄一:仿真電路圖</b></p><p> 附錄二:系統(tǒng)程序清單</p><
76、;p> #include<reg52.h></p><p> #include<intrins.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> //------------------
77、-----</p><p> sbit S1=P2^0; //設(shè)置 上下限</p><p> sbit S2=P2^1; //加</p><p> sbit S3=P2^2; //減</p><p> //--------LCD1602-------------------</p><p&
78、gt; //P0-7==== D0-7</p><p> #define LCDDATA P1</p><p> sbit rs=P3^0;</p><p> sbit wela=P3^1;</p><p> sbit lcden=P3^2;</p><p> //---------------------
79、-------------</p><p> sbit DQ1=P2^3; //傳感器1</p><p> sbit LED1=P2^6; //報警顯示燈</p><p> sbit BUZ=P2^7; //蜂鳴器</p><p> uchar DQ1_SET[2]; //DQ1上下限設(shè)置
80、 DQ1_SET[0] 下限 DQ1_SET[1] 上限;</p><p> uchar Temp; //溫度報警</p><p> uchar count; //蜂鳴器定時用</p><p> uchar mode; //mode=1正常顯示 mode=2 設(shè)置下限模式 mode=3設(shè)置上限 </p><
81、;p> uchar code table[]="Temper ";</p><p> //////////////////////////////DS18B20////////////////////////////////////////////////</p><p> uchar ng; //負號標志</p><p
82、> uchar code df_Table[]= </p><p><b> {</b></p><p> 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9</p><p> }; //溫度小數(shù)位對照表</p><p> uchar CurrentT = 0; /
83、/當前讀取的溫度整數(shù)部分</p><p> uchar Temp_Value[]={0x00,0x00}; //從DS18B20讀取的溫度值</p><p> uchar Display_Digit[]={0,0,0,0,0,0,0,0};//待顯示的各溫度數(shù)位</p><p> bit DS18B20_IS_OK = 1; //傳感器正常&
84、lt;/p><p> ////////////////////////////////DS18B20///////////////////////////////////////////////</p><p><b> //延時</b></p><p> //*****************************************
85、*******************************/</p><p> // 函數(shù): LCD_Delay()</p><p> // 描述: 延時t ms函數(shù)</p><p><b> // 參數(shù): t </b></p><p><b> // 返回: 無</b></p&g
86、t;<p> // 備注: 12MHZ t=1延時時間約1ms</p><p> // 版本: 2011/01/01 First version</p><p> //************************************************************************/</p><p
87、> void Delay_ms(unsigned int t)</p><p><b> {</b></p><p> unsigned int i,j;</p><p> for(i=0;i<t;i++)</p><p> for(j=0;j<120;j++)</p><
88、p><b> ;</b></p><p><b> }</b></p><p> void Delay(uint x)</p><p><b> {</b></p><p> while(--x);</p><p><b>
89、}</b></p><p> //---------------1602--------------------------------------</p><p> void delayms(uint z) //延時N ms</p><p><b> {</b></p><p><b&g
90、t; uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=120;y>0;y--);</p><p><b> }</b></p><p> void write_com(uchar com) //1602液晶寫指令<
91、/p><p><b> {</b></p><p><b> rs=0;</b></p><p><b> lcden=0;</b></p><p> LCDDATA=com;</p><p> delayms(1);</p><
92、;p><b> lcden=1;</b></p><p> delayms(2);</p><p><b> lcden=0;</b></p><p><b> }</b></p><p> void write_date(uchar date) //1602
93、液晶寫數(shù)據(jù)</p><p><b> { </b></p><p><b> rs=1;</b></p><p><b> lcden=0;</b></p><p> LCDDATA=date;</p><p> delayms(1);&l
94、t;/p><p><b> lcden=1;</b></p><p> delayms(2);</p><p><b> lcden=0;</b></p><p><b> }</b></p><p> void init_lcd(void)
95、 //初始化液晶,及畫面初始化</p><p><b> {</b></p><p> uchar num;</p><p><b> wela=0;</b></p><p><b> lcden=0;</b></p><p>
96、 write_com(0x38);</p><p> write_com(0x0c);</p><p> write_com(0x06);</p><p> write_com(0x01);</p><p> write_com(0x80);</p><p> for(num=0;num<13;num
97、++) // " temper: ";</p><p><b> {</b></p><p> write_date(table[num]);</p><p> Delay(10);</p><p><b> } </b></p>&l
98、t;p><b> }</b></p><p> //-------------1602----------------------------------------</p><p> //初始化DS18B20</p><p> uchar Init_DS18B20()</p><p><b>
99、 {</b></p><p> uchar status;</p><p><b> DQ1 = 1;</b></p><p> Delay(8); //延時</p><p><b> DQ1 = 0;</b></p><p> Delay(90);/
100、/延時</p><p><b> DQ1 = 1;</b></p><p><b> Delay(8);</b></p><p> status = DQ1;</p><p> Delay(100);</p><p><b> DQ1 = 1;</b
101、></p><p> return status;</p><p><b> }</b></p><p><b> //讀一個字節(jié)</b></p><p> uchar ReadOneByte()</p><p><b> {</b>&l
102、t;/p><p> uchar i,dat=0;</p><p><b> DQ1 = 1;</b></p><p><b> _nop_();</b></p><p> for(i=0;i<8;i++)</p><p><b> {</b>
103、</p><p><b> DQ1 = 0;</b></p><p> dat >>= 1;</p><p><b> DQ1 = 1;</b></p><p><b> _nop_();</b></p><p><b>
104、 _nop_();</b></p><p><b> if(DQ1)</b></p><p> dat |= 0X80;</p><p> Delay(30);</p><p><b> DQ1 = 1;</b></p><p><b> }&
105、lt;/b></p><p> return (dat); </p><p><b> }</b></p><p><b> //寫一個字節(jié)</b></p><p> void WriteOneByte(uchar dat)</p><p><b>
106、 {</b></p><p><b> uchar i;</b></p><p> for(i=0;i<8;i++)</p><p> { DQ1 = 0;</p><p> DQ1 = dat& 0x01;</p><p><b> Delay(5
107、);</b></p><p><b> DQ1 = 1;</b></p><p> dat >>= 1;</p><p><b> } </b></p><p><b> }</b></p><p><b>
108、//讀溫度值</b></p><p> void Read_Temperature()</p><p><b> { EA=0;</b></p><p> if(Init_DS18B20()==1)</p><p> DS18B20_IS_OK=0;</p><p><
109、;b> else</b></p><p><b> { </b></p><p> WriteOneByte(0xcc); //跳過序列號</p><p> WriteOneByte(0x44); //啟動溫度轉(zhuǎn)換</p><p> Init_DS18B20();</p>
110、<p> WriteOneByte(0xcc);//跳過序列號</p><p> WriteOneByte(0xbe);//讀取溫度寄存器</p><p> Temp_Value[0] = ReadOneByte(); //溫度低8位</p><p> Temp_Value[1] = ReadOneByte();//溫度高8位</p>
111、<p> DS18B20_IS_OK=1;</p><p><b> }</b></p><p><b> EA=1;</b></p><p><b> }</b></p><p><b> //處理溫度值</b></p>
112、;<p> void Display_Temperature()</p><p><b> {</b></p><p> // uchar i;</p><p> uchar t = 150;//,延時</p><p> ng = 0; //與負值標志</p><p>
113、 if((Temp_Value[1]&0xf8)==0xf8)</p><p><b> {</b></p><p> Temp_Value[1] = ~Temp_Value[1];</p><p> Temp_Value[0] = ~Temp_Value[0]+1;</p><p> if(Temp_V
114、alue[0]==0x00)</p><p> Temp_Value[1]++;</p><p><b> ng = 1;</b></p><p><b> }</b></p><p> else{ng = 0;}</p><p> Display_Digit[0
115、] = df_Table[Temp_Value[0]&0x0f]; //查表得溫度小數(shù)部分</p><p> CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4); //溫度整數(shù)部分</p><p> Display_Digit[3] = CurrentT/100
116、; //百</p><p> Display_Digit[2] = CurrentT%100/10; //十</p><p> Display_Digit[1] = CurrentT%10; //個</p><p> Temp=CurrentT ; //報警溫度</p><p> if(ng == 1){Temp=0
117、;}//當溫度為負時,報警判斷溫度寄存器為0</p><p><b> }</b></p><p> void DIS_1602(void)//在LED上顯示數(shù)據(jù)</p><p><b> {</b></p><p> write_com(0x80+8); /
118、/恒溫溫度</p><p><b> if(ng==0)</b></p><p> {write_date(0x30+Display_Digit[3]);}else{write_date('-');}; </p><p> write_date(0x30+Display_Digit[2]);</p><
119、p> write_date(0x30+Display_Digit[1]);</p><p> write_date('.');</p><p> write_date(0x30+Display_Digit[0]);</p><p> write_date('C');</p><p> write
120、_com(0x80+0X40+0); //恒溫溫度</p><p> write_date(' ');</p><p> write_date(' ');</p><p> write_date(' '); </p><p> write_date(
121、9; ');</p><p> write_date(' ');</p><p> write_date(' ');</p><p> write_date(' ');</p><p> write_date(' ');</p><p>
122、 write_date(' ');</p><p> write_date(' ');</p><p> write_date(' ');</p><p> write_date(' ');</p><p> write_date(' ');</p&
123、gt;<p><b> }</b></p><p> void DIS_SET_SEG(void)//在LED上顯示數(shù)據(jù)</p><p><b> {</b></p><p> Display_Digit[7]=DQ1_SET[0]%100/10; //處理顯示溫度//下限設(shè)置顯示</p>
124、;<p> Display_Digit[6]=DQ1_SET[0]%10; </p><p> Display_Digit[5]=DQ1_SET[1]%100/10; //處理顯示溫度/上限設(shè)置顯示</p><p> Display_Digit[4]=DQ1_SET[1]%10; </p><p> write_com(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 51單片機溫度測量與控制系統(tǒng)畢業(yè)論文
- 畢業(yè)論文——mcs-51單片機溫度控制系統(tǒng)
- 基于單片機的溫度控制系統(tǒng)設(shè)計畢業(yè)論文
- 基于單片機溫度控制系統(tǒng)的設(shè)計畢業(yè)論文
- 基于單片機的溫度控制系統(tǒng)設(shè)計畢業(yè)論文
- 基于單片機的溫度控制系統(tǒng)設(shè)計畢業(yè)論文
- 基于單片機的溫度控制系統(tǒng)設(shè)計畢業(yè)論文
- 基于單片機的溫度控制系統(tǒng)設(shè)計畢業(yè)論文
- 基于單片機的溫度控制系統(tǒng)設(shè)計畢業(yè)論文
- 基于單片機的溫度控制系統(tǒng)畢業(yè)論文
- 畢業(yè)論文--基于單片機的溫度控制系統(tǒng)
- 基于單片機的溫度控制系統(tǒng)畢業(yè)論文
- 畢業(yè)論文設(shè)計基于單片機溫度控制系統(tǒng)的設(shè)計
- 基于單片機的溫度控制系統(tǒng)設(shè)計畢業(yè)論文
- 畢業(yè)論文 基于單片機的溫度控制系統(tǒng)設(shè)計
- 畢業(yè)論文-單片機溫度控制系統(tǒng)
- 畢業(yè)論文--基于單片機的溫度控制系統(tǒng)
- 畢業(yè)論文-單片機溫度控制系統(tǒng)
- 單片機溫度控制系統(tǒng)畢業(yè)論文
- 基于單片機原理溫度控制系統(tǒng)的設(shè)計畢業(yè)論文
評論
0/150
提交評論