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

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p><b>  摘 要1</b></p><p><b>  第1章 緒 論3</b></p><p>  第2章 系統(tǒng)總體設(shè)計方案5</p><p>  2.1設(shè)計總框圖5</p><p

2、>  2.1.1紅外發(fā)射部分5</p><p>  2.1.2紅外接收部分6</p><p>  第3章 硬件電路設(shè)計7</p><p>  3.1 芯片選型7</p><p>  3.2 液晶顯示器(LCD)8</p><p>  3.2.1 LCD簡介8</p><p> 

3、 3.2.2 LCD控制方式9</p><p>  3.2.3 LCD初始化與顯示流程9</p><p>  3.3晶振電路10</p><p>  3.4復(fù)位電路11</p><p><b>  3.5鍵盤12</b></p><p>  第4章 程序流程圖14</p>

4、<p>  第5章:仿真和調(diào)試15</p><p>  5.1 軟件特點及介紹15</p><p>  5.2 系統(tǒng)概述及整體結(jié)構(gòu)16</p><p>  5.2.1 系統(tǒng)概述16</p><p>  5.2.2 Keil C51單片機軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu)16</p><p><b>

5、;  總 結(jié)18</b></p><p><b>  附 錄19</b></p><p>  附錄1 參考文獻19</p><p>  附錄2 總體原理圖20</p><p>  附錄3 程序清單22</p><p><b>  摘 要</b><

6、;/p><p>  單片機遙控應(yīng)用系統(tǒng)要求用單片機作為控制芯片制作一個遙控器,另一個單片機控制系統(tǒng)能被遙控操作。什么是遙控系統(tǒng)呢?我們定義:能對相隔一定距離的被測對象進行測量、分析處理和顯示記錄的系統(tǒng)。通常由輸入設(shè)備、數(shù)據(jù)傳輸設(shè)備和終端設(shè)備組成。</p><p>  紅外線編碼是數(shù)據(jù)傳輸和家用電器遙控常用的一種通訊方法,其實質(zhì)是一種脈寬調(diào)制的串行通訊。這里就以這些電路的編碼格式來仿真怎樣使用單

7、片機的捕獲中斷功能來實現(xiàn)其解碼。紅外線通訊的發(fā)送部分主要是把待發(fā)送的數(shù)據(jù)轉(zhuǎn)換成一定格式的脈沖,然后驅(qū)動紅外發(fā)光管向外發(fā)送數(shù)據(jù)。接收部分則是完成紅外線的接收、放大、解調(diào),還原成同步發(fā)射格式相同(但高、低電位剛好相反的脈沖信號)。這些工作通常由一體化的接收頭來完成,主要輸出TTL兼容電平。最后通過解碼把脈沖信號轉(zhuǎn)換成數(shù)據(jù),從而實現(xiàn)數(shù)據(jù)的傳輸。</p><p>  關(guān)鍵字:單片機;紅外發(fā)射;紅外接收。</p>

8、;<p><b>  第1章 緒 論</b></p><p>  隨著電子技術(shù)的飛速發(fā)展,新型大規(guī)模遙控集成電路的不斷出現(xiàn),使遙控技術(shù)有了日新月異的發(fā)展。遙控裝置的中心控制部件已從早期的分立元件、集成電路逐步發(fā)展到現(xiàn)在的單片微型計算機,智能化程度大大提高。近年來,遙控技術(shù)在工業(yè)生產(chǎn)、家用電器、安全保衛(wèi)以及人們的日常生活中使用越來越廣泛。</p><p>

9、  常見的遙控電路一般有如下幾種類型:聲控、光控、無線電遙控、紅外遙控等等。</p><p><b>  1.聲控方式</b></p><p>  聲控就是用聲音去控制對象動作,一般采用駐極體話筒或壓電陶瓷片作為傳感元件來拾取聲音,通過電路放大驅(qū)動后級電子開關(guān)動作。為防止外界音頻干擾,可以采用超聲波控制,但也有故意選用聲頻來進行控制的,比如用小孩發(fā)出的聲音頻率去控制聲

10、控玩具娃娃的哭笑動作等。</p><p><b>  2.光控方式</b></p><p>  簡單的單通道光控電路是利用光敏管受光以后內(nèi)阻發(fā)生變化使電子開關(guān)的狀態(tài)發(fā)生變化,傳感器有光敏二極管、光敏三極管、光敏電阻、光敏電池等等(早期生產(chǎn)的玻璃殼封制晶體管,刮掉外面黑色遮光油漆后就是一個不錯的光敏管。)。這個光源既可以是可見光,也可以是紅外線等不可見光源,不同的光敏元

