基于單片機(jī)的智能倉庫溫濕度控制系統(tǒng)_第1頁
基于單片機(jī)的智能倉庫溫濕度控制系統(tǒng)_第2頁
基于單片機(jī)的智能倉庫溫濕度控制系統(tǒng)_第3頁
基于單片機(jī)的智能倉庫溫濕度控制系統(tǒng)_第4頁
基于單片機(jī)的智能倉庫溫濕度控制系統(tǒng)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第一章 引言1.1 課題背景在現(xiàn)代工業(yè)現(xiàn)場,隨著科技的進(jìn)步和自動(dòng)化發(fā)展,溫、濕度監(jiān)測系統(tǒng)在某些行業(yè)中要求越來越高,特別是在大中型倉庫管理系統(tǒng)中,由于溫濕度過高或過低引起的倉庫儲(chǔ)藏物本身的水分過高或連續(xù)的高濕天氣將導(dǎo)致儲(chǔ)藏物新陳代謝加快而放出熱量,放熱引起的溫升又是代謝進(jìn)一步加劇以至發(fā)霉變質(zhì),因此倉庫必須重視對(duì)空氣溫濕度精確的而又方便的實(shí)時(shí)監(jiān)測,長期以來,由于受經(jīng)濟(jì)條件限制,我國倉庫環(huán)境較差,而且管理落后。 倉庫管理的重點(diǎn)之一就是要合理布置測溫點(diǎn),經(jīng)常檢查溫度變化,以便及時(shí)發(fā)現(xiàn)儲(chǔ)藏物發(fā)熱點(diǎn),減少損失。然而,堆積物的熱傳遞又是那樣的緩慢,使人感知極差,需要管理人員經(jīng)常進(jìn)入悶熱、嗆人的倉庫內(nèi)觀察溫、

2、濕度,不斷進(jìn)行翻倉、加濕、通風(fēng)和降溫設(shè)備來控制溫濕度,這樣不但控制精度低、實(shí)時(shí)性差,而且操作人員的勞動(dòng)強(qiáng)度大。這種繁重的體力勞動(dòng),不僅對(duì)人體有極大的傷害,而且不科學(xué)、不及時(shí)。所以,倉庫儲(chǔ)藏物蟲蛀、霉變的情況時(shí)有發(fā)生。 我國的儲(chǔ)藏物現(xiàn)均集中存放在地方或國家的倉庫中。按照國家儲(chǔ)藏物保護(hù)法,必須定期抽樣檢查糧食的溫、濕度,以確保儲(chǔ)藏質(zhì)量。這就迫切需要溫濕度監(jiān)控系統(tǒng)來控制倉庫。 本課題即以上述問題為出發(fā)點(diǎn),設(shè)計(jì)倉庫溫、濕度監(jiān)控系統(tǒng),該系統(tǒng)不僅能采集倉庫內(nèi)的溫、濕度值,而且能夠迅速做出相應(yīng)的處理,并將數(shù)據(jù)及處理結(jié)果顯示給用戶,并儲(chǔ)存數(shù)據(jù)以方便以后的對(duì)比研究。1.2 倉庫溫、濕度控制技術(shù)的國內(nèi)外研究狀況近

3、年來,由于超大規(guī)模集成電路技術(shù)、網(wǎng)絡(luò)通信技術(shù)和計(jì)算機(jī)技術(shù)的發(fā)展,是監(jiān)控系統(tǒng)在工農(nóng)業(yè)生產(chǎn)等領(lǐng)域得到廣泛引用,因此,倉庫溫、濕度監(jiān)控技術(shù)的研究在軟、硬件等方面都得到了一定的發(fā)展。1.2.1 硬件技術(shù) 早期倉庫溫濕度檢測主要采用溫度計(jì)量算法,它是將溫度計(jì)放入特定的插桿中,根據(jù)經(jīng)驗(yàn)插入倉庫的多個(gè)測溫點(diǎn),工作人員定期拔出讀數(shù),決定采取相應(yīng)的措施。這種方法由于溫度計(jì)精度、人工讀數(shù)的人為因素等原因,溫度檢測不僅速度慢而且精度低,抽樣不徹底,局部糧食溫度過高不易被及時(shí)發(fā)現(xiàn),局部糧食發(fā)霉變質(zhì)引起大面積壞掉的情況時(shí)有發(fā)生。 隨著科技的發(fā)展,溫、濕度檢測系統(tǒng)有了很大的改善和提高,系統(tǒng)在布線上采用矩陣式布線技術(shù),簡化

4、了數(shù)據(jù)采集部分的線路;在傳感器方面應(yīng)用了熱電偶、半導(dǎo)體等器件;在數(shù)據(jù)傳輸方面減少了傳輸線的根數(shù),采用串行傳輸方式,他可對(duì)倉庫的各個(gè)測試點(diǎn)進(jìn)行巡回檢測,檢測的速度、精度大大提高,但由于電阻傳感器靈敏度低,使檢測精度不夠理想。 然后倉庫使用單板機(jī)進(jìn)行溫、濕度監(jiān)控,并采用各種手段提高數(shù)據(jù)傳輸及檢測速度,通過軟硬件技術(shù)的結(jié)合,檢測的精度和可靠性有較大提高,能滿足一般中小型倉庫的需要。 近年來,隨著網(wǎng)絡(luò)通信技術(shù)和微處理器芯片的發(fā)展,為了簡化倉庫溫、濕度監(jiān)控系統(tǒng)的設(shè)計(jì)并降低成本,各公司的科研機(jī)構(gòu)開始致力于相關(guān)領(lǐng)域的探索,是的倉庫溫濕度監(jiān)控系統(tǒng)數(shù)字化,網(wǎng)絡(luò)化成為可能。其中,美國達(dá)拉斯公司推出的單總線接口協(xié)議

5、采用單根信號(hào)線,既可傳輸數(shù)據(jù)又可傳輸時(shí)鐘,而且數(shù)據(jù)傳輸是雙向的,因此單總線技術(shù)具有線路簡單,硬件開銷小,便于總線擴(kuò)展和維護(hù)等優(yōu)點(diǎn)。該公司所生產(chǎn)的單總線器件具有無需另附電源、在測試點(diǎn)直接將模擬信號(hào)數(shù)字化等特點(diǎn),一方面減少了系統(tǒng)環(huán)節(jié),另一方面也保證了系統(tǒng)的精度。同時(shí)各公司開發(fā)的可視化軟件開發(fā)工具,更是向著效率高、功能強(qiáng)大的方向努力,從而為獲得良好的用戶界面奠定了基礎(chǔ)。 國外倉庫的監(jiān)控技術(shù)已經(jīng)發(fā)展的很成熟,高科技的數(shù)字傳感器廣泛應(yīng)用于倉庫溫、濕度監(jiān)控系統(tǒng)。這種傳感器采用微控制器與半導(dǎo)體集成電路的最新技術(shù),在一個(gè)芯片上集成了溫度檢測芯片、數(shù)據(jù)信號(hào)轉(zhuǎn)換芯片、計(jì)算機(jī)接口芯片,存儲(chǔ)芯片等,除完成溫度檢測功能

