2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論