11、件有著不同的光譜。復(fù)雜一些的光控電路則能夠完成多通道開關(guān)或模擬量變化控制,應(yīng)用極其廣泛,可以說家家都有。</p><p><b>  3.無線電遙控方式</b></p><p>  無線電遙控電路比起聲控或光控電路復(fù)雜多了,但控制距離也更遠是它的主要特點,光控、聲控電路一般僅有幾米到十幾米的作用距離,而無線電遙控視不同的應(yīng)用場合近可以是零點幾米,遠則可以超越地球到達太

12、空!它由發(fā)射電路和接收電路2部分組成,當(dāng)接收機收到發(fā)射機發(fā)出的無線電波以后驅(qū)動電子開關(guān)電路工作。所以它的發(fā)射頻率與接收頻率必須是完全相同的。根據(jù)其發(fā)射的高頻波形有等幅、調(diào)幅、調(diào)頻、數(shù)字脈沖發(fā)射機,根據(jù)其控制的開關(guān)數(shù)目有單通道遙控和多通道遙控等。</p><p><b>  4.紅外遙控方式</b></p><p>  紅外遙控就是把紅外線作為載體的遙控方式。由于紅外線

13、的波長遠小于無線電波的波長,因此在采用 紅外遙控方式時,不會干擾其他電器的正常工作,也不會影響臨近的無線電設(shè)備。同時,由于采用紅外線遙控器件時,工作電壓低,功耗小,外圍電路簡單,因此它在日常工作生活中的應(yīng)用越來越廣泛。</p><p>  常用的紅外遙控系統(tǒng)一般分發(fā)射和接收兩個部分。發(fā)射部分的主要元件為紅外發(fā)光二極管。它實際上是一只特殊的發(fā)光二極管;由于其內(nèi)部材料不同于普通發(fā)光二極管,因而在其兩端施加一定電壓時,

14、它便發(fā)出的是紅外線而不是可見光。目前大量的使用的紅外發(fā)光二極管發(fā)出的紅外線波長為940mm左右。紅外遙控的特點是不影響周邊環(huán)境的、不干擾其他電器設(shè)備。由于其無法穿透墻壁,故不同房間的家用電器可使用通用的遙控器而不會產(chǎn)生相互干擾;電路調(diào)試簡單,只要按給定電路連接無誤,一般不需任何調(diào)試即可投入工作;編解碼容易,可進行多路遙控。由于各生產(chǎn)廠家生產(chǎn)了大量紅外遙控專用集成電路,需要時按圖索驥即可。因此,現(xiàn)在紅外遙控在加用電器、室內(nèi)近距離(小于10

15、米)遙控中得到了廣泛的應(yīng)用。</p><p>  第2章 系統(tǒng)總體設(shè)計方案</p><p><b>  2.1設(shè)計總框圖</b></p><p>  根據(jù)任務(wù)書的要求,利用單片機設(shè)計一個遙控電路。紅外線發(fā)射/接收控制電路均采用單片機來實現(xiàn),輸出控制方式可選擇,實用性強。這種遙控電路不需要使用較貴的專用編譯碼器,因此成本較低。</p>

16、<p>  2.1.1紅外發(fā)射部分</p><p>  當(dāng)按下遙控按鈕時,單片機產(chǎn)生相應(yīng)的控制脈沖,由紅外發(fā)光二極管發(fā)射出去。</p><p>  2.1.2紅外接收部分</p><p>  當(dāng)紅外接收器接收到控制脈沖后,通過控制方式傳給單片機,由單片機處理后,在液晶顯示器上顯示。</p><p>  第3章 硬件電路設(shè)計<

17、;/p><p><b>  3.1 芯片選型</b></p><p>  此次畢業(yè)設(shè)計主要分為紅外接收部分與紅外發(fā)射部分,所以我們必須用兩塊單片機,因此在紅外發(fā)射部分我們選用的是單片機AT89C52,紅外接收部分我們選用的是單片機AT89C51。</p><p>  首先我們看看發(fā)射部分的單片機AT89C52有什么特點呢?</p>&

18、lt;p>  AT89C52是一個低電壓,高性能CMOS 8位單片機,片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數(shù)據(jù)存儲器(RAM)。AT89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,2個讀寫口線。其中:</p><p>  P3^2/INT0是外部中斷0;</p&

19、gt;<p>  P3^3/INT1是外部中斷1;</p><p>  P3^4/T0定時器/計數(shù)器T0計數(shù)輸入端;</p><p>  P3^5/T1定時器/計數(shù)器T1記數(shù)輸入端;</p><p>  單片機AT89C52主要功能特性:</p><p>  兼容MCS51指令系統(tǒng),8k可反復(fù)擦寫1000次Flash ROM;&

20、lt;/p><p>  32個雙向I/O口,256x8bit內(nèi)部RAM;</p><p>  3個16位可編程定時/計數(shù)器中斷,時鐘頻率0-24MHz;</p><p>  2個串行中斷,可編程UART串行通道;</p><p>  2個外部中斷源,共6個中斷源;</p><p>  2個讀寫中斷口線,3級加密位;<