6、外,還可完成預(yù)置范圍溫度、報(bào)警、多路A/D轉(zhuǎn)換、溫度補(bǔ)償?shù)裙δ?。由于?shù)字溫度傳感器直接輸出數(shù)字量,從而解決了溫度信號(hào)長距離傳輸問題及傳輸過程中因干擾和衰減而導(dǎo)致的精度降低等問題。 目前,國內(nèi)出現(xiàn)了豐富的數(shù)字傳感器配套產(chǎn)品,如中繼器、分線器、插接器、遠(yuǎn)程控制模塊等。數(shù)字傳感器技術(shù)、通信技術(shù)、計(jì)算機(jī)已成為當(dāng)今計(jì)算機(jī)技術(shù)的三大基礎(chǔ),計(jì)算機(jī)監(jiān)控技術(shù)已成為人們關(guān)注的熱點(diǎn)。軟件技術(shù) 近年來,各種計(jì)算機(jī)軟件開發(fā)平臺(tái)有了很大發(fā)展,特別是基于Windows環(huán)境下的Delphi、Power Builder、Visual Basic、Visual C+的不斷升級(jí),數(shù)據(jù)功能增強(qiáng),能夠使用ODBC驅(qū)動(dòng)程序訪問各種數(shù)據(jù)系

7、統(tǒng),并可使用ADO、DAO等各種應(yīng)用程序開發(fā)接口,操縱數(shù)據(jù)庫中的數(shù)據(jù),管理數(shù)據(jù)庫,數(shù)據(jù)庫對(duì)象與結(jié)構(gòu)方便地對(duì)監(jiān)測系統(tǒng)進(jìn)行顯示、打印、查詢、自動(dòng)控制等操作,為高性能的測控軟件設(shè)計(jì)提供了基礎(chǔ)。1.3 課題設(shè)計(jì)目標(biāo) 倉庫溫濕度控制系統(tǒng)是以AT89C52系列單片機(jī)為核心構(gòu)成的監(jiān)控系統(tǒng)。本課題提出了一種可以應(yīng)用于中小型糧倉的溫濕度控制系統(tǒng)的設(shè)計(jì)方案。 系統(tǒng)主要包括輸入和輸出兩個(gè)大的模塊,每個(gè)模塊有包括幾個(gè)小的功能模塊。其中,輸入模塊主要包括電源模塊、鍵盤設(shè)定模塊、溫濕度檢測模塊;輸出模塊主要包括LCD顯示模塊、報(bào)警模塊、控制模塊及串口通信模塊。第二章 系統(tǒng)總體方案設(shè)計(jì)2.1 系統(tǒng)功能、組成及工作原理2.1

8、.1 總體方案根據(jù)設(shè)計(jì)功能要求,系統(tǒng)可分為以下幾個(gè)部分:1) 鍵盤設(shè)定模塊:設(shè)置溫度的上限及下限,濕度的上限及下限來調(diào)整倉庫溫濕度控制范圍。2) 溫濕度檢測模塊:檢測倉庫內(nèi)的溫、濕度。3) 報(bào)警模塊:當(dāng)溫度或濕度越限時(shí)報(bào)警。4) 控制處理模塊:當(dāng)溫度或濕度越限時(shí),采取一定的手段控制。5) 顯示模塊:LCD顯示設(shè)定的溫度的上限及下限、濕度的上限及下限、測得的溫濕度值及各種調(diào)整信息。6) 串口通信:將測得的溫濕度上傳給PC機(jī)保存。7) 電源模塊:給系統(tǒng)供電。2.1.2 實(shí)施措施1) 鍵盤設(shè)定模塊:因?yàn)殒I盤要有輸入溫濕度的范圍、小數(shù)點(diǎn)、百分號(hào),復(fù)位等功能,所以用44矩陣鍵盤。 2) 溫濕度檢測模塊:

9、溫濕度傳感器的選擇見下面的方案論證。3) 報(bào)警模塊:當(dāng)溫度或濕度越限時(shí)聲音報(bào)警,用蜂鳴器實(shí)現(xiàn)。4) 控制處理模塊:實(shí)際環(huán)境溫度超過設(shè)定的最高溫度時(shí),繼電器控制空調(diào)的加熱設(shè)備工作;實(shí)際環(huán)境溫度低于設(shè)定的最低溫度時(shí),繼電器控制空調(diào)的制冷設(shè)備工作;實(shí)際環(huán)境濕度超過設(shè)定的最高溫濕度時(shí),繼電器控制風(fēng)機(jī)工作降濕;實(shí)際環(huán)境濕度低于設(shè)定的最低濕度時(shí),繼電器控制加濕器工作; 5) 顯示模塊:用戶輸入溫濕度的上下限,測得的溫濕度值及各種調(diào)整信息的顯示編程實(shí)現(xiàn)。6) 串口通信:用電平轉(zhuǎn)換芯片MAX232實(shí)現(xiàn)。7) 電源模塊:采用線性直流穩(wěn)壓電源的設(shè)計(jì)方法。2.2 溫濕度傳感器的方案論證和選擇當(dāng)單片機(jī)用作測控系統(tǒng)時(shí),

10、系統(tǒng)總要有被測信號(hào)進(jìn)入輸入通道,由單片機(jī)拾取必要的輸入信息。對(duì)于測量系 統(tǒng)而言,如何準(zhǔn)確獲得被測信號(hào)是其核心任務(wù);而對(duì)測控系統(tǒng)來講,除對(duì)被控對(duì)象狀態(tài)的信號(hào)測試外,還要將測試數(shù)據(jù)與控制條件對(duì)比并實(shí)時(shí)控制相應(yīng)執(zhí)行設(shè)備。 傳感器是實(shí)現(xiàn)測量與控制的首要環(huán)節(jié),是測控系統(tǒng)的關(guān)鍵部件,如果沒有傳感器對(duì)原始被測信號(hào)進(jìn)行準(zhǔn)確可靠的捕捉和轉(zhuǎn)換,一切準(zhǔn)確的測量和控制都將無法實(shí)現(xiàn)。工業(yè)生產(chǎn)過程中的自動(dòng)化測量和控制,幾乎主要依靠各種傳感器來檢測和控制生產(chǎn)過程中的各種參量,使設(shè)備和系統(tǒng)正常運(yùn)行在最佳狀態(tài),從而保證生產(chǎn)的高效率和高質(zhì)量。數(shù)字式溫度傳感器的類型隨著溫度傳感器集成化、智能化技術(shù)的進(jìn)步,世界上很多公司推出了新型的

