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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  目錄</b></p><p><b>  摘要1</b></p><p><b>  第1章 緒論2</b></p><p>  1.1 系統(tǒng)設計的背景及意義2</p><p>  1.2 設計的基本內容2</p><p

2、>  1.3 實現(xiàn)的基本功能3</p><p>  第2章 總體電路設計與原理說明4</p><p>  2.1 方案介紹4</p><p>  2.2總體方案設計5</p><p>  2.2.1 自動控制窗簾基本功能5</p><p>  2.2.2 總體結構設計5</p><

3、p>  第3章 硬件分析與設計7</p><p>  3.1 單片機及相關電路設計7</p><p>  3.1.1 89C51單片機概述7</p><p>  3.1.2 晶振電路8</p><p>  3.1.3 復位電路8</p><p>  3.1.4 顯示電路9</p>&l

4、t;p>  3.2 光敏傳感器電路9</p><p>  3.3 A/D轉換電路11</p><p>  3.4 步進電機電路12</p><p><b>  13</b></p><p>  3.5 溫度檢測電路13</p><p>  3.6 紅外控制電路15</p>

5、;<p>  第4章 程序分析設計18</p><p>  4.1 主程序18</p><p>  4.2 重要子程序設計18</p><p><b>  第5章 總結19</b></p><p><b>  參考文獻21</b></p><p>  

6、附錄1 :原理圖22</p><p>  附錄 2 :部分子程序23</p><p><b>  摘要</b></p><p>  自動控制技術是20世紀發(fā)展最快、影響最大的技術之一,也是21世紀最重要的高技術之一。今天,技術、生產、軍事、管理、生活等各個領域,都離不開自動控制技術。就定義而言,自動控制技術是控制論的技術實現(xiàn)應用,是通過具有

7、一定控制功能的自動控制系統(tǒng),來完成某種控制任務,保證某個過程按照預想進行,或者實現(xiàn)某個預設的目標。隨著電子計算機技術和其他高技術的發(fā)展,自動控制技術的水平越來越高,應用越來越廣泛,作用越來越重要。尤其是在生產過程的自動化、工廠自動化、機器人技術、綜合管理工程、航天工程、軍事技術等領域,自動控制技術起到了關鍵作用。當然,在智能家居方面,自動控制技術有較好的發(fā)展前景。應用自動控制技術,將是家居環(huán)境更加智能化,人性化。</p>

8、<p>  針對家居環(huán)境采光及避光問題,自動窗簾控制系統(tǒng)將取代手動控制,更加人性化。本文綜述了自動窗簾系統(tǒng)的設計與控制系統(tǒng),介紹了設計制作一個完整的自動窗簾控制系統(tǒng)所需要做的理論分析,以及各環(huán)節(jié)功能的實現(xiàn)。自動窗簾控制系統(tǒng)核心是采用單片機AT89C51控制,其次采用感光傳感器,紅外控制電路,溫度檢測電路等外圍電路。整個系統(tǒng)在各模塊的配合下實現(xiàn)半自動控制,自動控制等功能。該設計在理論層面上,以程序語言驅動各模塊工作,實現(xiàn)了各模塊

9、的內在聯(lián)系,應用層面上采用軟件進行原理圖設計和仿真。</p><p>  該自動窗簾系統(tǒng)硬件電路主要由光敏檢測電路,紅外控制電路,溫度檢測電路,步進電機驅動電路構成。該設計則主要討論了自動窗簾系統(tǒng)的設計過程,硬件電路設計,軟件調試過程,以及利用軟件實現(xiàn)紅外線遙控信號的編碼及解碼方式。通過本系統(tǒng)可以實現(xiàn)通過光照強度實現(xiàn)窗簾開關自動控制,通過溫度檢測電路實現(xiàn)窗簾開關自動控制,同時實現(xiàn)紅外遙控的半自動控制。</p

10、><p>  關鍵詞:自動控制,自動窗簾,單片機,步進電機</p><p><b>  第1章 緒論</b></p><p>  1.1 系統(tǒng)設計的背景及意義</p><p>  智能家居以住宅為平臺,兼?zhèn)浣ㄖ?、網絡通信、信息家電、設備自動化,集系統(tǒng)、結構、服務、管理為一體的高效、舒適、安全、便利、環(huán)保的居住環(huán)境,盡顯便捷將

11、家中的各種設備(如音視頻設備、照明設備、窗簾控制、空調控制、網絡家電等)通過家庭網絡連接到一起。與普通家居相比,不僅具有傳統(tǒng)的居住功能,提供安全舒適的家庭生活空間,還能提供全方位的信息交互功能,優(yōu)化人們的生活方式。隨著社會信息化的加快,人們的工作、生活和通訊、信息的日益緊密。信息化社會在改變人們生活方式與工作習慣的時候,也對傳統(tǒng)的住宅提出了挑戰(zhàn),社會、技術以及經濟的進步更使人們的觀念隨之巨變。人們對家居的要求早已不是物理空間,更為關注的