21、/p><p>  低功耗空閑和掉電模式,軟件設(shè)置睡眠和喚醒功能。</p><p>  接著,我們再來看看接收部分的單片機AT89C51的特點。AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS 8位微處理器。AT89C51是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復(fù)擦除100次。其主要特性如下:</p><

22、;p>  與MCS-51 兼容;</p><p>  4K字節(jié)可編程閃爍存儲器;</p><p>  壽命:1000寫/擦循環(huán);</p><p>  數(shù)據(jù)保留時間:10年;</p><p>  128×8位內(nèi)部RAM;</p><p>  32可編程I/O線;</p><p> 

23、 兩個16位定時器/計數(shù)器;</p><p><b>  5個中斷源;</b></p><p><b>  可編程串行通道;</b></p><p>  低功耗的閑置和掉電模式。</p><p>  3.2 液晶顯示器(LCD)</p><p>  3.2.1 LCD簡介&l

24、t;/p><p>  此次畢業(yè)設(shè)計使用的是液晶顯示器(如圖3-1)作為顯示工作,D0~D7口為雙向數(shù)據(jù)總線。LCD數(shù)據(jù)讀寫方式可以分為8位和4位兩種,以8位數(shù)據(jù)進行讀寫操作,則D0~D7都有效;若以4位方式進行讀寫操作,則只用到D7~D4。</p><p>  RS為寄存器選擇控制位,當(dāng)RS=0時,并且做寫入動作時,可以寫入指令寄存器;若當(dāng)RS=0時,且做讀取動作時,可以讀取忙標(biāo)志及及地址計數(shù)

25、器的內(nèi)容;若RS=1時則用于讀取數(shù)據(jù)寄存器。</p><p>  R/W是LCD的讀寫控制線。當(dāng)R/W=0時,LCD執(zhí)行寫入動作,R/W=1時則做讀取的動作。</p><p>  圖3-1 液晶顯示器(LCD)</p><p>  3.2.2 LCD控制方式</p><p>  通過CPU來控制LCD模塊,方式十分簡單,LCD模塊的內(nèi)部可以看

26、成有兩組寄存器,一個為指令寄存器,一個為數(shù)據(jù)寄存器,由RS引腳控制。所有對指令寄存器或數(shù)據(jù)寄存器的存取均需檢查LCD內(nèi)部的忙標(biāo)志(Busy Flag),此標(biāo)志用來告知LCD內(nèi)部正在工作,并不允許接收任何的控制指令。而此位的檢查可以令RS=0時,讀取位7加以判斷,當(dāng)此位為0時,才可以寫入指令寄存器或數(shù)據(jù)寄存器。</p><p>  3.2.3 LCD初始化與顯示流程</p><p>  從通

27、電開始通過延時,先經(jīng)過判忙后再進行功能設(shè)置,過一段時間后可以設(shè)制顯示狀態(tài)(如設(shè)置行、位或陣列)再經(jīng)過延時后清屏后再可以設(shè)置輸入方式。</p><p>  經(jīng)過顯示速度測試實現(xiàn)與LCD的速度匹配后,就可以實現(xiàn)對液晶的初始化、清屏和顯示等操作了,而實現(xiàn)這些操作最基本的函數(shù)是對液晶控制器指令的操作函數(shù),其顯示實現(xiàn)過程如圖所示。這些操作主要功能如下:</p><p>  (1)LCD初始化。主要包

28、括對控制器的顯示頻率、顯示行數(shù)及顯示緩沖區(qū)地址的設(shè)置。</p><p>  (2)LCD清屏。由于系統(tǒng)上電時,顯示緩沖區(qū)的數(shù)據(jù)是不固定的,顯示出亂碼;因此在液晶顯示操作之前應(yīng)將緩沖區(qū)清零。</p><p>  (3)數(shù)據(jù)顯示。液晶初始化結(jié)束后,系統(tǒng)將采集來的信號通過處理后用文字、圖形等顯示到LCD上。</p><p><b>  3.3晶振電路</b

29、></p><p>  80C51芯片內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,輸入端引腳為XTAL1,輸出端引腳為XTAL2。當(dāng)工作于內(nèi)部時鐘方式時硬件電路如圖3-2所示。在芯片外部,XTAL1和XTAL2之間跨接晶體振蕩器和兩個微調(diào)電容,和芯片內(nèi)部的振蕩器電路構(gòu)成一個穩(wěn)定的自激振蕩器,在XTAL2引腳上會輸出一個3V左右的正弦波微調(diào)電容的主要功能就是協(xié)調(diào)振蕩頻率的及幫助振蕩器起振的,取值為30pF,而