11、數(shù)字溫度傳感器,并得到廣泛應(yīng)用。對(duì)器件的選擇應(yīng)把握以下幾點(diǎn):測溫的精度、分辨率要合適,以便減少不必要的電路和軟件開發(fā)成本;外圍電路應(yīng)盡量簡單;溫度傳感器的總線負(fù)載能力如何,能否滿足多點(diǎn)測溫的需要;占用單片機(jī)引腳情況如何,因?yàn)镸CU引腳資源有限,多點(diǎn)測溫時(shí),如果測量的點(diǎn)數(shù)超過輸入通道的個(gè)數(shù),就要添加多路復(fù)用電路,這將增加成本;與單片機(jī)的通信協(xié)議應(yīng)盡量簡單,成本、溫度測量的軟件開發(fā)難度要盡量小。目前在數(shù)字溫度傳感器中采用的串行總線主要有Motorola公司的SPI總線,Dallas公司的1-wire總線,Phillips公司的I2C總線等。常用的數(shù)字溫度傳感器主要有:1) 數(shù)字溫度傳感器AD741

12、8是件ADI公司推出的單片溫度測量與控制用集成電路。其內(nèi)部包含有帶隙溫度傳感器和10 位模數(shù)轉(zhuǎn)換器,可將感應(yīng)溫度轉(zhuǎn)換為0.25C 量化間隔的數(shù)字信號(hào),測溫范圍為-55C+125C,具有10 位數(shù)字輸出溫度值,分辨率0.25C,精度為2C , 轉(zhuǎn)換時(shí)間為1530ms , 工作電壓范圍為+2.7V+5.5V,具有低功耗模式(典型值為1A)。AD7418 片內(nèi)寄存器可以進(jìn)行高/低溫度門限的設(shè)置。當(dāng)溫度超過設(shè)置門限時(shí),過溫漏極開路指示器(OTI)將輸出有效信號(hào)。可與單片機(jī)(微控制器)接口,通過I2C 接口對(duì)AD7418 的內(nèi)部寄存器進(jìn)行讀/寫操作。該溫度傳感器可廣泛應(yīng)用于數(shù)據(jù)采集系統(tǒng)中的環(huán)境溫度監(jiān)測、

13、工業(yè)過程控制、電池充電以及個(gè)人計(jì)算機(jī)等系統(tǒng)。2)LM74是美國國家半導(dǎo)體公司推出的集成了帶隙式溫度傳感器、Delta-Sigma型模/數(shù)轉(zhuǎn)換器、并具有SPI/Microwire兼容總線接口的數(shù)字溫度傳感器。在傳感器通電工作后,自動(dòng)按一定速率對(duì)溫度進(jìn)行檢測, 并在片內(nèi)寄存器中存儲(chǔ)轉(zhuǎn)換的溫度值,主機(jī)可以在任意時(shí)刻讀出傳感器溫度值。LM74具有休眠模式, 在休眠時(shí)消耗的電流不超過10mA, 適用于對(duì)功耗有嚴(yán)格限制的系統(tǒng)。LM74的模/數(shù)轉(zhuǎn)換器為12位外加符號(hào)位,有效工作范圍為-55+155,分辨率可達(dá)0.0625的分辨率。由于采用了SPI/ Microwire兼容總線接口, 可以將多個(gè)傳感器掛接在總

14、線上, 通過片選信號(hào)對(duì)特定器件進(jìn)行讀寫操作。LM74采用3.0V5.5V的供電電壓。 3) DS18b20是Dallas公司推出的新一代數(shù)字溫度傳感器。通過一個(gè)單線接口發(fā)送或接收信息,因此在中央微處理器和 DS1820 之間僅需一條連接線(加上地線)。用于讀寫和溫度轉(zhuǎn)換的電源可以從數(shù)據(jù)線本身獲得,無需外部電源。因?yàn)槊總€(gè) DS1820 都有一個(gè)獨(dú)特的片序列號(hào),所以多只 DS1820 可以同時(shí)連在一根單線總線上,這樣就可以把溫度傳感器放在許多不同的地方。這一特性在 HVAC 環(huán)境控制、探測建筑物、儀器或機(jī)器的溫度以及過程監(jiān)測和控制等方面非常有用2.2.2 數(shù)字濕度傳感器的類型近年來,國內(nèi)外在濕度傳

15、感器研發(fā)領(lǐng)域取得了較大發(fā)。濕敏傳感器正向集成化、智能化、多參數(shù)監(jiān)測的方向迅速發(fā)展。集成濕度傳感器的選擇應(yīng)考慮以下幾點(diǎn):感濕性能好、響應(yīng)速度快、靈敏度高、測量范圍寬,線性度要好,要有較好的一致性、可重復(fù)性,濕滯小,有較強(qiáng)的抗污染能力,較高的穩(wěn)定性和可靠性,使用壽命長。目前,國外生產(chǎn)濕度傳感器的主要廠家及典型產(chǎn)品主要有:Honeywell公司(HIT3602、HIT3605、HIT3610型),Humeral公司(HM1500、HM1520、HF3223、HTF3223型),Sensirion公司(SHT11、SHT15型)。常用的集成濕度傳感器主要有:1) HIH-3610是Honeywell公

16、司生產(chǎn)的具有信號(hào)處理功能的熱固聚酯電容式相對(duì)濕度傳感器,線性放大輸出、工廠標(biāo)定,獨(dú)特的多層結(jié)構(gòu)能非常有效地抵抗環(huán)境的侵蝕。工作范圍:溫度-40+85,相對(duì)濕度0100%RH,精度達(dá)到2%RH,激光修正互換性至5%RH,低功耗驅(qū)動(dòng)電流設(shè)計(jì)為200A,反應(yīng)時(shí)間為15s,穩(wěn)定性好,較低的飄移、抗化學(xué)腐蝕性能強(qiáng)。2) HM1500是法國Humeral公司采用Humeral專利濕敏電容HS1101設(shè)計(jì)制造的相對(duì)濕度傳感器。帶防護(hù)棒式封裝,5VDC恒壓供電,14VDC放大線性電壓輸出,便于用戶使用。濕度測試量程為0100%RH,精度達(dá)到3%RH(1095%RH范圍),防灰塵,可有效抵抗各種腐蝕性氣體物質(zhì),

17、非常低的溫度依賴性,長期穩(wěn)定性好,反應(yīng)時(shí)間5s。3) 與傳統(tǒng)的溫濕度傳感器不同,SHT11是瑞士Sensirion公司推出的基于CMOSensTM技術(shù)的新型智能溫濕度傳感器,它將溫濕度傳感器、信號(hào)放大調(diào)理、A/D轉(zhuǎn)換、二線串行接口全部集成于一個(gè)芯片內(nèi),融合了CMOS芯片技術(shù)與傳感技術(shù),使傳感器具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、極高的性價(jià)比、使用方便、接口簡單等優(yōu)點(diǎn),從而發(fā)揮出它們強(qiáng)大的優(yōu)勢互補(bǔ)作用。(3 ) 溫濕度傳感器的確定 綜上所述,以上介紹的大都是單個(gè)的溫、濕度傳感器,而SHT11集溫度傳感器與濕度傳感器于一體,并且采用SHT11進(jìn)行溫濕度實(shí)時(shí)監(jiān)測的系統(tǒng)具有精度高、成本低、體積小、接

