版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機紅外遙控系統(tǒng)設(shè)計畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---基于單片機的紅外遙控系統(tǒng)設(shè)計
- 畢業(yè)設(shè)計----單片機紅外遙控電路設(shè)計
- 單片機紅外遙控系統(tǒng)設(shè)計
- 單片機紅外遙控系統(tǒng)設(shè)計
- 基于51單片機的紅外遙控設(shè)計-畢業(yè)設(shè)計
- 畢業(yè)設(shè)計-----基于單片機紅外遙控開關(guān)的設(shè)計
- 畢業(yè)設(shè)計(論文)-單片機紅外遙控電路設(shè)計
- 畢業(yè)設(shè)計 ---基于51單片機的紅外遙控設(shè)計
- 畢業(yè)論文——單片機紅外遙控系統(tǒng)設(shè)計
- 畢業(yè)設(shè)計---基于at89c51單片機紅外遙控系統(tǒng)設(shè)計
- 基于at89c51單片機紅外遙控系統(tǒng)畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---基于51單片機的紅外遙控器設(shè)計
- 基于單片機紅外遙控密碼鎖的設(shè)計【畢業(yè)設(shè)計】
- 單片機控制的紅外遙控器-畢業(yè)設(shè)計論文
- 畢業(yè)論文范文——單片機紅外遙控系統(tǒng)設(shè)計
- 基于51單片機的紅外遙控電機系統(tǒng)的設(shè)計畢業(yè)設(shè)計論文
- 畢業(yè)設(shè)計(論文)-單片機紅外遙控電路設(shè)計要點與制作
- 畢業(yè)設(shè)計-基于51單片機的紅外遙控電風(fēng)扇控制系統(tǒng)設(shè)計
- 基于51單片機的紅外遙控電機系統(tǒng)的設(shè)計畢業(yè)設(shè)計論文
評論
0/150
提交評論