30、一般晶振的對應(yīng)取值就是12MHz</p><p><b>  圖3-3 晶振電路</b></p><p><b>  3.4復(fù)位電路</b></p><p>  什么是單片機的復(fù)位電路呢?</p><p>  復(fù)位是單片機的初始化操作。單片機啟運運行時,都需要先復(fù)位,其作用是使CPU和系統(tǒng)中其他部件

31、處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。因而,復(fù)位是一個很重要的操作方式。但單片機本身是不能自動進行復(fù)位的,必須配合相應(yīng)的外部電路才能實現(xiàn)。(如圖3-3)</p><p><b>  圖3-4 復(fù)位電路</b></p><p><b>  3.5鍵盤</b></p><p><b>  鍵盤的組成與構(gòu)造&l

32、t;/b></p><p>  鍵盤的內(nèi)部結(jié)構(gòu)主要包括控制電路板、按鍵、底板和面板等。電路板是整個鍵盤的控制核心,位于鍵盤的內(nèi)部,主要擔(dān)任按鍵掃描識別、編碼和傳輸接口工作;它將各個鍵所表示的數(shù)字或字母轉(zhuǎn)換成計算機可以識別的信號,是用戶和計算機之間主要的溝通者之一。</p><p>  鍵盤主要由鍵開關(guān)矩陣、單片機和譯碼器三大部分組成。鍵開關(guān)矩陣即鍵盤按鍵由一組排列成矩陣方式的按鍵開關(guān)

33、組成,所輸入的信號由按鍵所在的位置決定。單片 機即鍵盤內(nèi)部采用的Intel 8048單片機微處理器,這是一個40引腳的芯片,內(nèi)部集成了8位CPU、1024×8位的ROM、64×8位的RAM以 及8位的定時器/計數(shù)器等。譯碼器即信號編碼轉(zhuǎn)譯裝置,把鍵盤的字符信號通過編碼翻譯轉(zhuǎn)換成相應(yīng)的二進制碼。由于鍵盤排列成矩陣格式,被按鍵的識別和行列 位置掃描碼的產(chǎn)生,是由鍵盤內(nèi)部的單片機通過譯碼器來實現(xiàn)的。根據(jù)鍵盤向主機送入的二進

34、制代碼類型,可把鍵盤分為編碼鍵盤和非編碼鍵盤兩種。IBM PC機的鍵盤屬于非編碼鍵盤,其特點是不直接提供所按鍵的編碼信息,而是用較為簡單的硬件和一套專用程序來識別所按鍵的位置,并提供與所按鍵相對應(yīng)的中間 代碼,然后再把中間代碼轉(zhuǎn)換成要對應(yīng)的編碼。這樣,非編碼鍵盤就為系統(tǒng)軟件在定義鍵盤的某些操作功能上提供了更大的靈活性。</p><p><b>  圖3-5 鍵盤</b></p>

35、<p>  第4章 程序流程圖</p><p><b>  第5章:仿真和調(diào)試</b></p><p>  Proteus的ISIS是一款Labcenter出品的電路分析實物仿真系統(tǒng),可仿真各種電路和IC,并支持單片機,元件庫齊全,使用方便,是不可多得的專業(yè)的單片機軟件仿真系統(tǒng)。</p><p>  5.1 軟件特點及介紹<

36、/p><p><b>  該軟件的特點:</b></p><p>  全部滿足我們提出的單片機軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類產(chǎn)品中具有明顯的優(yōu)勢。</p><p>  具有模擬電路仿真、數(shù)字電路仿真、單片機及外圍電路組成的系統(tǒng)的仿真、RS—232動態(tài)仿真、IC調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號

37、發(fā)生器等。</p><p>  目前支持的單片機類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。</p><p>  支持大量的存儲器和外圍芯片??傊撥浖且豢罴瘑纹瑱C和SPICE分析于一身的仿真軟件,功能極其強大,可仿真51、AVR、PIC。</p><p><b&

38、gt;  Keil軟件介紹</b></p><p>  單片機開發(fā)中除必要的硬件外,同樣離不開軟件,我們寫的匯編語言源程序要變?yōu)镃PU可以執(zhí)行的機器碼有兩種方法,一種是手工匯編,另一種是機器匯編,目前已極少使用手工匯編的方法了。機器匯編是通過匯編軟件將源程序變?yōu)闄C器碼,用于MCS-51單片機的匯編軟件有早期的A51,隨著單片機開發(fā)技術(shù)的不斷發(fā)展,從普遍使用匯編語言的逐漸使用高級語言開發(fā),單片機的開發(fā)軟

39、件也在不斷發(fā)展,Keil軟件是目前最流行開發(fā)MCS-51系列單片機的軟件,這從近年來各仿真機廠商紛紛宣布全面支持kei即可看出。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。運行Keil軟件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空閑的硬盤空間、WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。

