|
目錄
前言... 2
第一章 溫度測(cè)量與單片機(jī)現(xiàn)狀... 3
1.1溫度控制系統(tǒng)的發(fā)展及現(xiàn)狀... 3
1.2 單片機(jī)實(shí)現(xiàn)溫控系統(tǒng)的現(xiàn)狀... 3
1.3 溫室大棚設(shè)計(jì)... 4
第二章 系統(tǒng)的硬件設(shè)計(jì)... 5
2.1 系統(tǒng)總體設(shè)計(jì)... 5
2.2 AT89C51單片機(jī)... 6
2.3 ADC轉(zhuǎn)換芯片ADC0832. 7
2.4LED顯示部分... 8
2.5 鍵盤部分... 9
2.6 傳感器連接電路... 10
第三章 系統(tǒng)軟件設(shè)計(jì)... 11
3.1軟件總體設(shè)計(jì)... 11
3.2 AD轉(zhuǎn)換程序設(shè)計(jì)... 12
3.3 鍵盤程序設(shè)計(jì)... 12
3.4 LED顯示程序設(shè)計(jì)... 12
3.5 程序運(yùn)行結(jié)果... 12
第四章 系統(tǒng)誤差分析與處理... 14
4.1 電路部分... 14
4.2 軟件部分... 15
第五章 小結(jié)... 15
參考文獻(xiàn):... 16
附錄... 17
前言
在工業(yè)生產(chǎn)中,電流、電壓、溫度、壓力、流量、流速和開關(guān)量都是常用的主要被控參數(shù)。其中,溫度控制也越來越重要。在工業(yè)生產(chǎn)的很多領(lǐng)域中,人們都需要對(duì)各類加熱爐、熱處理爐、反應(yīng)爐和鍋爐中的溫度進(jìn)行檢測(cè)和控制。采用單片機(jī)對(duì)溫度進(jìn)行控制不僅具有控制方便、簡(jiǎn)單和靈活性大等優(yōu)點(diǎn),而且可以大幅度提高被控溫度的技術(shù)指標(biāo),從而大大的提高產(chǎn)品的質(zhì)量和數(shù)量。因此,單片機(jī)對(duì)溫度的控制問題是工業(yè)生產(chǎn)中經(jīng)常會(huì)遇到的控制問題。
溫度是工業(yè)生產(chǎn)中常見的工藝參數(shù)之一, 任何物理變化和化學(xué)反應(yīng)過程都與溫度密切相關(guān), 因此溫度控制是生產(chǎn)自動(dòng)化的重要任務(wù)。 對(duì)于不同生產(chǎn)情況和工藝要求下的溫度控制, 所采用的加熱方式, 控制方式都不同。 隨著單片機(jī)的飛速發(fā)展, 通過單片機(jī)對(duì)被控對(duì)象進(jìn)行控制日益廣泛, 具有體積小、功能強(qiáng)、性價(jià)比高等特點(diǎn), 把單片機(jī)應(yīng)用于溫度控制系統(tǒng)中可以起到更好的控溫作用, 電熱恒溫烘箱是使用單片機(jī)進(jìn)行溫度控制的典型應(yīng)用, 采用單片機(jī)做主控單元, 無觸點(diǎn)控制, 可完成對(duì)溫度的采集和控制等的要求[1]。
我國北方冬季寒冷而漫長,大力推廣蔬菜大棚種植蔬菜能夠更好地滿足人民生活水平日益提高的需要。冬季蔬菜大棚管理最重要的一個(gè)因素就是溫度的控制。溫度管理一般把一天分為午前、午后、前半夜和后半夜4 個(gè)時(shí)段來進(jìn)行溫度調(diào)節(jié)。午前以促進(jìn)光合作用、增加同化量為主,一般應(yīng)將棚溫保持在25~30℃為宜;午后光合作用呈下降趨勢(shì),應(yīng)將溫度比午前降低5℃左右,以20 ~25℃為好,避免高溫下養(yǎng)分消耗過多。日落后4~5h內(nèi),要將棚內(nèi)溫度從20℃逐漸降到15℃上下,以促進(jìn)體內(nèi)同化物的運(yùn)轉(zhuǎn)。此后,再將夜溫降到10~12℃,以抑制呼吸、減少消耗、增加積累。但不可把溫度降得過低,以免發(fā)生低溫危害。另外,陰雨天光照不足,光合作用不能正常進(jìn)行棚內(nèi)溫度也應(yīng)比晴天低5℃左右,以降低呼吸消耗。單片機(jī)是一種集CPU、RAM、ROM、I/O接口和中斷系統(tǒng)等部分于一體的器件,只需要外加電源和晶振就可實(shí)現(xiàn)對(duì)數(shù)字信息的處理和控制。因此,單片機(jī)廣泛用于現(xiàn)代工業(yè)控制中。控制具有體積小、重量輕、價(jià)格低、可靠性高、耗電少和靈活機(jī)動(dòng)等許多優(yōu)點(diǎn),因此如果能利用單片機(jī)進(jìn)行溫度的測(cè)量和控制,將會(huì)大大提高溫度測(cè)量和控制的可靠性和靈活性。
第一章 溫度測(cè)量與單片機(jī)現(xiàn)狀1.1溫度控制系統(tǒng)的發(fā)展及現(xiàn)狀
溫度控制廣泛應(yīng)用于社會(huì)生活的各個(gè)領(lǐng)域,如家電、汽車、材料、電力電子等。常用的控制方法、電路以及所使用的測(cè)量方式根據(jù)應(yīng)用場(chǎng)合和所要求的性能指標(biāo)有所不同。最近十年來,在溫度控制方法上有了快速的發(fā)展。己從傳統(tǒng)的直接控制轉(zhuǎn)變成PID控制、模糊控制、神經(jīng)網(wǎng)絡(luò)控制和遺傳算法等控制方法。
溫度測(cè)量是工業(yè)、農(nóng)業(yè)、國防和科研等部門最普遍的測(cè)量項(xiàng)目。它在工農(nóng)業(yè)生產(chǎn)、現(xiàn)代科學(xué)研究及高新技術(shù)開發(fā)過程中也是一個(gè)極其普遍而重要的測(cè)量參數(shù)。
溫度測(cè)量首先是由溫度傳感器來實(shí)現(xiàn)的。測(cè)溫儀器通常由溫度傳感器和信號(hào)處理兩部分組成。溫度測(cè)量的過程就是通過溫度傳感器將被測(cè)對(duì)象的溫度值轉(zhuǎn)換成電的或其它形式的信號(hào),傳遞給信號(hào)處理電路進(jìn)行信號(hào)處理轉(zhuǎn)換成溫度值顯示出來。溫度傳感器隨著溫度變化而引起變化的物理參數(shù)有:膨脹、電阻、電容、熱電動(dòng)勢(shì)、磁性能、頻率、光學(xué)特性及熱噪聲等等。隨著生產(chǎn)的發(fā)展,新型溫度傳感器還會(huì)不斷出現(xiàn),目前,國內(nèi)外通用的溫度傳感器及測(cè)溫儀大致有以下幾種:熱膨脹式溫度計(jì),電阻溫度計(jì),熱電偶,輻射式測(cè)溫儀表。
熱電阻是利用導(dǎo)體或半導(dǎo)體的電阻值隨溫度變化而變化的特性來測(cè)量溫度的一種感溫元件。使用熱電阻作感溫元件的溫度計(jì)常稱為電阻溫度計(jì)。熱電阻具有體積小、反應(yīng)快、使用方便的優(yōu)點(diǎn),通過熱電阻,可以把溫度及其變化轉(zhuǎn)換成電學(xué)量或電學(xué)量的變化加以測(cè)量。所以,它被廣泛應(yīng)用于工、農(nóng)、醫(yī)、交通、軍事、科研等各個(gè)領(lǐng)域的溫度測(cè)量和控制工作中。本次課程設(shè)計(jì)中就采用鉑熱電阻PT100傳感器。
1.2 單片機(jī)實(shí)現(xiàn)溫控系統(tǒng)的現(xiàn)狀
單片機(jī)是一種集CPU、RAM、ROM、I/O接口和中斷系統(tǒng)等部分于一體的器件,只需要外加電源和晶振就可實(shí)現(xiàn)對(duì)數(shù)字信息的處理和控制。因此,單片機(jī)廣泛用于現(xiàn)代工業(yè)控制中?刂凭哂畜w積小、重量輕、價(jià)格低、可靠性高、耗電少和靈活機(jī)動(dòng)等許多優(yōu)點(diǎn),因此如果能利用單片機(jī)進(jìn)行溫度的測(cè)量和控制,將會(huì)大大提高溫度測(cè)量和控制的可靠性和靈活性。單片機(jī)對(duì)溫度測(cè)量控制過程是借助于傳感器、A/D轉(zhuǎn)換器以及擴(kuò)展接口和執(zhí)行機(jī)構(gòu)來進(jìn)行的。在閉環(huán)型過程控制中,過程的實(shí)時(shí)參數(shù)由傳感器和A/D轉(zhuǎn)換器來實(shí)時(shí)采集,并由單片機(jī)自動(dòng)記錄、處理并控制執(zhí)行機(jī)構(gòu)動(dòng)作來進(jìn)行調(diào)節(jié)和控制。因此需要對(duì)單片機(jī)進(jìn)行擴(kuò)展和開發(fā),來形成整個(gè)單片機(jī)溫度控制系統(tǒng)。
通過單片機(jī)來控制加熱的過程促進(jìn)生產(chǎn)過程自動(dòng)化。而生產(chǎn)過程自動(dòng)化是保持生產(chǎn)穩(wěn)定、降低消耗、改善勞動(dòng)條件、保證生產(chǎn)安全和提高勞動(dòng)生產(chǎn)率的重要手段。采用溫度控制系統(tǒng)來控制溫度對(duì)企業(yè)具有重要的意義:
1.降低勞動(dòng)強(qiáng)度,改善勞動(dòng)條件。采用單片機(jī)系統(tǒng)后,不再需要工人不停的對(duì)加熱爐進(jìn)行檢查。
2.提高控制精度。單片機(jī)可以對(duì)溫度進(jìn)行實(shí)時(shí)的控制,降低溫度加熱的滯后性,以此提高加熱的精度。
3.提高工作效率,降低成本,采用單片機(jī)系統(tǒng)控制可以更快的達(dá)到恒溫控制的效果,提高工作效率、節(jié)省能源、降低成本。
4.提高企業(yè)對(duì)可控制電加熱技術(shù)的應(yīng)用水平,鍛煉企業(yè)技術(shù)人員的開發(fā)、應(yīng)用能力。
1.3 溫室大棚設(shè)計(jì)
菜的生長發(fā)育受到溫度的影響,因此對(duì)于蔬菜溫室大棚來說,在蔬菜的整個(gè)生長過程中,要隨時(shí)檢測(cè)溫度的變化,以便對(duì)溫度進(jìn)行控制,保證蔬菜所處的環(huán)境溫度符合蔬菜生長發(fā)育的要求,提高蔬菜的產(chǎn)量和質(zhì)量。大棚設(shè)計(jì)規(guī)格為40m*8m的規(guī)格,,以西紅柿的生長環(huán)境為例。它對(duì)生長環(huán)境的要求十分嚴(yán)格,如果溫度太高或太低、通風(fēng)不及時(shí)、濕度過大都會(huì)引起農(nóng)作物的病蟲害,白天溫度要求25℃~28℃,夜間溫度要求13℃~15℃。由于大棚的范圍較大一個(gè)溫度傳感器的測(cè)量數(shù)據(jù)可能不足以反映大棚內(nèi)的實(shí)際情況。所以經(jīng)過查閱資料,大棚的溫度檢測(cè)區(qū)域分成4塊,每塊規(guī)格為10m×8m,在大棚的四個(gè)區(qū)域安裝4個(gè)溫度傳感器。傳感器的高度在0.3m到0.4m,監(jiān)測(cè)大棚內(nèi)的溫度。溫度傳感器采用鉑熱電阻PT100,其阻值會(huì)隨著溫度的變化而改變。PT后的100即表示它在0℃時(shí)阻值為100歐姆,在100℃時(shí)它的阻值約為138.5歐姆。它的工業(yè)原理:當(dāng)PT100在0攝氏度的時(shí)候他的阻值為100歐姆,它的的阻值會(huì)隨著溫度上升它的阻值是成勻速增漲的。Pt100 溫度傳感器還具有抗振動(dòng)、穩(wěn)定性好、準(zhǔn)確度高、耐高壓等優(yōu)點(diǎn)。鉑熱電阻的線性較好,最大非線性偏差小。廣泛應(yīng)用與汽車空調(diào)、冰箱、冷柜、飲水機(jī)、咖啡機(jī),烘干機(jī)以及中低溫干燥箱、恒溫箱,滿足溫室大棚的測(cè)量要求。大棚設(shè)計(jì)要求測(cè)量溫度有零下30到60度的范圍,由于考慮到我國廣大地區(qū)溫度差異較大,冬天與夏天溫度差別也很大,有些地區(qū)冬天溫度能達(dá)到零下30多度 ,和測(cè)量余量的考慮,所以設(shè)計(jì)傳感器的測(cè)量范圍為零下50度到80度。測(cè)量溫度范圍能覆蓋我國廣大地區(qū)的實(shí)際溫度。
第二章 系統(tǒng)的硬件設(shè)計(jì)2.1 系統(tǒng)總體設(shè)計(jì)
系統(tǒng)采用了C51單片機(jī)作為處理器,具有四個(gè)溫度測(cè)量模塊,信號(hào)轉(zhuǎn)換模塊,數(shù)字顯示模塊,鍵盤控制模塊。溫度測(cè)量是由四個(gè)溫度傳感器完成,采用 鉑熱電阻PT100傳感器,傳感器接入三運(yùn)放高共模抑制比放大電路。三運(yùn)放高共模抑制比放大電路能有效的抑制電路的共模信號(hào),提高整個(gè)系統(tǒng)的抗干擾能力。通過放大電路后接入AD轉(zhuǎn)換芯片AD0832,AD0832是8為AD轉(zhuǎn)換芯片,能將放大電路輸入的模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào),供給單片機(jī)處理。單片機(jī)每次會(huì)接收四個(gè)溫度傳感器測(cè)量的溫度信號(hào),對(duì)信號(hào)進(jìn)行處理,根據(jù)測(cè)量溫度和設(shè)定溫度的比較輸出不同的信號(hào)。8位數(shù)碼管會(huì)對(duì)結(jié)果進(jìn)行顯示。單片機(jī)根據(jù)處理結(jié)果控制加熱和制冷設(shè)備自動(dòng)調(diào)節(jié)大棚內(nèi)的溫度。
圖 2.1 系統(tǒng)整體框圖
2.2 AT89C51單片機(jī)
89C51單片機(jī)是對(duì)所有兼容Intel 8031指令系統(tǒng)的單片機(jī)的統(tǒng)稱。該系列單片機(jī)的始祖是Intel的8004單片機(jī),后來隨著Flash rom技術(shù)的發(fā)展,8004單片機(jī)取得了長足的進(jìn)展,成為應(yīng)用最廣泛的8位單片機(jī)之一,其代表型號(hào)是ATMEL公司的AT89系列,它廣泛應(yīng)用于工業(yè)測(cè)控系統(tǒng)之中。STC89C51是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C51為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、有效的解決方案。具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口。另外 STC89X52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。最高運(yùn)作頻率35Mhz,6T/12T可選。
設(shè)計(jì)中選用STC 89C51單片機(jī),共有四個(gè)8位的I/O口,P0口接入8為數(shù)碼管的段選口,決定數(shù)碼管顯示的內(nèi)容。P2口接入8位數(shù)碼管的位選口,決定點(diǎn)亮哪一個(gè)數(shù)碼管。P1口接入鍵盤電路,對(duì)整個(gè)系統(tǒng)進(jìn)行控制和設(shè)定大棚內(nèi)保持的溫度。P3口主要接入AD轉(zhuǎn)換芯片,接收傳感器采集的溫度數(shù)據(jù)。
圖2.2單片機(jī)及接口
2.3 ADC轉(zhuǎn)換芯片ADC0832
ADC0832是美國國家半導(dǎo)體公司生產(chǎn)的一種8位分辨率、雙通道A/D轉(zhuǎn)換芯片。由于它體積小,兼容性強(qiáng),性價(jià)比高。ADC0832為8位分辨率A/D轉(zhuǎn)換芯片,其最高分辨可達(dá)256級(jí)?梢赃m應(yīng)一般的模擬量轉(zhuǎn)換要求。在此次課程設(shè)計(jì)中由于溫度控制系統(tǒng)在溫室大棚內(nèi)使用,對(duì)于溫度控制精度要求不高。采用了數(shù)碼管顯示,由于單片機(jī)IO口數(shù)量有限,只顯示到溫度的個(gè)位,忽略小數(shù)位,所以8位ADC芯片能滿足設(shè)計(jì)的精度要求。ADC0832內(nèi)部電源輸入與參考電壓的復(fù)用,使得芯片的模擬電壓輸入在0~5V之間。芯片轉(zhuǎn)換時(shí)間僅為32μS,據(jù)有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗(yàn),以減少數(shù)據(jù)誤差,轉(zhuǎn)換速度快且穩(wěn)定性能強(qiáng)。獨(dú)立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過DI數(shù)據(jù)輸入端,可以輕易的實(shí)現(xiàn)通道功能的選擇。ADC0832芯片有兩個(gè)通道,每個(gè)芯片可以接入兩個(gè)溫度傳感器,通過單片機(jī)的程序控制可以分別對(duì)兩個(gè)傳感器進(jìn)行AD轉(zhuǎn)換,可以節(jié)約芯片成本。
圖2.3 ADC0832芯片
2.4LED顯示部分
LED數(shù)碼管由多個(gè)發(fā)光二極管封裝在一起組成“8”字型的器件,引線已在內(nèi)部連接完成,只需引出它們的各個(gè)筆劃,公共電極。數(shù)碼管實(shí)際上是由七個(gè)發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點(diǎn)就是8個(gè)。這些段分別由字母a,b,c,d,e,f,g,dp來表示。當(dāng)數(shù)碼管特定的段加上電壓后,這些特定的段就會(huì)發(fā)亮,以形成我們眼睛看到的字樣。LED數(shù)碼管具有功耗小,無熱量,耐沖擊,長壽命等優(yōu)點(diǎn),配合控制器,即可實(shí)現(xiàn)流水,漸變,跳變,追逐等效果。在本次課程設(shè)計(jì)中由于需要顯示的內(nèi)容較多,所以采用8位數(shù)碼管。每?jī)蓚(gè)數(shù)碼管一組,顯示顯示對(duì)應(yīng)的溫度值,設(shè)定的溫度,報(bào)警及對(duì)加熱制冷設(shè)備的控制狀態(tài)。
圖 2.4 8位數(shù)碼管
第一和第二個(gè)數(shù)碼管為一組,顯示四個(gè)傳感器測(cè)得溫度的平均值。第三和第四個(gè)數(shù)碼管為一組,用于顯示設(shè)定的溫度值及用鍵盤改變?cè)O(shè)定溫度時(shí)的顯示。第五和第六個(gè)數(shù)碼管為一組,會(huì)輪流顯示四個(gè)傳感器測(cè)的的溫度值及當(dāng)傳感器測(cè)得的溫度異常時(shí)不會(huì)顯示具體溫度值,會(huì)顯示“——”,進(jìn)行報(bào)警。第七和第八個(gè)數(shù)碼管為一組,顯示對(duì)制冷和加熱設(shè)備的控制狀態(tài)。當(dāng)顯示1,2,3時(shí)表示對(duì)大棚進(jìn)行加熱,且測(cè)得溫度與設(shè)定溫度相差越大時(shí),顯示的值也越大。當(dāng)顯示“00”時(shí)表示設(shè)定溫度與測(cè)得溫度相同。當(dāng)顯示—1,—2,—3時(shí)表示對(duì)大棚進(jìn)行制冷,設(shè)定溫度與實(shí)際測(cè)得溫度相差越大,顯示數(shù)字也越大。
2.5 鍵盤部分
鍵盤部分當(dāng)鍵盤按鈕不按下去時(shí)對(duì)應(yīng)的IO口輸入為高電平,當(dāng)按下按鈕時(shí)IO口與地接通,對(duì)應(yīng)接口輸入為低電平。鍵盤部分有四個(gè)按鈕,第一個(gè)按鈕為開關(guān)按鈕,按下第一個(gè)按鈕后傳感器和AD芯片及數(shù)碼管開始工作,進(jìn)行數(shù)模轉(zhuǎn)
圖2.5 鍵盤按鈕
換,顯示測(cè)定的溫度。只有按下第一個(gè)按鈕后按下其他的按鈕才有效。第一次按下第二個(gè)按鈕后,進(jìn)入設(shè)定大棚溫度的模式。每次按下第三個(gè)按鈕,設(shè)定的溫度值加一,每次按下第四個(gè)按鈕時(shí)設(shè)定的溫度減一。設(shè)定的溫度值范圍在0到50
循環(huán)。當(dāng)?shù)诙伟聪碌诙䝼(gè)按鈕時(shí),退出當(dāng)前設(shè)定溫度的模式,正常執(zhí)行程序。
2.6 傳感器連接電路
溫度元件與單片機(jī)連接電路是一個(gè)三運(yùn)放高共模抑制比放大電路。它具有很好的抗共模干擾的能力,提高溫度測(cè)量的精度。
圖2.6 三運(yùn)放高共模抑制比放大電路
第三章 系統(tǒng)軟件設(shè)計(jì)3.1軟件總體設(shè)計(jì)
軟件是單片機(jī)的關(guān)鍵。設(shè)計(jì)一個(gè)單片機(jī)系統(tǒng),在硬件平臺(tái)確定之后,就可以通過設(shè)計(jì)不同的軟件,實(shí)現(xiàn)不同的單片機(jī)功能。在設(shè)計(jì)、實(shí)現(xiàn)單片機(jī)的軟件系統(tǒng)時(shí),需要考慮眾多因素,如硬件需求、計(jì)算機(jī)硬件、操作系統(tǒng)等。由于選用專用的開發(fā)軟件,必須具有一定的單片機(jī)以及數(shù)據(jù)采集設(shè)備配合使用。
控制系統(tǒng)加電后主控單片機(jī)啟動(dòng),然后調(diào)用鍵盤掃描程序,判斷有無按鍵按下。當(dāng)檢測(cè)到第一個(gè)按鍵按下后,再進(jìn)行鍵盤掃描,若檢測(cè)到第二個(gè)鍵按下則轉(zhuǎn)入鍵盤控制程序部分。檢測(cè)第三個(gè)和第四個(gè)按鍵是否按下,對(duì)設(shè)定溫度的數(shù)值進(jìn)行設(shè)置,當(dāng)再次檢測(cè)到第二個(gè)按鍵按下后退出鍵盤控制程序部分,轉(zhuǎn)入數(shù)據(jù)處理和顯示部分程序。若沒有檢測(cè)到第二個(gè)鍵按下,直接進(jìn)入數(shù)據(jù)處理和顯示部分。調(diào)用AD轉(zhuǎn)換程序,獲得傳感器測(cè)量的數(shù)據(jù),對(duì)測(cè)量數(shù)據(jù)進(jìn)行處理。判斷傳感器測(cè)得數(shù)據(jù)是否異常,若有異常在進(jìn)一步判斷后顯示“——”進(jìn)行報(bào)警。若沒有異常則顯示最終的溫度數(shù)據(jù),并對(duì)每個(gè)傳感器測(cè)得數(shù)據(jù)進(jìn)行輪流顯示。并將測(cè)得溫度與設(shè)定溫度進(jìn)行比較,對(duì)加熱和制冷設(shè)備進(jìn)行控制。
開始
開關(guān)是否按下?
圖 3.1 程序總體框圖
3.2 AD轉(zhuǎn)換程序設(shè)計(jì)
在本次課程設(shè)計(jì)中由于熱電阻傳感器輸入信號(hào)為連續(xù)的電壓量,是連續(xù)的模擬信號(hào),需要進(jìn)行AD轉(zhuǎn)換變?yōu)閿?shù)字量,單片機(jī)才能進(jìn)行處理。所以需要AD轉(zhuǎn)換芯片進(jìn)行AD轉(zhuǎn)換。在設(shè)計(jì)中有四個(gè)輸入信號(hào),由于采用了ADC0832芯片,每個(gè)芯片有兩個(gè)輸入通道,所以需要2個(gè)AD芯片。在程序設(shè)計(jì)中,按照芯片時(shí)序圖對(duì)芯片寫入命令,選擇傳感器對(duì)應(yīng)的通道對(duì)輸入信號(hào)進(jìn)行AD轉(zhuǎn)換。
3.3 鍵盤程序設(shè)計(jì)
在本次課程設(shè)計(jì)中,一共定義了四個(gè)按鍵。分別是開關(guān),設(shè)定,加,減。分別接在P1.0到P1.3四個(gè)接口。當(dāng)按下開關(guān)鍵后,單片機(jī)開始接收傳感器采集的數(shù)據(jù),進(jìn)行處理和顯示。設(shè)定和加減用于對(duì)大棚設(shè)定溫度的控制。按下設(shè)定鍵后,在按下加,減對(duì)設(shè)定溫度進(jìn)行調(diào)整,再次按下設(shè)定鍵退出對(duì)溫度的設(shè)定。
3.4 LED顯示程序設(shè)計(jì)
由于程序中需要顯示的數(shù)據(jù)量較多,所以采用了8位數(shù)碼管進(jìn)行顯示。由于單片機(jī)的接口數(shù)量有限,采用動(dòng)態(tài)顯示模式。P0口接入數(shù)碼管位選接口,P2口接入8位數(shù)碼管的段選接口。P0口輸入需要顯示的數(shù)字,P2口決定點(diǎn)亮哪一個(gè)數(shù)碼管。
3.5 程序運(yùn)行結(jié)果
當(dāng)單片機(jī)接電開始工作后,有鍵盤開關(guān)按鈕來啟動(dòng)。由鍵盤設(shè)定按鈕來蔬菜大棚所要達(dá)到的設(shè)定值。溫度傳感器時(shí)事測(cè)定當(dāng)前溫度,若當(dāng)前溫度小于設(shè)定值,則加熱設(shè)備開始工作,直到當(dāng)前溫度達(dá)到設(shè)定值;若當(dāng)前溫度大于設(shè)定值,則加熱爐停止工作,制冷設(shè)備開始工作。溫度開始下降,直到當(dāng)前溫度等于設(shè)定值;設(shè)定值等于當(dāng)前溫度 ,通過對(duì)加熱和制冷設(shè)備的控制保持大棚的溫度穩(wěn)定。
當(dāng)實(shí)時(shí)溫度小于設(shè)定值時(shí),數(shù)碼管顯示為正數(shù),此時(shí)加熱爐作,從而提高大棚的溫度:。數(shù)碼管顯示數(shù)字為1,2,3,數(shù)字越大加熱功率越高。
圖3.2 實(shí)際溫度小于設(shè)定溫度
當(dāng)實(shí)時(shí)溫度與設(shè)定值相等時(shí),不采取任何措施:,數(shù)碼管顯示為—0。
圖3.3 實(shí)際溫度等于設(shè)定溫度
當(dāng)實(shí)時(shí)溫度大于設(shè)定值時(shí),加熱裝置停止工作,制冷裝置開始工作。:溫度差別越大,顯示數(shù)字越小。
圖 3.4 實(shí)際溫度大于設(shè)定溫度
第四章 系統(tǒng)誤差分析與處理4.1 電路部分
由于在本次課程設(shè)計(jì)中傳感器采用熱電阻,采用三運(yùn)放高共模抑制比放大電路抑制電路的共模干擾信號(hào)。三運(yùn)放高共模抑制比放大電路是由三個(gè)集成運(yùn)算放大器組成,其中左邊兩個(gè)運(yùn)放輸入阻抗,共模抑制比和增益等性能一致。構(gòu)成平衡對(duì)稱差動(dòng)放大輸入級(jí),右邊運(yùn)放構(gòu)成雙端輸入單端輸出的輸出級(jí),用來進(jìn)一步抑制電路的共模信號(hào),并適應(yīng)接地負(fù)載的需要。
圖4.1 三運(yùn)放高共模抑制比放大電路
當(dāng)左邊兩個(gè)運(yùn)放性能一致時(shí),輸入級(jí)的差動(dòng)輸出及其差模增益只與差模輸入電壓有關(guān),而其共模輸出,失調(diào)及漂移均在電路中抵消。因此電路具有良好的干擾抑制能力。
本次課程設(shè)計(jì)采用的溫度元件是鉑熱電阻PT100,其阻值會(huì)隨著溫度的變化而改變。PT后的100即表示它在0℃時(shí)阻值為100歐姆,在100℃時(shí)它的阻值約為138.5歐姆。廠家提供有PT100在各溫度下電阻值值的分度表,在此可以近似取電阻變化率為 0.385Ω/℃。向PT100輸入穩(wěn)恒電流,再通過A/D轉(zhuǎn)換后測(cè)PT100兩端電壓,即得到PT100的電阻值,進(jìn)而算出當(dāng)前的溫度值。 采用50mA的電流源對(duì)PT100進(jìn)行供電,然后用運(yùn)算放大器LM324搭建的放大電路將其電壓信號(hào)放大10倍后輸入到ADC0832中。由于ADC0832是8位AD轉(zhuǎn)換芯片,所以轉(zhuǎn)換精度5/255=0.0196V。由于放大電路將輸入電壓放大10倍,所以 0.0196/10/0.05/0.385=0.1度。由于溫度顯示部分精度只要求到度,所以測(cè)量精度滿足要求。
4.2 軟件部分
在設(shè)計(jì)中采用了四個(gè)溫度傳感器,進(jìn)行測(cè)量時(shí)會(huì)讀取四個(gè)傳感器的數(shù)據(jù)。每次測(cè)量后延時(shí)1秒,再次進(jìn)行測(cè)量,一共進(jìn)行四次測(cè)量。對(duì)每個(gè)傳感器測(cè)量值去平均數(shù),減小測(cè)量的誤差。然后會(huì)對(duì)四個(gè)溫度數(shù)據(jù)進(jìn)行處理,若有兩個(gè)及以上數(shù)據(jù)與設(shè)定溫度值偏差太大會(huì)進(jìn)行報(bào)警。若只有一個(gè)傳感器測(cè)量溫度異常,會(huì)在延時(shí)后在測(cè)量三次,若數(shù)據(jù)仍然異常,會(huì)進(jìn)行報(bào)警。若數(shù)據(jù)沒有異常,程序會(huì)對(duì)四個(gè)傳感器測(cè)量值再次去平均值,減小誤差,然后進(jìn)行顯示。
第五章 小結(jié)
通過此次課程設(shè)計(jì),使我更加扎實(shí)的掌握了單片機(jī),程序設(shè)計(jì),傳感器等方面的知識(shí),知道了許多東西我們以前不知道知識(shí)。在設(shè)計(jì)過程中雖然遇到了一些問題,但經(jīng)過一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我在這方面的知識(shí)欠缺和經(jīng)驗(yàn)不足。實(shí)踐出真知,通過親自動(dòng)手設(shè)計(jì)程序,使我們掌握的知識(shí)不再是紙上談兵。在課程設(shè)計(jì)過程中,我們不斷發(fā)現(xiàn)錯(cuò)誤,不斷改正,不斷領(lǐng)悟,不斷獲取。最終的檢測(cè)調(diào)試環(huán)節(jié),本身就是在踐行過而能改,善莫大焉的知行觀。這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多問題,最后在查找資料后,許多問題終于游逆而解,但也有的沒有弄懂。在今后社會(huì)的發(fā)展和學(xué)習(xí)實(shí)踐過程中,一定要不懈努力,不能遇到問題就想到要退縮,一定要不厭其煩的發(fā)現(xiàn)問題所在,然后一一進(jìn)行解決,只有這樣,才能成功的做成想做的事,才能在今后的道路上劈荊斬棘,而不是知難而退,那樣永遠(yuǎn)不可能收獲成功,收獲喜悅,也永遠(yuǎn)不可能得到社會(huì)及他人對(duì)你的認(rèn)可!
參考文獻(xiàn):
[1]胡漢才.單片機(jī)原理及其接口技術(shù)[M].北京:清華大學(xué)出版社,2004.
[2]張國雄.測(cè)控電路.機(jī)械工業(yè)出版社,2008.3
[3]許海峰.C51單片機(jī)項(xiàng)目式教程.—北京:清華大學(xué)出版社,2011.4
[4]張福學(xué).傳感器應(yīng)用及其電路精選[M].北京:電子工業(yè)出版社,2003.
[5]臧春華.現(xiàn)代電子技術(shù)基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2005.
[6]單成祥.傳感器的理論與設(shè)計(jì)基礎(chǔ)及其應(yīng)用[M].國際工業(yè)出版社,1999.
附錄
程序:
#include<reg51.h> //頭文件
#include<intrins.h> //_nop_()頭文件
#define uchar unsigned char
#define uint unsigned int
uchar celiangzhi[4][4];
uchar shedingwendu = 25; ///設(shè)定溫度
uchar jianpan = 0; ///判斷鍵盤哪個(gè)鍵按下的變量
uchar sheding = 0; //設(shè)定溫度的時(shí)的標(biāo)志變量
uchar tem1, tem2, tem3, tem4; //存放傳感器測(cè)定值的變量
uchar shuchuwendu; //存放傳感器測(cè)定溫度的平均值,最后用數(shù)碼管顯示
uchar shuchu; //bijiao()函數(shù)執(zhí)行結(jié)果的標(biāo)志
int k; //判斷有幾個(gè)傳感器測(cè)定值異常的標(biāo)志
//ADC0832端口引腳定義
sbit CS = P3 ^ 0; ////將CS位定義為P3.0引腳
sbit CLK = P3 ^ 1; //將CLK位定義為P3.1引腳
sbit DIO = P3 ^ 2; //將DIO位定義為P3.2引腳
sbit CS1 = P3 ^ 3;
sbit CLK1 = P3 ^ 4;
sbit DIO1 = P3 ^ 5;
uchar code led[11] = {0xc0,0xf9,0xa4,0xb0,0x99, // 共陽數(shù)碼管段碼表0到9和-
0x92,0x82,0xf8,0x80,0x90,0xbf };
void delay1ms() //延時(shí)函數(shù)
{
unsignedchar i, j;
for(i = 0; i<10; i++)
for(j = 0; j<33; j++);
}
void delaynms(unsigned char n) //延時(shí)n ms
{
unsignedchar i;
for(i = 0; i<n; i++)
delay1ms();
}
/////*****************************************************
unsigned char A_D() //進(jìn)行AD轉(zhuǎn)換的函數(shù)
{
unsignedchar i, dat;
uchara, b;
CS= 1; //一個(gè)轉(zhuǎn)換周期開始 CS為片選使能口,0使能
CLK= 0; //為第一個(gè)脈沖作準(zhǔn)備
CS= 0; //CS置0,片選有效
DIO= 1; //DIO置1,規(guī)定的起始信號(hào)
CLK= 1; //第一個(gè)脈沖
CLK= 0; //第一個(gè)脈沖的下降沿,此前DIO必須是高電平
//////////////////////////第一個(gè)脈沖結(jié)束
DIO= 1; //DIO置1, 通道選擇信號(hào)
CLK= 1; //第二個(gè)脈沖,第2、3個(gè)脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選通道CH0
CLK= 0; //第二個(gè)脈沖下降沿
DIO= 0; //DI置0,選擇通道0 DI0輸入10時(shí) 選擇0通道,輸入11時(shí)選擇1通道
CLK= 1; //第三個(gè)脈沖
CLK= 0; //第三個(gè)脈沖下降沿
DIO= 1; //第三個(gè)脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1
CLK= 1; //第四個(gè)脈沖
for(i = 0; i<8; i++) //高位在前
{
CLK= 1; //第四個(gè)脈沖
CLK= 0;
dat<<= 1; //將下面儲(chǔ)存的低位數(shù)據(jù)向右移
dat|= (unsigned char)DIO; //將輸出數(shù)據(jù)DIO通過或運(yùn)算儲(chǔ)存在dat最低位
}
CS= 1; //片選無效
a =dat / 51;
b =(dat % 51) * 10 / 51;
a =a * 10 + b;
returna;
}
/////************************************************
unsigned char A_D1()
{
unsignedchar i, dat;
uchara, b;
CS= 1; //一個(gè)轉(zhuǎn)換周期開始 CS為片選使能口,0使能
CLK= 0; //為第一個(gè)脈沖作準(zhǔn)備
CS= 0; //CS置0,片選有效
DIO= 1; //DIO置1,規(guī)定的起始信號(hào)
CLK= 1; //第一個(gè)脈沖
CLK= 0; //第一個(gè)脈沖的下降沿,此前DIO必須是高電平
//////////////////////////第一個(gè)脈沖結(jié)束
DIO= 1; //DIO置1, 通道選擇信號(hào)
CLK= 1; //第二個(gè)脈沖,第2、3個(gè)脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選通道CH0
CLK= 0; //第二個(gè)脈沖下降沿
DIO= 1; //DI置0,選擇通道0 DI0輸入10時(shí) 選擇0通道,輸入11時(shí)選擇1通道
CLK= 1; //第三個(gè)脈沖
CLK= 0; //第三個(gè)脈沖下降沿
DIO= 1; //第三個(gè)脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1
CLK= 1; //第四個(gè)脈沖
for(i = 0; i<8; i++) //高位在前
{
CLK= 1; //第四個(gè)脈沖
CLK= 0;
dat<<= 1; //將下面儲(chǔ)存的低位數(shù)據(jù)向右移
dat|= (unsigned char)DIO; //將輸出數(shù)據(jù)DIO通過或運(yùn)算儲(chǔ)存在dat最低位
}
CS= 1; //片選無效
a =dat / 51;
b =(dat % 51) * 10 / 51;
a =a * 10 + b;
returna;
}
unsigned char A_D2()
{
unsignedchar i, dat;
uchara, b;
CS1= 1; //一個(gè)轉(zhuǎn)換周期開始 CS為片選使能口,0使能
CLK1= 0; //為第一個(gè)脈沖作準(zhǔn)備
CS1= 0; //CS置0,片選有效
DIO1= 1; //DIO置1,規(guī)定的起始信號(hào)
CLK1= 1; //第一個(gè)脈沖
CLK1= 0; //第一個(gè)脈沖的下降沿,此前DIO必須是高電平
//////////////////////////第一個(gè)脈沖結(jié)束
DIO1=1; //DIO置1, 通道選擇信號(hào)
CLK1= 1; //第二個(gè)脈沖,第2、3個(gè)脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選通道CH0
CLK1= 0; //第二個(gè)脈沖下降沿
DIO1= 0; //DI置0,選擇通道0 DI0輸入10時(shí) 選擇0通道,輸入11時(shí)選擇1通道
CLK1= 1; //第三個(gè)脈沖
CLK1= 0; //第三個(gè)脈沖下降沿
DIO1= 1; //第三個(gè)脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1
CLK1= 1; //第四個(gè)脈沖
for(i = 0; i<8; i++) //高位在前
{
CLK1= 1; //第四個(gè)脈沖
CLK1= 0;
dat<<= 1; //將下面儲(chǔ)存的低位數(shù)據(jù)向右移
dat|= (unsigned char)DIO1; //將輸出數(shù)據(jù)DIO通過或運(yùn)算儲(chǔ)存在dat最低位
}
CS1= 1; //片選無效
a =dat / 51;
b =(dat % 51) * 10 / 51;
a =a * 10 + b;
returna;
}
/////************************************************
unsigned char A_D3()
{
unsignedchar i, dat;
uchara, b;
CS1= 1; //一個(gè)轉(zhuǎn)換周期開始 CS為片選使能口,0使能
CLK1= 0; //為第一個(gè)脈沖作準(zhǔn)備
CS1= 0; //CS置0,片選有效
DIO1= 1; //DIO置1,規(guī)定的起始信號(hào)
CLK1= 1; //第一個(gè)脈沖
CLK1= 0; //第一個(gè)脈沖的下降沿,此前DIO必須是高電平
//////////////////////////第一個(gè)脈沖結(jié)束
DIO1= 1; //DIO置1, 通道選擇信號(hào)
CLK1= 1; //第二個(gè)脈沖,第2、3個(gè)脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選通道CH0
CLK1= 0; //第二個(gè)脈沖下降沿
DIO1= 1; //DI置0,選擇通道0 DI0輸入10時(shí) 選擇0通道,輸入11時(shí)選擇1通道
CLK1= 1; //第三個(gè)脈沖
CLK1= 0; //第三個(gè)脈沖下降沿
DIO1= 1; //第三個(gè)脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1
CLK1= 1; //第四個(gè)脈沖
for(i = 0; i<8; i++) //高位在前
{
CLK1= 1; //第四個(gè)脈沖
CLK1= 0;
dat<<= 1; //將下面儲(chǔ)存的低位數(shù)據(jù)向右移
dat|= (unsigned char)DIO1; //將輸出數(shù)據(jù)DIO通過或運(yùn)算儲(chǔ)存在dat最低位
}
CS1= 1; //片選無效
a =dat / 51;
b =(dat % 51) * 10 / 51;
a =a * 10 + b;
returna;
}
void display1(uchar num, uchar dis_w) //數(shù)碼管顯示函數(shù),第一二位數(shù)碼管顯示數(shù)字,顯示最后的溫度結(jié)果
{
ucharj;
for(j = 0; j < 2; j++)
{
P0= 0xff;
P2= dis_w;
if(j > 0)
P0= led[num / 10];
else
P0= led[num % 10];
dis_w= dis_w >> 1;
delaynms(5);
}
}
void display2(uchar num) // 數(shù)碼管顯示函數(shù),第三四位數(shù)碼管顯示數(shù)字,顯示設(shè)定的溫度值
{
P0= 0xff;
delaynms(5);
P2= 0x04;
P0= led[num / 10];
delaynms(5);
P2= 0x08;
P0= led[num % 10];
delaynms(5);
}
void display6(uchar num) // 第五六位顯示數(shù)字,用來顯示四個(gè)傳感器測(cè)定的溫度
{
P0= 0xff;
delaynms(5);
P2= 0x10;
P0= led[num / 10];
delaynms(5);
P2= 0x20;
P0= led[num % 10];
delaynms(5);
}
void display3() // 第五六位顯示數(shù)字,當(dāng)傳感器測(cè)定的溫度異常時(shí)報(bào)警
{
P0= 0xff;
delaynms(5);
P2= 0x10;
P0= led[10];
delaynms(5);
P2= 0x20;
P0= led[10];
delaynms(5);
}
void display4(uchar i) // 第七八位顯示數(shù)字,用來顯示處理結(jié)果,顯示1 2 3
{
P0= 0xff;
delaynms(5);
P2= 0x40;
P0= led[0];
delaynms(5);
P2= 0x80;
P0= led;
delaynms(5);
}
void display5(uchar i) // 第七八位顯示數(shù)字,用來顯示處理結(jié)果,顯示-1 -2 -3 0
{
P0= 0xff;
delaynms(5);
P2= 0x40;
P0= led[10];
delaynms(5);
P2= 0x80;
i =i - 4;
P0= led;
delaynms(5);
}
/////////////////////////////////////////////////
void celiang() //調(diào)用AD()函數(shù),用四個(gè)傳感器測(cè)量溫度。每個(gè)傳感器隔一段時(shí)間進(jìn)行一次測(cè)量
{ //每個(gè)傳感器測(cè)試四次,對(duì)測(cè)量結(jié)果取平均值,存放在四個(gè)變量中
inti = 0; //
intj = 0;
for(i = 0; i < 4; i++)
{
celiangzhi[j][0]= A_D(); celiangzhi[j][1] = A_D1();
celiangzhi[j][2]= A_D2(); celiangzhi[j][3] = A_D3();
j++;
}
tem1= celiangzhi[0][0] + celiangzhi[1][0] + celiangzhi[2][0] + celiangzhi[3][0];
tem1= tem1 / 4;
tem2= celiangzhi[0][1] + celiangzhi[1][1] + celiangzhi[2][1] + celiangzhi[3][1];
tem2= tem2 / 4;
tem3= celiangzhi[0][2] + celiangzhi[1][2] + celiangzhi[2][2] + celiangzhi[3][2];
tem3= tem3 / 4;
tem4= celiangzhi[0][3] + celiangzhi[1][3] + celiangzhi[2][3] + celiangzhi[3][3];
tem4= tem4 / 4;
}
void kongzhi() //將最終的溫度結(jié)果與設(shè)定的溫度進(jìn)行比較,根據(jù)比較結(jié)果輸出不同的值
{
inti;
i =shuchuwendu - shedingwendu;
if(i < -5)
shuchu= 3;
if((-5 < i)&(i < -2))
shuchu= 2;
if((-2 < i)&(i < 0))
shuchu= 1;
if(i >5)
shuchu= 7;
if((2 < i)&(i < 5))
shuchu= 6;
if((0 < i)&(i < 2))
shuchu= 5;
if(i == 0)
shuchu= 4;
}
int bijiao() //判斷每個(gè)傳感器的測(cè)量結(jié)果有沒有超過合理的范圍
{
ucharxiaxian, shangxian;
inti = 0, j = 0;
ucharbijiao[4];
xiaxian= (shedingwendu - 15);
shangxian= (shedingwendu + 15);
bijiao[0]= tem1; bijiao[1] = tem2; bijiao[2] = tem3;
bijiao[3]= tem4;
for(i = 0; i < 4; i++)
{
if(xiaxian < bijiao && bijiao < shangxian)
{
k++;
}
}
returnk;
}
void keyscan() //鍵盤掃描函數(shù),判斷哪個(gè)鍵按下
{
if((P1 & 0x0f) == 0x0f)
jianpan= 0;
if((P1 & 0x0f) == 0x0e)
jianpan= 1;
if((P1 & 0x0f) == 0x0d)
jianpan= 2;
if((P1 & 0x0f) == 0x0b)
jianpan= 3;
if((P1 & 0x0f) == 0x07)
jianpan= 4;
// return jianpan;
}
main(void)
{
int i;
ucharkaiguan = 0;
// ucharceshi = 12;
while(1)
{
keyscan();
if(jianpan == 1)
kaiguan= 1;
while(kaiguan == 1)
{
keyscan();
if(jianpan == 2)
{
sheding= 1;
while(jianpan == 2)
{
keyscan();
}
while(jianpan == 0)
{
keyscan();
display2(shedingwendu);
}
}
while(sheding == 1)
{
keyscan();
if(jianpan == 3)
{
shedingwendu= shedingwendu + 1;
if(shedingwendu > 50)
{
shedingwendu= 1;
}
while(jianpan == 3)
{
keyscan();
}
while(jianpan == 0)
{
keyscan();
display2(shedingwendu);
}
}
if(jianpan == 4)
{
shedingwendu= shedingwendu - 1;
if(shedingwendu <1)
{
shedingwendu= 50;
}
while(jianpan == 4)
{
keyscan();
}
while(jianpan == 0)
{
keyscan();
display2(shedingwendu);
}
}
keyscan();
if(jianpan == 2)
sheding= 0;
while(jianpan == 2)
{
keyscan();
}
}
celiang();
bijiao();
////////////////// 顯示四個(gè)傳感器的測(cè)量值
for(i = 0; i < 20; i++)
{
delay1ms();
display6(tem1);
}
for(i = 0; i < 20; i++)
{
delay1ms();
display6(tem2);
}
for(i = 0; i < 20; i++)
{
delay1ms();
display6(tem3);
}
for(i = 0; i < 20; i++)
{
delay1ms();
display6(tem4);
}
///////////////////////////////////////////////////////////////////
if(k < 2)
{
display3();
for(i = 0; i < 20; i++)
{
delay1ms();
display3();
}
///////////////////
}
if(k == 3)
{
inti = 0;
intj = 0;
k= 0;
for(i = 0; i < 3; i++)
{
///////////////////////////////
delaynms(500);
//////////////////////////////////////
celiang();
bijiao();////////////////
if(k == 3)
{
j++;
k= 0;
}
}
if(j == 3)
{
for(i = 0; i < 20; i++)
{
delay1ms();
display3();
}
////////////////////////////////////////
}
}
if(k == 4)
{
////////////////////////////////////////////////////
shuchuwendu= tem1 + tem2 + tem3 + tem4;
shuchuwendu= shuchuwendu / 4;
for(i = 0; i < 50; i++)
{
delay1ms();
display1(shuchuwendu,0x02);
}
kongzhi();
if(shuchu < 4)
{
for(i = 0; i < 50; i++)
{
delay1ms();
display4(shuchu);
}
}
else
{
for (i = 0; i < 50; i++)
{
delay1ms();
display5(shuchu);
}
}
}
for(i = 0; i < 20; i++)
{
delay1ms();
display2(shedingwendu);
}
display2(shedingwendu);
k= 0;
}
}
}
|
|