版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 基于STC8952單片機的溫度采集系統(tǒng)設(shè)計</p><p> STC8952-based MCU design of the temperature acquisition system</p><p><b> 摘要</b></p><p> 單片機已在各行業(yè)得到廣泛應(yīng)用,為適應(yīng)更多的應(yīng)用領(lǐng)域,廠家采取了在一塊單片機芯
2、片上集成多種功能部件和大容量存儲器的方法。因而,整個應(yīng)用系統(tǒng)不需要擴展,而體積變小、可靠性增高,使單片機成為真正意義上的單片機系統(tǒng)。</p><p> 本設(shè)計是基于STC89C52單片機和DS185B20實現(xiàn)溫度的測量系統(tǒng),單片機在本系統(tǒng)中作為溫度輸入和顯示控制器件,DS18B20被用作溫度數(shù)據(jù)的采集和溫度輸出器件。本系統(tǒng)采用單總線操作,線路簡單,測量值精確,可實現(xiàn)多點測量,并對溫度超過限制值,產(chǎn)生報警和數(shù)據(jù)采
3、集。本系統(tǒng)被廣泛應(yīng)用于溫度控制、溫度檢測、溫度采、消防等系統(tǒng)中。</p><p> 關(guān)鍵詞 單片機;數(shù)據(jù)轉(zhuǎn)換;溫度顯示;</p><p><b> 目 錄</b></p><p><b> 1 緒論1</b></p><p> 1.1 本系統(tǒng)功能1</p>&l
4、t;p> 1.1.1 溫度測量功能1</p><p> 1.1.2 溫度采集功能1</p><p> 1.1.3 系統(tǒng)工作流程1</p><p> 1.2 本系統(tǒng)優(yōu)點2</p><p> 1.2.1 線路簡單2</p><p> 1.2.2溫度精確2</p><p>
5、; 2 系統(tǒng)硬件介紹2</p><p> 2.1本系統(tǒng)硬件和軟件組成2</p><p> 2.1.1 硬件組成2</p><p> 2.1.2軟件組成2</p><p> 2.2 STC單片機介紹3</p><p> 2.2.1 STC單片機功能介紹3</p><p>
6、 2.3 DS18B20數(shù)字溫度傳感器介紹6</p><p> 2.3.1 功能介紹6</p><p> 2.3.2 DS18B20溫度傳感器是存儲器8</p><p> 2.3.3 DS18B20內(nèi)部邏輯圖10</p><p> 2.3.4 DS18B20溫度傳感器讀寫時序10</p><p>
7、2.3.5 DS18B20存儲器操作命令12</p><p> 2.4 74HC573鎖存器說明13</p><p> 2.4.1 74HC573管腳功能圖13</p><p> 2.4.2 74HC573管腳功能13</p><p> 2.5顯示模塊說明14</p><p> 2.5.1 71LE
8、D數(shù)碼管內(nèi)部結(jié)構(gòu)14</p><p> 2.5.2共陽數(shù)碼管數(shù)字編碼15</p><p> 3 程序的編寫與調(diào)試15</p><p> 3.1 程序的編寫15</p><p> 3.1.1 新建工程16</p><p> 3.1.2編寫程序16</p><p> 3.2
9、程序的調(diào)試17</p><p> 4 系統(tǒng)原理圖的繪制18</p><p> 4.1 繪制原理圖庫18</p><p> 4.1.1軟件啟動18</p><p> 4.1.2繪制原理圖元件19</p><p> 4.2 繪制PCB庫19</p><p> 4.2.1 繪制
10、PCB元件20</p><p> 4.3 系統(tǒng)完整原理圖20</p><p> 5 系統(tǒng)PCB圖21</p><p> 5.1 為覆銅PCB圖21</p><p> 5.2覆銅PCB圖21</p><p> 6 系統(tǒng)工作過程22</p><p> 6.1 溫度的測量22
11、</p><p> 6.2 溫度的采集23</p><p> 7 程序框圖及C語言程序24</p><p> 7.1溫度采集系統(tǒng)原理框圖24</p><p> 7.1.1溫度顯示模塊24</p><p> 7.1.2讀溫度子程序25</p><p> 7.1.3溫度轉(zhuǎn)換子程
12、序25</p><p> 7.1.4計算溫度子程序26</p><p> 7.2溫度采集系統(tǒng)C語言程序26</p><p><b> 結(jié)論35</b></p><p><b> 致謝36</b></p><p><b> 參考文獻37</
13、b></p><p><b> 1 緒論</b></p><p><b> 1.1 系統(tǒng)功能</b></p><p> 1.1.1 溫度測量功能</p><p> 利用DS18B20數(shù)字溫度傳感器實現(xiàn)對溫度進行準確的測量,使溫度值顯示到數(shù)碼管上。</p><p>
14、; 1.1.2 溫度采集功能</p><p> 利用DS18B20數(shù)字溫度傳感器進行溫度的采集,單片機作為控制器件,數(shù)據(jù)通過串口(RS232)傳至計算機,進行溫度的采集。</p><p> 1.1.3系統(tǒng)工作流程,見圖1-1</p><p> 圖1-1系統(tǒng)工作流程</p><p><b> 1.2 本系統(tǒng)優(yōu)點</b&
15、gt;</p><p> 1.2.1 線路簡單</p><p> DS18B20與單片機之間一根導(dǎo)線進行數(shù)據(jù)傳輸,不需要對數(shù)據(jù)進行轉(zhuǎn)換,接線簡單。</p><p> 1.2.2 溫度測量準確</p><p> DS18B20的溫度分辨率為0.0625,所以對溫度值可以進行準確的溫度轉(zhuǎn)換。</p><p><
16、;b> 2系統(tǒng)硬件介紹</b></p><p> 2.1系統(tǒng)硬件及軟件組成</p><p><b> 2.1.1硬件組成</b></p><p> 本系統(tǒng)所用的硬件有:見表2-1。</p><p> 表2-1系統(tǒng)硬件清單</p><p><b> 2.1.2
17、軟件組成</b></p><p> 軟件有:keil軟件、windows操作系統(tǒng)和串口調(diào)試助手等軟件組成。</p><p> 2.2 STC單片機介紹</p><p> 單片機作為微型計算機的一個重要分支,其應(yīng)用范圍很廣,發(fā)展也很快。1971年Intel公司首次宣布4004的4位微處理器,1974年12月Fairchild(仙童)公司即推出了8位
18、單片機F8,開創(chuàng)了單片機的門戶。</p><p> 單片機在我國的應(yīng)用始于20世紀70年代末,那時我國的科研工作者開始對單片機的應(yīng)用進行了初期探索,20世紀80年代,單片機在我國得以廣泛的應(yīng)用,各理工科院校陸續(xù)開設(shè)了有關(guān)應(yīng)用課程。在教學(xué)及應(yīng)用上,Zilog公司生產(chǎn)的Z80CPU成為我國工業(yè)控制的主流,以Z80為CPU組成的TP801單板機在教學(xué)上及應(yīng)用領(lǐng)域發(fā)揮過巨大作用。20世紀80年代末至90年代初,我國在工
19、業(yè)控制領(lǐng)域開始轉(zhuǎn)向使用Intel公司生產(chǎn)的MCS-51。</p><p> 單片機從1976年公布8位機至今不到30年的時間,它沒有像微處理器那樣從8位、16位,一直發(fā)展到32位、64位,8位機目前依然是單片機的主流機型。但是,它突破了原有的集成結(jié)構(gòu),在內(nèi)部繼承了越來越多的外圍電路和外設(shè)接口,從而發(fā)展成為控制器(MicroController)的體系結(jié)構(gòu),其發(fā)展歷程大致分為以下幾步:</p>&l
20、t;p> 第一階段:單片機的控索階段</p><p> 第二階段:單片機的完善階段</p><p> 第三階段:8位單片機的鞏固發(fā)展及16位單片機的推出階段</p><p> 第四階段:微控制器的全面發(fā)展階段</p><p> 單片機已在各行業(yè)得到廣泛應(yīng)用,為適應(yīng)更多的應(yīng)用領(lǐng)域,廠家采取了在一塊單片機芯片上集成多種功能部件和大
21、容量存儲器的方法。因而,整個應(yīng)用系統(tǒng)不需要擴展,而體積變小、可靠性增高,使單片機成為真正意義上的單片機系統(tǒng)</p><p> 2.2.1 STC單片機功能介紹</p><p> 單片機是隨著大規(guī)模集成電路的出現(xiàn)極其發(fā)展,將計算機的CPU,RAM,ROM,定時/計數(shù)器和多種I/O接口集成在一片芯片上,形成了芯片級的計算機,因此單片機早期的含義稱為單片微型計算機(single chipmi
22、crocomputer).它擁有優(yōu)異的性價比、集成度高、體積小、可靠性高、控制功能強、低電壓、低功耗的顯著優(yōu)點.主要應(yīng)用于智能儀器儀表、工業(yè)檢測控制、機電一體化等方面,并且取得了顯著的成果.單片機應(yīng)用系統(tǒng)可以分為:(1)最小應(yīng)用系統(tǒng)是指能維持單片機運行的最簡單配置的系統(tǒng)。這種系統(tǒng)成本低廉,結(jié)構(gòu)簡單,常構(gòu)成一些簡單的控制系統(tǒng),如開關(guān)狀態(tài)的輸入/輸出控制等。片內(nèi)有ROM/EPROM的單片機,其最小應(yīng)用系統(tǒng)即為配有晶振,復(fù)位電路,電源的單個單
23、片機.片內(nèi)無ROM/EPROM的單片機,其最小應(yīng)用系統(tǒng)除了外部配置晶振,復(fù)位電路,電源外,還應(yīng)外接EPROM或EEPROM作為程序存儲器用.(2)最小功耗應(yīng)用系統(tǒng)是指為了保證正常運行,系統(tǒng)的功耗最小.(3)典型應(yīng)用系統(tǒng)是指單片機要完成工業(yè)測控功能所必須的硬件結(jié)構(gòu)系統(tǒng)。</p><p> STC89C52 是一種低功耗、高性能 CMOS8 位微控制器,具有</p><p> 8K 在系統(tǒng)
24、可編程 Flash 存儲器。使用 Atmel 公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上 Flash 允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的 8 位 CPU 和在系統(tǒng)可編程 Flash,使得 STC89C52 為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。STC89C52 具有以下標準功能: 8k 字節(jié) Flash,256 字節(jié) RAM,32 位 I/O 口線,
25、看門狗定時器,2 個數(shù)據(jù)指針,三個 16 位定時器/計數(shù)器一個 6 向量 2 級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外,STC89C52 可降至 0Hz 靜態(tài)邏輯操作,支持 2 種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許 RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM 內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復(fù)位為止。</p><p> 2.2
26、.1.1引腳結(jié)構(gòu),見圖2-1</p><p> 圖2-1單片機封裝及引腳結(jié)構(gòu)</p><p> 2.2.1.2內(nèi)部邏輯圖,見圖2-2</p><p><b> 圖2-2內(nèi)部邏輯圖</b></p><p> 2.2.1.3 引腳功能描述</p><p><b> VCC :電源&
27、lt;/b></p><p><b> GND:地</b></p><p> P0 口:P0 口是一個 8 位漏極開路的雙向 I/O 口。作為輸出口,每位能驅(qū)動 8 個 TTL 邏</p><p> 輯電平。對 P0 端口寫“1”時,引腳用作高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲器時,P0 口也被作為低 8 位地址/數(shù)據(jù)復(fù)用。在這種模
28、式下,P0 具有內(nèi)部上拉電阻。在 flash 編程時,P0 口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。</p><p> P1 口:P1 口是一個具有內(nèi)部上拉電阻的 8 位雙向 I/O 口,p1 輸出緩沖器能驅(qū)動 4 個TTL 邏輯電平。對 P1 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(
29、IIL)。此外,P1.0 和 P1.2 分別作定時器/計數(shù)器 2 的外部計數(shù)輸入(P1.0/T2)和時器/計數(shù)器 2的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。在 flash 編程和校驗時,P1 口接收低 8 位地址字。</p><p> P2 口:P2 口是一個具有內(nèi)部上拉電阻的 8 位雙向 I/O 口,P2 輸出緩沖器能驅(qū)動 4 個TTL邏輯電平。對P2端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此
30、時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用 16 位地址讀取外部數(shù)據(jù)存儲器(例如執(zhí)行 MOVX @DPTR)時, P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強的內(nèi)部上拉發(fā)送 1。在使用8 位地址(如 MOVX @RI)訪問外部數(shù)據(jù)存儲器時,P2 口輸出 P2 鎖存器的內(nèi)容。在 flash 編程和校驗時,P2 口也接收高
31、8 位地址字節(jié)和一些控制信號。</p><p> P3 口:P3 口是一個具有內(nèi)部上拉電阻的 8 位雙向 I/O 口,p2 輸出緩沖器能驅(qū)動 4 個TTL 邏輯電平。對 P3 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3 口亦作為 STC89C52 特殊功能(第二功能)使用,如下表所示。在 flash 編程和校驗時
32、,P3 口也接收一些控制信號。</p><p> RST:復(fù)位輸入。晶振工作時,RST 腳持續(xù) 2 個機器周期高電平將使單片機復(fù)位。看門狗計時完成后,RST 腳輸出 96 個晶振周期的高電平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能無效。DISRTO 默認狀態(tài)下,復(fù)位高電平有效。</p><p> ALE/PROG:地址鎖存控制信號(ALE)是訪問外部程
33、序存儲器時,鎖存低8位地址的輸出脈沖。在 flash 編程時,此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調(diào),在每次訪問外部數(shù)據(jù)存儲器時,ALE 脈沖將會跳過。如果需要,通過將地址為 8EH 的 SFR 的第 0 位置“1”,ALE 操作將無效。這一位置“1”,ALE 僅在執(zhí)行 MOVX 或 MOVC 指令時有效。否則,ALE 將被微弱拉
34、高。這個 ALE 使能標志位地址為 8EH 的 SFR 的第 0 位)的設(shè)置對微控制器處于外部執(zhí)行模式下無效。</p><p> PSEN:外部程序存儲器選通信號PSEN是外部程序存儲器選通信號。當(dāng) STC89C52 從外部程序存儲器執(zhí)行外部代碼時,PSEN 在每個機器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲器時,PSEN 將不被激活。 </p><p> XTAL1:
35、振蕩器反相放大器和內(nèi)部時鐘發(fā)生電路的輸入端。</p><p> XTAL2:振蕩器反相放大器的輸出端。</p><p> 2.3 DS18B20數(shù)字溫度傳感器介紹</p><p> 2.3.1 功能介紹</p><p> DALLAS最新單線數(shù)字溫度傳感器DS18B20的“一線器件”體積更小、適用電壓更寬、更經(jīng)濟 Dallas 半導(dǎo)
36、體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持 “一線總線”接口的溫度傳感器。一線總線獨特而且經(jīng)濟的特點,使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測量系統(tǒng)的構(gòu)建引入全新概念。DS18B20、 DS1822 “一線總線”字化溫度傳感器 同DS1820一樣,DS18B20也 支持“一線總線”接口,測量溫度范圍為 -55°C~+125°C,-10~+85°C范圍內(nèi),精度為±0.5°C。DS18
37、22的精度較差為± 2°C ?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小。 DS18B20、 DS1822 的特性 DS18B20可以程序設(shè)定9~12位的分辨率,精度為±0.5°C???/p>
38、選更小的方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報警溫度存儲在EEPROM中,掉電依然保</p><p> 表2-1DS18B20內(nèi)部溫度表示形式</p><p> 這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1
39、,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。</p><p> 例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。見表2-2</p><p> 表2-2DS18B20轉(zhuǎn)化溫度形式</p><p> 2.3.2 DS18B20溫度傳感器的存儲器
40、</p><p> DS18B20溫度傳感器的內(nèi)部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的E2PPRAM,后者存放高溫度和低溫度觸發(fā)器TH、T和結(jié)構(gòu)寄存器。暫存存儲器包含了8個連續(xù)字節(jié),前兩個字節(jié)是測得的溫度信息,第一個字節(jié)的內(nèi)容是溫度的低八位,第二個字節(jié)是溫度的高八位。第三個和第四個字節(jié)是TH、TL的易失性拷貝,第五個字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個字節(jié)的內(nèi)容在每一次上電復(fù)位時被刷新。第六、
41、七、八個字節(jié)用于內(nèi)部計算。第九個字節(jié)是冗余檢驗字節(jié),見表2-3。</p><p> 表2-3DS18B20暫存存儲器的8個連續(xù)字節(jié)</p><p> 該字節(jié)各位的意義如下: TM R1 R0 1 1 1 1 1 低五位一直都是1 ,TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設(shè)置為0,用戶不要去改動。R1和R0用來設(shè)置分辨率,如下表所
42、示:(DS18B20出廠時被設(shè)置為12位),見表2-4</p><p> 表2-4分辨率設(shè)置表</p><p> 根據(jù)DS18B20的通訊協(xié)議,主機控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18
43、B20收到信號后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號表示復(fù)位成功。 DS1820使用中注意事項DS1820雖然具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點,但在實際應(yīng)用中也應(yīng)注意以下幾方面的問題: (1)較小的硬件開銷需要相對復(fù)雜的軟件進行補償,由于DS1820與微處理器間采用串行數(shù)據(jù)傳送,因此,在對DS1820進行讀寫編程時,必須嚴格的保證讀寫時序,否則將無法讀取測溫結(jié)果。在使用P
44、L/M、C等高級語言進行系統(tǒng)程序計時,對DS1820操作部分最好采用匯編語實現(xiàn)。 (2)在DS1820的有關(guān)資料中均未提及單總線上所掛DS1820數(shù)量問題,容易使人誤認為可以掛任意多個DS1820,在實際應(yīng)用中并非如此。當(dāng)單總線上所掛DS1820超過8個時,就需要解決微處理器的總線驅(qū)動</p><p> 2.3.3 DS18B20的內(nèi)部邏輯圖,見圖2-3。</p><p> 圖2-3D
45、S18B20內(nèi)部內(nèi)部邏輯圖</p><p> 2.3.4 DS18B20讀寫時序</p><p> 主機使用時間隙(time slots)來讀寫 DSl820 的數(shù)據(jù)位和寫命令字的位</p><p> 2.3.4.1初始化</p><p> 時序見圖 2-4主機總線 to 時刻發(fā)送一復(fù)位脈沖(最短為 480us 的低電平信號)接著在
46、tl 時刻釋放總線并進入接收狀態(tài)DSl820 在檢測到總線的上升沿之后 等待 15-60接著 DS1820 在 t2 時刻發(fā)出存在脈沖(低電平持續(xù) 60-240 us)如圖中虛線所示</p><p> 圖2-4DS18B20初始化時序圖</p><p><b> 程序:</b></p><p> Init_DS18B20(void)//
47、初始化ds1820</p><p><b> {</b></p><p> DQ = 1; //DQ復(fù)位</p><p><b> _nop_();</b></p><p> _nop_(); //稍做延時2ms</p><p> DQ = 0;
48、 //單片機將DQ拉低,發(fā)出復(fù)位脈沖(要求480us~960us)</p><p> Delay(70); //精確延時566us</p><p> DQ = 1; //拉高總線(要求16~60us)</p><p> Delay(5); //延時46us</p><p> presence =
49、DQ; //如果=0則初始化成功 =1則初始化失敗</p><p> Delay(25);</p><p><b> DQ = 1; </b></p><p> return(presence); //返回信號,0=presence,1= no presence</p><p><b> }&l
50、t;/b></p><p> 2.3.4.2寫時間隙</p><p> 當(dāng)主機總線 t o 時刻從高拉至低電平時 就產(chǎn)生寫時間隙從 to 時刻開始 15us 之內(nèi)應(yīng)將所需寫的位送到總線DSl820 在 t1為15-60us 間對總線采樣 若低電平 寫入的位是 0見若高電平 寫入的位是連續(xù)寫 2 位間的間隙應(yīng)大于 1us ,見圖2-5。 </p><p>&
51、lt;b> 圖2-5寫時間隙</b></p><p><b> 程序:</b></p><p> WriteOneChar(unsigned char dat)</p><p><b> {</b></p><p> unsigned char i=0;</p>
52、;<p> for (i=8; i>0; i--)</p><p><b> {</b></p><p><b> DQ = 0;</b></p><p> DQ = dat&0x01;</p><p><b> delay(5);</b>
53、</p><p><b> DQ = 1;</b></p><p><b> dat>>=1;</b></p><p><b> }</b></p><p><b> }</b></p><p> 2.3.4.
54、3讀時間隙</p><p> 見圖 2-6 主機總線 to 時刻從高拉至低電平時總線只須保持低電平 l 7ts之后15捍 s也就是說t z 時刻前主機必須完成讀位 并在 t o 后的 60 尸 s 一 120 fzs 內(nèi)釋放總線</p><p> 讀位子程序(讀得的位到 C 中) </p><p><b> 圖2-6讀時序</b><
55、;/p><p><b> 程序:</b></p><p> ReadOneChar(void)</p><p><b> {</b></p><p> unsigned char i=0;</p><p> unsigned char dat = 0;</p>
56、;<p> for (i=8;i>0;i--)</p><p><b> {</b></p><p> DQ = 0; // 給脈沖信號</p><p><b> dat>>=1;</b></p
57、><p> DQ = 1; // 給脈沖信號</p><p><b> if(DQ)</b></p><p> dat|=0x80;</p><p><b> delay(4);</b></p>&
58、lt;p><b> }</b></p><p> return(dat);</p><p><b> }</b></p><p> 2.3.5存儲器操作命令,見表2-5</p><p> 表2-5存儲器操作命令</p><p> 2.4 鎖存器74HC573
59、</p><p> 74HC573為八進制3態(tài)非反轉(zhuǎn)透明鎖存器且跟LS/AL573 的管腳一樣。器件的輸入是和標準CMOS 輸出兼容的;加上拉電阻,他們能和LS/ALSTTL 輸出兼容。 當(dāng)鎖存使能端為高時,這些器件的鎖存對于數(shù)據(jù)是透明的(也就是說輸出同步)。當(dāng)鎖存使能變低時,符合建立時間和保持時間的數(shù)據(jù)會被鎖存。</p><p> 輸出能直接接到CMOS,NMOS 和TTL 接
60、口上</p><p> 操作電壓范圍:2.0V~6.0V</p><p> 低輸入電流:1.0uA</p><p> CMOS 器件的高噪聲抵抗特性</p><p> 2.4.1管腳功能見圖2-7</p><p><b> 圖2-7管腳功能</b></p><p>
61、; 2.4.2 74HC573功能,見表2-6</p><p> 表2-6 74H573N真值表</p><p><b> 2.5顯示模塊</b></p><p> LED數(shù)碼管正向壓降一般為1.5~2V,額定電流為10mA,最大電流為40mA。本設(shè)計采用4位共陽LED數(shù)碼管,從P0口輸出段碼,列掃描用還用P0口來實現(xiàn)。</p&g
62、t;<p> 2.5.1LED數(shù)碼管內(nèi)部結(jié)構(gòu),見圖2-8。</p><p> 圖2-8LED共陽數(shù)碼管內(nèi)部結(jié)構(gòu)</p><p> 2.5.2共陽數(shù)碼管數(shù)字編碼,見表2-7</p><p> 表2-7:共陽數(shù)碼管數(shù)字編碼</p><p> 3 程序的編寫與調(diào)試</p><p><b>
63、 3.1 程序的編寫</b></p><p> 本系統(tǒng)軟程序采用C語言編寫,所用軟件位keil,見圖3-1。</p><p> 圖3-1keil軟件編程界面</p><p><b> 3.1.1新建工程</b></p><p> 打開keil軟件,單擊project->new project—&
64、gt;輸入工程名—>選擇相應(yīng)單片機,</p><p><b> 見圖3-2。</b></p><p><b> 圖3-2新建工程</b></p><p><b> 3.1.2編寫程序</b></p><p> 根據(jù)電路編寫程序,見圖3-3。</p>
65、<p><b> 圖3-3編寫程序</b></p><p><b> 3.2調(diào)試程序</b></p><p> 編譯程序,檢查錯誤。如果沒有錯誤,按Ctrl+F5進行程序調(diào)試,見圖3-4。</p><p><b> 圖3-4調(diào)試程序</b></p><p>&
66、lt;b> 4 繪制系統(tǒng)原理圖</b></p><p> 本系統(tǒng)是用altium designer 09 進行原理圖的繪制,放置元器件在放置元器件之前首先應(yīng)該繪制系統(tǒng)所用的原理圖庫和PCB庫。</p><p><b> 4.1繪制原理圖庫</b></p><p> 4.1.1打開軟件—>file—>new
67、—>library—>SCH library,見圖4-1。</p><p> 4.1.2繪制原理圖元件</p><p> 單擊Tool—>new compennent—>元件名—>繪制元件,見圖4-2。</p><p> 圖4-2繪制原理圖元件</p><p><b> 4.2繪制PCB庫<
68、;/b></p><p> 打開軟件—>file—>new—>library—>PCB library ,見圖4-3。</p><p> 圖4-3繪制PCB庫</p><p> 4.2.1繪制PCB元件</p><p> 單擊Tool—>new blank compennent—>元件名—&
69、gt;繪制元件,見圖4-4。</p><p> 圖4-4繪制PCB元件</p><p> 4.3系統(tǒng)完整原理圖,見圖4-5。</p><p> 圖4-5系統(tǒng)總原理圖</p><p><b> 5 系統(tǒng)PCB圖</b></p><p> 5.1未覆銅PCB圖,見圖5-1。</p>
70、;<p> 圖5-1未覆銅PCB</p><p> 5.2覆銅,見圖5-2。</p><p><b> 圖5-2覆銅PCB</b></p><p><b> 6 系統(tǒng)工作過程</b></p><p><b> 6.1 溫度的測量</b></p>
71、;<p> DS18B20數(shù)字溫度傳感器溫度數(shù)據(jù)以數(shù)字的形式傳至單片機,單片機將數(shù)據(jù)轉(zhuǎn)換成十進制,送到數(shù)碼管進行顯示,這也就完成了,溫度的測量,6-1。</p><p><b> 圖6-1溫度測量</b></p><p> 6.2溫度數(shù)據(jù)的采集</p><p> DS18B20數(shù)字溫度傳感器溫度數(shù)據(jù)以數(shù)字的形式傳至單片機,
72、單片機通過RS232將數(shù)據(jù)傳至計算機,由串口調(diào)試助手進行數(shù)據(jù)的記錄和顯示,見圖6-2。</p><p> 圖6-2溫度數(shù)據(jù)的采集</p><p> 7程序框圖及C語言程序</p><p> 7.1溫度采集系統(tǒng)原理框圖,見圖7-1</p><p> 圖7-1溫度采集系統(tǒng)原理框圖</p><p> 7.1.1溫度
73、顯示模塊</p><p> 顯示數(shù)據(jù)刷新子程序主要是對顯示緩沖器中的顯示數(shù)據(jù)進行刷新操作,當(dāng)最高顯示位為0時將符號顯示位移入下一位。程序流程,見圖7-2。</p><p><b> N </b></p><p><b> Y</b></p><p><b> N</b&g
74、t;</p><p><b> Y</b></p><p><b> Y </b></p><p> 圖7-2溫度顯示模塊流程圖</p><p> 7.1.2讀溫度子程序</p><p> 讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需要進行CRC校
75、驗,其程序流程,見圖7-2。</p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p> 圖7-3讀溫度子程序&
76、lt;/p><p> 7.1.3溫度轉(zhuǎn)換子程序</p><p> 溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,其子程序流程見圖7-4。</p><p> 圖7-4溫度轉(zhuǎn)換子程序流程</p><p> 7.1.4計算溫度子程序</p><p> 此程序?qū)AM中讀取值進行BCD碼的轉(zhuǎn)換運算并進行正負判定流程,見圖7
77、-5。</p><p><b> N</b></p><p><b> Y</b></p><p> 圖7-5計算溫度子程序流程</p><p> 7.2 溫度采集系統(tǒng)C語言程序</p><p> #include <reg52.h></p>
78、<p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit DS=P2^2;</p><p> sbit fm=P2^3; //define interface 定義 DS18B20 接口</
79、p><p> int temp; // 溫度變量</p><p> uchar flag1,count; // sign of the result positive or negative</p><p> sbit dula=P2^6;</p><p> sbit wela=P2^7;&l
80、t;/p><p> unsigned char code table[]={</p><p> 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//不帶小數(shù)點編碼。</p><p> unsigned char code table1[]={</p><p> 0x40,0x79,0x
81、24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //帶小數(shù)點編碼。</p><p> void delay(uint x) //delay</p><p><b> {</b></p><p> uchar i,j;</p><p> for(i=0;i<x;i++
82、)</p><p> for(j=0;j<200;j++);</p><p><b> }</b></p><p> //功能:串口初始化,波特率 9600,方式 1</p><p> void Init_Com(void) </p><p><b> {</
83、b></p><p> TMOD = 0x20;</p><p> PCON = 0x00;</p><p> SCON = 0x50;</p><p> TH1 = 0xFd; </p><p> TL1 = 0xFd; </p><p><b> TR1 = 1;
84、 </b></p><p><b> }</b></p><p> bit tmpreadbit(void) //read a bit讀一位</p><p><b> {</b></p><p><b> int i;</b></p>
85、;<p><b> bit dat;</b></p><p> DS=0;i++; //i++小延時一下</p><p> DS=1;i++;i++;</p><p><b> dat=DS;</b></p><p> i=8;while
86、(i>0)i--;</p><p> return (dat);</p><p><b> }</b></p><p> uchar tmpread(void) //讀一個字節(jié)</p><p><b> {</b></p><p> uchar i,j
87、,dat;</p><p><b> dat=0;</b></p><p> for(i=1;i<=8;i++)</p><p><b> { </b></p><p> j=tmpreadbit();</p><p> dat=(j<<7)|(d
88、at>>1); //讀出的數(shù)據(jù)最低位在最前面,這樣剛好</p><p> //一個字節(jié)在 DAT 里</p><p><b> } </b></p><p> return(dat); //將一個字節(jié)數(shù)據(jù)返回</p><p><b> }</b><
89、;/p><p> void tmpwritebyte(uchar dat) //寫一個字節(jié)到 DS18B20 里</p><p> { </p><p><b> int i;</b></p><p><b> char j
90、;</b></p><p> bit testb;</p><p> for(j=1;j<=8;j++)</p><p><b> { </b></p><p> testb=dat&0x01;</p><p> dat=dat>>1;</p&
91、gt;<p> if(testb) // 寫 1 部分</p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> DS=0; //寫
92、0 部分</p><p> i=8;while(i>0)i--;</p><p><b> DS=1; </b></p><p><b> i++;i++; </b></p><p><b> } </b></p><p><b>
93、; } </b></p><p><b> }</b></p><p> void tmpchange(void) //發(fā)送溫度轉(zhuǎn)換命令</p><p><b> {</b></p><p> dsreset(); //初始化 DS18B20<
94、/p><p> delay(1); //延時</p><p> tmpwritebyte(0xcc); //跳過序列號命令</p><p> tmpwritebyte(0x44); //發(fā)送溫度轉(zhuǎn)換命令</p><p><b> }</b></p><p> in
95、t tmp() //獲得溫度</p><p><b> {</b></p><p><b> float tt;</b></p><p> uchar a,b;</p><p> dsreset();</p><p><b>
96、delay(1);</b></p><p> temp<<=8; </p><p> temp=temp|a; //兩字節(jié)合成一個整型變量。</p><p> tt=temp*0.0625; //得到真實十進制溫度值,因為 DS18B20</p>&
97、lt;p> //可以精確到 0.0625 度,所以讀回數(shù)據(jù)的最低位代表的是</p><p> //0.0625 度。</p><p> temp=tt*10+0.5; //放大十倍,這樣做的目的將小數(shù)點后第一位</p><p> //也轉(zhuǎn)換為可顯示數(shù)字,同時進行一個四舍五入操作。</p><p> return temp;
98、 //返回溫度值</p><p><b> }</b></p><p> /*void readrom() //讀取溫度傳感器的序列號</p><p> { //本程序中沒有用到此函數(shù)</p><p> uchar sn1,sn2;</p
99、><p> dsreset();</p><p><b> delay(1);</b></p><p> tmpwritebyte(0x33);</p><p> sn1=tmpread();</p><p> sn2=tmpread();</p><p><b
100、> }*/</b></p><p> void display(int temp1) //顯示函數(shù)</p><p><b> {</b></p><p> char A1,A2,A3,A4,ser;</p><p> ser=temp1/10;</p><p><
101、;b> SBUF=ser;</b></p><p> if(ser>=30) </p><p><b> {</b></p><p><b> P0=~P0;</b></p><p><b> fm=~fm;</b></p>&l
102、t;p><b> delay(1);</b></p><p><b> }</b></p><p> if(ser<30)</p><p><b> {</b></p><p><b> P0=0xff;</b></p>
103、<p><b> fm=1;</b></p><p><b> }</b></p><p> if(temp1<0) //分離出四位要顯示的數(shù)字</p><p><b> {</b></p><p> temp1=~tem
104、p1;</p><p> A1=temp1/1000;</p><p> A2=temp1%1000/100;</p><p> A3=temp1%100/10;</p><p> A4=temp1%10;</p><p><b> P1=0x00;</b></p><
105、;p><b> wela=1;</b></p><p><b> a=0;</b></p><p><b> delay(8);</b></p><p><b> P1=0x00;</b></p><p><b> wela=1;
106、</b></p><p><b> wela=0;</b></p><p> P1=table[A2];</p><p><b> dula=1;</b></p><p><b> dula=0;</b></p><p><b&
107、gt; P1=0x02;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(8);</b></p><p><b> P1=0x00;</b&g
108、t;</p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p> P1=table1[A3];</p><p><b> dula=1;</b></p><p><b> du
109、la=0;</b></p><p><b> P1=0x04;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(8);</b></p
110、><p><b> P1=0x00;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p> P1=table[A4];</p><p><b> dula=1;<
111、;/b></p><p><b> dula=0;</b></p><p><b> P1=0x08;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><
112、p><b> elay(2);</b></p><p> temp1=~temp1;</p><p><b> }</b></p><p> else if(temp1>=1000)</p><p><b> {</b></p><p&
113、gt; A1=temp1/1000;</p><p> A2=temp1%1000/100;</p><p> A3=temp1%100/10;</p><p> A4=temp1%10;</p><p><b> P1=0x00;</b></p><p><b> wela
114、=1;</b></p><p><b> wela=0;</b></p><p><b> 8);</b></p><p><b> P1=0x00;</b></p><p><b> wela=1;</b></p>&l
115、t;p><b> wela=0;</b></p><p> P1=table[A2];</p><p><b> dula=1;</b></p><p><b> dula=0;</b></p><p><b> P1=0x02;</b>&
116、lt;/p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(8);</b></p><p><b> P1=0x00;</b></p><p>&
117、lt;b> wela=1;</b></p><p><b> wela=0;</b></p><p> P1=table1[A3];</p><p><b> dula=1;</b></p><p><b> dula=0;</b></p>
118、;<p><b> P1=0x04;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(8);</b></p><p><b>
119、 P1=0x00;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p> P1=table[A4];</p><p><b> dula=1;</b></p><p
120、><b> dula=0;</b></p><p><b> P1=0x08;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(2)
121、;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> A1=temp1/1000;</p><p> A2=temp1%1000/100
122、;</p><p> A3=temp1%100/10;</p><p> A4=temp1%10;</p><p> P1=table[A2];</p><p><b> dula=1;</b></p><p><b> dula=0;</b></p>
123、<p><b> P1=0x01;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(8);</b></p><p><b>
124、P1=0x00;</b></p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p> P1=table1[A3];</p><p><b> dula=1;</b></p><p&
125、gt;<b> wela=0;</b></p><p> P1=table[A4];</p><p><b> dula=1;</b></p><p><b> dula=0;</b></p><p><b> P1=0x04;</b></
126、p><p><b> wela=1;</b></p><p><b> wela=0;</b></p><p><b> delay(1);</b></p><p><b> }</b></p><p><b> }
127、</b></p><p> void main() //主函數(shù)</p><p><b> {</b></p><p><b> uchar a;</b></p><p> Init_Com();//初始化串口 </p>
128、<p><b> while(1) </b></p><p><b> { </b></p><p> tmpchange(); //溫度轉(zhuǎn)換</p><p> for(a=10;a>0;a--)</p><p><b> { </b&g
129、t;</p><p> display(tmp()); //顯示十次</p><p><b> } </b></p><p><b> } </b></p><p><b> }</b></p><p><b> 結(jié)論<
130、;/b></p><p> 本次用單片機設(shè)計的溫度數(shù)據(jù)采集系統(tǒng)終于完成了,在本次設(shè)計中,從采集元件,軟件設(shè)計,硬件焊結(jié),外觀到論文的編寫都是先查閱了大量資料,后確定,再經(jīng)老師指導(dǎo),最后經(jīng)過多天的不斷努力才完成的。在這次培訓(xùn)中,我切身感受到了動手實踐的重要性,這對我以后的學(xué)習(xí)工作將產(chǎn)生深遠影響。</p><p> 在本次設(shè)計研究和撰寫論文的過程中,我查閱了許多文獻資料,從中學(xué)到了很
131、多有關(guān)系統(tǒng)開發(fā)和程序調(diào)試方面等的知識。在軟件開發(fā)過程中掌握了一些技術(shù)難題的解決方法和技巧,鞏固和加深了所學(xué)知識的理解,能夠把所學(xué)的知識與實踐相結(jié)合,培養(yǎng)了認真嚴謹?shù)膶W(xué)習(xí)態(tài)度,為以后開發(fā)軟件積累了大量的經(jīng)驗,提高了分析問題和解決問題的能力。但是由于認識上的片面和不足,各方面的條件影響也很多,本設(shè)計還有待進一步的完善和優(yōu)化,這些在以后的學(xué)習(xí)中要注重積累。</p><p><b> 致謝</b>
132、</p><p> 感謝于**老師對我的指導(dǎo),他的嚴謹細致、一絲不茍的作風(fēng)一直是我工作、學(xué)習(xí)中的榜樣。她循循善誘的教導(dǎo)和不拘一格的思路給予我無盡的啟迪。無論是在課題的選題還是定稿、研究的方法、技術(shù)路線以及本文的撰寫都得到了xx老師的嚴格要求和精心指導(dǎo),于老師花費了大量的精力,在各個環(huán)節(jié)中給了我許多寶貴的意見。在這次培訓(xùn)中xx老師嚴謹?shù)膶W(xué)術(shù)作風(fēng)、治學(xué)態(tài)度、求實的工作作風(fēng)和孜孜不倦的探索創(chuàng)新精神,以及平易近人的師長
133、風(fēng)范給我創(chuàng)造了良好的學(xué)習(xí)設(shè)計環(huán)境,及給了我這個學(xué)習(xí)提高的機會和在生活上給我的無微不至的關(guān)懷。這些都是我不斷前進的動力,必將對我今后的學(xué)習(xí)和生活受益匪淺,我將終生學(xué)習(xí)和銘記。在此,謹向xx老師的培育之恩表示最深的謝意!</p><p> 感謝其他多位老師對我學(xué)習(xí)和設(shè)計所給予的支持和幫助。感謝在我論文完成過程中同學(xué)們給我提供的支持、幫助和建議。在這里也衷心地感謝他們!</p><p> 在
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機的溫度采集系統(tǒng)設(shè)計畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---基于單片機的溫度采集系統(tǒng)的設(shè)計
- 基于單片機的溫度采集系統(tǒng)的畢業(yè)設(shè)計
- 基于單片機的溫度采集系統(tǒng)的畢業(yè)設(shè)計
- 畢業(yè)設(shè)計--單片機溫度采集控制系統(tǒng)設(shè)計
- 畢業(yè)設(shè)計-單片機的溫度采集及控制系統(tǒng)設(shè)計
- 畢業(yè)設(shè)計---基于單片機的溫度采集與監(jiān)測系統(tǒng)設(shè)計
- 畢業(yè)設(shè)計---基于單片機的多路溫度采集系統(tǒng)設(shè)計與實現(xiàn)
- 基于單片機的多路溫度采集系統(tǒng)設(shè)計與實現(xiàn)畢業(yè)設(shè)計
- 畢業(yè)設(shè)計--基于單片機的多路溫度采集系統(tǒng)設(shè)計與實現(xiàn)
- 畢業(yè)設(shè)計---基于51單片機的溫度數(shù)據(jù)采集系統(tǒng)
- 畢業(yè)設(shè)計----基于51單片機的遠程溫度采集與顯示系統(tǒng)設(shè)計
- 畢業(yè)設(shè)計---基于單片機的數(shù)據(jù)采集系統(tǒng)設(shè)計
- 基于單片機的溫度測量系統(tǒng)設(shè)計【畢業(yè)設(shè)計】
- 畢業(yè)設(shè)計---單片機溫度控制系統(tǒng)的設(shè)計
- 單片機數(shù)據(jù)采集的畢業(yè)設(shè)計
- 單片機的溫度控制畢業(yè)設(shè)計
- 基于單片機溫度采集系統(tǒng)的設(shè)計論文(
- 基于單片機溫度采集系統(tǒng)的設(shè)計論文(
- 基于單片機的溫度監(jiān)控系統(tǒng)(畢業(yè)設(shè)計)
評論
0/150
提交評論