40、掌握這一軟件的使用對于使用51系列單片機的愛好者來說是十分必要的,如果你使用C語言編程,那么Keil幾乎就是你的不二之選(目前在國內(nèi)你只能買到該軟件、而你買的仿真機也很可能只支持該軟件),即使不使用C語言而僅用匯</p><p>  Keil C51開發(fā)系統(tǒng)基本知識Keil C51開發(fā)系統(tǒng)基本知識</p><p>  5.2 系統(tǒng)概述及整體結(jié)構(gòu)</p><p>  

41、5.2.1 系統(tǒng)概述</p><p>  Keil C51是美國Keil Software 公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與湖邊相比,C語言在功能上、結(jié)構(gòu)上、可讀性、可維護性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后在使用C來開發(fā),體會更加深刻。</p><p>  Keil C51軟件提供豐富的庫函數(shù)和強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要

42、看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。下面詳細(xì)介紹Keil C51開發(fā)系統(tǒng)各部分功能和使用。</p><p>  5.2.2 Keil C51單片機軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu)</p><p>  C51工具包的整體結(jié)構(gòu)中,其中uVision與Ishe11分別是C51 fo

43、r Windows和for Dos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進行源代碼級調(diào)試,也

44、可由仿真器使用直接對目標(biāo)板進行調(diào)試,也可以直接寫入程序存貯器如EPROM中。</p><p>  采用Keil開發(fā)的89c51單片機應(yīng)用程序一般需要以下步驟:</p><p>  在uVision集成開發(fā)環(huán)境中創(chuàng)建新項目(Project),擴展名為.UV2,并為該項目選定合適的單片機CPU器件(本設(shè)計采用ATMEL公司下的AT89C52)。</p><p>  用u

45、Vision的文件編輯器編寫源文件,可以是匯編文件(.ASM),也可以使用C語言文件(擴展名.C),并將該文件添加到項目中去。一個項目文件可以包含多個文件,除了源程序文件外,還可以是庫文件、頭文件或文本說明文件。</p><p>  通過uVision2的相關(guān)選擇項,配置編譯環(huán)境、鏈接定位器以及Debug調(diào)試器的功能。</p><p>  對項目中的源文件進行編譯連接,生成絕對目標(biāo)代碼和可

46、選的Hex文件,如果出現(xiàn)編譯連接錯誤則返回到第2步,修改源文件中的錯誤后重構(gòu)整個項目。</p><p>  對沒有語法錯誤的程序進行仿真調(diào)試,調(diào)試成功后將Hex文件寫入到單片機系統(tǒng)的ROM中。</p><p><b>  總 結(jié)</b></p><p>  經(jīng)過幾個月的努力,我們在**老師的細(xì)心指導(dǎo)下,并按照任務(wù)書的要求實現(xiàn)了此次畢業(yè)設(shè)計——

47、單片機遙控系統(tǒng)的應(yīng)用設(shè)計。讓我了解了紅外遙控的一些發(fā)展?fàn)顩r及一些基礎(chǔ)知識。這些知識是書本上沒有的,所以倍顯珍貴。并讓我了解用單片機開發(fā)產(chǎn)品的詳細(xì)過程,清楚了設(shè)計的概念。充分調(diào)動我在網(wǎng)上、書本上尋找相關(guān)資料,通過老師指導(dǎo)分析調(diào)試完成了畢業(yè)設(shè)計。明白了理論與實踐相結(jié)合的含義,并發(fā)揮了我們團隊協(xié)作的優(yōu)勢及個人能力。讓我在以后的崗位上注意團隊所帶來的成效,時刻都提醒我要仔細(xì)認(rèn)真。</p><p>  在這里,**老師以和

48、藹負(fù)責(zé)的態(tài)度為我們講解了許多的問題,在這里向老師表示由衷的感謝。</p><p><b>  附 錄</b></p><p><b>  附錄1 參考文獻</b></p><p>  李建華. 實用遙控器原理與制作,人民郵電出版社;</p><p>  李華. MCS-51系列單片機實用接口技術(shù).

49、 航天航空大學(xué)出版社;</p><p>  何立民. MCS-51系列單片機應(yīng)用系統(tǒng)設(shè)計,系統(tǒng)配置與接口技術(shù). 北京航天航空大學(xué);</p><p>  林志琦.單片機原理接口及應(yīng)用.中國水利水電出版社;</p><p>  胡輝.單片機原理與應(yīng)用.中國水利水電出版社;</p><p><b>  附錄2 總體原理圖</b>

50、;</p><p>  附圖1 總體電路原理圖</p><p>  附圖2 紅外發(fā)送電路部分</p><p>  附圖3 紅外接收電路部分</p><p><b>  附錄3 程序清單</b></p><p>  /*****************************************

51、*********************/</p><p>  // send.c</p><p>  // 遙控發(fā)射器 </p><p>  /*****************************************

