

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 畢業(yè)設計論文</b></p><p> 基于AT89S52單片機的遙控器設計</p><p><b> 目錄</b></p><p><b> 摘要2</b></p><p><b> 1 引言3</b><
2、/p><p><b> 1.1紅外遙控3</b></p><p><b> 1.2單片機4</b></p><p> 2 總體設計方案5</p><p> 方案一:簡易紅外遙控電路5</p><p> 方案二:利用紅外遙控開關電路5</p>&l
3、t;p> 3 AT89S52單片機7</p><p> 3.1 AT89S52單片機7</p><p><b> 3.2系統(tǒng)復位9</b></p><p> 3.3時鐘電路10</p><p> 3.4中斷系統(tǒng)11</p><p> 4 電路框圖設計14</p
4、><p> 4.1遙控發(fā)射單元的電路圖設計14</p><p> 4.2遙控接收單元的電路圖設計16</p><p> 5紅外遙控程序流程圖18</p><p><b> 6 軟件設計20</b></p><p> 6.1:紅外遙控發(fā)射端軟件設計20</p><
5、p> 6.2:紅外遙控接收端軟件設計23</p><p><b> 結束語26</b></p><p><b> 參考文獻27</b></p><p><b> 摘要</b></p><p> 通過對設計要求的認真分析和研究,拿出了幾種可行方案,最終選定一
6、個最佳方案。該方案是采用先進的單片機技術實現(xiàn)遙控,采用模塊話設計,主要分為兩個模塊:紅外發(fā)射模塊和紅外接收模塊。紅外發(fā)射模塊中的單片機受開關控制,通過紅外發(fā)射管對另一個單片機發(fā)射信號,紅外接收模塊中的單片機受紅外接收管接收的信號控制。文章詳細的討論了實現(xiàn)上述紅外遙控過程的硬件組成及其工作原理和軟件設計。</p><p> 關鍵詞:遙控器;紅外發(fā)射;紅外接收;單片機</p><p><
7、;b> 1 引言</b></p><p><b> 1.1紅外遙控</b></p><p> 紅外遙控是一種無線、非接觸控制技術,具有抗干擾能力強,信息傳輸可靠,功耗低,成本低,易實現(xiàn)等顯著優(yōu)點,被諸多電子設備特別是家用電器廣泛采用,并越來越多的應用到計算機系統(tǒng)中。</p><p> 60年代初,一些發(fā)達國家開始研究
8、民用產(chǎn)品的遙控技術,單由于受當時技術條件限制,遙控技術發(fā)展很緩慢,70年代末,隨著大規(guī)模集成電路和計算機技術的發(fā)展,遙控技術得到快速發(fā)展。在遙控方式上大體經(jīng)理了從有線到無限的超聲波,從振動子到紅外線,再到使用總線的微機紅外遙控這樣幾個階段。無論采用何種方式,準確無誤傳輸新信號,最終達到滿意的控制效果是非常重要的。最初的無線遙控裝置采用的是電磁波傳輸信號,由于電磁波容易產(chǎn)生干擾,也易受干擾,因此逐漸采用超聲波和紅外線媒介來傳輸信號。與紅外
9、線相比,超聲傳感器頻帶窄,所能攜帶的信息量少,易受干擾而引起誤動作。較為理想的是光控方式,逐漸采用紅外線的遙控方式取代了超聲波遙控方式,出現(xiàn)了紅外線多功能遙控器,成為當今時代的主流。</p><p> 由于紅外線在頻譜上居于可見光之外,所以抗干擾性強,具有光波的直線傳播特性,不易產(chǎn)生相互間的干擾,是很好的信息傳輸媒體。信息可以直接對紅外光進行調制傳輸,例如,信息直接調制紅外光的強弱進行傳輸,也可以用紅外線產(chǎn)生一
10、定頻率的載波,再用信息對載波進調制,接收端再去掉載波,取到信息。從信息的可靠傳輸說,后一種方法更好,這就是我們今天看到的大多數(shù)紅外遙控所采用的方法。由于紅外線的波長遠小于無線電波的波長,因此在采用紅外遙控方式時,不會干擾其他電器的正常工作,也不會影響臨近的無線電設備。</p><p> 紅外遙控的發(fā)射電路是采用紅外發(fā)光二極管來發(fā)出經(jīng)過調制的紅外光波;紅外接收電路由紅外接收二極管、三極管或硅光電池組成,它們將紅外
11、發(fā)射器發(fā)射的紅外光轉換為相應的電信號,再送后置放大器。</p><p><b> 發(fā)射器</b></p><p> 發(fā)射器一般由指令鍵(或操作桿)、指令編碼系統(tǒng)、調制電路、驅動電路、發(fā)射電路等幾部分組成。當按下指令鍵或推動操作桿時,指令編碼電路產(chǎn)生所需的指令編碼信號,指令編碼信號對載波進行調制,再由驅動電路進行功率放大后由發(fā)射電路向外發(fā)射經(jīng)調制定的指令編碼信號。&
12、lt;/p><p><b> 接收器</b></p><p> 接收器一般由接收電路、放大電路、調制電路、指令譯碼電路、驅動電路、執(zhí)行電路(機構)等幾部分組成。接收電路將發(fā)射器發(fā)出的已調制的編碼指令信號接收下來,并進行放大后送解調電路,解調電路將已調制的指令編碼信號解調出來,即還原為編碼信號。指令譯碼器將編碼指令信號進行譯碼,最后由驅動電路來驅動執(zhí)行電路實現(xiàn)各種指令的
13、操作控制(機構)。</p><p><b> 1.2單片機</b></p><p> 單片微型計算機簡稱單片機,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的縮寫MCU表示單片機,它最早是被用在工業(yè)控制領域。單片機由芯片內僅有CPU的專用處理器發(fā)展而來。最早的設計理念是通過將大量外圍設備和CPU集成在一個芯片中,使計算機系統(tǒng)更小
14、,更容易集成進復雜的而對體積要求嚴格的控制設備當中。</p><p> 以單片機為核心的控制系統(tǒng),因為其實時控制功能強,可靠性高,實用性強,應用范圍廣等優(yōu)點,得到了極為廣泛的應用。隨著人們生活水平的不斷提高,單片機控制無疑是人們追求的目標之一,它所給人帶來的方便也是不可否定的,其中紅外遙控就是一個典型的例子,但人們對它的要求越來越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設施就需要從單片機技術入手,一切
15、向著數(shù)字化控制,智能化控制方向發(fā)展。因此了解單片機知識,掌握單片機的應用技術具有重大的意義。它的理論性和實踐性都很強,我們在理論課學習中主要學習單片機的基本構造,各部分的工作原理以及指令系統(tǒng),然而,光是理論的學習是遠遠不夠的,最重要的是把理論和實踐相結合。</p><p> 所以此次實習,通過設計一個基于AT89S52單片機的遙控器設計,以增進對單片機電路的感性認識,加深對理論方面的理解和鞏固,了解和掌握軟硬件
16、設計過程、方法及實現(xiàn),增強自己的動手和實踐能力,為以后在工作和學習中,設計和實現(xiàn)應用系統(tǒng)打下良好基礎。</p><p><b> 2 總體設計方案</b></p><p> 根據(jù)任務書的要求,利用單片機設計一個遙控開關,可以擬定以下二種方案。</p><p> 方案一:簡易紅外遙控電路</p><p> 在不需要
17、多電路的應用場合,可以使用由常規(guī)集成電路組成的單通道紅外遙控電路。這種遙控電路不需要使用昂貴的專用編譯碼器,因此成本低。</p><p><b> 方案結構圖:</b></p><p><b> 紅外發(fā)射部分</b></p><p> 考慮到本方案電路時簡單的單通道遙控器,可以直接產(chǎn)生一個控制功能的震蕩電路頻率,再通
18、過紅外發(fā)光二極管發(fā)射出去。</p><p><b> 紅外接收部分</b></p><p> 方案二:利用紅外遙控開關電路</p><p> 紅外發(fā)射/接收控制電路均采用單片機來實現(xiàn),輸出控制方式可選擇,實用性更強。</p><p><b> 方案結構圖:</b></p>&l
19、t;p><b> 紅外發(fā)射部分</b></p><p> 當按下遙控按鈕時,單片機產(chǎn)生相應的控制脈沖,由紅外發(fā)光二極管發(fā)射出去。</p><p><b> 紅外接收部分:</b></p><p> 當紅外接收器收到控制脈沖后,由控制方式選擇開關選擇是“互鎖”還是但電路控制,再由單片機處理,對相應的受控電器產(chǎn)生
20、控制。</p><p> 3 AT89S52單片機</p><p> 3.1 AT89S52單片機</p><p> 本次設計所使用的單片機是Atmel公司的AT89S52芯片,AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲器。使用Atmel 公司高密度非易失性存儲器技術制造,與工業(yè)80C51 產(chǎn)品指令和引腳完
21、全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。AT89S52具有以下標準功能:8k字節(jié)Flash,256字節(jié)RAM,32 位I/O 口線,看門狗定時器,2 個數(shù)據(jù)指針,三個16 位定時器/計數(shù)器,一個6向量2級中斷結構,全雙工串行口,片內晶振及時鐘電路。另外,AT89S52 可降至0
22、Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。</p><p> AT89S52的引腳圖如3-1所示:</p><p> 圖3-1 AT89S52引腳圖</p><p> AT89S52
23、單片機引腳注釋:</p><p><b> VCC : 電源</b></p><p><b> GND: 地</b></p><p> P0 口:P0口是一個8位漏極開路的雙向I/O口。作為輸出口,每位能驅動8個TTL邏輯電平。對P0端口寫“1”時,引腳用作高阻抗輸入。當訪問外部程序和數(shù)據(jù)存儲器時,P0口也被作為低8
24、位地址/數(shù)據(jù)復用。在這種模式下,P0具有內部上拉電阻。在 flash編程時,P0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。</p><p> P1 口:P1 口是一個具有內部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅動4 個TTL 邏輯電平。對P1 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,
25、將輸出電流(IIL)。</p><p> P2 口:P2 口是一個具有內部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅動4 個TTL 邏輯電平。對P2 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX @DPTR)時,P2 口送出高八位地址。在這
26、種應用中,P2 口使用很強的內部上拉發(fā)送1。在使用8位地址(如MOVX @RI)訪問外部數(shù)據(jù)存儲器時,P2口輸出P2鎖存器的內容。在flash編程和校驗時,P2口也接收高8位地址字節(jié)和一些控制信號。</p><p> P3 口:P3 口是一個具有內部上拉電阻的8 位雙向I/O 口,p2 輸出緩沖器能驅動4 個TTL 邏輯電平。對P3 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時
27、,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。P3口亦作為AT89S52特殊功能(第二功能)使用,如下表所示。在flash編程和校驗時,P3口也接收一些控制信號。</p><p> RST: 復位輸入。晶振工作時,RST腳持續(xù)2 個機器周期高電平將使單片機復位??撮T狗計時完成后,RST 腳輸出96 個晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO
28、默認狀態(tài)下,復位高電平有效。</p><p> ALE/PROG:地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8 位地址的輸出脈沖。在flash編程時,此引腳(PROG)也用作編程輸入脈沖。</p><p> 在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調,在每次訪問外部數(shù)據(jù)存儲器時,ALE脈沖將會跳過。如果需要,通過
29、將地址為8EH的SFR的第0位置“1”,ALE操作將無效。這一位置“1”,ALE 僅在執(zhí)行MOVX 或MOVC指令時有效。否則,ALE 將被微弱拉高。這個ALE 使能標志位(地址為8EH的SFR的第0位)的設置對微控制器處于外部執(zhí)行模式下無效。</p><p> PSEN:外部程序存儲器選通信號(PSEN)是外部程序存儲器選通信號。當 AT89S52從外部程序存儲器執(zhí)行外部代碼時,PSEN在每個機器周期被激活兩
30、次,而在訪問外部數(shù)據(jù)存儲器時,PSEN將不被激活。EA/VPP:訪問外部程序存儲器控制信號。為使能從0000H 到FFFFH的外部程序存儲器讀取指令,EA必須接GND。為了執(zhí)行內部程序指令,EA應該接VCC。在flash編程期間,EA也接收12伏VPP電壓。</p><p> XTAL1:振蕩器反相放大器和內部時鐘發(fā)生電路的輸入端。</p><p> XTAL2:振蕩器反相放大器的輸出
31、端。</p><p><b> 3.2系統(tǒng)復位</b></p><p> 通過某種方式,使單片機內各寄存器的值變?yōu)槌跏紶顟B(tài)的操作稱為復位。51單片機在時鐘電路工作以后,在RST/VPD端持續(xù)給出2個機器周期的高電平就可以完成復位操作(一般復位正脈沖寬度大于10 ms)。 復位分為上電復位和外部按鍵復位兩種方式。</p><p> 51單片
32、機復位后,程序計數(shù)器PC和特殊功能寄存器復位的狀態(tài)如表2-1所示。復位不影響片內RAM存放的內容,而ALE在復位期間將輸出高電平。</p><p> 由表3-2可以看出:</p><p> (1)(PC)=0000H 表示復位后程序的入口地址為0000H; </p><p> (2)(PSW)=00H,其中RS1(PSW.4)=0, RS0(PSW.3)=0,
33、 表示復位后單片機選擇工作寄存器0組;</p><p> (3)(SP)=07H 表示復位后堆棧在片內RAM的08H單元處建立; </p><p> (4)P0口~P3口鎖存器為全1狀態(tài),,說明復位后這些并行接口可以直接作輸入口, 無須向端口寫1。</p><p><b> 表 3-2</b></p><p>&l
34、t;b> 3.3時鐘電路</b></p><p> 單片機的時鐘電路由振蕩電路和分頻電路組成,其振蕩電路由反相器以及并聯(lián)外接的石英晶體和電容組成,用于產(chǎn)生振蕩脈沖。分頻電路用于把振蕩脈沖分頻,以的到所需要的時鐘信號。</p><p> 振蕩電路如圖3-3所示:</p><p> 圖 3-3 振蕩電路</p><p>
35、 其輸入端為引腳XTAL1,輸出端為引腳XTAL2。通過這兩個引腳在芯片外并接石英晶體振蕩器和兩只電容,石英晶體為一感性原件,與電容構成振蕩回路,為片內放大器提供正反饋和振蕩的相移條件,從而構成一個穩(wěn)定的自激振蕩器。振蕩器的頻率主要取決于晶體的振蕩頻率, 一般晶體可在1.2~12 MHz之間任選, 電容C1、 C2可在5~30 pF之間選擇, 電容的大小對振蕩頻率有微小的影響, 可起頻率微調作用。 </p><p&
36、gt; 振蕩脈沖經(jīng)二分頻后作為系統(tǒng)的時鐘信號,時鐘信號經(jīng)過三分頻產(chǎn)生ALE信號,</p><p> ALE信號用于控制把P0口的低8位地址送入鎖存器鎖起來,以實現(xiàn)低地址和數(shù)據(jù)的分時傳送,ALE還可作為外部時鐘或外部脈沖使用。時鐘信號經(jīng)六分頻得到機器周期信號。</p><p><b> 3.4中斷系統(tǒng)</b></p><p><b&g
37、t; A 中斷的概念</b></p><p> 當CPU與外設交換信息時,由于外設的速度比較慢,若用查詢的方式,則CPU就要浪費很多時間去等待外設。這樣就存在一個快速的CPU與慢速的外設之間的矛盾。為了解決這個問題,就發(fā)展了中斷的概念。</p><p> CPU正在處理某一程序時,發(fā)生了另一突發(fā)事件請求CPU迅速去處理(中斷發(fā)生);CPU暫時停止當前的工作,轉到需要處理的
38、中斷源的服務程序的入口(中斷響應),一般在入口處執(zhí)行一跳轉指令轉去處理中斷事件(中斷服務);待CPU將中斷事件處理完畢后,再回到原來程序被中斷的地方繼續(xù)處理執(zhí)行程序(中斷返回),這一處理過程稱為中斷。</p><p> 51單片機的中斷系統(tǒng)提供5個中斷源:外部中斷0和外部中斷1,定時/計數(shù)器(T0)和(T1)的溢出中斷,串行接口的接收和發(fā)送中斷。本程序中只用到了外部中斷1。</p><p&g
39、t;<b> B 中斷控制</b></p><p> 1 中斷允許寄存器IE(A8H)</p><p> CPU對中斷系統(tǒng)所有中斷以及某個中斷源的開放和屏蔽是由中斷允許寄存器(IE)控制的。IE各位的定義如表3-4所示:</p><p><b> 表 3-4</b></p><p> E
40、A——中斷允許總控制位</p><p> EA=0 中斷總禁止,禁止所有中斷</p><p> EA=1 中斷總允許,總允許后中斷的禁止或允許由各中斷源的中斷允許控制位設置。</p><p> EX0和EX1——外部中斷允許控制位</p><p> EX0(EX1)=0 禁止外部
41、中斷</p><p> EX0(EX1)=1 允許外部中斷</p><p> ET0和ET1——定時器/計數(shù)器中斷允許控制位</p><p> ET0(ET1)=0 禁止定時器/計數(shù)器中斷</p><p> ET0(ET1)=1 允許定時器/計數(shù)器中斷</p><p> ES——串行中
42、斷允許控制位</p><p> ES=0 禁止串行中斷</p><p> ES=1 允許串行中斷</p><p> 2中斷優(yōu)先級控制寄存器(IP)</p><p> 各中斷的優(yōu)先級通過中斷優(yōu)先級控制寄存器IP來設定,其未定義及位地址如表3-5所示: &l
43、t;/p><p><b> 表3-5</b></p><p> PX0——外部中斷0優(yōu)先級設定位;</p><p> PT0——定時中斷0優(yōu)先級設定位;</p><p> PX1——外部中斷1優(yōu)先級設定位;</p><p> PT1——定時中斷1優(yōu)先級設定位; </p><
44、;p> PS——串行中斷優(yōu)先級設定位。</p><p> 3定時器控制寄存器(TCON)</p><p> 該寄存器用于保存外部中斷請求以及定時器的計數(shù)溢出。進行字節(jié)操作時,寄存器地址為88H。按位操作時,各位的地址為88H~8FH。寄存器的內容及位地址表示如表3-6所示:</p><p><b> 表3-6</b></p&
45、gt;<p> IE0和IE1——外中斷請求標志位。當CPU采樣到 INT0(或INT1)端出現(xiàn)有效中斷請求時,IE0(IE1)位由硬件置“1”。 當中斷響應完成轉向中斷服務程序時,由硬件把IE0(或IE1)清零。</p><p> TR0 和TR1——定時器運行控制位:</p><p> TR0 (TR1 )=0 定時器/計數(shù)器不工作</p>&l
46、t;p> TR0 (TR1 )=1 定時器/計數(shù)器開始工作</p><p> TF0和TF1——計數(shù)溢出標志位。當計數(shù)器產(chǎn)生計數(shù)溢出時,相應的溢出標位</p><p> 硬件置“1”。 并自動產(chǎn)生定時中斷請求。</p><p><b> 4 電路框圖設計</b></p><p> 4.1遙控發(fā)射單元
47、的電路圖設計</p><p> 遙控發(fā)射單元由單片機最小系統(tǒng)和按鍵電路、紅外發(fā)射器電路等組成,遙控發(fā)射單元框圖如圖3-1所示。</p><p> 圖4-1 紅外遙控單元發(fā)射框圖 </p><p> 發(fā)射端采用具有在線下載功能的AT89S52芯片作為控制中心,與鍵盤掃描電路和發(fā)射電路共同構成。考慮到按鍵較多,可采用矩陣式,這里采用4 ×4的發(fā)射端利用單
48、片機將待發(fā)送的二進制信號編碼調制為一系列的脈沖串信號,通過P1. 0口發(fā)出,經(jīng)三極管9013功率放大驅動紅外發(fā)射管LED1 。</p><p> 圖4-2為該遙控系統(tǒng)的發(fā)射原理圖,其中P1口作為鍵盤掃描口,具有16個功能操作鍵,第9腳為單片機復位腳,采用復位電路如圖所示,15腳作為紅外遙控碼的輸出口,用于38MHZ載波編碼,18 19腳12MHZ晶振。</p><p> 圖4-2遙控發(fā)
49、射單元原理圖</p><p> 圖4-3 遙控發(fā)射單元PCB圖</p><p> 4.2遙控接收單元的電路圖設計</p><p> 遙控接收單元由單片機最小系統(tǒng)和紅外接收器、控制對象電路等組成,遙控接收單元框圖如圖4-4所示。</p><p> 圖4-4紅外遙控接收單元框圖</p><p> 接收控制器由一個
50、AT89S52芯片作為控制中心,與接收電路和各自的控制電路共同構成。其中接收電路使用一體化紅外接收頭HS0038, HS0038工作頻率為38 kHz,能對收到遙控信號進行放大、檢波、整形、解調,得到TTL 電平的編碼信號,再送給單片機,經(jīng)單片機解碼并執(zhí)行相關控制程序,對外只有3 個引腳:VS、GND和1個脈沖信號輸出引腳,使用方便,性能可靠。</p><p> 圖4-5為該遙控器的接收器原理圖,其中P0口作為
51、數(shù)碼管的二進制數(shù)據(jù)輸出,顯示按鍵號,第9腳為單片機復位腳,采用復位電路如圖所示,18 19腳為12MHZ晶振。</p><p> 圖4-5遙控接收單元原理圖</p><p> 圖4-6遙控接收單元PCB圖</p><p> 5紅外遙控程序流程圖</p><p> 程序開始是對單片機進行初始化設置,循環(huán)掃描判斷是否有鍵按下,如果有鍵按下
52、就發(fā)射相應的紅外信號,遙控發(fā)射程序流程圖如圖4-5所示。</p><p> 圖5-1 遙控發(fā)射程序流程圖</p><p> 程序開始是對單片機進行初始化設置,使用顯示程序,循環(huán)掃描判斷信號是否有效,如果有效就接收,接收后調用相應功能程序,遙控接收程序流程圖如圖4-6所示。</p><p> 圖5-2遙控發(fā)射程序流程圖</p><p>&
53、lt;b> 6 軟件設計</b></p><p> 6.1:紅外遙控發(fā)射端軟件設計</p><p> /****************************************************************</p><p> * 文件名 : 紅外遙控發(fā)射端2 </p><p> **
54、**************************************************************/</p><p> #include<reg51.h></p><p> #include<intrins.h></p><p> #define uint unsigned int</p><
55、;p> #define uchar unsigned char</p><p> uchar count = 0;</p><p> /****************************************************************</p><p> * 名稱 : delay_1ms()</p><p
56、> * 功能 : 延時子程序,延時時間為 1ms * x</p><p> * 輸入 : x (延時一毫秒的個數(shù))</p><p> ****************************************************************/</p><p> void delay_1ms(uint i)</p>&
57、lt;p><b> {</b></p><p> uchar x,j;</p><p> for(j=0;j<i;j++)</p><p> for(x=0;x<=148;x++);</p><p><b> }</b></p><p> /*
58、**************************************************************</p><p> * 名稱 : time0_init()</p><p> * 功能 : 定時器的初始化,定時10ms</p><p> *************************************************
59、***************/</p><p> void time0_init()</p><p><b> {</b></p><p> TMOD = 0x01;</p><p> IE = 0x82;</p><p> TH0 = 0x15;</p><
60、p> TL0 = 0xA0;</p><p><b> }</b></p><p> /****************************************************************</p><p> * 名稱 : time0_int()</p><p> * 功能
61、 : 定時器中斷</p><p> ****************************************************************/</p><p> void time0_int() interrupt 1</p><p><b> {</b></p><p><b>
62、 count++;</b></p><p> TH0 = 0x15;</p><p> TL0 = 0xA0;</p><p><b> }</b></p><p> /****************************************************************&
63、lt;/p><p> * 名稱 : keyscan()</p><p> * 功能 : 實現(xiàn)按鍵的讀取</p><p> ****************************************************************/</p><p> uchar keyscan(void)</p><
64、;p><b> {</b></p><p> uchar i,j, temp, buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};</p><p> for(j=0; j<4; j++)</p><p><b> {</b></p><p> P1 =
65、buffer[j];</p><p> /*以下三個_nop_();作用為讓 P1 口的狀態(tài)穩(wěn)定*/</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p&
66、gt;<p> temp = 0x01; </p><p> for(i
67、=0; i<4; i++)</p><p><b> {</b></p><p> if(!(P1 & temp)) </p><p><b> {</b></p><p> return (i+j*4); //返回取得的按鍵值</p><p>&
68、lt;b> }</b></p><p> temp <<= 1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /*****
69、***********************************************************</p><p> * 名稱 : main()</p><p> * 功能 : 主函數(shù)</p><p> ****************************************************************/<
70、/p><p> void main(void)</p><p><b> {</b></p><p> uchar key_value; //讀出的鍵值</p><p><b> while(1)</b></p><p><b> {</b>
71、</p><p> P1 = 0xf0;</p><p> if(P1 != 0xf0)</p><p><b> {</b></p><p> delay_1ms(15);//按鍵消抖</p><p> if(P1 != 0xf0)</p><p><
72、;b> {</b></p><p> key_value = keyscan() + 1;//key_value是鍵碼加 1</p><p><b> }</b></p><p> time0_init();</p><p><b> TR0 = 1;</b><
73、/p><p><b> while(1)</b></p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(;count < 10;) //發(fā)射首部</p><p> P2 =
74、0x00;</p><p> count = 0;</p><p> for(;count < 10;)</p><p> P2 = 0xff;</p><p> count = 0;</p><p> for(i = 0; i < key_value; i++) //發(fā)射數(shù)據(jù)</p
75、><p><b> {</b></p><p> for(;count < 5;)</p><p> P2 = 0x00;</p><p> count = 0;</p><p> for(;count < 5;)</p><p> P2 =
76、 0xff;</p><p> count = 0;</p><p><b> }</b></p><p><b> TR0 = 0;</b></p><p><b> break;</b></p><p><b> }</b&
77、gt;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 6.2:紅外遙控接收端軟件設計</p><p> /**************************
78、**************************************</p><p> * 文件名 : 紅外遙控接收端2</p><p> ****************************************************************/</p><p> #include<reg52.h></p&g
79、t;<p> #include<intrins.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> uchar count = 0;//定時器計時</p><p> uchar time
80、 = 0;//脈沖計時</p><p> uchar num = 0; //鍵碼值</p><p> uchar receiv = 0; //為0時不是接收狀態(tài),為1時為正在接收數(shù)據(jù)狀態(tài)</p><p> void receive();</p><p> /*********************
81、*******************************************</p><p> * 名稱 : delay()</p><p> * 功能 : 延時,延時時間為</p><p> ****************************************************************/</p>&l
82、t;p> void delay(uint k)</p><p><b> {</b></p><p><b> uint i,j;</b></p><p> for(i=0; i<k; i++)</p><p> for(j=0; j<1800; j++) </
83、p><p><b> ;</b></p><p><b> }</b></p><p> /****************************************************************</p><p> * 外部中斷0初始化 inter0_init()<
84、/p><p> ****************************************************************/</p><p> void inter0_init()</p><p><b> {</b></p><p><b> EA = 1;</b><
85、;/p><p><b> PX0 = 0;</b></p><p> IT0 = 1; //下降沿觸發(fā)</p><p><b> }</b></p><p> /***********************************************************
86、*****</p><p> * 外部中斷0 inter0_int()</p><p> ****************************************************************/</p><p> void inter0_int() interrupt 0</p><p><b>
87、 {</b></p><p><b> TR0 = 1;</b></p><p> while(P3^1 == 0);</p><p><b> TR0 = 0;</b></p><p> time = 5 * count;</p><p> if(ti
88、me > 450 && time < 750)</p><p><b> {</b></p><p> receiv = 1; //等于1開始接收數(shù)據(jù)</p><p><b> EX0 = 0;</b></p><p>
89、<b> num = 0;</b></p><p><b> }</b></p><p> count = 0;</p><p><b> }</b></p><p> /***********************************************
90、*****************</p><p><b> * 定時器0初始化</b></p><p> ****************************************************************/</p><p> void time0_init()</p><p><
91、;b> {</b></p><p><b> EA = 1;</b></p><p><b> ET0 = 1;</b></p><p><b> PT0 = 1;</b></p><p> TH0 = 0xEC;</p><p&
92、gt; TL0 = 0x78;</p><p><b> }</b></p><p> void time0_int() interrupt 1</p><p><b> {</b></p><p> TH0 = 0xEC;</p><p> TL0 = 0x78
93、; </p><p><b> count++;</b></p><p><b> }</b></p><p> /****************************************************************</p><p><b> * 鍵碼
94、接收</b></p><p> ****************************************************************/</p><p> void receive()</p><p><b> { </b></p><p><b> TR0 =
95、1;</b></p><p> while(P3^1 == 0); //計時高電平的時</p><p><b> TR0 = 0;</b></p><p> time = 5 * count;</p><p> if(time > 180 && time < 4
96、20)</p><p><b> {</b></p><p><b> num++;</b></p><p> count = 0;</p><p><b> }</b></p><p><b> else</b><
97、;/p><p><b> {</b></p><p> receiv = 0;</p><p><b> EX0 = 1;</b></p><p><b> }</b></p><p> time = 0; </
98、p><p><b> }</b></p><p> /****************************************************************</p><p> * 名稱 : main()</p><p> ***********************************
99、*****************************/</p><p> void main()</p><p><b> {</b></p><p><b> EX0 = 1;</b></p><p><b> while(1)</b></p>&
100、lt;p><b> {</b></p><p> time0_init();</p><p> inter0_init();</p><p> while(receiv)</p><p><b> {</b></p><p> receive();</
101、p><p><b> }</b></p><p><b> P0 = num;</b></p><p><b> delay(5);</b></p><p><b> }</b></p><p><b> }<
102、;/b></p><p><b> 結束語</b></p><p> 這是一個磨練意志的過程。從課題的選擇開始,到硬件和軟件系統(tǒng)的設計,這其中經(jīng)歷了很多困難,但是更重要的是在這個過程中我得到了很大的鍛煉。一方面通過S52單片機等一些器件的設計讓我學習和掌握了單片機技術的基礎知識和技術要點,也使以前學的很多知識都得到了運用;另一方面在用Protel 99 SE
103、軟件畫電路圖,這個過程中讓我掌握了計算機輔助的設計技術。當然,這是一個需要不斷的嘗試,不斷的校核,不斷的修改,最后完成一個合理的設計的過程。需要的是細心和耐心。在很大程度上培養(yǎng)了我拼搏的工作精神。使我受益匪淺,更加明確了自己專業(yè)的方向。這次時間是短暫的,但這我想我們學到的應該不僅僅是專業(yè)技術等表面上的東西,更深一層的是對人生的感悟,對未來的想法,年輕人的桀驁不馴在此時已經(jīng)不在有意義,取而代之的是理性的思維。我們應該具備什么樣的能力,我們
104、適合什么樣的人生,我們應該在怎樣的崗位上實現(xiàn)自己的人生價值。</p><p> 實習是培養(yǎng)學生綜合運用所學知識、發(fā)現(xiàn)、提出、分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程,通過課程設計我們能夠比較系統(tǒng)的了解理論知識,把理論和實踐相結合,并且用到生活當中。在做設計的過程中總會出現(xiàn)各種問題,在這種情況下我們都會努力尋求最佳路徑解決問題,無形間提高了我們的動手,動腦能力,并且同學
105、之間還能相互探討問題,研究解決方案,增進大家的團隊意識。</p><p> 實習是短暫的,影響卻是長遠的。通過實習讓我體會了團隊合作的益處,在團隊中一起發(fā)現(xiàn)問題、討論問題,共同進步、共同提高。硬件實習主要是我們理論知識的延伸,它的目的主要是要在設計中發(fā)現(xiàn)問題,并且自己要能找到解決問題的方案,形成一種獨立的意識。我們還能從設計中檢驗我們所學的理論知識到底有多少,鞏固我們已經(jīng)學會的,不斷學習我們所遺漏的新知識,把所
106、學的知識學的更加扎實。</p><p> 在本文的撰寫過程中,導師XX給予了悉心的指導和關心,使我克服了眾多困難終于完成了畢業(yè)設計的撰寫工作。導師淵博的知識、嚴謹求實的治學態(tài)度及敬業(yè)精神,給我留下了深刻的印象,并將在我今后的人生道路上產(chǎn)生深遠的影響,在此論文完成之際,謹向導師致以崇高的敬意和衷心的感謝!</p><p> 再一次感謝所有關心我、幫助我的人!</p><
107、;p><b> 參考文獻</b></p><p> 【1】 李廣弟,朱月秀,冷祖祁編著。單片機基礎(第3版)。北京航空航天大學出版社。2007年1月。</p><p> 【2】 杜剛主編,王啟寧、戎華洪、張東霞等編著。電路設計與制板——Protel應用教程,清華大學出版社,2009年6月。</p><p> 【3】 于京,張景
108、璐編著。51系列單片機C程序設計及應用案。中國電力出版社,2006年3月。</p><p> 【4】 何立民。MCS-51系列單片機應用系統(tǒng)設計。北京行天航空工業(yè)大學出版社,1990:143-160。</p><p> 【5】 李華。MCS-51系列單片機實用接口計數(shù)。北京行天航空工業(yè)大學出版社,1993:148-158。</p><p> 【6】 張毅剛、彭
109、喜源、曲春波編著。MCS-51單片機應用設計。哈爾濱工業(yè)大學出版社,1994:88-122。</p><p> 【7】 李廣弟等編著。 單片機基礎{修訂本} 。 北京航空航天大學出版社, 2001:55-82。</p><p> 【8】 張凱,馬忠梅編著。MCS-51單片機綜合系統(tǒng)及設計開發(fā)??茖W出版社,1999。</p><p> 【9】 ATMEL公司AT
110、89S52的技術手冊。</p><p><b> 答辯稿</b></p><p> 我的畢業(yè)設計是基于AT89S52單片機的遙控器設計,通過對設計要求的認真分析和研究,我決定采用先進的單片機技術實現(xiàn)遙控,采用模塊話設計,主要分為兩個模塊:紅外發(fā)射模塊和紅外接收模塊。</p><p> 本次設計所使用的單片機是Atmel公司的AT89S52
111、芯片,AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲器。使用Atmel 公司高密度非易失性存儲器技術制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。</p><p> 紅外發(fā)射模塊中的單片機受開關控制,通過紅外發(fā)射管對另一個單片機發(fā)射信號,發(fā)射端采用具有在線下載功能的AT89S52芯片作為控制中心,與鍵盤
112、掃描電路和發(fā)射電路共同構成。考慮到按鍵較多,可采用矩陣式,這里采用4 ×4的發(fā)射端利用單片機將待發(fā)送的二進制信號編碼調制為一系列的脈沖串信號,通過P1. 0口發(fā)出,經(jīng)三極管9013功率放大驅動紅外發(fā)射管LED1 。</p><p> 紅外接收模塊中的單片機受紅外接收管接收的信號控制。接收控制器由一個AT89S52芯片作為控制中心,與接收電路和各自的控制電路共同構成。其中接收電路使用一體化紅外接收頭HS
113、0038, HS0038工作頻率為38 kHz,能對收到遙控信號進行放大、檢波、整形、解調,得到TTL 電平的編碼信號,再送給單片機,經(jīng)單片機解碼并執(zhí)行相關控制程序,對外只有3 個引腳:VS、GND和1個脈沖信號輸出引腳,使用方便,性能可靠。</p><p> 程序設計的設計構想分為2個部分 1.紅外發(fā)射端程序設計:程序開始是對單片機進行初始化設置,循環(huán)掃描判斷是否有鍵按下,如果有鍵按下就發(fā)射相應的紅外信號。2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設計----基于at89s52單片機的遙控器設計
- 單片機基于at89s52單片機的遙控器設計畢業(yè)論文
- 單片機基于at89s52單片機的遙控器設計畢業(yè)論文
- 基于at89s52單片機的遙控器設計畢業(yè)論文
- 單片機畢業(yè)設計外文翻譯--at89s52
- 畢業(yè)設計--基于at89s52單片機信號發(fā)生器的設計
- 基于at89s52單片機的光電計數(shù)器畢業(yè)設計
- 畢業(yè)設計--基于at89s52的學習型紅外遙控器的設計
- 畢業(yè)設計(論文)基于at89s52單片機定時鬧鐘的設計
- 畢業(yè)設計---基于at89s52單片機的直流數(shù)控恒流源設計
- 畢業(yè)設計(論文)-基于at89s52單片機溫度控制器的設計
- 基于at89s52單片機溫度控制系統(tǒng)畢業(yè)設計
- 基于at89s52單片機溫度控制系統(tǒng)設計畢業(yè)設計
- 基于at89s52單片機溫度控制系統(tǒng)設計畢業(yè)設計
- 畢業(yè)設計(論文)-基于at89s52單片機的籃球計時計分器設計
- 畢業(yè)設計 --基于單片機的遙控器設計
- c語言基于at89s52的紅外遙控器設計畢業(yè)論文
- 基于at89s52單片機的紅外遙控小車制作畢業(yè)論文
- c語言基于at89s52的紅外遙控器的設計論文
- 基于at89s52單片機溫度采集設計畢業(yè)論文
評論
0/150
提交評論