18、口簡單等好處;另外SHT11芯片內(nèi)部集成14位A/D轉(zhuǎn)換器,且采用數(shù)字信號(hào)輸出,因此抗干擾能力也比同類芯片高。該芯片在溫濕度監(jiān)測、自動(dòng)控制等領(lǐng)域均已得到廣泛應(yīng)用,所以選用SHT11。第三章 系統(tǒng)硬件設(shè)計(jì) 本系統(tǒng)硬件包括:單片機(jī)最小系統(tǒng)、LCD1602液晶顯示、鍵盤、SHT11溫濕度檢測、報(bào)警電路、通訊芯片MAX232、通信串口、控制接口(空調(diào)、風(fēng)機(jī)、加濕機(jī))、電源模塊。系統(tǒng)整體電路框圖如圖1所示。圖3-1 系統(tǒng)整體電路框圖1 單片機(jī)最小系統(tǒng)設(shè)計(jì)(1) AT89C52簡介AT89C52 是一種低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)中可編程的Flash 存儲(chǔ)器。使用Atmel 公司

19、高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU和在系統(tǒng)可編程 Flash,使得AT89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。AT89C52具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32 位I/O 口線,看門狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16 位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89C52可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)

20、數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。具體引腳圖如圖3-2所示。圖3-2 AT89C52引腳圖(2) 時(shí)鐘電路和復(fù)位電路時(shí)鐘電路:內(nèi)部時(shí)鐘方式,在 XTAL1 和 XTAL2 之間跨接晶體振蕩器和微調(diào)電容,組成并聯(lián)諧振電路,構(gòu)成穩(wěn)定的自激振蕩器,如圖3-3所示,晶體振蕩器的振蕩頻率決定單片機(jī)的時(shí)鐘頻率。外部時(shí)鐘方式,在由多片單片機(jī)組成的系統(tǒng)中,為了各單片機(jī)之間時(shí)鐘信號(hào)的同步,應(yīng)當(dāng)引入惟一的公用外部脈沖信號(hào)作為各單片機(jī)的振蕩脈沖。這時(shí),外部的脈沖信號(hào)是經(jīng) XTAL2 引腳注入,如圖3-4所示。 復(fù)位電路:常見的

21、復(fù)位電路有下列三種形式,如圖3-5所示。1) 上電自動(dòng)復(fù)位方式是在單片機(jī)接通電源時(shí),對(duì)電容充電來實(shí)現(xiàn)的。上電瞬間,RST 端的電位與 VCC 相同。只要在 RST 端有足夠長的時(shí)間保持閾值電壓,單片機(jī)便可自動(dòng)復(fù)位。2) 按鍵電平復(fù)位方式通過使 RST 端經(jīng)電阻與 VCC 電源接通而實(shí)現(xiàn)。圖3-3 89C58RD+的內(nèi)部時(shí)鐘電路圖3-4 89C58RD+的外部時(shí)鐘電路上電自動(dòng)復(fù)位方式 (2)按鍵電平復(fù)位 (3)按鍵脈沖復(fù)位圖3-5 常見的復(fù)位電路3. 按鍵脈沖復(fù)位方式利用微分電路產(chǎn)生的正脈沖實(shí)現(xiàn)復(fù)位。3.1.3 單片機(jī)最小系統(tǒng)電路圖其中時(shí)鐘電路為內(nèi)部時(shí)鐘電路,復(fù)位電路為上電自動(dòng)復(fù)位方式與按鍵電平

22、復(fù)位方式的結(jié)合。圖3-6單片機(jī)最小系統(tǒng)3.2 LCD1602液晶顯示3.2.1 1602簡介1. 主要技術(shù)參數(shù):表3-3 主要技術(shù)參數(shù)顯示容量162個(gè)字符芯片工作電壓4.55.5V工作電流2.0mA(5.0V)模塊最佳工作電壓5.0V字符尺寸2.954.35(WXH)mm2. 接口信號(hào)說明1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,如表3-6所示。表3-4 接口信號(hào)說明編號(hào)符號(hào)引腳說明編號(hào)符號(hào)引腳說明1VSS電源地9D2Data 1/02VDD電源正極10D3Data 1/03VL液晶顯示偏壓信號(hào)11D4Data 1/04RS數(shù)據(jù)/命令選擇端(H/L)12D5Data 1/

23、05R/W讀寫選擇端(H/L)13D6Data 1/06E使能信號(hào)14D7Data 1/07D0Data 1/015BLA背光源正極8D1Data 1/016BLK背光源負(fù)極3.2.2 1602與單片機(jī)連接圖圖3-9 1602與單片機(jī)連接圖3.3 矩陣鍵盤由于控制鍵位較多,方便程序設(shè)計(jì),硬件安全可靠,本設(shè)計(jì)采用44矩陣鍵盤,與單片機(jī)P1口相連,電路圖如圖所示。圖3-10 矩陣鍵盤與單片機(jī)連接圖矩陣鍵盤的工作原理:當(dāng)無按鍵閉合時(shí),P10P13 與 P14P17 之間開路。當(dāng)有鍵閉合時(shí),與閉合鍵相連的兩條 I/O 口線之間短路。判斷有無按鍵按下的方法是:第一步,置列線P14P17 為輸入狀態(tài),從行

24、線 P10P13 輸出低電平,讀入列線數(shù)據(jù),若某一列線為低電平,則該列線上有鍵閉合。第二步,行線輪流輸出低電平,從列線P14P17 讀入數(shù)據(jù),若有某一列為低電平,則對(duì)應(yīng)行線上有鍵按下。綜合一二兩步的結(jié)果,可確定按鍵編號(hào)。但是鍵閉合一次只能進(jìn)行一次鍵功能操作,因此須等到按鍵釋放后,再進(jìn)行鍵功能操作,否則按一次鍵,有可能會(huì)連續(xù)多次進(jìn)行同樣的鍵操作。本設(shè)計(jì)矩陣鍵盤的功能圖如圖所示圖3-11 矩陣鍵盤的功能圖3.4 溫濕度檢測3.4.1 SHT11簡介1. 概述SHTxx 系列單芯片傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器。它應(yīng)用專利的工業(yè)COMS 過程微加工技術(shù),確保產(chǎn)品具有極高的可靠性

25、與卓越的長期穩(wěn)定性。傳感器包括一個(gè)電容式聚合體測濕元件和一個(gè)能隙式測溫元件,并與一個(gè) 14 位的 A/D 轉(zhuǎn)換器以及串行接口電路在同一芯片上實(shí)現(xiàn)無縫連接。因此,該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價(jià)比極高等優(yōu)點(diǎn)。每個(gè) SHTxx傳感器都在極為精確的濕度校驗(yàn)室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式儲(chǔ)存在 OTP 內(nèi)存中,傳感器內(nèi)部在檢測信號(hào)的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。兩線制串行接口和內(nèi)部基準(zhǔn)電壓,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,使其成為各類應(yīng)用甚至最為苛刻的應(yīng)用場合的最佳選則。產(chǎn)品提供表面貼片 LCC(無鉛芯片)或 4 針單排引腳封裝。特殊封裝形式可根據(jù)用戶需求而提供。2