52、*********************/</p><p>  #include "At89x51.h"</p><p>  #include "stdio.h"</p><p>  #include "stdlib.h"</p><p>  #include "stri

53、ng.h"</p><p>  #define JINGZHEN 48</p><p>  #define TIME0TH ((65536-100*JINGZHEN/12)&0xff00)>>8 //time0,100us,紅外遙控</p><p>  #define TIME0TL ((65536-100*JINGZHEN/12)&

54、amp;0xff)</p><p>  #define TIME1TH ((65536-5000*JINGZHEN/12)&0xff00)>>8 </p><p>  #define TIME1TL ((65536-5000*JINGZHEN/12)&0xff)</p><p>  #define uchar unsigned ch

55、ar</p><p>  #define uint unsigned int</p><p>  code uchar BitMsk[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};</p><p>  uint IrCount=0,Show=0,Cont=0;</p><p>  uchar I

56、RDATBUF[32],s[20];</p><p>  uchar IrDat[5]={0,0,0,0,0};</p><p>  uchar IrStart=0,IrDatCount=0;</p><p>  extern void initLCM(void); //LCD初始化子程序</p>

57、<p>  extern void DisplayListChar(uchar X,uchar Y, unsigned char *DData); </p><p>  void timer1int (void) interrupt 3 using 3 //定時器1</p><p><b>  {</b><

58、/p><p><b>  EA=0;</b></p><p>  TH1 = TIME1TH; </p><p>  TL1 = TIME1TL;</p><p><b>  Cont++;</b></p><p>  if(Cont>10)Show=1;</p&g

59、t;<p><b>  EA=1;</b></p><p><b>  }</b></p><p>  void timer0int (void) interrupt 1 using 1 //定時器0</p><p><b>  {</b>&l

60、t;/p><p>  uchar i,a,b,c,d;</p><p><b>  EA=0;</b></p><p>  TH0 = TIME0TH; </p><p>  TL0 = TIME0TL;</p><p>  if(IrCount>500)IrCount=0;</p>