12、是一個安全、方便、舒適的居家環(huán)境。</p><p>  隨著技術產業(yè)結構的調整,生產工藝的飛速發(fā)展,人們的生活水平不斷提高,家用電氣逐漸普及。高精度、多功能、低功耗是現(xiàn)代科技發(fā)展的趨勢。在這種趨勢下,窗簾的數字化、智能化已經成為現(xiàn)代生產研究的主導設計方向。</p><p>  單片機在電子產品中的應用已經越來越廣泛,在很多電子產品中也用到了紅外控制。結合感光系統(tǒng)和紅外遙控系統(tǒng)的智能窗簾系統(tǒng)

13、具有較好的發(fā)展前景。</p><p>  1.2 設計的基本內容</p><p>  本智能家居自動窗簾控制系統(tǒng)以STC89S51單片機為控制核心,由電源模塊、光敏感應模塊、溫度監(jiān)測模塊、紅外遙控模塊等幾個環(huán)節(jié)組成本系統(tǒng)的主要框架,與此同時可外擴一些其他的控制功能。系統(tǒng)可以實現(xiàn)對外界光線強度的實時監(jiān)測,從而來控制窗簾的自動開啟和關閉,并可對室內的溫度進行檢測和顯示,可由用戶隨時設定溫度閾值

14、,當實際的溫度超過或低于設定溫度后,通過窗簾的開閉,使室內的光線和溫度達到一個較為理想的條件。為了更體現(xiàn)人性化,本設計通過紅外線的發(fā)送和接收,可根據用戶的意愿實現(xiàn)對窗簾開閉的遠距離遙控。</p><p>  該設計主要分為以下幾個章節(jié):</p><p>  緒論:介紹介紹系統(tǒng)設計的背景及意義。</p><p>  總體方案設計:介紹自動窗簾控制系統(tǒng)總體方案,及總體結

15、構設計。</p><p>  硬件系統(tǒng)分析:介紹主要硬件系統(tǒng)。</p><p>  軟件分析:介紹軟件設計。</p><p>  總結:對該設計的不足和擴展進行分析。</p><p>  1.3 實現(xiàn)的基本功能</p><p>  自動窗簾控制系統(tǒng)具有以下幾個基本功能:</p><p>  光照

16、控制:根據光照強度值,通過感光器采集,自動打開或關閉窗簾。即當早晨光照強度增強到設定值,通過感光器采集,單片機控制步進電機打開窗簾;當夜晚光照強度減弱到設定值,通過感光器采集,單片機控制步進電機關閉窗簾。</p><p>  溫度控制:通過紅外遙控器設定給定溫度,通過溫度監(jiān)測系統(tǒng),檢測環(huán)境溫度,當溫度高于或低于給定值時,單片機控制步進電機打開或關閉窗簾。</p><p>  紅外控制:當光

17、照強度未達到設定值,手動操作紅外遙控器,由紅外接收系統(tǒng)接收信號,單片機控制步進電機打開或關閉窗簾。</p><p>  第2章 總體電路設計與原理說明</p><p><b>  2.1 方案介紹</b></p><p>  方案:基于光照檢測及溫度檢測的自動控制</p><p><b>  原理框圖如下:&l

18、t;/b></p><p>  圖 2-1 原理框圖</p><p><b>  2.2總體方案設計</b></p><p>  自動窗簾控制系統(tǒng)總體方案的設計是基于滿足設計要求的前提下,根據理論上的可實現(xiàn)性和硬件電路的經濟實用型,進行設計。本設計從人們對系統(tǒng)設計功能的需求出發(fā),綜合考慮各種因素的情況下,設計出自動控制系統(tǒng)的整體框架,并且

19、在整體功能實現(xiàn)的基礎上,盡可能考慮系統(tǒng)的可擴展性。</p><p>  2.2.1 自動控制窗簾基本功能</p><p>  自動窗簾控制系統(tǒng)具有以下幾個模塊:</p><p>  感光控制模塊:本模塊首先通過光敏電阻在外界光線強度的變化下阻值的改變,使得輸出電壓發(fā)生變化。變化的電壓信號傳送到PFC8591八位的AD/DA轉換芯片,將模擬量轉化為數字量,進而輸入到單

20、片機處理器。經處理器的運算與處理,控制電機的正反轉,達到窗簾開閉的目的。</p><p>  溫度監(jiān)測模塊:模塊通過溫度傳感器DS18B20采集室內的溫度值,經過單總線的傳輸方式將采集到的溫度信號傳送給單片機,并由LCD顯示器顯示當前的溫度。其中,溫度的閾值可由用戶通過紅外線來遙控設定。當室內溫度超過或低于設定值時,伴隨著著電機的正反轉。</p><p>  紅外遙控模塊:本模塊利用HT6

21、221芯片組成的遙控器發(fā)射紅外信號,接收頭接收后先解碼,并用液晶顯示每個按鍵對應的用戶碼值。利用遙控器上的按鍵,軟件中設置可供用戶隨時控制電機正反轉的程序,實現(xiàn)可在任意時刻控制窗簾的打開和關閉。此處,紅外遙控另外一個功能是在進入溫度設定模式下設置初始的溫度值,并可借用紅外遙控外擴一些較為實用的家庭簡單控制電路,為人們的日常生活帶來方便。</p><p>  2.2.2 總體結構設計</p><

