




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、信息工程學院電子信息系專業(yè)實訓報告題目:基于STC89C52單片機的紅外遙控系統(tǒng) 專業(yè)班級:電子信息工程11級1班學號:1167118115 :郭曉偉 指導教師:建軍題目 基于STC89C52單片機的紅外遙控系統(tǒng)實訓目的: 通過對基于單片機的課程設計,使我們進一步熟悉和掌握單片機的結構及工作原理,掌握單片機的接口技術及相關外圍芯片的特性和控制方法。并且通過對本次的課程實習,掌握以單片機為核心的電路設計的基本方法和技術。在課程設計中,我們親自動手進行實際應用程序設計和調試,逐步掌握模塊化程序設計方法和調試技術,熟練運用DXP、protel99se等類似的畫圖軟件和編程軟件keil C等,在設計各
2、自的課題中,每位同學通過完成一個包括電路設計和程序開發(fā)的完整過程,使大家了解開發(fā)單片機應用系統(tǒng)的全過程,在自己的實踐設計中熟練這門技術時,同時排除和解決設計中遇到的各種問題,這是在此次課程設計中,同學們得到的最大的收益,而且為今后從事相應工作打下基礎。實訓時間、地點: 時間:2014春學期 第17.18周 地點:工程訓練中心實驗室實訓容:摘要:單片機的廣泛應用促進了設備和產(chǎn)品的微型化,數(shù)字化,自控化,和智能化。單片機的應用加深了計算機于自動化控制技術的結合,從而在自動控制領域里引發(fā)了一場對傳統(tǒng)控制技術的革命,也就是單片機正從根本上改變著傳統(tǒng)的控制設計思想和設計方法,是以往必須由模擬或數(shù)字電路實
3、現(xiàn)的控制功能,現(xiàn)在可以通過軟件方法實現(xiàn)了。紅外遙控是一種被廣泛使用的計算機技術,特別是在家電方面給人們帶來了方便快捷的生活。紅外遙控用到許多中斷技術,計算機系統(tǒng)中,中斷可以由各種硬件設備產(chǎn)生,以便請求服務或報告故障報警等。此外,中斷也可以由處理器自身產(chǎn)生。外部中斷請求有兩種信號方式有電平方式和脈沖方式。電平方式的中斷請求時低電平有效,脈沖的中斷請脈沖的下降沿有效。我通過在圖書館查閱有關資料,并且設計出了合適的電路圖,經(jīng)過仔細研究并對電路圖做了多次修改,滿足了課題的要求,實現(xiàn)了紅外遙控的目的。最后通過仿真器輸入程序,手動中斷,中斷結束后,程序從斷點處繼續(xù)執(zhí)行。中斷的應用具有重要的意義,它大大提高
4、了計算機效率。關鍵詞:單片機;遙控器;STC89C52;紅外遙控一 引言以單片機為核心的控制系統(tǒng),因為其實時控制功能強,可靠性高,實用性強,應用圍廣等優(yōu)點,得到了極為廣泛的應用。隨著人們生活水平的不斷提高,單片機控制無疑是人們追求的目標之一,它所給人帶來的方便也是不可否定的,其中紅外遙控就是一個典型的例子,但人們對它的要求越來越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設施就需要從單片機技術入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。紅外線遙控是目前使用最廣泛的一種通信和遙控手段。由于紅外線遙控裝置具有體積小、功耗低、功能強、成本低等特點,因而,繼彩電、錄像機之后,在錄音機、音響設備
5、、空凋機以及玩具等其它小型電器裝置上也紛紛采用紅外線遙控。工業(yè)設備中,在高壓、輻射、有毒氣體、粉塵等環(huán)境下,采用紅外線遙控不僅完全可靠而且能有效地隔離電氣干擾。它的理論性和實踐性都很強,我們在理論課學習中主要學習單片機的基本構造,各部分的工作原理以及指令系統(tǒng),然而,光是理論的學習是遠遠不夠的,最重要的是把理論和實踐相結合。所以此次實習,通過設計一個基于AT89S52單片機的遙控器設計,以增進對單片機電路的感性認識,加深對理論方面的理解和鞏固,了解和掌握軟硬件設計過程、方法及實現(xiàn),增強自己的動手和實踐能力,為以后在工作和學習中,設計和實現(xiàn)應用系統(tǒng)打下良好基礎。二 單片機系統(tǒng)開發(fā)與應用工程實習要求
6、及相關知識2.1 單片機系統(tǒng)開發(fā)與應用工程實習的重要意義單片機是計算機技術、大規(guī)模集成電路技術和控制技術的綜合產(chǎn)物?,F(xiàn)在,凡是電腦控制的設備和產(chǎn)品,必有單片機嵌入其中,它早已成為人類生活中不可或缺的助手。單片機體積小、重量輕,具有很強的靈活性而且價格便宜。單片機主要用于工業(yè)環(huán)境的實時控制、智能化儀器儀表、家用電器等各個不同的領域。不同領域對單片機的使用有不同的要求,諸如環(huán)境溫度、濕度、電源波動、電磁場擾動、噪聲、沖擊、紅外遙控等等,都直接影響著單片機應用系統(tǒng)的總體設計。無論哪一種單片機應用系統(tǒng),在總體設計中都必須把工作環(huán)境的制約當作重要因素對待。單片機應用系統(tǒng)設計不但要熟練掌握單片機程序語言和
7、編程技術,而且還要具備扎實的單片機硬件方面的理論和實踐知識。2.2 預期目標設計一種基于AT89S52單片機控制的紅外線遙控器,具有以下功能:(1)適用于編碼式紅外線遙控型家用電器;(2)可遙控多臺家用電器;(3)具有一個學習/控制復用鍵;(4)可通過一個設備選擇鍵和各個功能控制鍵實現(xiàn)對多臺設備的常用功能的學習和控制;(5)成本低,抗干擾能力強。2.3 單片機相關知識(1) 本次實習所使用的單片機是Atmel公司的STC89C52芯片,此芯片的功能強大,可以實現(xiàn)我們日常生活中接觸到的大部分家電的自動控制功能和實現(xiàn)對家電的遠程遙控。STC89C52的引腳圖如2-1所示: 圖2-1 STC89C5
8、2引腳圖單片機最小系統(tǒng)如下圖所示: 圖2-2 單片機最小系統(tǒng)(2)單片機最小系統(tǒng)的復位電路由電容串聯(lián)電阻構成,由圖并結合“電容電壓不能突變"的性質,可以知道,當系統(tǒng)一上電,RST腳將會出現(xiàn)高電平,并且,這個高電平持續(xù)的時間由電路的RC值來決定.典型的51單片機當RST腳的高電平持續(xù)兩個機器周期以上就將復位,所以,適當組合RC的取值就可以保證可靠的復位.一般教科書推薦C 取10u,R取8.2K.當然也有其他取法的,原則就是要讓RC組合可以在RST腳上產(chǎn)生不少于2個機周期的高電平.至于如何具體定量計,可以參考電路分析相關書籍. 圖2-3 單片機最小系統(tǒng)復位電路(3)單片機最小系統(tǒng)的晶振電
9、路單片機的時鐘電路由振蕩電路和分頻電路組成,其振蕩電路由反相器以及并聯(lián)外接的石英晶體和電容組成,用于產(chǎn)生振蕩脈沖。分頻電路用于把振蕩脈沖分頻,以的到所需要的時鐘信號。振蕩電路如圖2-2所示: 圖2-3 單片機最小系統(tǒng)晶振電路 其輸入端為引腳XTAL1,輸出端為引腳XTAL2。通過這兩個引腳在芯片外并接石英晶體振蕩器和兩只電容,石英晶體為一感性原件,與電容構成振蕩回路,為片放大器提供正反饋和振蕩的相移條件,從而構成一個穩(wěn)定的自激振蕩器。振蕩器的頻率主要取決于晶體的振蕩頻率, 一般晶體可在1.212 MHz之間任選, 電容C1、 C2可在530 pF之間選擇, 電容的大小對振蕩頻率有微小的影響,
10、可起頻率微調作用。 振蕩脈沖經(jīng)二分頻后作為系統(tǒng)的時鐘信號,時鐘信號經(jīng)過三分頻產(chǎn)生ALE信號,ALE信號用于控制把P0口的低8位地址送入鎖存器鎖起來,以實現(xiàn)低地址和數(shù)據(jù)的分時傳送,ALE還可作為外部時鐘或外部脈沖使用。時鐘信號經(jīng)六分頻得到機器周期信號。(4)中斷系統(tǒng)A 中斷的概念當CPU與外設交換信息時,由于外設的速度比較慢,若用查詢的方式,則CPU就要浪費很多時間去等待外設。這樣就存在一個快速的CPU與慢速的外設之間的矛盾。為了解決這個問題,就發(fā)展了中斷的概念。CPU正在處理某一程序時,發(fā)生了另一突發(fā)事件請求CPU迅速去處理(中斷發(fā)生);CPU暫時停止當前的工作,轉到需要處理的中斷源的服務程序
11、的入口(中斷響應),一般在入口處執(zhí)行一跳轉指令轉去處理中斷事件(中斷服務);待CPU將中斷事件處理完畢后,再回到原來程序被中斷的地方繼續(xù)處理執(zhí)行程序(中斷返回),這一處理過程稱為中斷。51單片機的中斷系統(tǒng)提供5個中斷源:外部中斷0和外部中斷1,定時/計數(shù)器(T0)和(T1)的溢出中斷,串行接口的接收和發(fā)送中斷。本程序中只用到了外部中斷1。B 中斷控制1 中斷允許寄存器IE(A8H)CPU對中斷系統(tǒng)所有中斷以及某個中斷源的開放和屏蔽是由中斷允許寄存器(IE)控制的。IE各位的定義如表2-2所示:表 2-1位地址0AFH0AEH0ADH0ACH0ABH0AAH0A9H0A8H位符號EA/ESET1
12、EX1ET0EX0EA中斷允許總控制位EA0 中斷總禁止,禁止所有中斷EA1 中斷總允許,總允許后中斷的禁止或允許由各中斷源的中斷允許控制位設置。EX0和EX1外部中斷允許控制位EX0(EX1)0 禁止外部中斷EX0(EX1)1 允許外部中斷ET0和ET1定時器/計數(shù)器中斷允許控制位ET0(ET1)0 禁止定時器/計數(shù)器中斷ET0(ET1)1 允許定時器/計數(shù)器中斷ES串行中斷允許控制位ES=0 禁止串行中斷ES=1 允許串行中斷2中斷優(yōu)先級控制寄存器(IP)各中斷的優(yōu)先級通過中斷優(yōu)先級控制寄存器IP來設定,其未定義及位地址如表2-3所示:表2-2位地址0BFH0BEH0BDH0BCH0BBH
13、0BAH0B9H0B8H位符號/PSPT1PX1PT0PX0PX0外部中斷0優(yōu)先級設定位;PT0定時中斷0優(yōu)先級設定位;PX1外部中斷1優(yōu)先級設定位;PT1定時中斷1優(yōu)先級設定位; PS串行中斷優(yōu)先級設定位。C定時器控制寄存器(TCON)該寄存器用于保存外部中斷請求以及定時器的計數(shù)溢出。進行字節(jié)操作時,寄存器地址為88H。按位操作時,各位的地址為88H8FH。寄存器的容及位地址表示如表2-4所示:表 2-3位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H 位符號 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 IE0和IE1外中斷請求標志位。當CPU采樣到
14、 INT0(或INT1)端出現(xiàn)有效中斷請求時,IE0(IE1)位由硬件置“1”。 當中斷響應完成轉向中斷服務程序時,由硬件把IE0(或IE1)清零。TR0 和TR1定時器運行控制位:TR0 (TR1 )0 定時器/計數(shù)器不工作TR0 (TR1 )1 定時器/計數(shù)器開始工作TF0和TF1計數(shù)溢出標志位。當計數(shù)器產(chǎn)生計數(shù)溢出時,相應的溢出標志位硬件置“1”。 并自動產(chǎn)生定時中斷請求。(5)液晶顯示模塊1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應用中并無差別,兩者尺寸差別如下圖所示:圖2-4 1602LCD尺寸圖1602LCD主要技術
15、參數(shù):顯示容量:16×2個字符 芯片工作電壓:4.55.5V工作電流:2.0mA(5.0V) 模塊最佳工作電壓:5.0V字符尺寸:2.95×4.35(W×H)mm引腳功能說明:1602LCD采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表所示:編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負極表2-4:引腳接口說明表第1腳:VSS為地電源
16、。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調整對比度。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16
17、腳:背光源負極。(6)聲音提示模塊該設計有聲音報警,當有病人呼叫時,蜂鳴器就會大聲提示,直到護士應答回復,才會停止鳴叫,控制引腳接在P3.4引腳上,利用三極管當做開關電路可以保護單片機,還可以起到放大電流的作用,當三極管基極為高電平時,發(fā)射極截止,為低電平時,發(fā)射極導通。報警模塊如圖2-5所示。圖2-5聲音提示模塊三 系統(tǒng)硬件設計3.1 紅外遙控系統(tǒng) 通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成,應用編/解碼專用集成電路芯片來進行控制操作,如圖1所示。發(fā)射部分包括鍵盤矩陣、編碼調制、LED紅外發(fā)送器;接收部分包括光、電轉換放大器、解調、解碼電路。如圖所示: 3.2 遙控發(fā)射器及其編碼 遙控發(fā)射器專
18、用芯片很多,根據(jù)編碼格式可以分成兩大類,這里我們以運用比較廣泛,解碼比較容易的一類來加以說明,現(xiàn)以兼容NEC的uPD6121G芯片發(fā)射碼格式的芯片組成發(fā)射電路為例說明編碼原理。當發(fā)射器按鍵按下后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:采用脈寬調制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的“1”,其波形如圖所示: 上述“0”和“1”組成的32位二進制碼經(jīng)38kHz的載頻進行二次調制以提高發(fā)射效率,達到降低電源功耗的目的。然后再通過紅
19、外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射,如圖所示:
20、160; UPD6121G產(chǎn)生的遙控編碼是連續(xù)的32位二進制碼組,其中前16位為用戶識別碼,能區(qū)別不同的電器設備,防止不同機種遙控碼互相干擾。芯片廠商把用戶識別碼固定為十六進制的一組數(shù);后16位為8位操作碼(功能碼)及其反碼。UPD6121G最多額128種不同組合的編碼。遙控器在按鍵按下后,周期性地發(fā)出同一種32位二進制碼,周期約為108ms。一組碼本身的持續(xù)時間隨它包含的二進制“0”和“1”的個數(shù)不同而不同,大約在4563ms之間,圖4為發(fā)射波形圖。當一個鍵按下超過36ms,振蕩器使芯片激活,將發(fā)射
21、一組108ms的編碼脈沖,這108ms發(fā)射代碼由一個起始碼(9ms),一個結果碼(4.5ms),低8位地址碼(9ms18ms),高8位地址碼(9ms18ms),8位數(shù)據(jù)碼(9ms18ms)和這8位數(shù)據(jù)的反碼(9ms18ms)組成。如果鍵按下超過108ms仍未松開,接下來發(fā)射的代碼(連發(fā)代碼)將僅由起始碼(9ms)和結束碼(2.5ms)組成。3.接收器及解碼一體化紅外線接收器是一種集紅外線接收和放大于一體,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號兼容的所有工作,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸。紅外接收頭將38K載波信號過慮,得到與發(fā)
22、射代碼反向接收代碼,如圖:(1) 解碼的關鍵是如何識別“0”和“1”,從位的定義我們可以發(fā)現(xiàn)“0”、“1”均以0.56ms的低電平開始,不同的是高電平的寬度不同,“0”為0.56ms,“1”為1.68ms,所以必須根據(jù)高電平的寬度區(qū)別“0”和“1”。如果從0.56ms低電平過后,開始延時,0.56ms以后,若讀到的電平為低,說明該位為“0”,反之則為“1”,為了可靠起見,延時必須比0.56ms長些,但又不能超過1.12ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此?。?.12ms+0.56ms)/2=0.84ms最為可靠,一般取0.84ms左右均可。(2) 根據(jù)
23、碼的格式,應該等待9ms的起始碼和4.5ms的結果碼完成后才能讀碼。四 電路框圖設計4.1 遙控發(fā)射單元的框圖設計 遙控發(fā)射單元由單片機最小系統(tǒng)和按鍵電路、紅外發(fā)射器電路等組成,遙控發(fā)射單元框圖如圖所示:電源電路STC89C52 單片機紅外發(fā)射器按鍵電路復位電路晶振電路 圖4-1 紅外遙控單元發(fā)射框圖 4.2遙控接收單元的框圖設計遙控接收單元由單片機最小系統(tǒng)和紅外接收器、控制對象電路等組成,遙控接收單元框圖如圖3-2所示:晶振電路STC89C52單片機電源液晶顯示器紅外接收器復位電路 圖4-2 紅外遙控接收單元框圖五 電路原理圖及程序流程圖5.1 遙控發(fā)射單元原理圖遙控發(fā)射單元由單片機最小系統(tǒng)
24、和按鍵電路、紅外發(fā)射器電路等組成,遙控發(fā)射單元原理圖如圖5-1所示。 圖5-1遙控發(fā)射單元原理圖5.2 遙控接收單元原理圖 遙控接收單元由單片機最小系統(tǒng)和紅外接收器、控制對象電路等組成,遙控接收單元原理圖如圖5-2所示。 圖5-2 遙控接收單元原理圖5.3總PCB圖如圖5-3所示:圖5-3 總PCB圖5.4 紅外遙控程序流程圖(1) 程序開始是對單片機進行初始化設置,循環(huán)掃描判斷是否有鍵按下,如果有鍵按下就發(fā)射相應的紅外信號,遙控發(fā)射程序流程圖如圖5-4所示:開始初始化有鍵按下?查詢被按下的鍵發(fā)送紅外脈沖個數(shù)(按鍵值)YN圖5-4 遙控發(fā)射程序流程圖(2) 程序開始是對單片機進行初始化設置,循
25、環(huán)掃描判斷是否有鍵按下,如果有鍵按下就發(fā)射相應的紅外信號,遙控發(fā)射程序流程圖如圖5-5所示,中斷延時有開始脈沖?接收紅外執(zhí)行相應功能中斷返回YN5.5實物圖程序附錄1:/*名稱:紅外線遙控發(fā)射(NEC編碼)單片機:STC89C52RC晶振:12M*/#include <REG51.h>#include "MY_SET.h"#include "LCD1602_6IO.h" #define KEY_PORT P1#defineKEY_NULL 80sbit IR = P20; /發(fā)射引腳/sbit LED1=P20;sbit LED2=P21;s
26、bit LED3=P22;sbit LED4=P23;sbit KEY1=P10;sbit KEY2=P11;sbit KEY3=P12;sbit KEY4=P13;sbit KEY5=P14;#define USER_H P2 /用戶碼高8位#define USER_L P0 /用戶碼低8位Uint8tab16=0x12,0x05,0x1e,0x55,0x01,0x1b,0x03,0x6b,0x07,0x08,0x09,0x68,0x22,0xE6,0x33,0xe2;/操作碼uint16 M = 0;#define m9 (65536-9000) /9mS#define m4_5 (655
27、36-4500) /4.5mS#define m1_6 (65536-1650) /1.65mS#define m_56 (65536-560) /0.56mS#define m40 (65536-40000) /40mS#define m56 (65536-56000) /56mS#define m2_25 (65536-2250) /2.25mSvoid SanZhuan();uint8 KEY(void);void ZZ(uint8 x); /NEC編碼發(fā)送程序void Z0(uint8 temp); /單幀(8位數(shù)據(jù))發(fā)送程序void TT0(bit BT,uint16 x); /38
28、KHz載波發(fā)射 + 延時程序char keyscan();void delayk();/*函數(shù):主程序*/void main(void) uchar m; TMOD = 0x01; IE = 0x81; /允許總中斷中斷,使能 INT0 外部中斷 TCON = 0x01; /觸發(fā)方式為脈沖負邊沿觸發(fā) IRIN=1; /I/O口初始化 BEEP=1;IR = 1; delay1(10); /延時 lcd_init(); /初始化LCD lcd_pos(0); /設置顯示位置為第一行的第1個字符m = 0; while(cdis1m != '0') /顯示字符 lcd_wdat(c
29、dis1m); m+; lcd_pos(0x40); /設置顯示位置為第二行第1個字符 m = 0; while(cdis2m != '0') lcd_wdat(cdis2m); /顯示字符 m+; while(1)if(LED4 = 0)IE = 0x00; elseIE = 0x81; SanZhuan();/*函數(shù):獨立鍵盤*/uint8 KEY(void) uint8 Key = 0xff; if(KEY1 = 0) Key = 0; / LED1 = LED1; if(KEY2 = 0) Key = 1; LED2 = LED2; if(KEY3 = 0) Key =
30、 2; LED3 = LED3; if(KEY4 = 0) Key = 3; LED3 = LED3; if(KEY5 = 0) LED4 = LED4; return Key; /返回鍵值/*函數(shù):散轉程序*/void SanZhuan() uint8 v; /TMOD = 0x01; /v = KEY(); /鍵盤檢測 v = keyscan(); switch(v) case 0:ZZ(tab0);break; case 1:ZZ(tab1);break; case 2:ZZ(tab2);break; case 3:ZZ(tab3);break; case 4:ZZ(tab4);brea
31、k; case 5:ZZ(tab5);break; case 6:ZZ(tab6);break; case 7:ZZ(tab7);break; case 8:ZZ(tab8);break; case 9:ZZ(tab9);break; case '*':ZZ(tab10);break; case '#':ZZ(tab11);break; case '+':ZZ(tab12);break; case '-':ZZ(tab13);break;/ case 0xd7:ZZ(tab14);break;/ case 0xe7:ZZ(tab1
32、5);break; default:break; v=0;/*函數(shù):NEC編碼發(fā)送程序 入口:八位操作碼*/void ZZ(uint8 Value) TT0(1,m9); /高電平9mS TT0(0,m4_5); /低電平4.5mS /* 發(fā)送4幀數(shù)據(jù)*/ Z0(USER_H); /用戶碼高8位 Z0(USER_L); /用戶碼低8位 Z0(Value); /操作碼 Z0(Value); /操作碼反碼 /* 結束碼 */ TT0(1,m_56); TT0(0,m40); /* 重復碼 */ while(KEY() != 0xFF) TT0(1,m9); TT0(0,m2_25); TT0(1,
33、m_56); TT0(0,m40);TT0(0,m56); /*函數(shù):單幀(8位數(shù)據(jù))發(fā)送程序*/void Z0(uint8 temp) uint8 v; for (v=0;v<8;v+) /循環(huán)8次移位 TT0(1,m_56); /高電平0.65mS if(temp&0x01) TT0(0,m1_6); /發(fā)送最低位 else TT0(0,m_56); temp >>= 1; /右移一位 /*函數(shù):38KHz載波發(fā)射 + 延時程序 入口:(是否發(fā)射載波,延時約 x (uS))*/void TT0(bit BT,uint16 x) TH0 = x>>8;
34、/輸入T0初始值 TL0 = x; TF0=0; /清0 TR0=1; /啟動定時器0 if(BT = 0) while(!TF0); /BT=0時,不發(fā)射38KHz載波只延時;B else while(1) /38KHz載波,(低電平)占空比5:26 IR = 0; if(TF0)break;if(TF0)break; IR = 1; if(TF0)break;if(TF0)break; if(TF0)break;if(TF0)break; if(TF0)break;if(TF0)break; if(TF0)break;if(TF0)break; if(TF0)break;if(TF0)br
35、eak; TR0=0; /關閉定時器0 TF0=0; /標志位溢出則清0 IR =1; /載波停止后,發(fā)射端口常態(tài)為高/*函數(shù) :外部中斷函數(shù) */void IR_IN(void) interrupt 0 /外部中斷服務程序 unsigned char j,k,N=0; EX0 = 0; delay(15); if (IRIN=1) EX0 =1; return; /確認IR信號出現(xiàn) while (!IRIN) /等IR變?yōu)楦唠娖?,跳過9ms的前導低電平信號。 delay(1); for (j=0;j<4;j+) /收集四組數(shù)據(jù) for (k=0;k<8;k+) /每組數(shù)據(jù)有8位
36、while (IRIN) /等 IR 變?yōu)榈碗娖?,跳過4.5ms的前導高電平信號 delay(1); while (!IRIN) /等 IR 變?yōu)楦唠娖?delay(1); while (IRIN) /計算IR高電平時長 delay(1); N+; if (N>=30) EX0=1; return; /0.14ms計數(shù)過長自動離開。 /高電平計數(shù)完畢 IRCOMj=IRCOMj >> 1; /數(shù)據(jù)最高位補“0” if (N>=8) IRCOMj = IRCOMj | 0x80; /數(shù)據(jù)最高位補“1” N=0; /end for k /end for j if (IRCO
37、M2!=IRCOM3)/按位取反 EX0=1; return; IRCOM5=IRCOM2 & 0x0F; /取鍵碼的低四位IRCOM6=IRCOM2 >> 4; /右移4次,高四位變?yōu)榈退奈?if(IRCOM5>9) IRCOM5=IRCOM5+0x37; else IRCOM5=IRCOM5+0x30; if(IRCOM6>9) IRCOM6=IRCOM6+0x37; else IRCOM6=IRCOM6+0x30; lcd_pos(0x4b); lcd_wdat(IRCOM6); /第一位數(shù)顯示 lcd_pos(0x4c); lcd_wdat(IRCOM5
38、); /第二位數(shù)顯示 Y0=0; switch(IRCOM2) case 0x09: Y0=0x01; break; case 0x1D: Y0=0x02; break; case 0x1F: Y0=0x03; break; case 0x0D: Y0=0x04; break; case 0x19: Y0=0x05; break; case 0x1B: Y0=0x06; break; case 0x11: Y0=0x07; break; case 0x15: Y0=0x08; break; case 0x17: Y0=0x09; break; default:break; /case 0x13
39、: RELAY=1; break; / case 0x14: RELAY=1; break; / case 0x51: RELAY=0; break; tabM = IRCOM2;M = (M+1)%4; beep(); EX0 = 1; char keyscan()char temp,key;KEY_PORT = 0x7f;temp = KEY_PORT;temp = KEY_PORT & 0x0f;if(temp != 0x0f)delayk();if(temp != 0x0f)temp = KEY_PORT;switch(temp)case 0x7e: key = 'A&
40、#39;break;/Acase 0x7d: key = 'B'break;/Bcase 0x7b: key = 'C'break;/Ccase 0x77: key = 'D'break;/Dwhile(temp != 0x0f)temp = KEY_PORT & 0x0f;P1 = key;return key;KEY_PORT = 0xbf;temp = KEY_PORT;temp = KEY_PORT & 0x0f;if(temp != 0x0f)delayk();if(temp != 0x0f)temp = KEY_POR
41、T;switch(temp)case 0xbe: key = 3;break;/3case 0xbd: key = 6;break;/6case 0xbb: key = 9;break;/9case 0xb7: key = '#'break;/#while(temp != 0x0f)temp = KEY_PORT & 0x0f;/P1 = key;return key;KEY_PORT = 0xdf;temp = KEY_PORT;temp = KEY_PORT & 0x0f;if(temp != 0x0f)delayk();if(temp != 0x0f)te
42、mp = KEY_PORT;switch(temp)case 0xde: key = 2;break;/2case 0xdd: key = 5;break;/5case 0xdb: key = 8;break;/8case 0xd7: key = 0;break;/0while(temp != 0x0f)temp = KEY_PORT & 0x0f;/P1 = key;return key;KEY_PORT = 0xef;temp = KEY_PORT;temp = KEY_PORT & 0x0f;if(temp != 0x0f)delayk();if(temp != 0x0f
43、)temp = KEY_PORT;switch(temp)case 0xee: key = 1;break;/1case 0xed: key = 4;break;/4case 0xeb: key = 7;break;/7case 0xe7: key = '*'break;/*while(temp != 0x0f)temp = KEY_PORT & 0x0f;/P1 = key;return key; /beep=1;return KEY_NULL;/返回一個與鍵盤不相關的值void delayk()int x,y;for(x=0; x<10; x+)for(y=0
44、; y<1000; y+);附錄2:#include<reg52.h> /包含單片機寄存器的頭文件#include<intrins.h> /包含_nop_()函數(shù)定義的頭文件sbit IR=P32; /將IR位定義為P3.2引腳sbit RS=P20; /寄存器選擇位,將RS位定義為P2.0引腳sbit RW=P21; /讀寫選擇位,將RW位定義為P2.1引腳sbit E=P22; /使能信號位,將E位定義為P2.2引腳sbit BF=P07; /忙碌標志位,將BF位定義為P0.7引腳sbit BEEP = P36; /蜂鳴器控制端口P36 unsigned char flag;unsigned char code string = "HELLO WORLD" unsigned char a4; /儲存用戶碼、用戶反碼與鍵數(shù)據(jù)碼、鍵數(shù)據(jù)反碼unsigned int LowTime
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三門峽職業(yè)技術學院《對外漢語教學語法研究》2023-2024學年第二學期期末試卷
- 浙江省淮北市2024-2025學年數(shù)學五年級第二學期期末監(jiān)測試題含答案
- 新疆現(xiàn)代職業(yè)技術學院《視覺傳達設計》2023-2024學年第二學期期末試卷
- 阜陽職業(yè)技術學院《高分子復合原理及配方設計A》2023-2024學年第二學期期末試卷
- 大慶師范學院《現(xiàn)代檢測技術》2023-2024學年第二學期期末試卷
- 湖南環(huán)境生物職業(yè)技術學院《分子細胞與醫(yī)學遺傳基礎》2023-2024學年第二學期期末試卷
- 江西工業(yè)工程職業(yè)技術學院《資本運營》2023-2024學年第二學期期末試卷
- 江西省新余市分宜中學2025年高三(下)返校語文試題試卷含解析
- 潤滑油行業(yè)報告
- 2025 培訓講師雇傭合同 機構終止培訓講師雇傭合同
- GB/T 1420-2015海綿鈀
- 鍵盤顯示器接口課件
- 良性前列腺增生診療指南
- 預防校園欺凌-共創(chuàng)和諧校園-模擬法庭劇本
- 中國火車發(fā)展歷程課件
- 執(zhí)行力、心態(tài)管理培訓課件
- 河北省廊坊市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細及行政區(qū)劃代碼
- (最新)信貸資產(chǎn)風險分類管理辦法
- 不甘屈辱奮勇抗爭第三課時甲午風云課件五年級道德與法治
- 家具廠安全生產(chǎn)臺帳
- 精神科應急預案PPT課件
評論
0/150
提交評論