

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計</b></p><p> 題目: 基于單片機的電阻爐的設計與實現(xiàn) </p><p> 2012年12月25日</p><p><b> 目錄</b></p><p><b> 摘 要2</b></p><
2、p><b> 一、序言4</b></p><p> 二 、電阻爐簡介5</p><p> 三、AT89C526</p><p> 1 、AT89C52系列主要性能參數(shù)6</p><p> 2 、AT89C52具有以下主要功能特性6</p><p> 四、DS18B20
3、 簡介9</p><p> 五、LCD LM01611</p><p> 六、步進電動機13</p><p> 七、MOC302114</p><p> 八、系統(tǒng)硬件電路圖16</p><p> 2、數(shù)據處理模塊18</p><p> 3、溫度顯示模塊19</p
4、><p> 4、控制模塊電路圖20</p><p> 九、加載程序仿真21</p><p><b> 總結23</b></p><p><b> 參考文獻24</b></p><p> 程序代碼-----25</p><p><b
5、> 摘 要</b></p><p> 在工業(yè)生產過程中,往往需要對各類加熱爐、熱處理爐、反應爐的溫度進行檢測和調節(jié),因此需要一種合適的系統(tǒng)對其溫度進行精確控制,由于單片機具有低功耗、高性能、可靠性好、易于產品化等特點,因此采用單片機對溫度進行控制不僅節(jié)約成本,控制方法靈活多樣,并且可以達到較高的控制精度,從而能夠大大提高產品的質量,因此單片機被廣泛應用在中小型控制系統(tǒng)中。</p>
6、;<p> 設計過程中,首先進行軟件</p><p> 設計和開發(fā),使系統(tǒng)功能模塊化并分別通過Proteus軟件進行仿真,實現(xiàn)功能后對硬件進行了綜合設計,并且反復論證、測試各器件參數(shù)以使其穩(wěn)定運行,最終使得此系統(tǒng)實現(xiàn)了溫度的恒溫控制。</p><p> 關鍵詞:單片機;溫度傳感器;可控硅;溫度控制</p><p><b> Abstr
7、act</b></p><p> In the industrial production process, often require various types of furnace, heat treatment furnace, reactor temperature detection and regulation, so it needs a proper system of preci
8、se control of its temperature, as low power consumption single chip, high performance, reliability, easy-to-market commodity and so on, so to control the temperature using SCM not only save on cost, control method of fle
9、xible and diverse, and can achieve higher precision, which can greatly enhance the quality of th</p><p> The design process, first of all the software design and development, making the system functional mo
10、dule and through the Proteus software simulation, respectively, to achieve feature an integrated design of the hardware, and repeated demonstration, testing the device parameters to make it stable operation, and ultimate
11、ly make This system has realized the constant temperature control. </p><p> Keywords: MCS-51, temperature sensor, SCR,temperature control</p><p><b> 一、序言</b></p><p>
12、及時準確地得到溫度信息并對其進行適時的控制,在許多工業(yè)場合中都是重要的環(huán)節(jié).水溫的變化影響各種系統(tǒng)的自動運作,例如冶金、機械、食品、化工各類工業(yè)中,廣泛使用的各種加熱爐、熱處理爐、反應爐等,對工件的水處理溫度要求嚴格控制。對于不同控制系統(tǒng),其適宜的水質溫度總是在一個范圍。超過這個范圍,系統(tǒng)或許會停止運行或遭受破壞,所以我們必須能實時獲取水溫變化。對于,超過適宜范圍的溫度能夠報警。同時,我們也希望在適宜溫度范圍內可以由檢測人員根據實際情況
13、加以改變</p><p> 單片機對溫度的控制是工業(yè)生產中經常使用的控制方法。從1976年Intel公司推出第一批單片機以來,80年代單片機技術進入快速發(fā)展時期,近年來,隨著大規(guī)模集成電路的發(fā)展,單片機繼續(xù)朝快速、高性能方向發(fā)展。單片機主要用于控制,它的應用領域遍及各行各業(yè),大到航天飛機,小至日常生活中的冰箱、彩電,單片機都可以大顯其能。單片機將微處理器、存儲器、定時/計數(shù)器、I/O接口電路等集成在一個芯片上的
14、大規(guī)模集成電路,本身即是一個小型化的微機系統(tǒng)。單片機技術與傳感與測量技術、信號與系統(tǒng)分析技術、電路設計技術、可編程邏輯應用技術、微機接口技術、數(shù)據庫技術以及數(shù)據結構、計算機操作系統(tǒng)、匯編語言程序設計、高級語言程序設計、軟件工程、數(shù)據網絡通信、數(shù)字信號處理、自動控制、誤差分析、儀器儀表結構設計和制造工藝等的結合,使得單片機的應用非常廣泛。同時,單片機具有較強的管理功能。采用單片機對整個測量電路進行管理和控制,使得整個系統(tǒng)智能化、功耗低、使
15、用電子元件較少、內部配線少、成本低,制造、安裝、調試及維修方便</p><p> 目前,我國在溫度測控儀表業(yè)與國外的差距主要表現(xiàn)在如下幾個方面、</p><p> ?。?) 行業(yè)內企業(yè)規(guī)模小,且較為分散,造成技術力量不集中,導致研發(fā)能力不強,制約技術發(fā)展。</p><p> ?。?) 商品化產品以PID控制器為主,智能化儀表少,這方面同國外差距較大。目前,國內企業(yè)
16、復雜的及精度要求高的溫度控制系統(tǒng)大多采用進口溫度控制儀表</p><p> ?。?) 儀表控制用關鍵技術、相關算法及控制軟件方面的研究較國外滯后。例如:在儀表控制參數(shù)的自整定方面,國外己有較多的成熟產品,但由于我國開發(fā)上的滯后,還沒有開發(fā)出性能可靠的自整定軟件,控制參數(shù)大多靠人工經驗及現(xiàn)場調試來確定。這些差距我們必須努力克服。</p><p> 隨著我國經濟的發(fā)展及加入WTO帶來的契機,
17、政府及企業(yè)對于高新技術的發(fā)展都非常重視,對相關企業(yè)資源進行了重組,相繼建立了一些國家、企業(yè)的研發(fā)中心,并通過合資、技術合作等方式,組建了一批合資、合作及獨資企業(yè),使我國溫度等測試儀表行業(yè)得到迅速的發(fā)展。</p><p><b> 其優(yōu)點有:</b></p><p> 1)運轉平穩(wěn),工作可靠;</p><p> 2)布局合理,安裝操作維護方
18、便;</p><p> 3)滿足加熱和溫度控制精度要求;</p><p> 4)設置定時起停、時鐘、報警等人性化功能。</p><p> 5)要從節(jié)能、省材、高效率、自動化、安全的角度出發(fā),對電阻爐的工作效率增加,減少技術人員,操作和維修更方便安全,大大減小勞動強度,節(jié)約成本,提高勞動生產率。</p><p><b> 二
19、、電阻爐簡介</b></p><p> 1、電阻爐是利用電流通過電熱體元件將電能轉化為熱能來加熱或者熔化工件和物料的熱加工設備。</p><p> 電阻爐由爐體、電氣控制系統(tǒng)和輔助系統(tǒng)組成。爐體由爐殼、加熱器、爐襯(包括隔熱屏)等部件組成。電氣控制系統(tǒng)包括電子線路、微機控制、儀表顯示及電氣部件等。輔助系統(tǒng)通常指傳動系統(tǒng)、真空系統(tǒng)、冷卻系統(tǒng)等,雖爐種的不同而已</p&g
20、t;<p><b> 2、電阻爐的優(yōu)點</b></p><p> 熱效率高。電阻爐不需要燃燒氣體,沒有派出因燃燒氣體而產生的廢氣造成的熱損失。爐膛室內熱強度高,能達到較高的溫度,是高熔點金屬得熔化。</p><p> 能夠滿足工作空間溫度場均勻分布和恒溫的精度要求。比如在48小時內溫度漂移±0.5℃。</p><p&g
21、t; 操作簡單,壽命長,安全有保障。 場所利用率大,噪聲較穩(wěn)定。</p><p><b> 3電阻爐加熱原理</b></p><p> 當電流在導體中流過時,因為任何導體均存在電阻,電能即在導體中形成損耗,轉換為熱能,按焦耳楞次定律:</p><p> Q=0.2412 Rt Q—熱能</p><p> I一電
22、流,安培 , </p><p> R一電阻,歐姆, </p><p><b> t一時間,秒</b></p><p> 按上式推算,當1千瓦小時的電能,全部轉換為熱能時Q=(0.24×1000×36000)/1000=864千卡</p><p> 在電熱技術上按l千瓦小時=860千卡計
23、算。電阻爐在結構上是使電能轉換為熱能的設備,它能有效地 用來加熱指定的工件,并保持高的效率。</p><p><b> 三、AT89C52</b></p><p> 1 、AT89C52系列主要性能參數(shù)</p><p> AT89C52是一種低電壓,高性能CMOS8位微處理器,片內含8K可反復擦寫的Flash只讀程序存儲器。器件采用Atm
24、el公司的高密度、非易失性存儲器技術生產,兼容標準MCS-51指令系統(tǒng)。在單芯片上內置通用的8位CPU和Flash存儲單元,能給很多嵌入式控制應用系統(tǒng)提供非常靈活且高效的解決方案,從而使得AT89C52廣泛應用于許多此類系統(tǒng)中。</p><p> 2 、AT89C52具有以下主要功能特性</p><p> 8K字節(jié)Flash ROM,256字節(jié)內部RAM,32個雙向I/O口,3個16
25、位可編程定時/計數(shù)器,一個6向量兩級中斷結構,一個全雙工串行通信口,片內振蕩器及時鐘電路。同時AT89C5可降至0HZ的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM定時/計數(shù)器串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復位。</p><p><b> P0口</b></p&
26、gt;<p> P0口為一個8位漏極開路雙向I/O口。作為輸出口用時,每位能吸收電流的方式驅動8個TTL邏輯門電路。對端口P0寫1時,可作為高阻輸入端用。在訪問外部數(shù)據存儲器或程序存儲器時,這組口線分時轉換地址低8位和數(shù)據總線復用。在FLASH編程時P0 接收指令字節(jié)而在程序校驗時輸出指令字節(jié),校驗時要求外接上拉電阻。</p><p><b> P1口</b></p
27、><p> P1口是一個帶內部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅動吸收或輸出電流,4個TTL邏輯門電路。對端口寫“1”通過內部上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。 </p><p><b> P2口</b></p><p> P2口是一個帶有
28、內部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅動吸收或輸出電流,4個TTL邏輯門電路。對端口P2寫“1”時,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口,作為輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。在訪問外部程序存儲器或16位地址的外部數(shù)據存儲器。例如執(zhí)行MOVX @DPTR指令時,P2口送出高8位地址數(shù)據。在訪問8位地址的外部數(shù)據存儲器。如執(zhí)行MOVX @RI時,P2口輸出P2鎖存器的內
29、容。Flash編程或校驗時P2也接收高位地址和一些控制信號。 </p><p><b> P3口</b></p><p> P3口是一組帶有內部上拉電阻的8位雙向I/O口。P3輸出緩沖級可驅動吸收或輸出電流,4個TTL邏輯門電路。對P3口寫入“1”時,他們被內部上拉電阻拉高并可作為輸入端口。此時,被外部拉低的P3口將用上拉電阻輸出電流。</p>
30、<p><b> RST復位輸入:</b></p><p> 當振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復位。 </p><p> ALE/ PROG : </p><p> 當訪問外部程序存儲器或數(shù)據存儲器時,ALE地址鎖存允許輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時鐘振蕩頻率的1/
31、6輸出固定脈沖信號,因此它可對外輸出時鐘或用于定時目的。但要注意的是,每當訪問外部數(shù)據存儲器時,將跳過一個ALE脈沖。對Flash存儲器編程期間,該引腳還用于輸入編程脈沖。如有必要,可通過對特殊功能寄存器,SFR區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳被微弱拉高,單片機執(zhí)行外部程序時,應設置ALE禁止位無效。</p><p> PS
32、EN 程序儲存允許</p><p> PSEN輸出是外部程序存儲器的讀選通信號。當AT89C52由外部程序存儲器取指令或數(shù)據時,每個機器周期兩次PSEN有效,即輸出兩個脈沖。在此期間,當訪問外部數(shù)據存儲器時,將跳過兩次PSEN信號。 EA /VPP外部訪問允許。欲使CPU僅訪問外部程序存儲器地址為0000H-FFFFH,EA端必須保持低電平接地。需注意的是如果加密位LB1被編成復位時內部會所存EA端狀態(tài)。
33、如EA端為高電平接Vcc端,CPU則執(zhí)行內部程序存儲器中的指令。Flash存儲器編程時,該引腳加上+12V的編程允許電源Vpp,當然這必須是該器件是使用12V編程電壓Vpp。 </p><p> XTAL1:振蕩器反相放大器及內部時鐘發(fā)生器的輸入端。 </p><p> XTAL2:振蕩器反相放大器的輸出端。</p><p> 四、DS18B20 簡介<
34、;/p><p> DS18B20是DALLAS公司生產的一線式數(shù)字溫度傳感器,具有3引腳TO-92小體積封裝形式;溫度測量范圍為-55℃~+125℃,可編程為9位~12位A/D轉換精度,測溫分辨率可達0.0625℃,被測溫度用符號擴展的16位數(shù)字量方式串行輸出;其工作電源既可在遠端引入,也可采用寄生電源方式產生;多個DS18B20可以并聯(lián)到3根或2根線上,CPU只需一根端口線就能與諸多DS18B20通信,占用微處理
35、器的端口較少,可節(jié)省大量的引線和邏輯電路。以上特點使DS18B20非常適用于遠距離多點溫度檢測系統(tǒng)。 </p><p> DS18B20的內部結構</p><p> DS18B20內部結構主要由4部分組成:64位ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列,DQ為數(shù)字信號輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端</p&
36、gt;<p> DS18B20中的溫度傳感器完成對溫度的測量,用16位符號擴展的二進制補碼讀數(shù)形式提供,以0.0625℃/LSB形式表達,其中S為符號位。例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。</p><p> 五、LCD LM016</p><p>
37、1 顯示質量高 由于液晶顯示器每一個點在收到信號后就一直保持那種色彩和亮度,恒定發(fā)光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新新亮點。因此,液晶顯示器畫質高且不會閃爍。</p><p><b> 數(shù)字式接口</b></p><p> 液晶顯示器都是數(shù)字式的,和單片機系統(tǒng)的接口更加簡單可靠,操作更加方便</p><p><b
38、> 體積小、重量輕</b></p><p> 液晶顯示器通過顯示屏上的電極控制液晶分子狀態(tài)來達到顯示的目的,在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多 </p><p> 2 1602LCD基本參數(shù)及引腳功能</p><p> 1602LCD主要技術參數(shù):</p><p> 顯示容量:16×2
39、個字符 </p><p> 芯片工作電壓:4.5—5.5V </p><p> 工作電流:2.0mA(5.0V) </p><p> 模塊最佳工作電壓:5.0V </p><p> 字符尺寸:2.95×4.35(W×H)mm</p><p><b> 引腳功能說明</b&g
40、t;</p><p> 第1腳:VSS為地電源。 </p><p> 第2腳:VDD接5V正電源。 </p><p> 第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。</p><p> 第4腳:RS為寄存器選擇,高電平時選擇數(shù)據寄存
41、器、低電平時選擇指令寄存器。</p><p> 第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數(shù)據。 </p><p> 第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。</p><p&g
42、t; 第7~14腳:D0~D7為8位雙向數(shù)據線。 </p><p><b> 六、步進電動機</b></p><p> 1 相步進電機。 定子的通電方式 稱為勵磁方式。</p><p> 1. 1相勵磁方式 A相通電; B相通電; C相通電; 當脈沖一個一個發(fā)來時,如果按A->B->C->A...的順序通電,則電機轉
43、子便按逆時針轉動,這種通電方式成為1相勵磁方式。 如果按A->C->B>A...的順序通電,則電機轉子便按逆時針轉動</p><p> 2. 2相勵磁方式順時針輪回 AB→BC→CA→AB 逆時針輪回 BA→AC→CB→BA</p><p> 2步進電機的驅動發(fā)來的脈沖信號轉化為步進電機的角位移,電機的轉速與脈沖率 成正比,所以控制脈沖頻率可以精確調速,控制脈
44、沖數(shù)就可以精確定位</p><p><b> 七、MOC3021</b></p><p> MOC3021/MOC3021M是一款光隔離三端雙向可控硅驅動器芯片。MOC3021/MOC3021M包含一個砷化鎵紅外發(fā)光二極管和一個光敏硅雙向開關,該開關具備跟三端雙向可控硅一樣的功能。 MOC3021/MOC3021M設計用于為電子控制裝置和電源雙向控制裝置提供接
45、口,以便對115 VAC操作電壓下的電阻和電感負載進行有效控制</p><p> MOC3021 特性特性特性特性 </p><p> ?出色的 IFT(LED觸發(fā)電流) 穩(wěn)定性 - 紅外發(fā)光二極管不易退化 </p><p> ? 高隔離電壓 - 最小5300 VAC RMS </p><p> ? UL認證 - File #E9
46、0700 </p><p><b> ? 峰值閉鎖電壓 </b></p><p> MOC3021 應用應用應用應用 </p><p><b> ? 工業(yè)控制 </b></p><p><b> ? 紅綠燈 </b></p><p> ?
47、 自動售貨機 固態(tài)繼電器 </p><p><b> ? 鎮(zhèn)流器 </b></p><p> ? 電磁閥/閥控制 </p><p> ? 靜態(tài)AC電源開關 </p><p> ? 白熾燈調光器 </p><p> ? 電機控制器 </p><p>&
48、lt;b> 八、系統(tǒng)硬件電路圖</b></p><p> 系統(tǒng)硬件連接圖如下圖所示:系統(tǒng)集成了數(shù)據處理模塊、溫度傳感器模塊、溫度顯示/設定模塊、溫度控制模塊。</p><p><b> 1、溫度傳感器模塊</b></p><p><b> 2、數(shù)據處理模塊 </b></p><
49、p><b> 3、溫度顯示模塊</b></p><p><b> 4、控制模塊電路圖</b></p><p><b> 九、加載程序仿真</b></p><p><b> 總結 </b></p><p> 設計敘述了基于單片機的電阻爐溫度的
50、控制與設計,包括硬件組成和軟件,介紹了基于AT89C51單片機的溫度采集控制系統(tǒng)設計,該系統(tǒng)在硬件設計上主要是通過熱電偶對溫度進行采集,把溫度轉換成變的電壓,將模擬溫度電壓信號轉化為對應的數(shù)字溫度信號電壓,用LCD 對當前溫度信號值進行顯示,并且根據數(shù)據處理的結果,使用單片機控制繼電器,實現(xiàn)對電機的控制,最終達到溫度調節(jié)的目的。其硬件設計中最為核心的器件是單片機AT89C51,整個系統(tǒng)結構緊湊,簡單可靠,操作靈活,功能強大,性能價格比高
51、,較好的滿足了現(xiàn)代生產和科研的需要</p><p> 長達兩個月的學習 、研究,看了不少文獻,問過不少同學 ,曾經根本沒有一點頭緒的我感覺好難,根本不知道什么是keil 和protues ,更不知道元件庫中原件的應用,但是由于壓力的條件下,終于有了自己的報告,更多的了解單片機的功能,特別是對引腳的功能的接法,p0口能做數(shù)據總線有能做地址總線的意義,還有LCD14引腳顯示器的接法 ,溫度傳感器的應用。</p
52、><p> 最后 ,我很高興我能成功做出這篇報告,同時也真心的感謝幫助過我的同學 、朋友,謝謝!</p><p><b> 參考文獻</b></p><p> [1] 楊世興.郭秀才監(jiān)測監(jiān)控系統(tǒng).中國電力出版社,2007</p><p> [2] 丁鎮(zhèn)生.傳感器及傳感技術應用.電子工業(yè)出版社,</p>
53、<p> 2002 [3] 陳良光.劉劍亮.DS18X20在多點測溫中的編碼優(yōu)化技術.電子工業(yè)出版社,</p><p> 2001 [4] 陳潤泰、許琨編.檢測技術與智能儀表.長沙:中南工業(yè)大學出版社,1998 </p><p> [5] 蔡美琴等.MCS一51系列單片機系統(tǒng)及其應用.北京:高等教育出版社,1999 </p><p> [6] 劉迎
54、春、葉湘濱.傳感器原理設計與應用(第三版).長沙:國防科技大學出版社,199</p><p><b> 程序代碼-----</b></p><p> #include<REG52.H></p><p> #include<math.h></p><p> #include<INTRI
55、NS.H></p><p> #include<string.h> </p><p> #define CIRCLE 100</p><p> #define uchar unsigned char</p><p> #define uint unsigned int;</p><p>
56、 struct PID { </p><p> unsigned int SetPoint; // 設定目標 Desired Value </p><p> unsigned int Proportion; // 比例常數(shù) Proportional Const </p><p> unsigned int Integral; // 積分常數(shù) Integral
57、Const </p><p> unsigned int Derivative; // 微分常數(shù) Derivative Const </p><p> unsigned int LastError; // Error[-1] </p><p> unsigned int PrevError; // Error[-2] </p><p>
58、 unsigned int SumError; // Sums of Errors </p><p><b> }; </b></p><p> struct PID spid; // PID Control Structure </p><p> unsigned int rout; // PID Response (Output)
59、</p><p> unsigned int rin; // PID Feedback (Input) </p><p> typedef unsigned char BYTE;</p><p> typedef unsigned int WORD;</p><p> typedef bit BOOL ;</p><
60、;p> sbit key1=P3^2; //定義按鍵位置</p><p> sbit key2=P3^3;</p><p> sbit key3=P3^4;</p><p> sbit key4=P3^5;</p><p> sbit key5=P3^6;</p><p> sbit key6=P
61、3^7;</p><p> sbit rs = P1^0;</p><p> sbit rw = P1^1;</p><p> sbit ep = P1^2;</p><p> sbit pwm=P1^5; //PWM輸出端設置為P3.7輸出</p><p> sbit DQ=P1^3;//ds18b20 信
62、號引腳即DQ</p><p> sfr dataled=0x80;//顯示數(shù)據端口 即P2口為段選碼輸入口</p><p> uchar temp;//溫度變量</p><p> unsigned char set_temper=30; </p><p> unsigned char high_time;</p><
63、;p> unsigned int s; </p><p> uchar flag_get,count,num,counter; //溫度讀取標志位、中斷次數(shù)變量,t0中斷次數(shù)以讀取溫度值, t1中斷次數(shù)以控制周期和pwm的占空比。</p><p> char const table[]={100,80,70,60,50,40,30,20,0};//高電平時間查表</p
64、><p><b> uchar</b></p><p> code tab[]={0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20,0xA0,0x60,0x25,0x3C,0x23,0x34,0x74,0xF7,0xFF};//,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共陽led顯示段碼1~15段碼表&
65、lt;/p><p> uchar shi,ge,danwei,dang,dang_dis; // 定義溫度十位、個位、攝氏度單位、及檔位變量名稱,及顯示檔位的查表變量</p><p> void delay1(uchar MS);// 延時函數(shù)</p><p> unsigned char ReadTemperature(void);//讀溫度子函數(shù)</
66、p><p> void Init_DS18B20(void);// DS18B20初始化</p><p> unsigned char ReadOneChar(void);//讀字節(jié)子函數(shù)</p><p> void WriteOneChar(unsigned char dat);//寫字節(jié)子函數(shù)</p><p> void delay(
67、unsigned int i);//延時</p><p> //void del(unsigned int);</p><p> void drive_moto();//由P1低四位輸出控制信號</p><p> void initial();</p><p> unsigned int TempBuffer[5];</p>
68、;<p> BYTE code dis1[] = {"Temperature:"};</p><p> BYTE code dis2[] = {"Set_Temper:"};</p><p> BYTE code dis3[] = {"0123456789"};</p><p> BY
69、TE code dis4[] = 0xdf;</p><p> BYTE code dis5[] = {"C"};</p><p> delay2(BYTE ms)</p><p><b> { </b></p><p><b> BYTE i;</b></p>
70、;<p> while(ms--)</p><p><b> {</b></p><p> for(i = 0; i< 250; i++)</p><p><b> {</b></p><p><b> _nop_();</b></p>
71、<p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> }</b></p><p><b> }<
72、/b></p><p><b> }</b></p><p> BOOL lcd_bz()</p><p> { // 測試LCD忙碌狀態(tài)</p><p> BOOL result;</p><p><b> rs = 0;</b></p&g
73、t;<p><b> rw = 1;</b></p><p><b> ep = 1;</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b>
74、 _nop_();</b></p><p><b> _nop_();</b></p><p> result = (BOOL)(P0 & 0x80);</p><p><b> ep = 0;</b></p><p> return result; </p>
75、;<p><b> }</b></p><p> lcd_wcmd(BYTE cmd)</p><p> { // 寫入指令數(shù)據到LCD</p><p> while(lcd_bz());</p><p><b> rs = 0;</b></p>&
76、lt;p><b> rw = 0;</b></p><p><b> ep = 0;</b></p><p><b> _nop_();</b></p><p><b> _nop_(); </b></p><p><b> P0
77、 = cmd;</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b><
78、;/p><p><b> ep = 1;</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><
79、;b> _nop_();</b></p><p><b> ep = 0; </b></p><p><b> }</b></p><p> lcd_pos(BYTE pos)</p><p> { //設定顯示位置</p><p>
80、 lcd_wcmd(pos | 0x80);</p><p><b> }</b></p><p> lcd_wdat(BYTE dat) </p><p> { //寫入字符顯示數(shù)據到LCD</p><p> while(lcd_bz());</p><p><b&g
81、t; rs = 1;</b></p><p><b> rw = 0;</b></p><p><b> ep = 0;</b></p><p><b> P0 = dat;</b></p><p><b> _nop_();</b>
82、</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> ep = 1;</b></p><p>
83、<b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> ep = 0; &
84、lt;/b></p><p><b> }</b></p><p> lcd_init()</p><p> { //LCD初始化設定</p><p> lcd_wcmd(0x38); //</p><p> delay2(1);</p><p&
85、gt; lcd_wcmd(0x0c); //</p><p> delay2(1);</p><p> lcd_wcmd(0x06); //</p><p> delay2(1);</p><p> lcd_wcmd(0x01); //清除LCD的顯示內容</p><p> delay2(1);
86、</p><p><b> }</b></p><p> void initial()</p><p><b> {</b></p><p><b> EA=1;</b></p><p> TMOD=0x11;//定時器設置皆工作在16定時計數(shù)
87、器模式</p><p> TH0=0xef;//T0賦初值</p><p><b> TL0=0xf0;</b></p><p> TH1=(65536-1000)/256;//T1賦初值</p><p> TL1=(65536-1000)%256;</p><p><b>
88、ET1=1;</b></p><p><b> ET0=1;</b></p><p><b> TR0=1;</b></p><p><b> TR1=1;</b></p><p> P2=0xff; </p><p><b&
89、gt; count=0;</b></p><p> counter=0;//pwm占空比控制變量</p><p> //IP=0x08; //T1優(yōu)先級高于T0 ,后來證明此語句是多余的,因為當加入此句后反/////而pwm調速和溫度檢測都變得有點不穩(wěn)定。</p><p><b> }</b></p><
90、p> void delay(unsigned int i)//延時函數(shù)</p><p><b> {</b></p><p> while(i--); </p><p><b> }</b></p><p> //18b20初始化函數(shù),檢測總線上是否有從屬器件DS的存在,若存在則通訊
91、成功</p><p> void Init_DS18B20(void)</p><p><b> {</b></p><p> unsigned char x=0;</p><p> DQ = 1; //DQ復位</p><p> delay(8); //稍做延時</p&g
92、t;<p> DQ = 0; //單片機將DQ拉低</p><p> delay(80); //延時 大于 480us</p><p> DQ = 1; //拉高總線</p><p> delay(10);</p><p> x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗,
93、因為DQ復位成功的回答信號即存在信號是低電平</p><p><b> delay(5);</b></p><p><b> }</b></p><p> //讀一個字節(jié)ROM</p><p> unsigned char ReadOneChar(void)</p><p
94、><b> {</b></p><p> unsigned char i=0;</p><p> unsigned char dat = 0;</p><p> for (i=8;i>0;i--)</p><p><b> {</b></p><p>
95、 DQ = 0; // 給脈沖信號</p><p><b> dat>>=1;</b></p><p> DQ = 1; // 給脈沖信號</p><p><b> if(DQ)</b></p><p> dat|=0x80;//</p><p><
96、b> delay(5);</b></p><p><b> }</b></p><p> return(dat);</p><p><b> }</b></p><p><b> //寫一個字節(jié)</b></p><p> v
97、oid WriteOneChar(unsigned char dat)</p><p><b> {</b></p><p> unsigned char i=0;</p><p> for (i=8; i>0; i--)</p><p><b> {</b></p>&
98、lt;p><b> DQ = 0;</b></p><p> DQ = dat&0x01;</p><p><b> delay(5);</b></p><p><b> DQ = 1;</b></p><p><b> dat>>
99、=1;</b></p><p><b> }</b></p><p><b> delay(5);</b></p><p><b> }</b></p><p><b> //讀取溫度</b></p><p>
100、 unsigned char ReadTemperature(void)</p><p><b> {</b></p><p> unsigned char a=0;</p><p> unsigned char b=0;</p><p> unsigned char t=0;</p><p&
101、gt; Init_DS18B20();// 復位</p><p> WriteOneChar(0xCC); // 跳過讀序號列號的操作</p><p> WriteOneChar(0x44); // 啟動溫度轉換</p><p> delay(100);</p><p> Init_DS18B20(); //每次操作前都要進行復位
102、</p><p> WriteOneChar(0xCC); //跳過讀序號列號的操作 </p><p> WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度</p><p> a=ReadOneChar();</p><p> b=ReadOneChar();</p><
103、;p> s=(unsigned int)(a&0x0f); </p><p> b<<=4;//取高字節(jié)的第四位,因為高四位為符號位:1111為負,0000為正,</p><p> b+=(a&0xf0)>>4;//忽略小數(shù)位,取a的高四位,與b的相加就是此時所測得到整數(shù)溫度值</p><p><b>
104、 t=b;</b></p><p> return(t);//返回溫度值給這個函數(shù)</p><p><b> }</b></p><p> void printf()</p><p><b> {</b></p><p><b> BYTE i
105、;</b></p><p> delay2(10);</p><p> lcd_pos(0x00); // 設置顯示位置為第一行的第5個字符</p><p><b> i = 0;</b></p><p> while(dis1[i] != '\0')</p>&l
106、t;p> { // 顯示字符"welcome!"</p><p> lcd_wdat(dis1[i]);</p><p><b> i++;</b></p><p><b> }</b></p><p> lcd_pos(0x40); // 設置顯示
107、位置為第二行第二個字符</p><p><b> i = 0;</b></p><p> while(dis2[i] != '\0')</p><p><b> {</b></p><p> lcd_wdat(dis2[i]); // 顯示字符</p><
108、p><b> i++;</b></p><p><b> }</b></p><p> TempBuffer[0]=temp/10; //十位</p><p> TempBuffer[1]=temp%10; //個位</p><p> lcd_pos(0x0c); </p&
109、gt;<p> lcd_wdat(dis3[TempBuffer[0]]); //測試溫度十位</p><p> lcd_pos(0x0d); </p><p> lcd_wdat(dis3[TempBuffer[1]]); //測試溫度個位</p><p> lcd_pos(0x0e);</p><p> lcd_w
110、dat(dis4[0]); </p><p> lcd_pos(0x0f);</p><p> lcd_wdat(dis5[0]);</p><p> TempBuffer[2]=set_temper/10; //十位</p><p> TempBuffer[3]=set_temper%10; //個位</p>&l
111、t;p> lcd_pos(0x4c); </p><p> lcd_wdat(dis3[TempBuffer[2]]); //設置溫度十位</p><p> lcd_pos(0x4d); </p><p> lcd_wdat(dis3[TempBuffer[3]]); //設置溫度個位</p><p> lcd_pos(0x4
112、e);</p><p> lcd_wdat(dis4[0]); </p><p> lcd_pos(0x4f);</p><p> lcd_wdat(dis5[0]);</p><p><b> }</b></p><p> void keyscan()</p><p
113、><b> {</b></p><p> if(key1==0)</p><p><b> {</b></p><p> delay(200);</p><p> if(key1==0)</p><p><b> {</b></p
114、><p> set_temper++;</p><p><b> }</b></p><p><b> }</b></p><p> if(key2==0)</p><p><b> {</b></p><p> dela
115、y(200);</p><p> if(key2==0)</p><p><b> {</b></p><p> set_temper--;</p><p><b> }</b></p><p><b> }</b></p>&l
116、t;p><b> }</b></p><p> void tim(void) interrupt 1 using 1//中斷,用于數(shù)碼管掃描和溫度檢測間隔</p><p><b> {</b></p><p> //TH0=0xef;//定時器重裝值</p><p> //TL0
117、=0xf0;</p><p><b> //num++;</b></p><p> //if (num==100)</p><p><b> //{</b></p><p> //num=0;</p><p> //flag_get=1;//標志位有效
118、</p><p><b> //}</b></p><p><b> }</b></p><p> void into(void) interrupt 3 //T1定時中斷服務程序 </p><p><b> { </b></p><p>
119、 TH1=(65536-1000)/256;//初值重裝</p><p> TL1=(65536-1000)%256;</p><p> counter++;</p><p> if(counter>CIRCLE) </p><p><b> {</b></p><p> coun
120、ter=0;////限定周期為T=100X0.01ms=10ms</p><p><b> } </b></p><p> if(counter<=high_time)//取得查表參數(shù),以調節(jié)pwm的占空比</p><p> pwm=1;//PWM高電平</p><p><b> else &l
121、t;/b></p><p><b> pwm=0;</b></p><p><b> }</b></p><p> compare_temper() </p><p><b> { </b></p><p> //unsigned ch
122、ar i; </p><p> if(set_temper>temp) </p><p><b> { </b></p><p> if(set_temper-temp>=10) </p><p><b> { </b></p><p> high_ti
123、me=100; </p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> //for(i=0;i<10;i++) </p><p><b&g
124、t; //{ </b></p><p> //rin = s; // Read Input </p><p> //rout = PIDCalc ( &spid,rin ); // Perform PID Interation </p><p><b> //} </b></p>
125、;<p> if (set_temper-temp==9) </p><p> high_time=90; </p><p> if (set_temper-temp==8) </p><p> high_time=80; </p><p> if (set_temper-temp==7)
126、 </p><p> high_time=70; </p><p> if (set_temper-temp==6) </p><p> high_time=60; </p><p> if (set_temper-temp==5) </p><p> high_time=50;
127、 </p><p> if (set_temper-temp==4) </p><p> high_time=40; </p><p> if (set_temper-temp==3) </p><p> high_time=30; </p><p> if (set_tempe
128、r-temp==2) </p><p> high_time=20; </p><p> if (set_temper-temp==1) </p><p> high_time=10; </p><p><b> } </b></p><p><b>
129、; } </b></p><p> else if(set_temper<temp) </p><p><b> {</b></p><p> // if(temp-set_temper>0)</p><p><b> // { </b></p
130、><p> high_time=0; </p><p><b> // } </b></p><p><b> } </b></p><p><b> } </b></p><p><b> main()</b><
131、;/p><p><b> { </b></p><p> initial();// 初始化個變量及定時器的初值,開中斷等 </p><p> lcd_init(); // 初始化LCD </p><p> while(1) </p><p><b> { &l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 箱式電阻爐課程設計
- 箱式電阻爐課程設計
- 箱式電阻爐課程設計
- 箱式電阻爐課程設計
- 課程設計---基于單片機的電阻爐溫度控制系統(tǒng)設計
- 基于單片機的電阻爐爐溫控制系統(tǒng)
- 基于單片機的電阻爐爐溫控制系統(tǒng)
- 箱式電阻爐課程設計
- 基于單片機的工業(yè)電阻爐智能溫度控制系統(tǒng)設計
- 45基于單片機的電阻爐爐溫控制系統(tǒng)
- 45基于單片機的電阻爐爐溫控制系統(tǒng)
- 中溫箱式電阻爐-課程設計
- 課程設計---熱處理箱式電阻爐的設計
- 基于單片機的電阻爐爐溫控制系統(tǒng)譚金虎
- 課程設計---井式熱處理電阻爐
- 箱式電阻爐課程設計完整版
- 單片機課程設計--電容、電阻參數(shù)單片機測試系統(tǒng)的設計
- 課程設計---井式熱處理電阻爐
- 基于單片機的秒表設計單片機課程設計
- 課程設計--基于單片機的小電阻測試儀
評論
0/150
提交評論