版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《空調(diào)控制系統(tǒng)設(shè)計》任務(wù)書</p><p><b> 設(shè)計內(nèi)容</b></p><p> 設(shè)計一空調(diào)房間溫度控制系統(tǒng),該系統(tǒng)能準(zhǔn)確測量房間溫度,并根據(jù)設(shè)定溫度進行有效控制??照{(diào)設(shè)計變頻空調(diào)制冷(熱)量與壓縮機轉(zhuǎn)速有關(guān),通過控制壓縮機轉(zhuǎn)速頻率來控制所需熱量??照{(diào)模型相當(dāng)于一個積分環(huán)節(jié)與一個慣性環(huán)節(jié)的串聯(lián)。房間模型主要考慮室內(nèi)外溫度干擾與散熱片熱
2、量共同作用于具有初始溫度房間,經(jīng)空氣導(dǎo)熱延遲,簡化為具有一階慣性環(huán)節(jié)。</p><p> 設(shè)房間熱慣性時間常數(shù)=450,空氣導(dǎo)熱延遲τ=35,選擇合適的控制算法進行控制。</p><p><b> 設(shè)計步驟</b></p><p><b> 總體方案設(shè)計</b></p><p> 控制系統(tǒng)的
3、建模和數(shù)字控制器設(shè)計</p><p><b> 硬件的設(shè)計和實現(xiàn)</b></p><p> 選擇計算機字長(選用 51內(nèi)核的單片機)</p><p> 設(shè)計支持計算機工作的外圍電路(EPROM、RAM、I/O端口、鍵盤、顯示接口電路等);</p><p> 設(shè)計輸入信號接口電路;</p><p
4、> 設(shè)計信號輸出控制電路;</p><p> 其它相關(guān)電路的設(shè)計或方案(電源、通信等)。</p><p><b> 軟件設(shè)計</b></p><p> 分配系統(tǒng)資源,編寫系統(tǒng)初始化和主程序模塊框圖;</p><p> 編寫A/D轉(zhuǎn)換和位置檢測子程序框圖;</p><p> 編寫控
5、制程序和D/A轉(zhuǎn)換控制子程序模塊框圖;</p><p> 其它程序模塊(顯示與鍵盤等處理程序)框圖。</p><p> 五、編寫課程設(shè)計說明書,繪制完整的系統(tǒng)電路圖(A3幅面)。</p><p><b> 摘 要:</b></p><p> 本課程設(shè)計詳細(xì)的闡述了基于51單片機構(gòu)建了一個空調(diào)控制系統(tǒng)。在明確影響室
6、內(nèi)溫度參數(shù)情況下,利用PID算法結(jié)合檢測控制方法并對傳感器測量電路、控制器執(zhí)行電路及軟件系統(tǒng)進行了設(shè)計。</p><p> 關(guān)鍵詞: 空調(diào)模型 51單片機 PID</p><p><b> 1.引言</b></p><p> 隨著科技發(fā)展,計算機控制技術(shù)在各個方面都起到了舉足輕重的作用。作為本學(xué)期的一門專業(yè)課,通過對《計算機控制系統(tǒng)》學(xué)
7、習(xí)使我們對計算機系統(tǒng)有一個基本的了解并掌握常規(guī)控制算法的使用方法和掌握簡單微型計算機應(yīng)用系統(tǒng)軟硬的設(shè)計方法。</p><p><b> 2.設(shè)計任務(wù)</b></p><p><b> 2.1 設(shè)計內(nèi)容</b></p><p> 設(shè)計一空調(diào)房間溫度控制系統(tǒng),系統(tǒng)能夠?qū)崿F(xiàn)準(zhǔn)確測量房間溫度,并根據(jù)設(shè)定溫度進行有效控制。&l
8、t;/p><p> 2.2 設(shè)計要求 </p><p><b> 1總體方案設(shè)計</b></p><p><b> 2硬件的設(shè)計和實現(xiàn)</b></p><p> 3選擇計算機字長(選用 51內(nèi)核的單片機)</p><p> 4設(shè)計支持計算機工作的外圍電路(EPROM
9、、RAM、I/O端口、鍵盤、顯示接口電路等);</p><p> 5設(shè)計輸入信號接口電路;</p><p> 6設(shè)計信號輸出控制電路;</p><p> 7其它相關(guān)電路的設(shè)計或方案(電源、通信等)。</p><p> 8分配系統(tǒng)資源,編寫系統(tǒng)初始化和主程序模塊框圖;</p><p> 9編寫A/D轉(zhuǎn)換和位置檢
10、測子程序框圖;</p><p> 10編寫控制程序和D/A轉(zhuǎn)換控制子程序模塊框圖;</p><p> 11其它程序模塊(顯示與鍵盤等處理程序)框圖。</p><p> 12編寫課程設(shè)計說明書,繪制完整的系統(tǒng)電路圖(A3幅面)。</p><p><b> 3.方案設(shè)計</b></p><p>
11、;<b> 3.1 設(shè)計思路</b></p><p> 依據(jù)上面要求,可將系統(tǒng)分為信息采集模塊、控制模塊、驅(qū)動模塊、執(zhí)行模塊、顯示模塊,分別模擬房間空調(diào)系統(tǒng)的相應(yīng)模型。溫度的調(diào)節(jié)范圍為-40~40度,有450慣性環(huán)節(jié),35延遲環(huán)節(jié)。</p><p> 3.2 方案的論證與比較</p><p><b> 一、控制系統(tǒng)模塊<
12、/b></p><p> 用AT89C52芯片作為控制芯片,51內(nèi)核。 </p><p> 1、AT89C52除了與AT89C51所有的定時/計數(shù)器0 和定時/計數(shù)器1 外,還增加了一個定時/計數(shù)器2。 定時器2 是一個16 位定時/計數(shù)器。它既可當(dāng)定時器使用,也可作為外部事件計數(shù)器使用,其工作方式由特殊功能寄 </p><p><b> 中
13、斷</b></p><p> 2、AT89C52 共有6 個中斷向量:兩個外中斷(INT0 和INT1),3 個定時器中斷(定時器0、1、2)和串行口中斷。所有 這些中斷源如圖9 所示。 </p><p> 這些中斷源可通過分別設(shè)置專用寄存器IE 的置位或清0 來控制每一個中斷的允許或禁止。IE 也有一個總禁止位EA, 它能控制所有中斷的允許或禁止。 </p>
14、<p> 二、信號采集與轉(zhuǎn)換模塊</p><p><b> 1.溫度傳感器選擇</b></p><p> 方案一: DS18B20傳感器,其是8位,傳感器,采集信號后可直接輸出數(shù)字信號,使用方便。</p><p> 方案二:AD590作為溫度傳感器。其需要進行AD轉(zhuǎn)換。</p><p> 但是由于
15、老師希望我們通過訓(xùn)練了解AD轉(zhuǎn)換過程,所以我就選擇了方案二即AD590。</p><p> 溫度傳感器AD590基本知識:</p><p> AD590產(chǎn)生的電流與絕對溫度成正比,它可接收的工作電壓為4V-30V,檢測的溫度范圍為-55℃-+150℃,它有非常好的線性輸出性能,溫度每增加1℃,其電流增加1uA,AD590溫度與電流的關(guān)系如表1所示。</p><p&g
16、t;<b> 表 1</b></p><p> 2.AD轉(zhuǎn)換器的選擇</p><p> 因為正常的室溫變化范圍是-40--40度,理論上AD位數(shù)只要7位(128級)就了,所以系統(tǒng)采用了經(jīng)典的ADC0809(8位AD)作為AD采樣芯片。</p><p> ADC0809是帶有8位A/D轉(zhuǎn)換器、8路多路開關(guān)以及微處理機兼容的控制邏輯的CMO
17、S組件。它是逐次逼近式A/D轉(zhuǎn)換器,可以和單片機直接接口。</p><p> a.ADC0809的內(nèi)部邏輯結(jié)構(gòu)</p><p> 圖 5 ADC0809內(nèi)部原理</p><p> 由圖5可知,ADC0809由一個8路模擬開關(guān)、一個地址鎖存與譯碼器、一個A/D轉(zhuǎn)換器和一個三態(tài)輸出鎖存器組成。多路開關(guān)可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉(zhuǎn)換器進行
18、轉(zhuǎn)換。三態(tài)輸出鎖器用于鎖存A/D轉(zhuǎn)換完的數(shù)字量,當(dāng)OE端為高電平時,才可以從三態(tài)輸出鎖存器取走轉(zhuǎn)換完的數(shù)據(jù)。</p><p> 引腳結(jié)構(gòu):IN0-IN7:8條模擬量輸入通道 。ADC0809對輸入模擬量要求:信號單極性,電壓范圍是0-5V,若信號太小,必須進行放大;地址輸入和控制線:4條。ALE為地址鎖存允許輸入線,高電平有效。當(dāng)ALE線為高電平時,地址鎖存與譯碼器將A,B,C三條地址線的地址信號進行鎖存,經(jīng)譯
19、碼后被選中的通道的模擬量進轉(zhuǎn)換器進行轉(zhuǎn)換。A,B和C為地址輸入線,用于選通IN0-IN7上的一路模擬量輸入。通道選擇表如表2所示。</p><p><b> 表 2</b></p><p> 數(shù)字量輸出及控制線:11條。ST為轉(zhuǎn)換啟動信號。當(dāng)ST上跳沿時,所有內(nèi)部寄存器清零;下跳沿時,開始進行A/D轉(zhuǎn)換;在轉(zhuǎn)換期間,ST應(yīng)保持低電平。EOC為轉(zhuǎn)換結(jié)束信號。當(dāng)EOC
20、為高電平時,表明轉(zhuǎn)換結(jié)束;否則,表明正在進行A/D轉(zhuǎn)換。OE為輸出允許信號,用于控制三條輸出鎖存器向單片機輸出轉(zhuǎn)換得到的數(shù)據(jù)。OE=1,輸出轉(zhuǎn)換得到的數(shù)據(jù);OE=0,輸出數(shù)據(jù)線呈高阻狀態(tài)。D7-D0為數(shù)字量輸出線。</p><p> CLK為時鐘輸入信號線。因ADC0809的內(nèi)部沒有時鐘電路,所需時鐘信號必須由外界提供,通常使用頻率為500KHZ,VREF(+),VREF(-)為參考電壓輸入。</p>
21、;<p> ADC0809應(yīng)用說明</p><p> ?、?ADC0809內(nèi)部帶有輸出鎖存器,可以與AT89S51單片機直接相連。</p><p> ?、诔跏蓟瘯r,使ST和OE信號全為低電平。</p><p> ③送要轉(zhuǎn)換的哪一通道的地址到A,B,C端口上。</p><p> ?、茉赟T端給出一個至少有100ns寬的正脈沖信
22、號。</p><p> ?、菔欠褶D(zhuǎn)換完畢,我們根據(jù)EOC信號來判斷。</p><p> ?、蕻?dāng)EOC變?yōu)楦唠娖綍r,給OE為高電平,轉(zhuǎn)換的數(shù)據(jù)就輸出給單片機了。</p><p> 二、驅(qū)動模塊(uln2003)</p><p> ULN2003 是高壓大電流達林頓晶體管陣列系列產(chǎn)品,具有電流增益高、工作電壓高、溫度范圍寬、帶負(fù)載能力強等特點
23、,適應(yīng)于各類要求高速大功率驅(qū)動的系統(tǒng)。 </p><p> ULN2003芯片引腳介紹</p><p> 引腳1:CPU脈沖輸入端,端口對應(yīng)一個信號輸出端。 </p><p> 引腳2:CPU脈沖輸入端。 </p><p> 引腳3:CPU脈沖輸入端。 </p><p> 引腳4:CPU脈沖輸入端。 <
24、/p><p> 引腳5:CPU脈沖輸入端。 </p><p> 引腳6:CPU脈沖輸入端。 </p><p> 引腳7:CPU脈沖輸入端。 </p><p><b> 引腳8:接地。 </b></p><p> 引腳9:該腳是內(nèi)部7個續(xù)流二極管負(fù)極的公共端,各二極管的正極分別接各達林頓管的集
25、電極。用于感性負(fù)載時,該腳接負(fù)載電源正極,實現(xiàn)續(xù)流作用。如果該腳接地,實際上就是達林頓管的集電極對地接通。 </p><p> 引腳10:脈沖信號輸出端,對應(yīng)7腳信號輸入端。 </p><p> 引腳11:脈沖信號輸出端,對應(yīng)6腳信號輸入端。 </p><p> 引腳12:脈沖信號輸出端,對應(yīng)5腳信號輸入端。 </p><p> 引腳
26、13:脈沖信號輸出端,對應(yīng)4腳信號輸入端。 </p><p> 引腳14:脈沖信號輸出端,對應(yīng)3腳信號輸入端。 </p><p> 引腳15:脈沖信號輸出端,對應(yīng)2腳信號輸入端?!?</p><p> 引腳16:脈沖信號輸出端,對應(yīng)1腳信號輸入端?! ?lt;/p><p> 可以利用,51或52單片機,作為系統(tǒng)控制中心;利用PID控制電機
27、的轉(zhuǎn)速;利用利用空調(diào)模型相當(dāng)于一個積分環(huán)節(jié)與一個慣性環(huán)節(jié)的串聯(lián)。房間模型主要考慮室內(nèi)外溫度干擾與散熱片熱量共同作用于具有初始溫度房間,經(jīng)空氣導(dǎo)熱延遲,簡化為具有一階慣性環(huán)節(jié)。 </p><p><b> 三、顯示模塊</b></p><p> 為了能夠最大限度的把信息展現(xiàn)出來,我才用了使用的的是1602</p><p> 它的讀寫操作、屏
28、幕和光標(biāo)的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平) </p><p> 指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置。</p><p> 指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H 。</p><p> 指令3:光標(biāo)和顯示模式設(shè)置 I/D:光標(biāo)移動方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電
29、平則無效。</p><p> 指令4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。</p><p> 指令5:光標(biāo)或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標(biāo) 。</p><p> 指令6:功能設(shè)置命令 D
30、L:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符 。</p><p> 指令7:字符發(fā)生器RAM地址設(shè)置 。</p><p> 指令8:DDRAM地址設(shè)置 。</p><p> 指令9:讀忙信號和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示忙,此時模塊不能接收命令
31、或者數(shù)據(jù),如果為低電平表示不忙。 </p><p> 指令10:寫數(shù)據(jù) 。</p><p> 指令11:讀數(shù)據(jù) 。</p><p> 液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,表3是DM-162的內(nèi)部顯示地址。</p>
32、<p><b> 四、算法模塊</b></p><p> 本系統(tǒng)采用的是PID控制算法,通過房間的溫度反饋,采用增量式PID算法,控制電機的運轉(zhuǎn)的速度,從而控制房間的溫度。以下便是利用MATLAB仿真的PID算法。</p><p> 1 MATLAB仿真</p><p> 圖 1 MATLAB仿真</p>
33、<p><b> 2 仿真結(jié)果</b></p><p> 圖 2 MATLAB仿真結(jié)果</p><p><b> 五、按鍵模塊</b></p><p><b> 利用獨立按鍵即可。</b></p><p><b> 4總體設(shè)計</b>
34、</p><p><b> 4.1硬件系統(tǒng)框圖</b></p><p> 根據(jù)任務(wù)書可知,該系統(tǒng)需要人機界面(按鍵輸入LCD1602顯示),AD采樣,以及單片機控制部分等模塊,并且可以得到以下硬件系統(tǒng)框圖</p><p> 4.2各部分硬件的設(shè)計</p><p> 1信息采集及A/D轉(zhuǎn)換</p>&
35、lt;p> 采用AD590進行A/D轉(zhuǎn)換。由于在系統(tǒng)仿真過程中,無法對0809進行編程,而且不能夠找出AD590這塊芯片,所以我采用了0808代替了0809,并且使用了電壓表和滑動電阻替代我們的AD590熱源傳感器。P1口就是對應(yīng)的數(shù)字量輸出通道。</p><p><b> 2電機及驅(qū)動模塊</b></p><p> 由于c52單片機是大負(fù)載驅(qū)動能力差,所
36、以在實際情況下應(yīng)該對電機安裝驅(qū)動模塊,但是在本次設(shè)計中簡化了,并不采用驅(qū)動。</p><p> 3 顯示部分采用的是1602液晶顯示屏。</p><p> 采用的是P0口為信號的通道,并且由P2.2—P2.3作為控制信號的通道。</p><p><b> 4 輸出控制</b></p><p> 設(shè)計使用LCD16
37、02顯示當(dāng)前設(shè)定溫度和實際測量溫度,用兩個LED指示當(dāng)前空調(diào)狀態(tài)(加熱或制冷),51單片機的低電平驅(qū)動能力較強,LED可以直接連接單片機的I/O口;單片機輸出PWM波控制壓縮機的轉(zhuǎn)速。</p><p><b> 5 按鍵選擇模塊</b></p><p> 利用按鈕開關(guān)對P3.0、P3.1口的按鍵檢測,分別控制其溫度的設(shè)定。</p><p>
38、<b> 6 硬件設(shè)計電路圖</b></p><p><b> 圖9 硬件原理圖</b></p><p><b> 5.軟件設(shè)計</b></p><p> 5.1 工作模式分析</p><p> 很簡單,初始溫度為28度。根據(jù)用戶需要可自行設(shè)定溫度,以后環(huán)境溫度高于
39、設(shè)定值,系統(tǒng)制冷;低于設(shè)定值,系統(tǒng)制熱;與設(shè)定值一致則保持。</p><p> 5.2 系統(tǒng)程序流程圖 </p><p><b> 一、主程序流程圖</b></p><p> 二、按鍵、中斷等子程序流程圖</p><p> 5.3 AD轉(zhuǎn)化程序設(shè)計</p><p> (1) 進行A/D轉(zhuǎn)
40、換之前,要啟動轉(zhuǎn)換的方法:ABC=000選擇第一通道。ST=0,ST=1,ST=0產(chǎn)生啟動轉(zhuǎn)換的正脈沖信號</p><p> (2) 進行A/D轉(zhuǎn)換時,采用查詢EOC的標(biāo)志信號來檢測A/D轉(zhuǎn)換是否完畢,若完畢則把數(shù)據(jù)通過P1端口讀入進行處理。</p><p> 5.4 PID算法設(shè)計</p><p> int PID(int setT,int ache)<
41、;/p><p><b> { </b></p><p> float p=5,i=1,d=0.5;</p><p> static float eun=0.0;static float en=0.0,en1=0.0,en2=0.0;</p><p> static int output=0.0,output1=50
42、;</p><p> en=setT-ache;</p><p> en=p*en-i*(en-en1)+d*(en1-en2);</p><p> output=output1+(int)en;</p><p> output1=output;</p><p><b> en2=en1;</
43、b></p><p><b> en1=en;</b></p><p> return(output);</p><p><b> 6.學(xué)習(xí)心得及體會</b></p><p> “漫漫其修遠兮,吾將上下而求索!”經(jīng)過很多次的熬夜大干最終完成課程實訓(xùn)之后不禁有“一番風(fēng)雨路三千”感慨。在設(shè)
44、計中最難的部分不是程序編寫,而是對PID算法的應(yīng)用和對電機的控制。此外,一開始自己設(shè)想在空調(diào)控制系統(tǒng)中再引入一個外部中斷,其作用是可以使空調(diào)的溫度控制快慢程度進入手動調(diào)節(jié)的環(huán)節(jié),但最終還是沒有實現(xiàn)(編程能力未達到)。</p><p> 在此我就在整個設(shè)計過程中所遇到的問題進行歸納。首先我當(dāng)時是選擇一個人完成整份報告的,原因是我希望通過這次的課程實訓(xùn),好好地鍛煉一下自己;其次本次課程實訓(xùn)的題目設(shè)置上與社會環(huán)境聯(lián)系
45、的比較緊密,貼近生活,給人一種社會生產(chǎn)設(shè)計的感覺。</p><p> 在課程實訓(xùn)中可謂困難重重,首先遇到的問題是,空調(diào)房間控制系統(tǒng)的原理是什么,被控量是什么空調(diào)控制系通過怎么去構(gòu)建?其次是采用什么樣的算法去實現(xiàn)?如何實現(xiàn)MATLAB仿真?說實話,對于算法這些問題,是我思考了很長時間才有眉目的事情。然而造成這些問題的真正的原因是出于自己這么幾年的學(xué)習(xí)都在渾渾噩噩中度過的,所以很多知識都不知道。通過本次課程實踐,似
46、乎也是自己給自己一個提醒。 </p><p><b> 7.感謝 </b></p><p> 在本次設(shè)計中,我得到了丁健老師很大的幫助。這段日子里,丁老師不僅提供給我相關(guān)的資料, 而且還給了我充足的時間,雖然到了最后還沒有完成自己預(yù)想的結(jié)果,但是我感覺自己學(xué)到了很多東西。</p><p><b> 參考文
47、獻</b></p><p> 【1】于海生 編著 計算機控制技術(shù). 北京:機械工業(yè)出版社,2009 。</p><p> 【2】譚浩強 著 c語言程序設(shè)計.北京:清華大學(xué)出版社,2003年。</p><p> 【3】田良 黃正謹(jǐn)著 綜合電子設(shè)計與實踐. 南京:東南大學(xué)出版社,2003年。</p><p> 【4】彭偉 編
48、著 單片機C語言程序設(shè)計實訓(xùn)100例.西安:電子工業(yè)出版社。</p><p><b> 附錄</b></p><p> #include <reg52.h></p><p> int PID(setup_t,achieve);//PID 函數(shù)聲明</p><p> void Lcd_WData(un
49、signedcharTempData); //LCD 初始化子程序聲明</p><p> void Lcd_WCmd(unsignedcharTempData,unsignedcharBuysC);</p><p> void Lcd_RStatus(void);</p><p> void Lcd_Init(void); </p>
50、<p> #define ADC_OUT P1 //AD端口定義</p><p> sbit up=P3^0;</p><p> sbit down=P3^1;</p><p> sbit setT=P3^2;</p><p> sbit setF=P3^3;</p><p>
51、; sbit makeC=P2^0;</p><p> sbit makeH=P2^1;</p><p> sbit PWM=P3^6;</p><p> unsigned char Lcd_ReadData(void);</p><p> void DisplayString(unsigned char X, unsigned c
52、har Y, unsigned char *DData);</p><p> void DisplayChar(unsigned char X, unsigned char Y, unsigned char DData);</p><p> void Delay(unsignedintdelaytime);</p><p> sbitLcd_RS=P
53、2^2;</p><p> sbitLcd_RW=P2^3;</p><p> sbitLcd_E=P2^4; </p><p> #define Lcd_DataP0 LCD端口定義</p><p> sbit ST=P2^5;</p><p> sbit CLK=P3^0;</p>
54、<p> sbit EOC=P2^6;</p><p> sbit OE=P2^7; </p><p> sbit a=P3^7;</p><p> unsigned int pwmData,pwmCount;</p><p> int setup_t=250;</p><p> unsign
55、ed char T0count;</p><p> unsigned char timecount;</p><p><b> bit flag;</b></p><p> unsigned long x;</p><p> int achieve; </p><p> unsigned
56、 char temp[8];</p><p> unsigned int ADC0809();</p><p> void setup(unsigned char);</p><p> void display(int temp1,int temp2);</p><p> unsigned char key_scan();</p
57、><p> void SysInit();</p><p> void measure();</p><p> void main(void)</p><p><b> { </b></p><p> unsigned int current_t;</p><p&
58、gt; unsigned char key;</p><p> SysInit();</p><p> Lcd_Init();</p><p><b> while(1)</b></p><p><b> {</b></p><p> current_t=ADC0
59、809();</p><p> key=key_scan();</p><p> setup(key);</p><p> measure();</p><p> display(current_t,setup_t); </p><p><b> }</b><
60、/p><p><b> }</b></p><p> void measure()</p><p><b> {</b></p><p> if(flag==1)</p><p><b> {</b></p><p><
61、;b> flag=0;</b></p><p> x=T0count*65536+TH0*256+TL0;</p><p> timecount=0;</p><p> T0count=0;</p><p><b> TH0=0;</b></p><p><b&g
62、t; TL0=0;</b></p><p><b> TR0=1;</b></p><p><b> }</b></p><p><b> }</b></p><p> void SysInit()</p><p><b
63、> { EX0=1;</b></p><p><b> IT0=0;</b></p><p><b> EX1=1;</b></p><p><b> IT1=0;</b></p><p><b> ET0=1;</b><
64、/p><p><b> ET1=1;</b></p><p><b> EA=1;</b></p><p> TMOD=0x15;</p><p> TH1=(65536-3000)/256;</p><p> TL1=(65536-3000)%256;</p&g
65、t;<p><b> TR1=1;</b></p><p><b> TR0=1;</b></p><p><b> }</b></p><p> unsigned char key_scan()</p><p><b> {</b>
66、;</p><p> unsigned char temp=0;</p><p> if(up==0) {temp=1; while(!setT); }</p><p> else if(down==0) {temp=2;while(!setF); } </p><p> return(temp);</p><
67、p><b> }</b></p><p> void setup(unsigned char t1)</p><p><b> {</b></p><p> if(t1==1) setup_t++;</p><p> if(t1==2) setup_t--;</p>&
68、lt;p><b> }</b></p><p> void display(int temp1,int temp2)</p><p><b> {</b></p><p> unsigned char table[3],tt[9]; </p><p> Lcd_Init();<
69、;/p><p><b> if(a==1)</b></p><p><b> { </b></p><p> table[2]=temp1%10; </p><p> table[1]=(temp1/10)%10;</p><p&g
70、t; table[0]=(temp1/100)%10;</p><p> DisplayString(0,1,"NOW Temp:"); </p><p> DisplayChar(10,1,table[0]+0x30);</p><p> DisplayChar(11,1,table[1]+0x30);</p><
71、p> DisplayChar(12,1,'.'); //LCD顯示測量值</p><p> DisplayChar(13,1,table[2]+0x30);</p><p> DisplayChar(14,1,'C'); </p><p> //--------------------------------
72、--</p><p> table[2]=temp2%10; </p><p> table[1]=(temp2/10)%10;</p><p> table[0]=(temp2/100)%10;</p><p> DisplayString(0,0,"SetUp T:"); &
73、lt;/p><p> DisplayChar(10,0,table[0]+0x30);</p><p> DisplayChar(11,0,table[1]+0x30);</p><p> DisplayChar(12,0,'.'); //LCD顯示測量值</p><p> DisplayChar(13,0,
74、table[2]+0x30);</p><p> DisplayChar(14,0,'C'); </p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p&
75、gt; tt[7]=x%10; </p><p> tt[6]=(x/10)%10;</p><p> tt[5]=(x/100)%10;</p><p> tt[4]=(x/1000)%10; </p><p> tt[3]=(x/10000)%10;</p>
76、;<p> tt[2]=(x/100000)%10;</p><p> tt[1]=(x/1000000)%10;</p><p> tt[0]=(x/10000000)%10;</p><p> DisplayString(0,0,"measure V:"); </p><p> DisplayC
77、har(0,1,tt[0]+0x30);</p><p> DisplayChar(1,1,tt[1]+0x30);</p><p> DisplayChar(2,1,tt[2]+0x30);</p><p> DisplayChar(3,1,tt[3]+0x30);</p><p> DisplayChar(4,1,tt[4
78、]+0x30);</p><p> DisplayChar(5,1,tt[5]+0x30);</p><p> DisplayChar(6,1,tt[6]+0x30);</p><p> DisplayChar(7,1,tt[7]+0x30); </p><p><b> }</b></p>
79、;<p> if(temp1>temp2){ makeC=0;makeH=1; }</p><p> else if(temp1<temp2){makeC=1;makeH=0;}</p><p> else {makeC=1;makeH=1;}</p><p> if((temp1-temp2)<50&&
80、;(temp1-temp2)>-50)</p><p> pwmData=PID(setup_t,achieve);</p><p> else if (pwmData>1000){pwmData=1000;}</p><p> else {pwmData=0;};</p><p><b> }<
81、;/b></p><p> unsigned int ADC0809()</p><p><b> {</b></p><p> unsigned int adc; unsigned longint getdata;</p><p> ST=0; OE=0; ST=1; ST=0;</p>
82、<p><b> while(1)</b></p><p><b> {</b></p><p> if(EOC==1) break;</p><p><b> }</b></p><p><b> OE=1;</b></p&
83、gt;<p> getdata=ADC_OUT;</p><p><b> OE=0;</b></p><p> adc=getdata*500/256; </p><p> return(adc);</p><p><b> }</b></p&
84、gt;<p> voidLcd_WData(unsignedcharTempData)</p><p><b> {</b></p><p> Lcd_RStatus(); </p><p> Lcd_Data = TempData;</p><p> Lcd_RS = 1;</p&g
85、t;<p> Lcd_RW = 0;</p><p> Lcd_E = 0; </p><p> Lcd_E = 0; </p><p> Lcd_E = 1;</p><p> Lcd_E = 0;</p><p><b> }</b></p><p
86、> voidLcd_WCmd(unsignedcharTempData,unsignedcharBuysC) //寫指令</p><p><b> {</b></p><p> if (BuysC) Lcd_RStatus(); </p><p> Lcd_Data = TempData;</p><
87、p> Lcd_RS = 0;</p><p> Lcd_RW = 0;</p><p> Lcd_E = 0;</p><p> Lcd_E = 0;</p><p> Lcd_E = 1;</p><p> Lcd_E = 0;</p><p> Lcd_E = 0;<
88、;/p><p><b> }</b></p><p><b> //讀數(shù)據(jù)</b></p><p> unsigned char Lcd_RData(void)</p><p><b> {</b></p><p> Lcd_RS = 1;<
89、/p><p> Lcd_RW = 1;</p><p> Lcd_E = 0;</p><p> Lcd_E = 0;</p><p> Lcd_E = 0;</p><p> Lcd_E = 0;</p><p> Lcd_E = 1;</p><p> Lc
90、d_E = 0;</p><p> return(Lcd_Data);</p><p><b> }</b></p><p> void Lcd_RStatus(void)</p><p><b> {</b></p><p> Delay(100);</p&
91、gt;<p><b> }</b></p><p> void Lcd_Init(void) //LCM初始化</p><p><b> {</b></p><p> Lcd_Data = 0;</p><p> Lcd_WCmd(0x38,0); //</p>
92、<p> Delay(24000);</p><p> Lcd_WCmd(0x38,1); //顯示模式設(shè)置,開始要求每次檢測忙信號</p><p> Lcd_WCmd(0x08,1); //關(guān)閉顯示</p><p> Lcd_WCmd(0x01,1); //顯示清屏</p><p> Lcd_WCmd(0x06,1);
93、 // 顯示光標(biāo)移動設(shè)置</p><p> Lcd_WCmd(0x0C,1); // 顯示開及光標(biāo)設(shè)置</p><p><b> }</b></p><p> //按指定位置顯示一個字符</p><p> void DisplayChar(unsigned char X, unsigned char Y, uns
94、igned char DData)</p><p><b> {</b></p><p><b> Y &= 0x1;</b></p><p> X &= 0xF; //限制X不能大于15,Y不能大于1</p><p> if (Y) X |= 0x40; //當(dāng)要顯示第二行
95、時地址碼+0x40;</p><p> X |= 0x80; //算出指令碼</p><p> Lcd_WCmd(X, 0); //這里不檢測忙信號,發(fā)送地址碼</p><p> Lcd_WData(DData);</p><p><b> }</b></p><p> //按指定位置顯
96、示一串字符</p><p> void DisplayString(unsigned char X, unsigned char Y, unsigned char *DData)</p><p><b> {</b></p><p> unsigned char ListLength;</p><p> Lis
97、tLength = 0;</p><p><b> Y &= 0x1;</b></p><p> X &= 0xF; //限制X不能大于15,Y不能大于1</p><p> while (DData[ListLength]!='\0') //若到達字串尾則退出</p><p><
98、;b> {</b></p><p> if (X <= 0xF) //X坐標(biāo)應(yīng)小于0xF</p><p><b> {</b></p><p> DisplayChar(X, Y, DData[ListLength]); //顯示單個字符</p><p> ListLength++;&l
99、t;/p><p><b> X++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> int PID(int setT,int ach
100、e)</p><p><b> { </b></p><p> float p=5,i=1,d=0.5;</p><p> static float eun=0.0;static float en=0.0,en1=0.0,en2=0.0;</p><p> static int output=0.0,outpu
101、t1=50;</p><p> en=setT-ache;</p><p> en=p*en-i*(en-en1)+d*(en1-en2);</p><p> output=output1+en;</p><p> output1=output;</p><p><b> en2=en1;</
102、b></p><p><b> en1=en;</b></p><p> return(output);</p><p><b> }</b></p><p> void Delay(unsignedintdelaytime)</p><p><b&g
103、t; {</b></p><p> while(delaytime--);</p><p><b> }</b></p><p> void t0(void) interrupt 1 </p><p><b> {</b></p><p> T0cou
104、nt++;</p><p><b> }</b></p><p> void t1(void) interrupt 3 </p><p><b> { </b></p><p> TH1=(65536-3000)/256;</p><p> TL1=(65536-3
105、000)%256;</p><p> pwmCount++;</p><p> if(pwmCount<pwmData) PWM=1;</p><p> else PWM=0;</p><p> if(pwmCount==100)</p><p><b> {</b></
106、p><p> pwmCount=0;</p><p><b> } </b></p><p> timecount++;</p><p> if(timecount==250)</p><p><b> {</b></p><p><b&
107、gt; TR0=0;</b></p><p> timecount=0;</p><p><b> flag=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機控制課程設(shè)計---達林算法計算機控制系統(tǒng)設(shè)計
- 計算機控制課程設(shè)計
- 計算機控制_課程設(shè)計-
- 計算機控制課程設(shè)計--啤酒發(fā)酵計算機溫度控制系統(tǒng)設(shè)計
- 計算機控制課程設(shè)計---水位控制系統(tǒng)
- 計算機控制系統(tǒng)課程設(shè)計報告
- 計算機控制系統(tǒng)課程設(shè)計報告
- 水塔-計算機控制課程設(shè)計
- 計算機控制課程設(shè)計——直流電機pwm調(diào)速系統(tǒng)的計算機控制
- 計算機控制技術(shù)課程設(shè)計--油庫計算機監(jiān)控系統(tǒng)硬件設(shè)計
- 計算機控制課程設(shè)計---點陣led顯示系統(tǒng)
- 計算機控制系統(tǒng)最小拍控制課程設(shè)計
- 溫度控制系統(tǒng)計算機控制課程設(shè)計
- 計算機控制系統(tǒng)課程設(shè)計--最小拍控制設(shè)計
- 計算機控制技術(shù)課程設(shè)計-計算機控制技術(shù)及工程應(yīng)用步進電機控制系統(tǒng)
- 基于計算機控制技術(shù)的實驗實訓(xùn)電梯的開發(fā).pdf
- 計算機控制系統(tǒng)
- 計算機控制課程設(shè)計---電加熱爐計算機溫度控制系統(tǒng)設(shè)計
- 計算機控制技術(shù)課程設(shè)計
- 計算機控制及其應(yīng)用課程設(shè)計
評論
0/150
提交評論