22、p>  系統(tǒng)設計的總體框圖如下:</p><p><b>  圖2-2 總體框圖</b></p><p><b>  硬件分析與設計</b></p><p>  3.1 單片機及相關電路設計</p><p>  3.1.1 89C51單片機概述</p><p>  A

23、T89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,俗稱單片機。單片機的可擦除只讀存儲器可以反復擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器。AT89C單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。</p>

24、<p><b>  主要參數:</b></p><p>  片內震蕩器和時鐘電路</p><p>  4K字節(jié)可編程閃爍存儲器;</p><p>  128*8位內部RAM</p><p><b>  32可編程I/O線</b></p><p>  兩個16位定時器

25、/計數器</p><p><b>  5個中斷源 </b></p><p>  全靜態(tài)工作:0HZ-24MHZ</p><p>  低功耗閑置和掉電模式</p><p>  3.1.2 晶振電路</p><p>  圖3-1 單片機內部晶振電路連接圖</p><p>  單

26、片機必須在時鐘的驅動下才能進行工作。MCS-51系列單片機內部都有一個時鐘振蕩電路,只需外接晶振源,就能產生一定頻率的時鐘信號送到單片機的內部的各個單元,決定單片機的工作速度。圖4-3就是內部時鐘工作方式的電路圖,這是一種常用的方式。這種方式是外界振蕩源,本設計就采用這種外接晶振的方法。電路中的兩個電容的作用有兩個:一是幫助振蕩器起振(C1 C2的值大,起振的速度慢;反之,速度快。);二是對振蕩器的頻率起到微調的作用(C1 C2的值大,

27、頻率略有減少,反之,頻率略有提高)。C1 C2的值采用30pF。</p><p>  3.1.3 復位電路</p><p><b>  圖3-2 復位電路</b></p><p>  在系統(tǒng)運行的過程中,有時可能對系統(tǒng)需要進行復位,為了避免對硬件系統(tǒng)經常加電和斷電造成的損害,設計了手動的復位電路。如圖4-2所示。這種電路的設計,在系統(tǒng)的運行過程

28、中需要復位時,只需使開關閉合,在RST端就會出現(xiàn)一定時間的高電平信號,從而使單片機實現(xiàn)復位。</p><p>  3.1.4 顯示電路</p><p>  按照電路圖鏈接電路即可,需要說明的是在這個電路圖中,LCD的第三腳VEE沒有接,這個腳是控制屏幕對比度的??梢詫㈦娢黄鞯膬啥朔謩e接VCC和GND,中間端接LCD的第三腳。</p><p>  圖3-3 1602液

29、晶電路</p><p>  3.2 光敏傳感器電路</p><p>  光敏傳感器是最常見的傳感器之一,它的種類繁多,主要有:光電管、光電倍增管、光敏電阻等。</p><p>  光敏電阻又稱光導管,常用的制作材料為硫化鎘,另外還有硒、硫化鋁、硫化鉛和硫化鉍等材料。這些制作材料具有在特定波長的光照射下,其阻值迅速減小的特性。這是由于光照產生的載流子都參與導電,在外加

30、電場的作用下作漂移運動,電子奔向電源的正極,空穴奔向電源的負極,從而使光敏電阻器的阻值迅速下降。</p><p>  圖3-4 光敏傳感器</p><p>  當光敏電阻受到脈沖光照射時,光電流要經過一段時間才能達到穩(wěn)定值,而在停止光照后,光電流也不立刻為零,這就是光敏電阻的時延特性。由于不同材料的光敏,電阻時延特性不同,所以它們的頻率特性也不同,硫化鉛的使用頻率比硫化鎘高得多,但多數光

31、敏電阻的時延都比較大,所以,它不能用在要求快速響應的場合。</p><p>  3.3 A/D轉換電路</p><p>  PCF8591是一個單片集成、單獨供電、低功耗、8-bit CMOS數據獲取器件。PCF8591具有4個模擬輸入、1個模擬輸出和1個串行I²C總線接口。PCF8591的3個地址引腳A0, A1和A2可用于硬件地址編程,允許在同個I²C總線上接入8個

32、PCF8591器件,而無需額外的硬件。在PCF8591器件上輸入輸出的址、控制和數據信號都是通過雙線向I²C總線以串行的方式進行傳輸?! CF8591的功能包括多路模擬輸入、內置跟蹤保持、8-bit模數轉換和8-bit數模轉換。PCF8591的最大轉化速率由I²C總線的最大速率決定。</p><p>  圖3-5 A/D轉換電路</p><p>  PCF8591