26、.引腳SHT11溫濕度傳感器采用SMD(LCC)表面貼片封裝形式,管腳排列如圖1所示圖3-12 SHT11外形及引腳排列(1)GND:接地端;(2)DATA:雙向串行數(shù)據(jù)線;(3)SCK:串行時(shí)鐘輸入;(4)VDD電源端:0.45.5V電源端;(58)NC:空管腳。4. 輸出轉(zhuǎn)換為物理量(1)相對(duì)濕度為了補(bǔ)償濕度傳感器的非線性以獲取準(zhǔn)確數(shù)據(jù),建議使用如下公式修正輸出數(shù)值:(表示傳感器的相對(duì)濕度輸出數(shù)值,大約范圍在93400)表3-10 濕度轉(zhuǎn)換系數(shù)12 bit-40.0405-2.810-68 bit-40.648-7.210-4對(duì)高于 99%RH 的那些測量值則表示空氣已經(jīng)完全飽和,必須被處

27、理成顯示值均為 100%2RH。濕度傳感器對(duì)電壓基本上沒有依賴性。圖3-18 從轉(zhuǎn)換到相對(duì)濕度1) 濕度傳感器相對(duì)濕度的溫度補(bǔ)償實(shí)際測量溫度與25 (77)相差較大時(shí),應(yīng)考慮濕度傳感器的溫度修正系數(shù):表3-11溫度補(bǔ)償系數(shù)12 bit0.010.000088 bit0.010.00128(2)溫度由能隙材料 PTAT (正比于絕對(duì)溫度) 研發(fā)的溫度傳感器具有極好的線性??捎萌缦鹿綄?shù)字輸出轉(zhuǎn)換為溫度值:表3-12 溫度轉(zhuǎn)換系數(shù) 5V-40.00-40.0014bit0.010.0184V-39.75-39.5512bit0.040.0723.5V3-39.66-39.393V3-39.60-

28、39.282.5V3-39.55-39.19在極端工作條件下測量溫度時(shí),可使用進(jìn)一步的補(bǔ)償算法以獲取高精度??蓞㈤啈?yīng)用說明“相對(duì)濕度與溫度的非線性補(bǔ)償”。3.4.2 SHT11與單片機(jī)相連的電路圖圖11 SHT11與單片機(jī)連接電路圖3.5 報(bào)警電路 報(bào)警電路如圖12所示,當(dāng)P2.5口輸出高電平時(shí)蜂鳴器響,當(dāng)P2.5口輸出低電平時(shí)蜂鳴器不響。圖12報(bào)警電路3.6 控制電路 本次設(shè)計(jì)以P26控制加熱設(shè)備,P27控制制冷設(shè)備,P36控制加濕設(shè)備,P37控制降濕設(shè)備,它們的控制接口電路相同,就以控制加熱設(shè)備的電路為例講解,下圖為控制加熱設(shè)備的接口電路。圖13 控制加熱設(shè)備的電路P5的1,3引腳接220

29、V交流電源,當(dāng)測得的溫度低于設(shè)定的最低溫度時(shí),P26口為低電平,繼電器線圈得電,P5的1,3接通,加熱設(shè)備工作,同時(shí)LED指示燈D8亮,表示當(dāng)前處于加熱狀態(tài);當(dāng)測得的溫度大于設(shè)定的最低溫度時(shí),P26口為高電平,繼電器線圈斷電,P5的1,2接通,加熱設(shè)備停止工作,同時(shí)LED指示燈D8滅。其它三個(gè)控制接口電路的工作原理與此類似。3.7 單片機(jī)與PC之間的通信PC內(nèi)部通常都裝有一個(gè)RS-232異步通信適配器版,其主要器件為可編程的UART芯片,如8250等,從而使PC有能力與其他具有標(biāo)準(zhǔn)RS-232串行通信接口的計(jì)算機(jī)設(shè)備進(jìn)行通信。AT89C52單片機(jī)本身具有一個(gè)全雙工的串行口,但單片機(jī)的串行口為T

30、TL電平,需要外接一個(gè)TTL-RS-232電平轉(zhuǎn)換器才能夠與PC的RS-232串行口連接,組成一個(gè)簡單可行的通信接口。由于RS-232的邏輯電平與TTL電平不兼容,為了與TTL電平的AT89C52單片機(jī)器件連接,必須進(jìn)行電平轉(zhuǎn)換。美國MAXIM公司生產(chǎn)的MAX232系列RS-232收發(fā)器是目前應(yīng)用較為普遍的串行口電平轉(zhuǎn)換器件。3.7.1 電平轉(zhuǎn)換芯片MAX232簡介1.概述MAX232芯片是美信公司專門為電腦的RS-232標(biāo)準(zhǔn)串口設(shè)計(jì)的單電源電平轉(zhuǎn)換芯片,使用+5V單電源供電。圖14所示為MAX232芯片的引腳排列和典型工作電路,芯片內(nèi)部包含兩個(gè)收發(fā)器,采用“電荷泵”技術(shù),利用4個(gè)外接電容C1

31、C4(通常取值為1F)就可以在單+5V電源供電的條件下,將輸入的+5V電壓轉(zhuǎn)換為RS-232輸出所需要的12V電壓。在實(shí)際應(yīng)用中,由于器件對(duì)電源噪聲很敏感,因此必須在電源Vcc與地之間加一個(gè)去耦電容C5。收發(fā)器在短距離(電纜容量1000pF)通信時(shí),通信速率最高可達(dá)120kbit/s。3.7.2 串口通信電路采用三線制連接串口,即單片機(jī)只連接電腦9針串口的3根線;第5腳的GND、第二腳的RXD、第三腳的TXD,具體電路如下圖:圖14 串口通信電路電源電路線性直流穩(wěn)壓電源的基本原理線性穩(wěn)壓電源是指調(diào)整管工作在線性狀態(tài)下的直流穩(wěn)壓電源,該類電源的優(yōu)點(diǎn)是穩(wěn)定性高,紋波小,可靠性高。1. 線性直流穩(wěn)壓

32、電源的組成線性直流穩(wěn)壓電源通常由變壓器、整流電路、濾波電路和穩(wěn)壓電路等幾部分組成如圖3-24所示。圖3-24 直流穩(wěn)壓電源結(jié)構(gòu)框圖變壓器的初級(jí)一側(cè)一般為 220V 交流電壓,次級(jí)一側(cè)電壓可以根據(jù)所需直流電壓的大小,通過選擇適當(dāng)?shù)淖儔罕葋淼玫?。整流電路利用二極管的單向?qū)щ娦詫⒔涣麟娮儞Q成脈動(dòng)直流電,利用濾波電路將脈動(dòng)直流電壓濾為較平滑的直流電壓。由于整流、濾波電路輸出的直流電壓穩(wěn)定性較差,當(dāng)電網(wǎng)電壓波動(dòng)或負(fù)載變化時(shí)輸出電壓也隨之而變化,采用穩(wěn)壓電路后,輸出電壓的穩(wěn)定程度將大為提高。2. 集成穩(wěn)壓器介紹集成穩(wěn)壓器的種類很多,作為小功率的線性直流穩(wěn)壓電源,應(yīng)用最為普遍的是三端集成穩(wěn)壓器。常用的三端集