61、;<p>  if(IrCount>300&&IrStart>0){IrStart=0;IrDatCount=0;IrDat[0]=IrDat[1]=IrDat[2]=IrDat[3]=0;IrCount=0;}</p><p>  if(IrStart==2)</p><p><b>  {</b></p>&

62、lt;p>  IrStart=3;</p><p>  for(i=0;i<IrDatCount;i++)</p><p><b>  {</b></p><p><b>  if(i<32)</b></p><p><b>  {</b></p>

63、<p><b>  a=i/8;</b></p><p>  b=IRDATBUF[i];</p><p>  c=IrDat[a];</p><p>  d=BitMsk[i%8];</p><p>  if(b>5&&b<14)c|=d;</p><p&g

64、t;  if(b>16&&b<25)c&=~d;</p><p>  IrDat[a]=c;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(IrDat[2]!=~IrDat[3])</p>

65、<p><b>  {</b></p><p>  IrStart=0;IrDatCount=0;IrDat[0]=IrDat[1]=IrDat[2]=IrDat[3]=0;IrCount=0;</p><p><b>  }</b></p><p><b>  EA=1;</b></

66、p><p><b>  return;</b></p><p><b>  }</b></p><p>  IrCount++; </p><p><b>  EA=1;</b></p><p><b>  }</b></p>

67、;<p>  void int0() interrupt 0 using 0 </p><p><b>  {</b></p><p><b>  EA=0;</b></p><p>  if(IrStart==0)</p><p><b>  {</b>&l

68、t;/p><p>  IrStart=1;IrCount=0;TH0 = TIME0TH;TL0 = TIME0TL;</p><p>  IrDatCount=0;EA=1;</p><p><b>  return;</b></p><p><b>  }</b></p><p&

69、gt;  if(IrStart==1)</p><p><b>  {</b></p><p>  if(IrDatCount>0&&IrDatCount<33)</p><p>  IRDATBUF[IrDatCount-1]=IrCount;</p><p>  if(IrDatCount

70、>31)</p><p>  {IrStart=2;TH0 = TIME0TH;TL0 = TIME0TL;EA=1;return;}</p><p>  if(IrCount>114&&IrCount<133&&IrDatCount==0)</p><p>  {IrDatCount=1;}else if(IrDa

71、tCount>0)IrDatCount++;</p><p>  } </p><p>  IrCount=0;TH0 = TIME0TH;TL0 = TIME0TL;</p><p><b>  EA=1;</b></p><p><b>  }</b&

72、gt;</p><p>  /******************主程序****************/</p><p><b>  main()</b></p><p><b>  {</b></p><p>  uchar *a,n;</p><p>  TMOD |

73、= 0x011;</p><p>  TH0 = TIME0TH;</p><p>  TL0 = TIME0TL;</p><p><b>  ET0=1;</b></p><p>  TR0=1; </p><p><b>  ET1

74、=1;</b></p><p>  TR1=1; </p><p>  IT0 = 1; //下降沿</p><p><b>  EX0 = 1;</b></p><p>  initLCM();&

75、lt;/p><p><b>  EA=1;</b></p><p>  /**************按鍵掃描程序**************/</p><p><b>  for(;;)</b></p><p><b>  {</b></p><p>  

76、if(Show==1)</p><p><b>  {</b></p><p><b>  Show=0;</b></p><p><b>  Cont=0;</b></p><p>  DisplayListChar(0,1,"Please keys");

77、</p><p><b>  a="";</b></p><p>  switch (IrDat[3])</p><p><b>  {</b></p><p>  case 0x12://ON/C</p><p><b>  a="O

78、N/C";</b></p><p><b>  break;</b></p><p>  case 0x0b://±</p><p><b>  a="+/-";</b></p><p><b>  break;</b><

79、;/p><p>  case 0x1a://+</p><p><b>  a="+";</b></p><p><b>  break;</b></p><p>  case 0x1e://-</p><p><b>  a="-&quo

80、t;;</b></p><p><b>  break;</b></p><p>  case 0x0e://÷</p><p><b>  a="/";</b></p><p><b>  break;</b></p>

81、<p>  case 0x1d://MRC</p><p><b>  a="MRC";</b></p><p><b>  break;</b></p><p>  case 0x1f://M-</p><p><b>  a="M-";

82、</b></p><p><b>  break;</b></p><p>  case 0x1b://M+</p><p><b>  a="M+";</b></p><p><b>  break;</b></p><p&

83、gt;  case 0x00://0</p><p>  if(IrDat[2]==0xff)a="0";</p><p><b>  break;</b></p><p>  case 0x01://1</p><p><b>  a="1";</b><

84、;/p><p><b>  break;</b></p><p>  case 0x02://2</p><p><b>  a="2";</b></p><p><b>  break;</b></p><p>  case 0x03:

85、//3</p><p><b>  a="3";</b></p><p><b>  break;</b></p><p>  case 0x04://4</p><p><b>  a="4";</b></p><p

86、><b>  break;</b></p><p>  case 0x05://5</p><p><b>  a="5";</b></p><p><b>  break;</b></p><p>  case 0x06://6</p>

87、<p><b>  a="6";</b></p><p><b>  break;</b></p><p>  case 0x07://7</p><p><b>  a="7";</b></p><p><b> 

88、 break;</b></p><p>  case 0x08://8</p><p><b>  a="8";</b></p><p><b>  break;</b></p><p>  case 0x09://9</p><p><

89、b>  a="9";</b></p><p><b>  break;</b></p><p>  case 0x2A://%</p><p><b>  a="%";</b></p><p><b>  break;</b&

90、gt;</p><p>  case 0x2B://X</p><p><b>  a="X";</b></p><p><b>  break;</b></p><p>  case 0x2C://.</p><p><b>  a="

91、;.";</b></p><p><b>  break;</b></p><p>  case 0x2D://=</p><p><b>  a="=";</b></p><p><b>  break;</b></p>

92、<p>  case 0x2E: </p><p><b>  a=" ";</b></p><p><b>  break;</b></p><p><b>  }</b></p

93、><p>  n=strlen(a);</p><p>  if(n>0)sprintf(s,"Key is [%s]",a);else sprintf(s,"Not Key ",a);</p><p>  DisplayListChar(0,0,s);</p><p><b&g

94、t;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*******************************************************************/</p><p>  //

95、 incept.c</p><p>  // 遙控接收器</p><p>  /*******************************************************************/</p><p>  #include <reg51.h

96、></p><p>  #include <intrins.h></p><p>  #include <string.h></p><p>  #include <absacc.h></p><p>  #define uchar unsigned char</p><p>

97、;  #define uint unsigned int</p><p>  #define BUSY 0x80 //lcd忙檢測標(biāo)志</p><p>  #define DATAPORT P0 //定義P0口為LCD通訊端口</p><p>  sbit ligh

98、t=P1^3;</p><p>  sbit LCM_RS=P2^0; //數(shù)據(jù)/命令端</p><p>  sbit LCM_RW=P2^1; //讀/寫選擇端</p><p>  sbit LCM_EN=P2^2;</p><p>  voi

99、d delay_LCM(uint); //LCD延時子程序</p><p>  void lcd_wait(void); //LCD檢測忙子程序</p><p>  void WriteCommandLCM(uchar WCLCM,uchar BusyC); //寫指令到ICM子函數(shù)<

100、/p><p>  void WriteDataLCM(uchar WDLCM); //寫數(shù)據(jù)到LCM子函數(shù)</p><p>  void DisplayOneChar(uchar X,uchar Y,uchar DData); //顯示指定坐標(biāo)的一個字符子函數(shù)</p><p>  void initLCM( void);

101、 //LCD初始化子程序</p><p>  void DisplayListChar(uchar X,uchar Y, unsigned char *DData); //顯示指定坐標(biāo)的一串字符子函數(shù)</p><p>  /*********延時K*1ms,12.000mhz**********/</p><p>  void de

102、lay_LCM(uint k)</p><p><b>  {</b></p><p><b>  uint i,j;</b></p><p>  for(i=0;i<k;i++)</p><p><b>  {</b></p><p>  for

103、(j=0;j<60;j++)</p><p><b>  {;}</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /**********寫指令到LCM子函數(shù)************/</p><

104、;p>  void WriteCommandLCM(uchar WCLCM,uchar BusyC)</p><p><b>  {</b></p><p>  if(BusyC)lcd_wait();</p><p>  DATAPORT=WCLCM;</p><p>  LCM_RS=0;

105、 // 選中指令寄存器</p><p>  LCM_RW=0; // 寫模式 </p><p><b>  LCM_EN=1;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_(

106、);</b></p><p>  _nop_(); </p><p><b>  LCM_EN=0;</b></p><p><b>  }</b></p><p>  /*********

107、*寫數(shù)據(jù)到LCM子函數(shù)************/</p><p>  void WriteDataLCM(uchar WDLCM)</p><p><b>  {</b></p><p>  lcd_wait( ); //檢測忙信號</p><p>  DATAPORT=WDLC

108、M;</p><p>  LCM_RS=1; // 選中數(shù)據(jù)寄存器</p><p>  LCM_RW=0; // 寫模式</p><p><b>  LCM_EN=1;</b></p><p><b>  _nop_();</b

109、></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  LCM_EN=0;</b></p><p><b>  }</b></p><p> 

110、 /***********lcm內(nèi)部等待函數(shù)*************/</p><p>  void lcd_wait(void)</p><p><b>  {</b></p><p>  DATAPORT=0xff; </p><p><b>  LCM_EN=1;</b></

111、p><p>  LCM_RS=0; </p><p>  LCM_RW=1; </p><p><b>  _nop_();</b></p><p>  while(DATAPORT&BUSY)</p>

112、<p>  { LCM_EN=0;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  LCM_EN=1;</b></p><p><b>  _nop_();<

113、/b></p><p><b>  _nop_();</b></p><p><b>  }</b></p><p>  LCM_EN=0; </p><p><b>  }</b></p><p>  /**********LCM

114、初始化子函數(shù)***********/</p><p>  void initLCM( )</p><p><b>  {</b></p><p>  DATAPORT=0; </p><p>  delay_LCM(15);</p><p>  WriteCommandLCM(0x38,0

115、); //三次顯示模式設(shè)置,不檢測忙信號</p><p>  delay_LCM(5);</p><p>  WriteCommandLCM(0x38,0);</p><p>  delay_LCM(5);</p><p>  WriteCommandLCM(0x38,0);</p><p>  delay_LC

116、M(5);</p><p>  WriteCommandLCM(0x38,1); //8bit數(shù)據(jù)傳送,2行顯示,5*7字型,檢測忙信號</p><p>  WriteCommandLCM(0x08,1); //關(guān)閉顯示,檢測忙信號</p><p>  WriteCommandLCM(0x01,1); //清屏,檢測忙信號</p>&

117、lt;p>  WriteCommandLCM(0x06,1); //顯示光標(biāo)右移設(shè)置,檢測忙信號</p><p>  WriteCommandLCM(0x0c,1); //顯示屏打開,光標(biāo)不顯示,不閃爍,檢測忙信號</p><p><b>  }</b></p><p>  /****************顯示指定坐標(biāo)的一個

118、字符子函數(shù)*************/</p><p>  void DisplayOneChar(uchar X,uchar Y,uchar DData)</p><p><b>  {</b></p><p>  uchar mx,my;</p><p><b>  my=Y&1;</b>

119、;</p><p><b>  mx=X&0xf;</b></p><p>  if(my>0)mx+=0x40; //若y為1(顯示第二行),地址碼+0X40</p><p>  mx+=0x80; //指令碼為地址碼+0X80</p><p>  W

120、riteCommandLCM(mx,0);</p><p>  WriteDataLCM(DData);</p><p><b>  }</b></p><p>  /***********顯示指定坐標(biāo)的一串字符子函數(shù)***********/</p><p>  void DisplayListChar(uchar X,

121、uchar Y, unsigned char *DData)</p><p><b>  {</b></p><p>  uchar i=0,n;</p><p><b>  Y&=0x01;</b></p><p><b>  X&=0x0f;</b><

122、/p><p>  n=strlen(DData);</p><p>  while(i<n)</p><p><b>  {</b></p><p>  DisplayOneChar(X,Y,DData[i]);</p><p><b>  i++;</b></p&g

溫馨提示

  • 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

提交評論