33、 特性:單獨供電;PCF8591的操作電壓范圍2.5V-6V;低待機電流;通過I2C總線串行輸入/輸出;PCF8591通過3個硬件地址引腳尋址;PCF8591的采樣率由I2C總線速率決定;4個模擬輸入可編程為單端型或差分輸入;自動增量頻道選擇;PCF8591的模擬電壓范圍從VSS到VDD;PCF8591內置跟蹤保持電路;8-bit逐次逼近A/D轉換器;通過1路模擬輸出實現(xiàn)DAC增益。</p><p>  3.4

34、步進電機電路</p><p>  步進電機是將電脈沖信號轉變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元步進電機件。在非超載的情況下,電機的轉速、停止的位置只取決于脈沖信號的頻率和脈沖數,而不受負載變化的影響,當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度,稱為“步距角”,它的旋轉是以固定的角度一步一步運行的??梢酝ㄟ^控制脈沖個數來控制角位移量,從而達到準確定位的目的;同時可以通過控制脈沖頻率來控

35、制電機轉動的速度和加速度,從而達到調速的目的。</p><p>  圖3-6 步進電機電路</p><p>  3.5 溫度檢測電路</p><p>  DS18B20外形及引腳說明:</p><p>  圖3-7 溫度傳感器</p><p>  引腳說明:GND:地;</p><p>  D

36、Q:單線運用的數據輸入/輸出引腳;</p><p>  VD:可選的電源引腳。</p><p>  單總線通常要求接一個約4.7K左右的上拉電阻,這樣,當總線空閑時,其狀態(tài)為高電平。</p><p>  圖3-8 DS18B20接線原理圖</p><p>  DS18B20時序圖:主機使用時間隙來讀寫DS18B20的數據位和寫命令字的位。&l

37、t;/p><p>  初始化時序如下圖: </p><p>  圖3-9 DS18B20初始化時序</p><p>  DS18B20讀寫時序:</p><p>  圖3-10 DS18B20讀寫時序</p><p>  3.6 紅外控制電路</p><p><b>  紅外通信基本原理

38、:</b></p><p>  紅外通信是利用950nm近紅外波段作為傳遞信息的媒體,即通信信道。發(fā)送端將基帶二進制信號調制為一系列的脈沖串信號,通過紅外發(fā)射管發(fā)射信號。接收端將接收到的信號裝成電信號,再經過放大、濾波等處理后送給解調電路進行解調,還原為二進制信號后輸出。常用的有通過脈沖寬度來實現(xiàn)信號調制(PWM)和通過脈沖串之間的時間間隔來實現(xiàn)信號調制的脈時調制(PPM)兩種方法。</p>

39、;<p>  簡而言之,紅外通信的實質就是對二進制數字信號進行調制與解調,以便利用紅外信道進行傳輸;紅外通信接口就是針對紅外信道的調制解調。</p><p>  紅外遙控系統(tǒng)主要由遙控發(fā)射器、一體化接收頭、單片機、接口電路組成。遙控器用來產生遙控編碼脈沖,驅動紅外發(fā)射管輸出紅外遙控信號,遙控接收頭來完成對遙控信號的放大、檢波、整形、解調出遙控編碼脈沖。遙控編碼脈沖是一組串行二進制碼,對于一般的紅外遙

40、控系統(tǒng),此串行碼輸入到微控制器,由其內部CPU完成對遙控指令解碼,并執(zhí)行相應的遙控功能。</p><p>  紅外遙控控制過程:本系統(tǒng)以89C51單片機為核心,由發(fā)射和接受兩部分組成,發(fā)射部分主要完成編碼和調制,接收部分完成調解和解碼。其發(fā)射部分主要由89C51單片機完成編碼,然后由紅外發(fā)射管發(fā)射紅外線,接收部分主要由光電轉換,放大,解調,解碼組成。其中光電轉換,放大調解由紅外線一體化接頭來完成,接收單片機主要完