33、成穩(wěn)壓器有:78XX 系列(正電壓型),79XX 系列(負(fù)電壓型)(實(shí)際產(chǎn)品中,XX 用數(shù)字表示,XX 是多少,輸出電壓就是多少。例如 7805,輸出電壓為5V);LM317 系列(可調(diào)正電壓型),LM337 系列(可調(diào)負(fù)電壓型)。另外在使用 78XX 與 79XX 時(shí)要注意,采用 TO-3 金屬外殼封裝的 78XX 系列集成電路時(shí),其金屬外殼為地端;而同樣封裝的 79XX 系列的穩(wěn)壓器,金屬外殼是負(fù)電壓輸入端。因此,在由二者構(gòu)成多路穩(wěn)壓電源時(shí),若將 78XX 的外殼接印刷電路板的公共地,79XX 的外殼及散熱器就必須與印刷電路板的公共地絕緣,否則會(huì)造成電源短路。 電源原理圖線性直流穩(wěn)壓電源電

34、路原理圖如圖3-25所示,輸入 220V 的交流電壓,經(jīng)變壓器 T1 后輸出為 15V 的交流電壓,經(jīng)整流、濾波、穩(wěn)壓后輸出的12V的直流電壓,又經(jīng)過5V穩(wěn)壓器輸出5V直流電壓。圖3-25 線性直流穩(wěn)壓電源原理圖系統(tǒng)軟件設(shè)計(jì) 本系統(tǒng)軟件設(shè)計(jì)主要包括:系統(tǒng)初始化程序、按鍵顯示設(shè)定的溫濕度范圍程序、溫濕度測量處理及顯示程序、控制程序,串口通信程序。系統(tǒng)整體工作方式如下框圖所示圖4-1 系統(tǒng)整體流程圖4.1 系統(tǒng)初始化程序系統(tǒng)初始化程序主要是設(shè)定系統(tǒng)的初始化狀態(tài)。本設(shè)計(jì)的初始化是設(shè)置蜂鳴器、升溫裝置、降溫裝置、加濕裝置、降濕裝置不工作,并將顯示器件LCD初始化,串口初始化,等待按鍵輸入溫濕度的范圍。

35、初始化流程圖如下圖所示圖4-2 初始化流程圖4.2 按鍵顯示設(shè)定的溫濕度鍵盤功能圖如圖3-11所示,按鍵顯示設(shè)定的溫濕度的過程為:按鍵輸入設(shè)定的溫濕度,如果按錯(cuò),按第15個(gè)或第16個(gè)鍵清屏;并且保證按鍵次數(shù)為17次。具體流程圖如下圖所示圖4-3 按鍵顯示設(shè)定的溫濕度流程圖4.3 溫濕度計(jì)算(測量、處理)及顯示計(jì)算出的溫濕度是最終顯示在LCD上的溫濕度。計(jì)算過程包括兩步:溫濕度的測量,溫濕度的處理。溫濕度的處理過程是為了補(bǔ)償溫濕度傳感器的非線性。溫濕度的計(jì)算流程圖如圖4-4,溫濕度的測量流程圖如圖4-5。溫濕度的處理過程就是計(jì)算補(bǔ)償溫濕度傳感器非線性的公式,在此不寫流程圖,具體過程見附錄中的程序

36、,溫濕度的顯示過程見附錄中的程序。圖4-4 溫濕度計(jì)算流程圖圖4-5 測溫流程圖串口通信串口通信是將測得的溫濕度值上傳給PC保存,其流程圖如圖4-6所示圖4-6 串口通信控制程序控制部分就是將測得的溫濕度與設(shè)定的溫濕度比較,以采取相應(yīng)的控制措施,這些措施包括加熱、降溫、加濕、降濕,當(dāng)測得的溫濕度不在設(shè)定的溫濕度范圍內(nèi)時(shí),聲音報(bào)警,控制程序中還包括將采取的措施在LCD上顯示。共有9種控制情況,如下所示,流程圖在此不列寫,可參考附錄中的程序。1. 濕度小于設(shè)定的最低濕度并且溫度小于設(shè)定的最低溫度。這時(shí)采取的控制措施是蜂鳴器響、加濕、加溫,并且LCD第二行最后四位的第一位、第三位為1顯示控制狀態(tài)。2

37、. 濕度小于設(shè)定的最低濕度并且溫度符合設(shè)定的溫度范圍。這時(shí)采取的控制措施是蜂鳴器響、加濕,并且LCD第二行最后四位的第三位為1顯示控制狀態(tài)。3. 濕度小于設(shè)定的最低濕度并且溫度大于設(shè)定的最高溫度。這時(shí)采取的控制措施是蜂鳴器響、加濕、降溫,并且LCD第二行最后四位的第二位、第三位為1顯示控制狀態(tài)。4. 濕度符合設(shè)定的濕度范圍并且溫度小于設(shè)定的最低溫度。這時(shí)采取的控制措施是蜂鳴器響、加溫,并且LCD第二行最后四位的第一位為1顯示控制狀態(tài)。5. 濕度符合設(shè)定的濕度范圍并且溫度符合設(shè)定的濕度范圍。這時(shí)不采取控制措施,并且LCD第二行最后四位什么都不顯示。6. 濕度符合設(shè)定的濕度范圍并且溫度大于設(shè)定的最

38、高溫度。這時(shí)采取的控制措施是蜂鳴器響、降溫,并且LCD第二行最后四位的第二位為1顯示控制狀態(tài)。7. 濕度大于設(shè)定的最高濕度并且溫度小于設(shè)定的最低溫度。這時(shí)采取的控制措施是蜂鳴器響、降濕、加溫,并且LCD第二行最后四位的第一位、第四位為1顯示控制狀態(tài)。8. 濕度大于設(shè)定的最高濕度并且溫度符合設(shè)定的溫度范圍。這時(shí)采取的控制措施是蜂鳴器響、降濕,并且LCD第二行最后四位的第四位為1顯示控制狀態(tài)。9. 濕度大于設(shè)定的最高濕度并且溫度大于設(shè)定的最高溫度。這時(shí)采取的控制措施是蜂鳴器響、降濕、降溫,并且LCD第二行最后四位的第二位、第四位為1顯示控制狀態(tài)。附錄資料:不需要的可以自行刪除 C語言圖形模式速成第

39、一節(jié) 圖形模式的初始化Turbo C 提供了非常豐富的圖形函數(shù),所有圖形函數(shù)的原型均在graphics. h 中,本節(jié)主要介紹圖形模式的初始化、獨(dú)立圖形程序的建立、基本圖形功能、圖形窗口以及圖形模式下的文本輸出等函數(shù)。另外,使用圖形函數(shù)時(shí)要確保有顯示器圖形驅(qū)動(dòng)程序*.BGI,同時(shí)將集成開發(fā)環(huán)境options/Linker中的Graphics lib選為on,只有這樣才能保證正確使用圖形函數(shù)。 不同的顯示器適配器有不同的圖形分辨率。即是同一顯示器適配器,在不同模式下也有不同分辨率。因此,在屏幕作圖之前,必須根據(jù)顯示器適配器種類將顯示器設(shè)置成為某種圖形模式,在未設(shè)置圖形模式之前,微機(jī)系統(tǒng)默認(rèn)屏幕為

