購(gòu)買(mǎi)設(shè)計(jì)請(qǐng)充值后下載,,資源目錄下的文件所見(jiàn)即所得,都可以點(diǎn)開(kāi)預(yù)覽,,資料完整,充值下載可得到資源目錄里的所有文件。。?!咀ⅰ浚篸wg后綴為CAD圖紙,doc,docx為WORD文檔,原稿無(wú)水印,可編輯。。。具體請(qǐng)見(jiàn)文件預(yù)覽,有不明白之處,可咨詢QQ:12401814
目 錄
一.課題要求………………………………………………………………………2
二.課程設(shè)計(jì)目的……………………………………………………………2
三.課程設(shè)計(jì)內(nèi)容……………………………………………………………2
四.參考文獻(xiàn)…………………………………………………………………18
17
一 課題要求:
1.采用單片機(jī)來(lái)實(shí)現(xiàn)均勻控制系統(tǒng)的功能。
2.能克服積分飽和(能克服工程設(shè)計(jì)和實(shí)施中的一些問(wèn)題)。
3.易于現(xiàn)場(chǎng)整定和投運(yùn)。
4.要有詳細(xì)說(shuō)明(如程序的功能)。
二 課程設(shè)計(jì)目的:
本課程設(shè)計(jì)提供了一個(gè)既動(dòng)手又動(dòng)腦,自學(xué),查資料,獨(dú)立實(shí)踐的機(jī)會(huì)。將本學(xué)期課本上的理論知識(shí)和實(shí)際有機(jī)的結(jié)合起來(lái),鍛煉實(shí)際分析問(wèn)題和解決問(wèn)題的能力,提高自己適應(yīng)實(shí)際、實(shí)踐編程的能力,使自己對(duì)均勻控制系統(tǒng)更進(jìn)一步了解。給自己一個(gè)鍛煉和提高的機(jī)會(huì)。
三 課程設(shè)計(jì)內(nèi)容:
均勻控制系統(tǒng)具有使控制量與被控量均勻緩慢地在一定范圍內(nèi)變化的特殊功能。在均勻控制系統(tǒng)中,控制量與被控量常常是同樣重要,控制的目的,是 使兩者在擾動(dòng)作用下,都有一個(gè)緩慢而均勻的變化。
在一些工業(yè)生產(chǎn)過(guò)程中,生產(chǎn)的連續(xù)性是其特點(diǎn)之一。每一個(gè)裝置或設(shè)備都與前后的裝置或設(shè)備緊密的聯(lián)系著,前一個(gè)裝置或設(shè)備的出料亮量一般就是后一個(gè)裝置或設(shè)備的進(jìn)料量,而后一裝置或設(shè)備是互相聯(lián)系而又互相影響的。例如石油裂解氣分離過(guò)程,有許多精餾他串聯(lián)在一起工作,前一塔的出料就是后一塔的進(jìn)料。圖a為兩個(gè)連續(xù)操作的精餾塔,前一塔的出料是后一塔的進(jìn)料。為了保證分餾過(guò)程正常運(yùn)行,要求將一號(hào)塔釜液位穩(wěn)定在一定的范圍內(nèi),故設(shè)有液位的控制系統(tǒng)。而后一精餾塔又希望進(jìn)料穩(wěn)定 設(shè)有流量控制系統(tǒng)。顯然,這兩套系統(tǒng)是不能協(xié)調(diào)工作的。假如1號(hào)塔在擾動(dòng)作用下使其塔釜液位上升時(shí),液位調(diào)節(jié)器發(fā)出控制信號(hào)去開(kāi)大調(diào)節(jié)閥1的開(kāi)度,從而使出料流量增大;由于1號(hào)塔的出料量就是2號(hào)塔的進(jìn)料量,因而引起2號(hào)塔進(jìn)料量的增加,于是,流量調(diào)節(jié)器發(fā)出控制信號(hào)去關(guān)小調(diào)節(jié)閥2的開(kāi)度。這樣,按液位信號(hào),調(diào)節(jié)閥1的開(kāi)度要開(kāi)大,流量要增大;安流量信號(hào),調(diào)節(jié)閥2的開(kāi)度要關(guān)小,流量要減小。而調(diào)節(jié)閥1,2裝在同一條管道上,結(jié)果,兩套控制系統(tǒng)互相矛盾,在物料供求上互不兼顧,不能滿足工藝生產(chǎn)要求。
為了解決前后兩個(gè)塔之間在物料供求上的矛盾,可在前后兩個(gè)串聯(lián)的塔中間增設(shè)一個(gè)緩沖設(shè)備。但是,增加緩沖設(shè)備不僅要增加投資,而且要增加流體輸送過(guò)程中的能量消耗。尤其是有些生產(chǎn)過(guò)程的中間物料或產(chǎn)品不允許中間停留存在,否則,會(huì)使這些中間的物料或產(chǎn)品或重新聚合。所以,必須從自動(dòng)控制方案設(shè)計(jì)上去找出路,以滿足前后裝置或設(shè)備在物料供求上互相均勻協(xié)調(diào),統(tǒng)籌兼顧的要求。通常把能實(shí)現(xiàn)這樣控制目的的控制系統(tǒng)稱(chēng)為均勻控制系統(tǒng)。
其特點(diǎn)如下:
1 液位(或壓力)和流量?jī)蓚€(gè)變量都是變化的,不是固定不變的。
2 兩個(gè)變量的調(diào)節(jié)過(guò)程在工藝容許的范圍內(nèi)是緩慢地變化的。
下面是一種用單片機(jī)來(lái)實(shí)現(xiàn)溫度均勻控制的系統(tǒng)
一種基于Smith預(yù)估器的溫度均勻控制的系統(tǒng)
環(huán)境溫度對(duì)儀器儀表性能指標(biāo)有很大的影響。為了更準(zhǔn)確地模擬儀表的實(shí)際工作環(huán)境,度量溫度對(duì)儀表參數(shù)的影響,有必要研制一個(gè)溫控系統(tǒng)。一般的溫控系統(tǒng)為一大滯后系統(tǒng),純滯后可引起系統(tǒng)不穩(wěn)定或降低系統(tǒng)的反饋性能??紤]到Smith預(yù)估器從理論上解決了純滯后系統(tǒng)的控制問(wèn)題,本文介紹一個(gè)帶Smith預(yù)估器的溫控系統(tǒng),該系統(tǒng)能有效抑制純滯后的影響,而且魯棒性強(qiáng)。實(shí)驗(yàn)結(jié)果表明,溫控精度可達(dá)±0.2℃。
1 帶Smith預(yù)估器的控制器設(shè)計(jì)
根據(jù)溫控箱的結(jié)構(gòu)及一般熱力學(xué)原理,可得到以下溫控箱為被控對(duì)象的傳遞函數(shù),其近似表達(dá)為
(1)
式中:Gp(S)為被控對(duì)象中不含純滯后的部分??梢钥闯?,它是一個(gè)帶純滯后的一階慣性環(huán)節(jié)。根據(jù)所設(shè)計(jì)的溫控箱和實(shí)際參數(shù)辨識(shí),可得式(1)中的T=16s,K0=1.5,τ=1.4s。
一般的溫控系統(tǒng)如圖1所示。圖中,Gc(S)表示設(shè)計(jì)的控制器,F(xiàn)為控制器直流分量等干擾。其閉環(huán)傳遞函數(shù)為
(2)
由于特征方程里含有e-τs項(xiàng),這對(duì)控制系統(tǒng)穩(wěn)定性極其不利,若τ足夠大,系統(tǒng)就很難穩(wěn)定。而且由于系統(tǒng)中含有純滯后環(huán)節(jié),使控制器設(shè)計(jì)變得復(fù)雜。
圖1 一般溫控系統(tǒng)方框圖
Smith預(yù)估器[1]是克服純滯后影響的有效方法之一,因此本文在常規(guī)校正環(huán)節(jié)基礎(chǔ)上引入了Smith預(yù)估器補(bǔ)償,其控制結(jié)構(gòu)如圖2所示,圖中虛線框內(nèi)為Smith預(yù)估控制的原理框圖。Smith預(yù)估控制的實(shí)質(zhì)就是與實(shí)際對(duì)象并聯(lián)一個(gè)模型Gp(S)(1-e-τs),因此,控制器Gc(S)的等效控制對(duì)象變?yōu)镚p(S),也就是說(shuō),設(shè)計(jì)控制器Gc(S)時(shí)不必考慮純滯后環(huán)節(jié)的影響。此時(shí)系統(tǒng)的閉環(huán)傳遞函數(shù)為
(3)
從式(3)可見(jiàn),e-τs已不包含在系統(tǒng)的特征方程里,因此系統(tǒng)性能完全不受純滯后的影響。Smith預(yù)估控制從理論上提供了將含有純滯后的對(duì)象簡(jiǎn)化為不含純滯后的對(duì)象進(jìn)行控制的方法。
圖2 帶Smith預(yù)估器的溫控系統(tǒng)
2 溫控系統(tǒng)的硬件設(shè)計(jì)
溫控系統(tǒng)的構(gòu)成如圖3所示,由溫度控制箱、溫度測(cè)量變換、測(cè)量放大、大功率運(yùn)放、A/D與D/A轉(zhuǎn)換器、輸入光電隔離、輸入光電隔離、驅(qū)動(dòng)電路、8098單片機(jī)[2]、鍵盤(pán)顯示、存儲(chǔ)器組成。其中8098單片機(jī)是核心,由它統(tǒng)一管理完成。在該系統(tǒng)中,溫度和時(shí)間的設(shè)置、溫度值及誤差顯示、控制參數(shù)的設(shè)置、運(yùn)行、暫停及復(fù)位等功能由鍵盤(pán)及顯示電路完成,溫度設(shè)定范圍為0~100℃,給定分辨率設(shè)置為0.01℃,測(cè)溫范圍為20~80℃。
圖3 溫控系統(tǒng)硬件組成框圖
溫度控制箱的執(zhí)行部件為加熱片,它可以使溫控箱內(nèi)溫度分布較為均勻;選擇適當(dāng)功率的加熱片,可以提高系統(tǒng)的升溫速度,縮短到達(dá)熱平衡的時(shí)間。為了保證精度,溫度測(cè)量變換器采用鉑電阻及專(zhuān)門(mén)電路,該電路利用橋式電路結(jié)構(gòu)及正反饋原理改善了溫度傳感器的檢測(cè)線性度,因此其測(cè)量精度、線性度和抗干擾性能都較好;同時(shí)采用數(shù)字反饋,還可以利用計(jì)算機(jī)補(bǔ)償技術(shù),進(jìn)一步提高溫度檢測(cè)的精度和線性度;為抵消鉑電阻引線帶來(lái)的干擾,采用了四線制接法。相應(yīng)于溫度傳感器的精度,A/D與D/A轉(zhuǎn)換都選用12位轉(zhuǎn)換器,分辨率為2-12>0.1%,能滿足精密儀表精度要求。加入光電隔離器的目的是防止線路干擾的引入。
該溫控系統(tǒng)的工作原理為:溫度測(cè)量變換器所測(cè)量的溫度信號(hào)經(jīng)放大電路放大、A/D轉(zhuǎn)換,送到單片機(jī)中,單片機(jī)把它同由鍵盤(pán)實(shí)現(xiàn)的給定溫度進(jìn)行比較,再由單片機(jī)給出控制量,然后將控制量送驅(qū)動(dòng)電路、D/A轉(zhuǎn)換后去驅(qū)動(dòng)大功率運(yùn)放對(duì)溫度控制箱進(jìn)行控制,從而構(gòu)成了實(shí)時(shí)閉環(huán)系統(tǒng)。
3 溫控系統(tǒng)軟件設(shè)計(jì)
溫控系統(tǒng)的軟件設(shè)計(jì)是在8098單片機(jī)上,由單片機(jī)來(lái)控制。主控程序包括初始化、鍵盤(pán)顯示管理及各子程序調(diào)用。溫度信號(hào)的采集、數(shù)字濾波、鉑電阻的非線性補(bǔ)償、溫度的顯示、遺傳算法優(yōu)化控制等功能的實(shí)現(xiàn)由各子程序完成。數(shù)字濾波可采用均值法、中間值法和一階慣性法等方法,目的是濾除干擾信號(hào)的影響。由于鉑電阻的電阻值與其所受的溫度并不完全是線性的,因而設(shè)計(jì)了分段線性插值線性化程序來(lái)對(duì)鉑電阻進(jìn)行非線性補(bǔ)償,得到了較為滿意的效果,其誤差低于0.1%。軟件還包括對(duì)系統(tǒng)的保護(hù)和快速加溫的切換等。由于儀器儀表的工作環(huán)境存在強(qiáng)電磁場(chǎng)干擾,為了提高溫控系統(tǒng)的可靠性,在硬件上可采用光電隔離器;在軟件上除了設(shè)計(jì)數(shù)字濾波程序外,還可設(shè)計(jì)軟件監(jiān)視器等。
通過(guò)地址鎖存器74LS373擴(kuò)展一片8K字節(jié)的2764作為程序存儲(chǔ)器:存放程序、控制表及加溫曲線;擴(kuò)展一片8K字節(jié)的6264作為外部數(shù)據(jù)存儲(chǔ)器:存放上次輸入的曲線參數(shù)及有關(guān)的數(shù)據(jù),同時(shí)設(shè)計(jì)可靠的保護(hù)電路,實(shí)現(xiàn)掉電保護(hù)功能。為使系統(tǒng)在運(yùn)行中能準(zhǔn)確記錄保護(hù)動(dòng)作和控制投入的時(shí)間,配置了實(shí)時(shí)日歷時(shí)鐘芯片MSM5832,該芯片具有秒、分、時(shí)、日、星期、月和年等計(jì)時(shí)功能。8155作為打印機(jī)的接口,同時(shí)也用作聲光報(bào)警的接口。8279作為鍵盤(pán)、顯示器的接口??刹捎冒存I、定時(shí)和故障備忘三種打印方式,可打印爐溫、曲線和故障等;當(dāng)系統(tǒng)出現(xiàn)溫度越限、斷偶及其它故障時(shí),可進(jìn)行聲光報(bào)警及相應(yīng)提示符顯示。12位雙積分A/D轉(zhuǎn)換器ICL7109和12位D/A轉(zhuǎn)換器DAC1208用于溫度的測(cè)量與控制。A/D轉(zhuǎn)換輸出的12位數(shù)據(jù)按兩個(gè)8位數(shù)分次讀取,以配合CPU的要求。12位D/A轉(zhuǎn)換器的工作采用雙緩沖方式,數(shù)據(jù)按兩個(gè)字節(jié)分別打入鎖存器 (先送高8位數(shù)據(jù),再送低4位數(shù)據(jù)),然后將該12位數(shù)據(jù)一次送入DAC寄存器進(jìn)行轉(zhuǎn)換。
控制器是控制系統(tǒng)的核心,控制器是一種利用專(zhuān)家知識(shí)和操作者經(jīng)驗(yàn)設(shè)計(jì)的專(zhuān)家控制系統(tǒng),設(shè)計(jì)時(shí)不用數(shù)學(xué)解析模型來(lái)描述受控系統(tǒng)的特性。在本溫度控制系統(tǒng)設(shè)計(jì)中,采用二維模糊控制器,即以偏差e和偏差變化率Δe作為控制器的輸入變量,把加熱操作量作為輸出變量。在控制過(guò)程中,同時(shí)把偏差和偏差的變化率作為輸入量,這種方法不僅能保證系統(tǒng)控制的穩(wěn)定性,而且還可減少超調(diào)量和振蕩現(xiàn)象。根據(jù)受控系統(tǒng)的實(shí)際情況,確定輸入變量的測(cè)量范圍和輸出變量的控制作用范圍,以確定每個(gè)變量的論域,Ke、Kec和Ku分別為輸入和輸出變量的量化因子和比例因子。先經(jīng)限幅處理,再經(jīng)量化處理就得到了E和EC。根據(jù)當(dāng)前已求得的E和EC,直接查詢控制表就獲得控制量的變化值ΔU,將該變化值ΔU乘以比例因子Ku,即可得到當(dāng)前的實(shí)際控制量增量Δu。再將該增量和前一采樣時(shí)刻的實(shí)際控制量相加,就得到目前應(yīng)實(shí)施的控制動(dòng)作,即 uk=uk-1+Ku·ΔU。
在單片機(jī)中對(duì)輸入的量進(jìn)行推理,須將所有描述控制過(guò)程的控制規(guī)則存儲(chǔ)在單片機(jī)的EPROM中。把專(zhuān)家知識(shí)和現(xiàn)場(chǎng)經(jīng)驗(yàn)轉(zhuǎn)換為用語(yǔ)言表達(dá)的控制規(guī)則,即設(shè)計(jì)控制規(guī)則庫(kù)。本系統(tǒng)中,偏差E、偏差變化率EC和控制量的變化的子集定義為
E={NB,NM,NS,NO,P0,PS,PM,PB}
EC={NB,NM,NS,0,PS,PM,PB}
ΔU={NB,NM,NS,0,PS,PM,PB}
P、N分別表示正、負(fù),B、M、S分別表示大、中、小。
建立控制規(guī)則表的基本思想,以偏差為負(fù)的情況說(shuō)明。當(dāng)偏差為負(fù)大時(shí),若偏差變化為負(fù),表明此時(shí)偏差有增大的趨勢(shì),為盡快消除已有的負(fù)大偏差并抑制偏差進(jìn)一步增大,所以控制量的變化取正大。當(dāng)偏差為負(fù)而偏差變化為正時(shí),系統(tǒng)本身已有減少偏差的趨勢(shì),所以為盡快消除偏差且又不超調(diào),應(yīng)取較小的控制量。故當(dāng)偏差為負(fù)大且偏差變化為正小時(shí),控制量的變化取為正中。若偏差變化為正大或正中時(shí),控制量不宜增加,否則將會(huì)造成較大的超調(diào),出現(xiàn)正偏差,因此這時(shí)的控制量變化取為0級(jí)。當(dāng)偏差為負(fù)中時(shí),控制量的變化應(yīng)該使偏差盡快消除,基于這種原則,控制量的變化選擇同偏差為負(fù)大時(shí)相同。當(dāng)偏差為負(fù)小時(shí),系統(tǒng)接近穩(wěn)態(tài)。若偏差變化為負(fù)時(shí),選取控制量變化為正中,以抑制偏差往負(fù)方向變化;若偏差變化為正,系統(tǒng)本身有消除負(fù)小偏差的趨勢(shì),選取控制量變化為正小即可。可見(jiàn)選取控制量變化的原則是:當(dāng)偏差大或較大時(shí),選擇控制量的大小以盡快消除偏差為主;而當(dāng)偏差較小時(shí),選擇控制量要注意防止超調(diào),以使系統(tǒng)穩(wěn)定為主要出發(fā)點(diǎn)。
為節(jié)省內(nèi)存,提高單片機(jī)應(yīng)用系統(tǒng)的工作速度,實(shí)現(xiàn)有效的實(shí)時(shí)控制,根據(jù)隸屬函數(shù)和控制規(guī)則表離線計(jì)算對(duì)應(yīng)的控制表(即查詢表),并將該表內(nèi)置在應(yīng)用軟件的EPROM表中,供實(shí)時(shí)控制過(guò)程使用。在實(shí)際控制時(shí),控制器首先把輸入量量化到輸入量的語(yǔ)言變量論域中,再根據(jù)量化的結(jié)果去查表求出控制量,這樣可大大提高控制的實(shí)時(shí)效果,節(jié)省內(nèi)存空間。
圖4 溫控系統(tǒng)軟件流程圖
4 結(jié)果分析與討論
采用體積為φ0.46m×0.34m的溫度控制箱,對(duì)LH-1型撓性陀螺儀進(jìn)行了實(shí)驗(yàn)。結(jié)果為:溫控系統(tǒng)的控制精度可達(dá)±0.2℃,可見(jiàn)溫控精度較高;用100W的加熱片對(duì)溫控系統(tǒng)加熱,圖5給出了溫控系統(tǒng)溫度的變化曲線,溫度的設(shè)定值為55℃,大約20min就達(dá)到了55℃,系統(tǒng)的平均升溫速率為2.5℃/min左右。這樣的溫升速率很理想,因?yàn)樯郎靥?,在達(dá)到設(shè)定溫度時(shí)會(huì)產(chǎn)生較大的“過(guò)沖”;若升溫太慢,則要經(jīng)過(guò)較長(zhǎng)的時(shí)間才能達(dá)到設(shè)定溫度,影響工作效率。
圖5 溫控系統(tǒng)溫度變化曲線
為了得到更好的控制效果和升溫速度,可以采用這樣的方法:在不同階段,用不同功率的加熱片進(jìn)行加熱,即在開(kāi)始的過(guò)渡階段使用較大功率的加熱片加熱,過(guò)一段時(shí)間后用較小功率的加熱片加熱,這就提高了過(guò)渡階段的升溫速度?!】偨Y(jié)
①基于Smith預(yù)估器的溫控系統(tǒng)能有效克服純滯后對(duì)控制系統(tǒng)穩(wěn)定性的影響
具有較好的魯棒性能達(dá)到溫度均勻控制?!?
②由單片機(jī)實(shí)現(xiàn)的均勻控制系統(tǒng)具有調(diào)試方便、可靠性好等優(yōu)點(diǎn)。
③采用體積為φ0.46m×0.34m的溫度控制箱,對(duì)LH-1型撓性陀螺儀進(jìn)行了實(shí)驗(yàn)。結(jié)果為:溫控系統(tǒng)的控制精度為±0.2℃。
四 相關(guān)程序:
#include
#include
Sbit RST =p2^0;
Sbit CLK =p2^1;
Sbit DQ =p2^2;
Sbit TSOR =p2^3;
Sbit ALERT =p2^7;
Sbi RW =2^6;
Sbit EN =p2^5;
Static unsigned char templ,tenmp2; //溫度值的整數(shù)部分、小數(shù)部分
Static unsigned char pls plsset; //數(shù)字電位器的電位值、設(shè)定值
Static unsigned char min,sec; //分鐘、秒
Static unsigned char count; //Timer0中斷計(jì)數(shù)
Static unsigned char minset; //設(shè)定的分鐘數(shù)
Static unsigned char statusl,status2; //狀態(tài)標(biāo)志
bit stop,timeover; //定時(shí)停止、結(jié)束
static char line0[]=“ 00:00;” //
static char line1[]=“ .C W;”
void initinterupt();
void keyboarddelay();
void delayl();
void delays();
void writecommand(unsigned char c);
void writedata(unsigned char c);
void showchar(unsigned char pls,unsigned char c);
void showstring(unsigned char line.char*ptr);
void initlcd();
unsigned char getkey();
void changepos(bit sel,unsigned char plsl,unsigned char pls2);
void delay15();
void delay60();
void delay100ms();
void write0ts();
void write1ts();
bit readts();
void resets();
void writebts(unsigned char byte);
unsigned char readbts();
void initts();
void initts();
void gettempts();
void main (void){
char code str1[]=“Hello world”;
char code str2[]=“2006-1-10”;
unsigned char I;
SP=0x50;
Alert=0; //報(bào)警燈滅
Tsor=1; //1-wire總線釋放
Delayl()l
Initlcd(); //初始化LCD
Delayl();
Showstring(0,str1); //啟動(dòng)畫(huà)面
Showstring(1,str2);
For(i=0;i<15;i++);
Delay100ms();
Initinterupy(); //初始化中斷設(shè)置
Minset=10; //缺省定時(shí)10分鐘
Posset=0; //缺省電位器值0
Min=minset; //初始化數(shù)據(jù)
Pos=posset;
Sec=0;
Count=0;
P1=0xf0;
Statusl=0;
Status2=0;
Stop=1;
Timeover=0;
Changepos(0,255-pos,255-pos); //設(shè)置電位器
Initts(); //初始化溫度計(jì)
While(1) //循環(huán)顯示溫度值
{
Gettempts();
Line1[0]=0x20;
I=templ;
If(i>39) //超過(guò)40攝氏度,告警燈亮
Alert=1;
If(i>99) //超過(guò)100攝氏度,顯示溫度的百位
{
Line1[0]=0x31;
i-=100;
}
Line1[1]=i/10+0x30; //顯示溫度的十位
Line1[2]=i%/10+0x30; //顯示個(gè)位
Line1[4]=temp2+0x30; //顯示小數(shù)位
If(timeover) //若定時(shí)結(jié)束,則電位器緩慢復(fù)0
}
For(;pls>0;pls--);
{
Changepls(0,255-pos,255-pos);
_nop_();
_nop_();
}
Timeover=0;
Posset=0;
}
If(pos>posset) //若按鍵修改電位器位置
{
For(;pos>posset;pos--) //則緩變到設(shè)定值
{
Changepos (0,255-pos,255-pos);
_nop_();
_nop_();
}
Changepos(0,255-pos,255-pos);
}
Else if(pos99)
{
Line1[9]=i/100+0x30;
I=i%100;
}
Line1[10]=i/10+0x30;
Line2[11]=i%10+0x30;
Showstring(1,line1);
Line0[5]=min/10+0/30; //顯示時(shí)間
Line0[6]=min%10+0x30;
Line0[8]=sec/10+0x30;
Line0[9]=sec%10+0x30;
Showstrjing(0,line0);
Delay100ms();
}
}
Int0_process()interrupt0using0
{
Unsigned char key;
Unsigned char keycode[]=“TP”; //計(jì)時(shí)調(diào)節(jié)/功率調(diào)節(jié)狀態(tài)編碼
Unsigned char step[3]={1,2,5}; //計(jì)時(shí)和功率調(diào)節(jié)步長(zhǎng)
EA=0;
Key=getkey(); //獲得按鍵值
Switch(key) //按鍵分支處理
{
Case0: //按鍵0,切換計(jì)時(shí)開(kāi)始/停止
Stop=!stop;
Min=minset; //計(jì)數(shù)復(fù)位
Sec=0;
Break;
Case1: //按鍵1,2,3計(jì)時(shí)按照步長(zhǎng)增加
Case2:
Case3:
If(stop)
{
Minset+=step[key-1];
If(minset>60)
Minset=0;
Min=minset;
}
Break;
Case5: //按鍵5,6,7,功率等級(jí)按照步長(zhǎng)增加
Case6:
Case7:
If(stop)
{
Minset-=step[key-5]
If(minset>60)
Minset=0;
Min=minset;
}
Break;
Case9:
Case10:
Case11:
Posset+=step[key-9];
Break;
Case13; //按鍵13,14,15,功率等級(jí)按照步長(zhǎng)減少
Case14:
Case15:
Posset-=step[key-13];
Break;
Default:
Break;
}
Tro=!stop; //按照狀態(tài)標(biāo)志設(shè)置定時(shí)器0啟動(dòng)與否
Keyboarddelay(); //延時(shí)
P1=0xf0; //重置p1口高4位為高電平
EA=1; //開(kāi)中斷
}
Timer0_process()interrupt1using0
{
EA=0; //關(guān)中斷
TR0=0; //關(guān)定時(shí)器0
TL0=0x00; //重置定時(shí)常數(shù)
TH0=0x4c;
Count++; //軟件計(jì)數(shù)自加
if(count==20) //如果到累計(jì)定時(shí)到達(dá)1s
{
If(sec==0) //定時(shí)處理
{
If(min==0) //總定時(shí)到,則置結(jié)束標(biāo)志
Timeover=1;
Else //否則,則時(shí)間計(jì)數(shù)遞減
{
Min--;
Sec=59;
}
}
Else
Sec--;
Count=0;
}
TR0=1;
EA=1;
}
Void delay100ms() //延時(shí)100ms
{
Unsigned char I,j,k;
For(i=0;i<8;i++)
For(j=0;j<25;j++)
For(k=0;k<250;k++);
}
void delay15() //延時(shí)15us
{
unsigned char I:
for(i=0;i<8;I++);
}
void delay60() //延時(shí)60us
{
unsigned char I;
for (I=0;I<30;I++);
}
void write0ts() //寫(xiě)bit 0
{
tsor=1;
tsor=0;l
delay15(); //延時(shí)
delay15();
delay15();
delay15();
tsor=1;
_nop_();
_nop_();
}
void writets() //寫(xiě)bit 1
{
tsor=1;
tsor=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
tsor=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
delay15();
delay15();
delay15();
}
bit readts() //讀取數(shù)據(jù)位
{
bit b;
tsor=1;
tsor=0;
_nop_();
_nop_();
_nop_();
_nop_();
tsor=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
b=tsor;
delay15();
delay15();
delay15();
_nop_();
_nop_();
return b;
}
void resets() //復(fù)位
{unsigned char I;
tsor=1;
tsor=0;
for(I=0;I<8;I++)
delay60();
}
void writebts(unsigned char byte) //寫(xiě)一字節(jié)(byte)
{unsigned char I;
for(I=0;I<8;I++)
{
if (byte&0x01) //最低bit為1否?
Write1ts();
Else
Write0ts();
Byte=byte>>1; //字節(jié)右移1位
}
}
unsigned char readbts() //讀一字節(jié)(byte)
{
unsigned char I,j;
bit b;
j=0;
for(I=0;I<8;I++)
{
b=readts();
{
if(b)
j+=1;
j=_cror_(j,1); //循環(huán)右移1位
}
returnj;
}
void initts() //初始化溫度計(jì)
{
reset(); //復(fù)位總線
writebts(0xcc); //忽略rom匹配操作
writebts(0x4e); //設(shè)置寫(xiě)模式
writebts(0x64); //寫(xiě)溫度上限th為100℃
writebts(0x8a); //寫(xiě)溫度下限為-10℃
writebts(0x1f); //寫(xiě)溫度計(jì)配置寄存器
}
Void gettempts() //獲得溫度,2字節(jié)數(shù)據(jù)分別放在temp1、temp2中
{
Rest(); //復(fù)位總線
Writebts(0xcc); //忽略rom匹配操作
Writebts(0x44); //溫度轉(zhuǎn)換命令
Delay100ms(); //延時(shí)100ms
Reset(); //復(fù)位
Writebts(0xcc); //忽略rom匹配操作
Writebts(0xbe); //讀取寄存器
Temp2=readbts(); //讀取第1字節(jié)
Temp1=readbts(); //讀取第2字節(jié)
Readbts(); //讀取第3字節(jié)
Readbts(); //讀取第4字節(jié)
Readbts(); //讀取第5字節(jié)
Readbts(); //讀取第6字節(jié)
Readbts(); //讀取第7字節(jié)
Readbts(); //讀取第8字節(jié)
Readbts(); //讀取第9字節(jié)
Temp1=temp1<<4;
Temp1+=(temp2&0xf0)>>4; //獲得溫度值整數(shù)部分
Temp2=(temp2&0x0f)?5:0; //獲得溫度值小數(shù)部分
四 參考文獻(xiàn)
趙亮、侯國(guó)銳 編著 單片機(jī)C語(yǔ)言編程與實(shí)例 北京:人民郵電出版社 2004年1月
王子才 編著 控制系統(tǒng)設(shè)計(jì)手冊(cè) 北京:國(guó)防工業(yè)出版社 1993年3月
徐春山 主編 過(guò)程控制儀表 北京:冶金工業(yè)出版社 1993年
龐國(guó)仲 編著 自動(dòng)控制原理 安徽合肥:中國(guó)科學(xué)技術(shù)大學(xué)出版社 1993年
邵裕森 巴筱云 過(guò)程控制系統(tǒng)及儀表 機(jī)械工業(yè)出版社 1993年