41、成解碼功能。</p><p>  遙控器發(fā)射及其編碼:紅外線遙控采用自定義編碼方式,由發(fā)送單片機來完成。遙控發(fā)射器專用芯片很多,根據編碼格式可以分為脈沖寬度調制和香味調制兩大類。當發(fā)射器案件按下后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同,這碼具有以下特征:</p><p>  采用脈寬調制的串行碼,以脈寬為0.26ms、間隔0.26ms、周期為0.52ms的組合表示二進制的“1”(如圖

42、3-11A),其特征是脈沖中高電平的寬度等于0.26ms,相當于10個26μs的寬度;以脈寬為0.26ms、間隔為0.52ms、周期為0.78ms的組合表示二進制的“0”(如圖3-11B),其特征是脈沖中而低電平的寬度是高電平的二倍,等于0.52ms,相當于20個26μs的寬度??梢愿鶕鬏敂祿牟煌瑏碚{節(jié)脈沖的寬度。</p><p>  表示1 表示0</p>

43、;<p>  0.26mm 0.26mm 0.52mm 0.26mm</p><p>  A B</p><p>  圖3-11 二進制信號 </p><p>  二進制信號的調制:二進制信號的調制由發(fā)送單片機來完成,它把編碼后的二進制信號調制成頻率為38KHz的

44、間斷脈沖串,相當于用二進制信號的編碼乘以頻率為38KHz的脈沖信號得到的間斷脈沖串,即是調制后用于紅外發(fā)射二極管發(fā)送的信號。如圖3所示,A是二進制信號的編碼波形,B是頻率為38KHz(周期為26μs)的連續(xù)脈沖串,C是經調制后的間斷脈沖串(相當于C=A×B),用于紅外發(fā)射二極管發(fā)送的波形。

45、 </p><p>  1 0 </p><p>  A

46、 編碼后的二進制信號 </p><p>  10個脈沖 20個脈沖 </p><p>  B 單個脈沖 26us

47、 </p><p><b>  10個脈沖</b></p><p>  C=A*B 調制后的二進制信號(發(fā)送) </p><p>  圖3-

48、12 二進制信號的調制 </p><p>  二進制信號的解調:二進制信號的調制仍由發(fā)送單片機來完成,它把編碼后的二進制信號調制成頻率為38KHz的間斷脈沖串,相當于用二進制信號的編碼乘以頻率為38KHz的脈沖信號得到的間斷脈沖串,即是調制后用于紅外發(fā)射二極管發(fā)送的信號。如圖3.3所示,是二進制信號的編碼波

49、形,B是頻率為38KHz(周期為26μs)的連續(xù)脈沖串,C是經調制后的間斷脈沖串(相當于C=A×B),用于紅外發(fā)射二極管發(fā)送的波形。</p><p>  二進制信號的解碼:二進制信號的解碼由接收單片機來完成,它把紅外接收頭送來的二進制編碼波形通過解碼,還原出發(fā)送端發(fā)送的數據。</p><p>  D 紅外接收頭接收的波形

50、(輸入) </p><p>  表示1 表示0 表示1 </p><p>  E 紅外接收頭調解后輸出的波形 </p>

51、<p>  圖3-13 HS0038的輸入輸出波形</p><p>  基于字節(jié)傳輸的紅外遙控數據格式:在發(fā)送字節(jié)的開始先通過單片機發(fā)送20個脈沖寬度(每個脈沖周期26μs)的高電平作為傳輸開始,接著發(fā)送8位數據(字節(jié)高位在前,低位在后),最后發(fā)送10個脈沖寬度的低電平作為傳輸結束,如圖3-14所示。

52、 </p><p>  傳輸開始 8位數據 傳輸結束 </p><p>  20個脈沖 高位在前,低位在后 10個脈沖

53、 </p><p>  圖3-14 基于字節(jié)傳輸的紅外遙控數據格式</p><p><b>  程序分析設計</b></p><p><b>  4.1 主程序</b></p><p>  程序流程為:當清晨是陽光較強,此時光敏二極管呈現(xiàn)

54、低電阻,相當于接入單片機為低電平,可以通過程序控制步進電機正轉,來打開窗簾,單片機輸出停止,電動機M停轉。當傍晚時光線比較弱,此時光敏電阻呈現(xiàn)高電阻,相當于接入單片機為高電平,可以通過程序輸出負相脈沖控制步進電機反轉,來關閉窗。簾單片機輸出停止,電動機M停轉。</p><p>  4.2 重要子程序設計</p><p>  主要包括:光敏傳感程序,紅外控制程序,溫度檢測程序,步進電機程序,

55、液晶顯示程序等,參照附錄二。</p><p><b>  總結</b></p><p>  該設計通過分析自動窗簾系統(tǒng)的現(xiàn)狀和人們對自動窗簾系統(tǒng)功能的需求,對自動窗簾系統(tǒng)控制器進行總體設計。總體設計采用步進電機為單片機控制元件,執(zhí)行窗簾開閉的主要任務;以光敏電阻為檢測元件,提供單片機外界光照變化;以紅外檢測電路,實現(xiàn)手動控制;以89C51單片機為主控制芯片,控制整個系

56、統(tǒng)運行;此外輔助以按鍵和顯示電路,在各模塊的配合下,最終實現(xiàn)自動窗簾控制系統(tǒng)的智能化要求。</p><p>  自動窗簾控制系統(tǒng)具有以下幾個基本功能:</p><p>  光照控制:根據光照強度值,通過感光器采集,自動打開或關閉窗簾。即當早晨光照強度增強到設定值,通過感光器采集,單片機控制步進電機打開窗簾;當夜晚光照強度減弱到設定值,通過感光器采集,單片機控制步進電機關閉窗簾。</p

57、><p>  溫度控制:通過紅外遙控器設定給定溫度,通過溫度監(jiān)測系統(tǒng),檢測環(huán)境溫度,當溫度高于或低于給定值時,單片機控制步進電機打開或關閉窗簾。</p><p>  紅外控制:當光照強度未達到設定值,手動操作紅外遙控器,由紅外接收系統(tǒng)接收信號,單片機控制步進電機打開或關閉窗簾。</p><p><b>  參考文獻</b></p>&

58、lt;p>  [1]閻石.《數字電子技術基礎(第五版)》 北京:高等教育出版社,2006</p><p>  [2]李哲英.《電子技術及其應用基礎》(數字部分)北京:高等教育出版社,2003</p><p>  [3]郭天祥.《十天學會單片機和C語言編程》 北京;電子工業(yè)出版社,2009</p><p><b>  附錄1 :原理圖</b>

59、;</p><p>  附錄 2 :部分子程序</p><p>  unsigned int LowTime,HighTime;</p><p><b>  {</b></p><p>  unsigned char i,j;</p><p>  for(i=0;i<10;i++)<

60、/p><p>  for(j=0;j<33;j++)</p><p><b>  ; </b></p><p><b>  }</b></p><p>  void delay(unsigned char n)</p><p><b>  {</b>

61、;</p><p>  unsigned char i;</p><p>  for(i=0;i<n;i++)</p><p>  delay1ms();</p><p><b>  }</b></p><p>  void DelayDelay(unsigned int num)</

62、p><p><b>  {</b></p><p>  while( --num ) ;</p><p><b>  }</b></p><p>  void delay11(unsigned char x) //x*0.14MS</p><p><b>  {&

63、lt;/b></p><p>  unsigned char i;</p><p>  while(x--)</p><p><b>  {</b></p><p>  for (i = 0; i<13; i++) {}</p><p><b>  }</b>&l

64、t;/p><p><b>  }</b></p><p>  void beep()//蜂鳴器響一聲函數</p><p><b>  {</b></p><p>  unsigned char i; </p><p>  BEEP=1; </p><