40、文本模式(80列,25行字符模式),此時(shí)所有圖形函數(shù)均不能工作。設(shè)置屏幕為圖形模式,可用下列圖形初始化函數(shù):void far initgraph(int far *gdriver, int far *gmode,char *path);其中g(shù)driver和gmode分別表示圖形驅(qū)動(dòng)器和模式,path是指圖形驅(qū)動(dòng)程序所在的目錄路徑。有關(guān)圖形驅(qū)動(dòng)器、圖形模式的符號(hào)常數(shù)及對(duì)應(yīng)的分辨率見graphics. h。圖形驅(qū)動(dòng)程序由Turbo C出版商提供,文件擴(kuò)展名為.BGI。 根據(jù)不同的圖形適配器有不同的圖形驅(qū)動(dòng)程序。例如對(duì)于EGA、 VGA 圖形適配器就調(diào)用驅(qū)動(dòng)程序EGAVGA.BGI。#include

41、 stdio.h#include graphics.hint main()int gdriver, gmode;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/getch();closegraph();return 0;有時(shí)編程者并不知道所用的圖形顯示器適配器種類,或者需要將編寫的程序用于不同圖形驅(qū)動(dòng)器,Turbo C 提供了一個(gè)自動(dòng)檢測顯示器硬件的函數(shù),其調(diào)用格式為:void far detectgraph(int *gdriv

42、er, *gmode);其中g(shù)driver和gmode的意義與上面相同。 自動(dòng)進(jìn)行硬件測試后進(jìn)行圖形初始化:#include stdio.h#include graphics.hint main()int gdriver, gmode;detectgraph(&gdriver, &gmode); /*自動(dòng)測試硬件*/printf(the graphics driver is %d, mode is %dn,gdriver,gmode); /*輸出測試結(jié)果*/getch();initgraph(&gdriver, &gmode, C:TC2.0BGI);/* 根據(jù)測試結(jié)果初始化圖形*/bar3d

43、(100, 100, 300, 250, 50, 1); /*畫一長方體*/getch();closegraph();return 0;上例程序中先對(duì)圖形顯示器自動(dòng)檢測,然后再用圖形初始化函數(shù)進(jìn)行初始化設(shè)置,但Turbo C提供了一種更簡單的方法, 即用gdriver=DETECT 語句后再跟initgraph()函數(shù)就行了。采用這種方法后,上例可改為:#include stdio.h#include graphics.hint main()int gdriver=DETECT, gmode;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(50, 5

44、0, 150, 30, 50, 1);getch();closegraph();return 0;另外,Turbo C 提供了退出圖形狀態(tài)的函數(shù)closegraph(),其調(diào)用格式為:void far closegraph(void);第二節(jié) 屏幕顏色的設(shè)置和清屏函數(shù)對(duì)于圖形模式的屏幕顏色設(shè)置,同樣分為背景色的設(shè)置和前景色的設(shè)置。在Turbo C中分別用下面兩個(gè)函數(shù): 設(shè)置背景色: void far setbkcolor(int color);設(shè)置作圖色: void far setcolor(int color);其中color 為圖形方式下顏色的規(guī)定數(shù)值,對(duì)EGA,VGA顯示器適配器,有關(guān)顏

45、色的符號(hào)常數(shù)及數(shù)值見graphics.h。清除圖形屏幕內(nèi)容但不清除圖形背景使用清屏函數(shù),其調(diào)用格式如下: voide far cleardevice(void);#include stdio.h#include graphics.hint main()int gdriver, gmode, i,aa;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI); /*圖形初始化*/setbkcolor(0); /*設(shè)置圖形背景*/cleardevice();for(i=0; i=15; i+)setcolor(i); /*設(shè)置不同作圖色*/cir

46、cle(320, 240, 20+i*10); /*畫半徑不同的圓*/getch();for(i=0; i=15; i+)setbkcolor(i); /*設(shè)置不同背景色*/cleardevice();circle(320, 240, 20+i*10);getch();aa=getmaxcolor();printf(maxcolor=%d,aa);getch();closegraph();return 0;另外,TURBO C也提供了幾個(gè)獲得現(xiàn)行顏色設(shè)置情況的函數(shù)。 int far getbkcolor(void); 返回現(xiàn)行背景顏色值。int far getcolor(void); 返回現(xiàn)行

47、作圖顏色值。int far getmaxcolor(void); 返回最高可用的顏色值。第三節(jié) 基本畫圖函數(shù)基本圖形函數(shù)包括畫點(diǎn),線以及其它一些基本圖形的函數(shù)。本節(jié)對(duì)這些函數(shù)作一全面的介紹。 、畫點(diǎn). 畫點(diǎn)函數(shù) void far putpixel(int x, int y, int color); 該函數(shù)表示有指定的象元畫一個(gè)按color 所確定顏色的點(diǎn)。對(duì)于顏色color的值可從表3中獲得而對(duì)x, y是指圖形象元的坐標(biāo)。在圖形模式下,是按象元來定義坐標(biāo)的。對(duì)VGA適配器,它的最高分辨率為640 x480,其中640為整個(gè)屏幕從左到右所有象元的個(gè)數(shù),480為整個(gè)屏幕從上到下所有象元的個(gè)數(shù)。屏幕

48、的左上角坐標(biāo)為(0,0),右下角坐標(biāo)為(639, 479),水平方向從左到右為x 軸正向,垂直方向從上到下為y軸正向。TURBO C的圖形函數(shù)都是相對(duì)于圖形屏幕坐標(biāo),即象元來說的。關(guān)于點(diǎn)的另外一個(gè)函數(shù)是: int far getpixel(int x, int y); 它獲得當(dāng)前點(diǎn)(x, y)的顏色值。 II、有關(guān)坐標(biāo)位置的函數(shù) int far getmaxx(void);返回x軸的最大值。int far getmaxy(void);返回y軸的最大值。int far getx(void); 返回游標(biāo)在x軸的位置。void far gety(void); 返回游標(biāo)有y軸的位置。void far

49、moveto(int x, int y); 移動(dòng)游標(biāo)到(x, y)點(diǎn),不是畫點(diǎn),在移動(dòng)過程中亦畫點(diǎn)。void far moverel(int dx, int dy); 移動(dòng)游標(biāo)從現(xiàn)行位置(x, y)移動(dòng)到(x+dx, y+dy)的位置,移動(dòng)過程中不畫點(diǎn)。、畫線I. 畫線函數(shù)TURBO C提供了一系列畫線函數(shù): void far line(int x0, int y0, int x1, int y1); 畫一條從點(diǎn)(x0, y0)到(x1, y1)的直線。void far lineto(int x, int y); 畫一作從現(xiàn)行游標(biāo)到點(diǎn)(x, y)的直線。void far linerel(int

50、 dx, int dy); 畫一條從現(xiàn)行游標(biāo)(x,y)到按相對(duì)增量確定的點(diǎn)(x+dx, y+dy)的直線。void far circle(int x, int y, int radius); 以(x, y)為圓心,radius為半徑,畫一個(gè)圓。void far arc(int x, int y, int stangle, int endangle,int radius); 以(x,y)為圓心,radius為半徑,從stangle開始到endangle結(jié)束(用度表示)畫一段圓弧線。在TURBO C中規(guī)定x軸正向?yàn)? 度,逆時(shí)針方向旋轉(zhuǎn)一周, 依次為90,180, 270和360度(其它有關(guān)函數(shù)也

51、按此規(guī)定,不再重述)。 void ellipse(int x, int y, int stangle, int endangle,int xradius,int yradius);以(x, y)為中心,xradius,yradius為x軸和y軸半徑,從角stangle 開始到endangle結(jié)束畫一段橢圓線,當(dāng)stangle=0,endangle=360時(shí), 畫出一個(gè)完整的橢圓。void far rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)為左上角,(x2, y2)為右下角畫一個(gè)矩形框。 void far drawpoly(int nu

52、mpoints, int far *polypoints); 畫一個(gè)頂點(diǎn)數(shù)為numpoints,各頂點(diǎn)坐標(biāo)由polypoints給出的多邊形。polypoints整型數(shù)組必須至少有2 倍頂點(diǎn)數(shù)個(gè)無素。每一個(gè)頂點(diǎn)的坐標(biāo)都定義為x,y,并且x在前。值得注意的是當(dāng)畫一個(gè)封閉的多邊形時(shí),numpoints 的值取實(shí)際多邊形的頂點(diǎn)數(shù)加一,并且數(shù)組polypoints中第一個(gè)和最后一個(gè)點(diǎn)的坐標(biāo)相同。下面舉一個(gè)用drawpoly()函數(shù)畫箭頭的例子。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;int arw16=200

53、,102,300,102,300,107,330,100,300,93,300,98,200,98,200,102;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(12); /*設(shè)置作圖顏色*/drawpoly(8, arw); /*畫一箭頭*/getch();closegraph();return 0;II、設(shè)定線型函數(shù)在沒有對(duì)線的特性進(jìn)行設(shè)定之前,TURBO C 用其默認(rèn)值,即一點(diǎn)寬的實(shí)線,但TURBO C 也提供了可以改變線型的函數(shù)。線型包括:寬度

54、和形狀。其中寬度只有兩種選擇:一點(diǎn)寬和三點(diǎn)寬。而線的形狀則有五種。下面介紹有關(guān)線型的設(shè)置函數(shù)。void far setlinestyle(int linestyle,unsigned upattern,int thickness);該函數(shù)用來設(shè)置線的有關(guān)信息,其中l(wèi)inestyle是線形狀的規(guī)定,見graphics.h。對(duì)于upattern,只有l(wèi)inestyle選USERBIT_LINE 時(shí)才有意義 (選其它線型,uppattern取0即可)。此時(shí)uppattern的16位二進(jìn)制數(shù)的每一位代表一個(gè)象元,如果那位為1,則該象元打開,否則該象元關(guān)閉。 void far getlinesettin

55、gs(struct linesettingstypefar *lineinfo);該函數(shù)將有關(guān)線的信息存放到由lineinfo 指向的結(jié)構(gòu)中,表中l(wèi)inesettingstype的結(jié)構(gòu)如下:struct linesettingstypeint linestyle;unsigned upattern;int thickness;例如下面兩句程序可以讀出當(dāng)前線的特性 struct linesettingstype *info;getlinesettings(info);void far setwritemode(int mode);該函數(shù)規(guī)定畫線的方式。如果mode=0,則表示畫線時(shí)將所畫位置的原

56、來信息覆蓋了(這是TURBO C的默認(rèn)方式)。如果mode=1, 則表示畫線時(shí)用現(xiàn)在特性的線與所畫之處原有的線進(jìn)行異或(XOR)操作,實(shí)際上畫出的線是原有線與現(xiàn)在規(guī)定的線進(jìn)行異或后的結(jié)果。因此,當(dāng)線的特性不變,進(jìn)行兩次畫線操作相當(dāng)于沒有畫線。有關(guān)線型設(shè)定和畫線函數(shù)的例子如下所示。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolo

57、r(GREEN);circle(320, 240, 98);setlinestyle(0, 0, 3); /*設(shè)置三點(diǎn)寬實(shí)線*/setcolor(2);rectangle(220, 140, 420, 340);setcolor(WHITE);setlinestyle(4, 0 xaaaa, 1);/*設(shè)置一點(diǎn)寬用戶定義線*/line(220, 240, 420, 240);line(320, 140, 320, 340);getch();closegraph();return 0;第四節(jié) 基本圖形的填充填充就是用規(guī)定的顏色和圖模填滿一個(gè)封閉圖形。 一般是先畫輪廓再填充。TURBO C提供了一

58、些先畫出基本圖形輪廓, 再按規(guī)定圖模和顏色填充整個(gè)封閉圖形的函數(shù)。在沒有改變填充方式時(shí),TURBO C 以默認(rèn)方式填充。 void far bar(int x1, int y1, int x2, int y2);確定一個(gè)以(x1,y1)為左上角,(x2,y2)為右下角的矩形窗口,再按規(guī)定圖模和顏色填充。說明:此函數(shù)不畫出邊框,所以填充色為邊框。void far bar3d(int x1, int y1, int x2, int y2,int depth,int topflag);當(dāng)topflag為非0時(shí), 畫出一個(gè)三維的長方體。當(dāng)topflag為0時(shí),三維圖形不封頂,實(shí)際上很少這樣使用。說明:

59、 bar3d()函數(shù)中,長方體第三維的方向不隨任何參數(shù)而變,即始終為45度的方向。void far pieslice(int x,int y,int stangle,int endangle,int radius);畫一個(gè)以(x, y)為圓心,radius為半徑,stangle為起始角度,endangle 為終止角度的扇形,再按規(guī)定方式填充。當(dāng)stangle=0,endangle=360 時(shí)變成一個(gè)實(shí)心圓,并在圓內(nèi)從圓點(diǎn)沿X軸正向畫一條半徑。void far sector(int x, int y,int stanle,intendangle,int xradius, int yradius)

60、;畫一個(gè)以(x, y)為圓心分別以xradius, yradius為x軸和y軸半徑,stangle 為起始角,endangle為終止角的橢圓扇形,再按規(guī)定方式填充。第五節(jié) 設(shè)定填充方式TURBO C有四個(gè)與填充方式有關(guān)的函數(shù)。下面分別介紹: void far setfillstyle(int pattern, int color); color的值是當(dāng)前屏幕圖形模式時(shí)顏色的有效值。pattern的值及與其等價(jià)的符號(hào)常數(shù)見graphics.h。除USER_FILL(用戶定義填充式樣)以外,其它填充式樣均可由setfillstyle() 函數(shù)設(shè)置。當(dāng)選用USER_FILL時(shí),該函數(shù)對(duì)填充圖模和顏色

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論