65、;p>  for (i=0;i<100;i++)</p><p><b>  {</b></p><p>  delay1ms();</p><p><b>  //BEEP取反</b></p><p><b>  } </b></p><p&g

66、t;  BEEP=0; //關閉蜂鳴器</p><p>  delay(250); //延時 </p><p><b>  }</b></p><p>  void motor_ffw(unsigned char ii) //unsigned char num,</p><p>

67、;<b>  { </b></p><p>  unsigned char i;</p><p>  unsigned int j;</p><p>  //while(num--)</p><p><b>  //{</b></p><p>  for (j=0; j&l

68、t;64; j++) //轉1*n圈 </p><p><b>  { </b></p><p>  for (i=0; i<8; i++) //一個周期轉30度</p><p><b>  {</b></p><p>  if(ii==1) P1 = ~FFF[i

69、]; //取數據 ii控制電機的正反轉ii=0 或者 ii=1</p><p>  if(ii==2) P1 = ~FFZ[i];</p><p>  delay(1); //調節(jié)轉速</p><p><b>  }</b></p><p><b>  }<

70、;/b></p><p><b>  //} </b></p><p><b>  }</b></p><p>  void iic_start(void)</p><p>  { //時鐘保持高,數據線從高到低一次跳變,I2C通信開始</p><p>  SDA =

71、1; </p><p><b>  SCL = 1;</b></p><p>  delayNOP(); // 延時5us </p><p><b>  SDA = 0;</b></p><p>  delayNOP();</p><p><b>

72、  SCL = 0;</b></p><p><b>  }</b></p><p>  void iic_stop(void)</p><p><b>  { </b></p><p>  SDA = 0; //時鐘保持高,數據線從低到高一次跳變,I2C通信停止<

73、/p><p><b>  SCL = 1;</b></p><p>  delayNOP();</p><p><b>  SDA = 1;</b></p><p>  delayNOP();</p><p><b>  SCL = 0;</b></p

74、><p><b>  }</b></p><p>  void iicInit(void)</p><p><b>  {</b></p><p><b>  SCL = 0;</b></p><p>  iic_stop();</p>&l

75、t;p><b>  } </b></p><p>  void slave_ACK(void)</p><p><b>  {</b></p><p>  SDA = 0; </p><p><b>  SCL = 1;</b></p><p>

76、;  delayNOP();</p><p><b>  SCL = 0;</b></p><p><b>  }</b></p><p>  void slave_NOACK(void)</p><p><b>  { </b></p><p>&l

77、t;b>  SDA = 1;</b></p><p><b>  SCL = 1;</b></p><p>  delayNOP();</p><p><b>  SDA = 0;</b></p><p>  SCL = 0; </p><p><b

78、>  }</b></p><p>  void check_ACK(void)</p><p><b>  { </b></p><p>  SDA = 1; // 將p1.1設置成輸入,必須先向端口寫1</p><p><b>  SCL = 1;</b>

79、</p><p>  askflag = 0;</p><p>  delayNOP(); </p><p>  if(SDA == 1) // 若SDA=1表明非應答,置位非應答標志askflag</p><p>  askflag = 1;</p><p><b>  SCL = 0;</

80、b></p><p><b>  }</b></p><p>  void IICSendByte(unsigned char ch)</p><p><b>  {</b></p><p>  unsigned char idata n=8; // 向SDA上發(fā)送一位數據字節(jié),共八位

81、</p><p>  while(n--)</p><p><b>  { </b></p><p>  if((ch&0x80) == 0x80) // 若要發(fā)送的數據最高位為1則發(fā)送位1</p><p><b>  {</b></p><p>  SDA =

82、 1; // 傳送位1</p><p><b>  SCL = 1;</b></p><p>  delayNOP();</p><p>  //SDA = 0;</p><p><b>  SCL = 0; </b></p><p><b>  }<

83、;/b></p><p><b>  else</b></p><p><b>  { </b></p><p>  SDA = 0; // 否則傳送位0</p><p><b>  SCL = 1;</b></p><p>  delay

84、NOP();</p><p><b>  SCL = 0;</b></p><p><b>  }</b></p><p>  ch = ch<<1; // 數據左移一位</p><p><b>  }</b></p><p><

85、b>  }</b></p><p>  uchar IICreceiveByte(void)</p><p><b>  {</b></p><p>  uchar idata n=8; // 從SDA線上讀取一上數據字節(jié),共八位</p><p>  uchar tdata=0;</p&g

86、t;<p>  while(n--)</p><p><b>  {</b></p><p><b>  SDA = 1;</b></p><p><b>  SCL = 1;</b></p><p>  tdata =tdata<<1; /

87、/左移一位</p><p>  if(SDA == 1)</p><p>  tdata = tdata|0x01; // 若接收到的位為1,則數據的最后一位置1</p><p><b>  else </b></p><p>  tdata = tdata&0xfe; // 否則數據的最后一位置0<

88、;/p><p><b>  SCL = 0;</b></p><p><b>  }</b></p><p>  return(tdata);</p><p><b>  }</b></p><p>  void ADC_PCF8591(uchar cont

89、rolbyte)</p><p><b>  { </b></p><p>  uchar i=0; //idata: 單片機間接訪問的片內RAM區(qū),允許訪問全部片內RAM</p><p>  iic_start();</p><p>  IICSendByte(PCF8591_WRITE);//控

90、制字</p><p>  check_ACK();</p><p>  if(askflag == 1)</p><p><b>  {</b></p><p>  SystemError = 1;</p><p><b>  return;</b></p>&

91、lt;p><b>  }</b></p><p>  IICSendByte(controlbyte);//控制字</p><p>  check_ACK();</p><p>  if(askflag == 1)</p><p><b>  {</b></p><p&g

92、t;  SystemError = 1;</p><p><b>  return;</b></p><p><b>  }</b></p><p>  iic_start(); //重新發(fā)送開始命令</p><p>  IICSendByte(PCF8591_READ

93、);//控制字</p><p>  check_ACK();</p><p>  if(askflag == 1)</p><p><b>  {</b></p><p>  SystemError = 1;</p><p><b>  return;</b></p&

94、gt;<p><b>  }</b></p><p>  IICreceiveByte(); //空讀一次,調整讀順序</p><p>  slave_ACK(); //收到一個字節(jié)后發(fā)送一個應答位</p><p>  //讀四次,如果只啟動一個通道,讀一次就行讀出值是16進制的</p><p

95、>  /*while(i<4)</p><p><b>  { </b></p><p>  receive_da=IICreceiveByte();</p><p>  receivebuf[i++]=receive_da;</p><p>  slave_ACK(); //收到一個字節(jié)后發(fā)

96、送一個應答位</p><p><b>  }</b></p><p><b>  */</b></p><p><b>  //讀一次寫法</b></p><p>  receivebuf=IICreceiveByte();</p><p>  slav

97、e_NOACK(); //收到最后一個字節(jié)后發(fā)送一個非應答位</p><p>  iic_stop();</p><p><b>  }</b></p><p>  unsigned char BusyTest(void)</p><p><b>  {</b></p>&

98、lt;p>  bit result;</p><p>  RS=0; //根據規(guī)定,RS為低電平,RW為高電平時,可以讀狀態(tài)</p><p><b>  RW=1;</b></p><p>  E=1; //E=1,才允許讀寫</p><p>  _nop_(); //空操作</

99、p><p><b>  _nop_();</b></p><p><b>  _nop_(); </b></p><p>  _nop_(); //空操作四個機器周期,給硬件反應時間</p><p>  result=BF; //將忙碌標志電平賦給result</p><p&

100、gt;<b>  E=0;</b></p><p>  return result;</p><p><b>  }</b></p><p>  void WriteInstruction (unsigned char dictate)</p><p><b>  { </b&g

101、t;</p><p>  while(BusyTest()==1); //如果忙就等待</p><p>  RS=0; //根據規(guī)定,RS和R/W同時為低電平時,可以寫入指令</p><p><b>  RW=0; </b></p><p>  E=0;

102、 //E置低電平(根據表8-6,寫指令時,E為高脈沖,</p><p>  // 就是讓E從0到1發(fā)生正跳變,所以應先置"0"</p><p><b>  _nop_();</b></p><p>  _nop_(); //空操作兩個機器周期,給硬件反應時間</p><p&g

103、t;  P0=dictate; //將數據送入P0口,即寫入指令或地址</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  _

104、nop_(); //空操作四個機器周期,給硬件反應時間</p><p>  E=1; //E置高電平</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b

105、>  _nop_();</b></p><p>  _nop_(); //空操作四個機器周期,給硬件反應時間</p><p>  E=0; //當E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令</p><p><b>  }</b></p><p

106、>  void WriteAddress(unsigned char x)</p><p><b>  {</b></p><p>  WriteInstruction(x|0x80); //顯示位置的確定方法規(guī)定為"80H+地址碼x"</p><p><b>  }</b></p

107、><p>  void WriteData(unsigned char y)</p><p><b>  {</b></p><p>  while(BusyTest()==1); </p><p>  RS=1; //RS為高電平,RW為低電平時,可以寫入數據</p><p>

108、<b>  RW=0;</b></p><p>  E=0; //E置低電平(根據表8-6,寫指令時,E為高脈沖,</p><p>  // 就是讓E從0到1發(fā)生正跳變,所以應先置"0"</p><p>  P0=y; //將數據送入P0口,即將數據寫入液晶模塊</p>

109、<p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  _nop_(); //空操作四個機器周期,給硬件反應時間</p><p>  E

110、=1; //E置高電平</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  _nop_(); //空操作四個機器周期

111、,給硬件反應時間</p><p>  E=0; //當E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令</p><p><b>  }</b></p><p>  void LcdInitiate(void)</p><p><b>  {</b></p><

112、p>  delay(15); //延時15ms,首次寫指令時應給LCD一段較長的反應時間</p><p>  WriteInstruction(0x38); //顯示模式設置:16×2顯示,5×7點陣,8位數據接口</p><p>  delay(5); //延時5ms </p><p>  WriteInst

113、ruction(0x38);</p><p><b>  delay(5);</b></p><p>  WriteInstruction(0x38);</p><p><b>  delay(5);</b></p><p>  WriteInstruction(0x0c); </p>

114、<p><b>  delay(5);</b></p><p>  WriteInstruction(0x06); </p><p><b>  delay(5);</b></p><p>  WriteInstruction(0x01); </p><p><b>  de

115、lay(5);</b></p><p><b>  }</b></p><p>  Init_DS18B20(void)</p><p><b>  { </b></p><p><b>  DQ = 1 ; </b></p><p>  

116、DelayDelay(8) ;</p><p><b>  DQ = 0 ; </b></p><p>  DelayDelay(90) ;</p><p><b>  DQ = 1 ;</b></p><p>  DelayDelay(8) ;</p><p>  pres

117、ence = DQ ; //如果=0則初始化成功 =1則初始化失敗</p><p>  DelayDelay(100) ;</p><p><b>  DQ = 1 ; </b></p><p>  return(presence) ; //返回信號,0=presence,1= no presence</p><p&g

118、t;<b>  }</b></p><p>  Disp_Temperature()</p><p><b>  {</b></p><p>  display[4]=temp_data[0]&0x0f ;</p><p>  display[0]=ditab[display[4]]+0x3

119、0 ;//查表得小數位的值</p><p>  display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ;</p><p>  display[3]=display[4]/100+0x30 ;</p><p>  display[1]=display[4]%10

120、0 ;</p><p>  display[2]=display[1]/10+0x30 ;</p><p>  display[1]=display[1]%10+0x30 ;</p><p>  if(display[3]==0x30) //高位為0,不顯示</p><p><b>  { </b><

121、/p><p>  display[3]=0x20 ; </p><p>  if(display[2]==0x30) //次高位為0,不顯示</p><p>  display[2]=0x20 ;</p><p><b>  }</b></p><p>  Writ

122、eAddress(0x48) ; </p><p>  WriteData(display[3]) ; //百位數顯示 </p><p>  WriteAddress(0x49) ; </p><p>  WriteData(display[2]) ; //十位數顯示 </p>

123、<p>  WriteAddress(0x4a) ; </p><p>  WriteData(display[1]) ; //個位數顯示 </p><p>  WriteAddress(0x4c) ; </p><p>  WriteData(display[0]) ; //小

124、數位數顯示 </p><p><b>  } </b></p><p>  void Compare()</p><p><b>  { </b></p><p>  // bit tempflag1;</p><p>  // bit tempflag2;</p

125、><p>  uint temp=0;</p><p>  display[4]=temp_data[0]&0x0f ;</p><p>  display[0]=ditab[display[4]];//查表得小數位的值</p><p>  display[4]=((temp_data[0]&0xf0)>>4)|((t

126、emp_data[1]&0x0f)<<4) ;</p><p>  display[3]=display[4]/100 ;</p><p>  display[1]=display[4]%100 ;</p><p>  display[2]=display[1]/10 ;</p><p>  display[1]=disp

127、lay[1]%10 ;</p><p>  temp=display[0]+display[1]*10+display[2]*100;</p><p>  if(settemp>temp)</p><p><b>  {</b></p><p>  // tempflag1=1;</p><p&

128、gt;  fzflag2=1;</p><p><b>  }</b></p><p>  //if((settemp<temp)&&(tempflag=1))</p><p><b>  // {</b></p><p>  // tempflag2=1;</p>

溫馨提示

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

評論

0/150

提交評論