基于STC89C52單片機(jī)的紅外遙控系統(tǒng)_第1頁(yè)
基于STC89C52單片機(jī)的紅外遙控系統(tǒng)_第2頁(yè)
基于STC89C52單片機(jī)的紅外遙控系統(tǒng)_第3頁(yè)
基于STC89C52單片機(jī)的紅外遙控系統(tǒng)_第4頁(yè)
基于STC89C52單片機(jī)的紅外遙控系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、.1信息工程學(xué)院電子信息系專業(yè)實(shí)訓(xùn)報(bào)告題目:基于STC89C52單片機(jī)的紅外遙控系統(tǒng)專業(yè)班級(jí):電子信息工程11級(jí)1班*:1167118115 :郭曉偉 指導(dǎo)教師:建軍題目 基于STC89C52單片機(jī)的紅外遙控系統(tǒng)實(shí)訓(xùn)目的: 通過對(duì)基于單片機(jī)的課程設(shè)計(jì),使我們進(jìn)一步熟悉和掌握單片機(jī)的構(gòu)造及工作原理,掌握單片機(jī)的接口技術(shù)及相關(guān)外圍芯片的特性和控制方法。并且通過對(duì)本次的課程實(shí)習(xí),掌握以單片機(jī)為核心的電路設(shè)計(jì)的根本方法和技術(shù)。在課程設(shè)計(jì)中,我們親自動(dòng)手進(jìn)展實(shí)際應(yīng)用程序設(shè)計(jì)和調(diào)試,逐步掌握模塊化程序設(shè)計(jì)方法和調(diào)試技術(shù),熟練運(yùn)用D*P、protel99se等類似的畫圖軟件和編程軟件keil C等,在設(shè)計(jì)各

2、自的課題中,每位同學(xué)通過完成一個(gè)包括電路設(shè)計(jì)和程序開發(fā)的完整過程,使大家了解開發(fā)單片機(jī)應(yīng)用系統(tǒng)的全過程,在自己的實(shí)踐設(shè)計(jì)中熟練這門技術(shù)時(shí),同時(shí)排除和解決設(shè)計(jì)中遇到的各種問題,這是在此次課程設(shè)計(jì)中,同學(xué)們得到的最大的收益,而且為今后從事相應(yīng)工作打下根底。實(shí)訓(xùn)時(shí)間、地點(diǎn): 時(shí)間:2021春學(xué)期 第17.18周 地點(diǎn):工程訓(xùn)練中心實(shí)驗(yàn)室實(shí)訓(xùn)容:摘要:?jiǎn)纹瑱C(jī)的廣泛應(yīng)用促進(jìn)了設(shè)備和產(chǎn)品的微型化,數(shù)字化,自控化,和智能化。單片機(jī)的應(yīng)用加深了計(jì)算機(jī)于自動(dòng)化控制技術(shù)的結(jié)合,從而在自動(dòng)控制領(lǐng)域里引發(fā)了一場(chǎng)對(duì)傳統(tǒng)控制技術(shù)的革命,也就是單片機(jī)正從根本上改變著傳統(tǒng)的控制設(shè)計(jì)思想和設(shè)計(jì)方法,是以往必須由模擬或數(shù)字電路實(shí)

3、現(xiàn)的控制功能,現(xiàn)在可以通過軟件方法實(shí)現(xiàn)了。紅外遙控是一種被廣泛使用的計(jì)算機(jī)技術(shù),特別是在家電方面給人們帶來了方便快捷的生活。紅外遙控用到許多中斷技術(shù),計(jì)算機(jī)系統(tǒng)中,中斷可以由各種硬件設(shè)備產(chǎn)生,以便請(qǐng)求效勞或報(bào)告故障報(bào)警等。此外,中斷也可以由處理器自身產(chǎn)生。外部中斷請(qǐng)求有兩種信號(hào)方式有電平方式和脈沖方式。電平方式的中斷請(qǐng)求時(shí)低電平有效,脈沖的中斷請(qǐng)脈沖的下降沿有效。我通過在圖書館查閱有關(guān)資料,并且設(shè)計(jì)出了適宜的電路圖,經(jīng)過仔細(xì)研究并對(duì)電路圖做了屢次修改,滿足了課題的要求,實(shí)現(xiàn)了紅外遙控的目的。最后通過仿真器輸入程序,手動(dòng)中斷,中斷完畢后,程序從斷點(diǎn)處繼續(xù)執(zhí)行。中斷的應(yīng)用具有重要的意義,它大大提高

4、了計(jì)算機(jī)效率。關(guān)鍵詞:?jiǎn)纹瑱C(jī);遙控器;STC89C52;紅外遙控一 引言以單片機(jī)為核心的控制系統(tǒng),因?yàn)槠鋵?shí)時(shí)控制功能強(qiáng),可靠性高,實(shí)用性強(qiáng),應(yīng)用圍廣等優(yōu)點(diǎn),得到了極為廣泛的應(yīng)用。隨著人們生活水平的不斷提高,單片機(jī)控制無疑是人們追求的目標(biāo)之一,它所給人帶來的方便也是不可否認(rèn)的,其中紅外遙控就是一個(gè)典型的例子,但人們對(duì)它的要求越來越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施就需要從單片機(jī)技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向開展。紅外線遙控是目前使用最廣泛的一種通信和遙控手段。由于紅外線遙控裝置具有體積小、功耗低、功能強(qiáng)、本錢低等特點(diǎn),因而,繼彩電、錄像機(jī)之后,在錄音機(jī)、音響設(shè)備

5、、空凋機(jī)以及玩具等其它小型電器裝置上也紛紛采用紅外線遙控。工業(yè)設(shè)備中,在高壓、輻射、有毒氣體、粉塵等環(huán)境下,采用紅外線遙控不僅完全可靠而且能有效地隔離電氣干擾。它的理論性和實(shí)踐性都很強(qiáng),我們?cè)诶碚撜n學(xué)習(xí)中主要學(xué)習(xí)單片機(jī)的根本構(gòu)造,各局部的工作原理以及指令系統(tǒng),然而,光是理論的學(xué)習(xí)是遠(yuǎn)遠(yuǎn)不夠的,最重要的是把理論和實(shí)踐相結(jié)合。所以此次實(shí)習(xí),通過設(shè)計(jì)一個(gè)基于AT89S52單片機(jī)的遙控器設(shè)計(jì),以增進(jìn)對(duì)單片機(jī)電路的感性認(rèn)識(shí),加深對(duì)理論方面的理解和穩(wěn)固,了解和掌握軟硬件設(shè)計(jì)過程、方法及實(shí)現(xiàn),增強(qiáng)自己的動(dòng)手和實(shí)踐能力,為以后在工作和學(xué)習(xí)中,設(shè)計(jì)和實(shí)現(xiàn)應(yīng)用系統(tǒng)打下良好根底。二 單片機(jī)系統(tǒng)開發(fā)與應(yīng)用工程實(shí)習(xí)要求

6、及相關(guān)知識(shí)2.1 單片機(jī)系統(tǒng)開發(fā)與應(yīng)用工程實(shí)習(xí)的重要意義單片機(jī)是計(jì)算機(jī)技術(shù)、大規(guī)模集成電路技術(shù)和控制技術(shù)的綜合產(chǎn)物?,F(xiàn)在,但凡電腦控制的設(shè)備和產(chǎn)品,必有單片機(jī)嵌入其中,它早已成為人類生活中不可或缺的助手。單片機(jī)體積小、重量輕,具有很強(qiáng)的靈活性而且價(jià)格廉價(jià)。單片機(jī)主要用于工業(yè)環(huán)境的實(shí)時(shí)控制、智能化儀器儀表、家用電器等各個(gè)不同的領(lǐng)域。不同領(lǐng)域?qū)纹瑱C(jī)的使用有不同的要求,諸如環(huán)境溫度、濕度、電源波動(dòng)、電磁場(chǎng)擾動(dòng)、噪聲、沖擊、紅外遙控等等,都直接影響著單片機(jī)應(yīng)用系統(tǒng)的總體設(shè)計(jì)。無論哪一種單片機(jī)應(yīng)用系統(tǒng),在總體設(shè)計(jì)中都必須把工作環(huán)境的制約當(dāng)作重要因素對(duì)待。單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)不但要熟練掌握單片機(jī)程序語(yǔ)言和

7、編程技術(shù),而且還要具備扎實(shí)的單片機(jī)硬件方面的理論和實(shí)踐知識(shí)。2.2 預(yù)期目標(biāo)設(shè)計(jì)一種基于AT89S52單片機(jī)控制的紅外線遙控器,具有以下功能:1適用于編碼式紅外線遙控型家用電器;2可遙控多臺(tái)家用電器;3具有一個(gè)學(xué)習(xí)/控制復(fù)用鍵;4可通過一個(gè)設(shè)備選擇鍵和各個(gè)功能控制鍵實(shí)現(xiàn)對(duì)多臺(tái)設(shè)備的常用功能的學(xué)習(xí)和控制;5本錢低,抗干擾能力強(qiáng)。2.3 單片機(jī)相關(guān)知識(shí)1 本次實(shí)習(xí)所使用的單片機(jī)是Atmel公司的STC89C52芯片,此芯片的功能強(qiáng)大,可以實(shí)現(xiàn)我們?nèi)粘I钪薪佑|到的大局部家電的自動(dòng)控制功能和實(shí)現(xiàn)對(duì)家電的遠(yuǎn)程遙控。STC89C52的引腳圖如2-1所示:圖2-1 STC89C52引腳圖單片機(jī)最小系統(tǒng)如以

8、下圖所示:圖2-2單片機(jī)最小系統(tǒng)2單片機(jī)最小系統(tǒng)的復(fù)位電路由電容串聯(lián)電阻構(gòu)成,由圖并結(jié)合“電容電壓不能突變的性質(zhì),可以知道,當(dāng)系統(tǒng)一上電,RST腳將會(huì)出現(xiàn)高電平,并且,這個(gè)高電平持續(xù)的時(shí)間由電路的RC值來決定.典型的51單片機(jī)當(dāng)RST腳的高電平持續(xù)兩個(gè)機(jī)器周期以上就將復(fù)位,所以,適當(dāng)組合RC的取值就可以保證可靠的復(fù)位.一般教科書推薦C 取10u,R取8.2K.當(dāng)然也有其他取法的,原則就是要讓RC組合可以在RST腳上產(chǎn)生不少于2個(gè)機(jī)周期的高電平.至于如何具體定量計(jì),可以參考電路分析相關(guān)書籍. 圖2-3單片機(jī)最小系統(tǒng)復(fù)位電路3單片機(jī)最小系統(tǒng)的晶振電路單片機(jī)的時(shí)鐘電路由振蕩電路和分頻電路組成,其振蕩

9、電路由反相器以及并聯(lián)外接的石英晶體和電容組成,用于產(chǎn)生振蕩脈沖。分頻電路用于把振蕩脈沖分頻,以的到所需要的時(shí)鐘信號(hào)。振蕩電路如圖2-2所示:圖2-3單片機(jī)最小系統(tǒng)晶振電路其輸入端為引腳*TAL1,輸出端為引腳*TAL2。通過這兩個(gè)引腳在芯片外并接石英晶體振蕩器和兩只電容,石英晶體為一感性原件,與電容構(gòu)成振蕩回路,為片放大器提供正反響和振蕩的相移條件,從而構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。振蕩器的頻率主要取決于晶體的振蕩頻率, 一般晶體可在1.212 MHz之間任選, 電容C1、 C2可在530 pF之間選擇, 電容的大小對(duì)振蕩頻率有微小的影響, 可起頻率微調(diào)作用。 振蕩脈沖經(jīng)二分頻后作為系統(tǒng)的時(shí)鐘信號(hào)

10、,時(shí)鐘信號(hào)經(jīng)過三分頻產(chǎn)生ALE信號(hào),ALE信號(hào)用于控制把P0口的低8位地址送入鎖存器鎖起來,以實(shí)現(xiàn)低地址和數(shù)據(jù)的分時(shí)傳送,ALE還可作為外部時(shí)鐘或外部脈沖使用。時(shí)鐘信號(hào)經(jīng)六分頻得到機(jī)器周期信號(hào)。4中斷系統(tǒng)A 中斷的概念當(dāng)CPU與外設(shè)交換信息時(shí),由于外設(shè)的速度比較慢,假設(shè)用查詢的方式,則CPU就要浪費(fèi)很多時(shí)間去等待外設(shè)。這樣就存在一個(gè)快速的CPU與慢速的外設(shè)之間的矛盾。為了解決這個(gè)問題,就開展了中斷的概念。CPU正在處理*一程序時(shí),發(fā)生了另一突發(fā)事件請(qǐng)求CPU迅速去處理(中斷發(fā)生);CPU暫時(shí)停頓當(dāng)前的工作,轉(zhuǎn)到需要處理的中斷源的效勞程序的入口(中斷響應(yīng)),一般在入口處執(zhí)行一跳轉(zhuǎn)指令轉(zhuǎn)去處理中斷

11、事件(中斷效勞);待CPU將中斷事件處理完畢后,再回到原來程序被中斷的地方繼續(xù)處理執(zhí)行程序(中斷返回),這一處理過程稱為中斷。51單片機(jī)的中斷系統(tǒng)提供5個(gè)中斷源:外部中斷0和外部中斷1,定時(shí)/計(jì)數(shù)器(T0)和(T1)的溢出中斷,串行接口的接收和發(fā)送中斷。本程序中只用到了外部中斷1。B 中斷控制1 中斷允許存放器IE(A8H)CPU對(duì)中斷系統(tǒng)所有中斷以及*個(gè)中斷源的開放和屏蔽是由中斷允許存放器(IE)控制的。IE各位的定義如表2-2所示:表 2-1位地址0AFH0AEH0ADH0ACH0ABH0AAH0A9H0A8H位符號(hào)EA/ESET1E*1ET0E*0EA中斷允許總控制位EA0 中斷總制止,

12、制止所有中斷EA1 中斷總允許,總允許后中斷的制止或允許由各中斷源的中斷允許控制位設(shè)置。E*0和E*1外部中斷允許控制位E*0E*10 制止外部中斷E*0E*11 允許外部中斷ET0和ET1定時(shí)器/計(jì)數(shù)器中斷允許控制位ET0ET10 制止定時(shí)器/計(jì)數(shù)器中斷ET0ET11 允許定時(shí)器/計(jì)數(shù)器中斷ES串行中斷允許控制位ES=0 制止串行中斷ES=1 允許串行中斷2中斷優(yōu)先級(jí)控制存放器IP各中斷的優(yōu)先級(jí)通過中斷優(yōu)先級(jí)控制存放器IP來設(shè)定,其未定義及位地址如表2-3所示:表2-2位地址0BFH0BEH0BDH0BCH0BBH0BAH0B9H0B8H位符號(hào)/PSPT1P*1PT0P*0P*0外部中斷0優(yōu)

13、先級(jí)設(shè)定位;PT0定時(shí)中斷0優(yōu)先級(jí)設(shè)定位;P*1外部中斷1優(yōu)先級(jí)設(shè)定位;PT1定時(shí)中斷1優(yōu)先級(jí)設(shè)定位;PS串行中斷優(yōu)先級(jí)設(shè)定位。C定時(shí)器控制存放器TCON該存放器用于保存外部中斷請(qǐng)求以及定時(shí)器的計(jì)數(shù)溢出。進(jìn)展字節(jié)操作時(shí),存放器地址為88H。按位操作時(shí),各位的地址為88H8FH。存放器的容及位地址表示如表2-4所示:表 2-3位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H 位符號(hào) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 IE0和IE1外中斷請(qǐng)求標(biāo)志位。當(dāng)CPU采樣到 INT0或INT1端出現(xiàn)有效中斷請(qǐng)求時(shí),IE0IE1位由硬件置“1。當(dāng)中斷響應(yīng)完成

14、轉(zhuǎn)向中斷效勞程序時(shí),由硬件把IE0或IE1清零。TR0 和TR1定時(shí)器運(yùn)行控制位:TR0 TR1 0 定時(shí)器/計(jì)數(shù)器不工作TR0 TR1 1 定時(shí)器/計(jì)數(shù)器開場(chǎng)工作TF0和TF1計(jì)數(shù)溢出標(biāo)志位。當(dāng)計(jì)數(shù)器產(chǎn)生計(jì)數(shù)溢出時(shí),相應(yīng)的溢出標(biāo)志位硬件置“1。 并自動(dòng)產(chǎn)生定時(shí)中斷請(qǐng)求。(5)液晶顯示模塊1602LCD分為帶背光和不帶背光兩種,基控制器大局部為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差異,兩者尺寸差異如以下圖所示:圖2-4 1602LCD尺寸圖1602LCD主要技術(shù)參數(shù):顯示容量:162個(gè)字符芯片工作電壓:4.55.5V工作電流:2.0mA(5.0V)模塊最正確工作電壓:

15、5.0V字符尺寸:2.954.35(WH)mm引腳功能說明:1602LCD采用標(biāo)準(zhǔn)的14腳無背光或16腳帶背光接口,各引腳接口說明如表所示:編號(hào)符號(hào)引腳說明編號(hào)符號(hào)引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號(hào)14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極表2-4:引腳接口說明表第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器比照度調(diào)整端,接正電源時(shí)比照度最弱,接地時(shí)比照度最高,比照度過高時(shí)會(huì)產(chǎn)生“鬼影,使用時(shí)可以通過一個(gè)1

16、0K的電位器調(diào)整比照度。第4腳:RS為存放器選擇,高電平時(shí)選擇數(shù)據(jù)存放器、低電平時(shí)選擇指令存放器。第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)展讀操作,低電平時(shí)進(jìn)展寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負(fù)極。6聲音提示模塊該設(shè)計(jì)有聲音報(bào)警,當(dāng)有病人呼叫時(shí),蜂鳴器就會(huì)大聲提示,直到護(hù)士應(yīng)答回復(fù),才會(huì)停頓鳴叫,控制引腳接在P3.4引腳上,利用三極管當(dāng)

17、做開關(guān)電路可以保護(hù)單片機(jī),還可以起到放大電流的作用,當(dāng)三極管基極為高電平時(shí),發(fā)射極截止,為低電平時(shí),發(fā)射極導(dǎo)通。報(bào)警模塊如圖2-5所示。圖2-5聲音提示模塊三 系統(tǒng)硬件設(shè)計(jì)3.1 紅外遙控系統(tǒng) 通用紅外遙控系統(tǒng)由發(fā)射和接收兩大局部組成,應(yīng)用編/解碼專用集成電路芯片來進(jìn)展控制操作,如圖1所示。發(fā)射局部包括鍵盤矩陣、編碼調(diào)制、LED紅外發(fā)送器;接收局部包括光、電轉(zhuǎn)換放大器、解調(diào)、解碼電路。如以下圖:3.2 遙控發(fā)射器及其編碼 遙控發(fā)射器專用芯片很多,根據(jù)編碼格式可以分成兩大類,這里我們以運(yùn)用比較廣泛,解碼比較容易的一類來加以說明,現(xiàn)以兼容NEC的uPD6121G芯片發(fā)射碼格式的芯片組成發(fā)射電路為例

18、說明編碼原理。當(dāng)發(fā)射器按鍵按下后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:采用脈寬調(diào)制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進(jìn)制的“0;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進(jìn)制的“1,其波形如以下圖: 上述“0和“1組成的32位二進(jìn)制碼經(jīng)38kHz的載頻進(jìn)展二次調(diào)制以提高發(fā)射效率,到達(dá)降低電源功耗的目的。然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射,如以下圖:UPD6121G產(chǎn)生的遙控編碼是連續(xù)的32位二進(jìn)制碼組,其中前16位為用戶識(shí)別碼,能區(qū)別不同的電器設(shè)備,防止不同機(jī)種遙控碼互相

19、干擾。芯片廠商把用戶識(shí)別碼固定為十六進(jìn)制的一組數(shù);后16位為8位操作碼功能碼及其反碼。UPD6121G最多額128種不同組合的編碼。遙控器在按鍵按下后,周期性地發(fā)出同一種32位二進(jìn)制碼,周期約為108ms。一組碼本身的持續(xù)時(shí)間隨它包含的二進(jìn)制“0和“1的個(gè)數(shù)不同而不同,大約在4563ms之間,圖4為發(fā)射波形圖。當(dāng)一個(gè)鍵按下超過36ms,振蕩器使芯片激活,將發(fā)射一組108ms的編碼脈沖,這108ms發(fā)射代碼由一個(gè)起始碼9ms,一個(gè)結(jié)果碼4.5ms,低8位地址碼9ms18ms,高8位地址碼9ms18ms,8位數(shù)據(jù)碼9ms18ms和這8位數(shù)據(jù)的反碼9ms18ms組成。如果鍵按下超過108ms仍未松開

20、,接下來發(fā)射的代碼連發(fā)代碼將僅由起始碼9ms和完畢碼2.5ms組成。3.接收器及解碼一體化紅外線接收器是一種集紅外線接收和放大于一體,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號(hào)兼容的所有工作,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸。紅外接收頭將38K載波信號(hào)過慮,得到與發(fā)射代碼反向接收代碼,如圖:1解碼的關(guān)鍵是如何識(shí)別“0和“1,從位的定義我們可以發(fā)現(xiàn)“0、“1均以0.56ms的低電平開場(chǎng),不同的是高電平的寬度不同,“0為0.56ms,“1為1.68ms,所以必須根據(jù)高電平的寬度區(qū)別“0和“1。如果從0.56ms低電平過后,開場(chǎng)延時(shí),0.5

21、6ms以后,假設(shè)讀到的電平為低,說明該位為“0,反之則為“1,為了可靠起見,延時(shí)必須比0.56ms長(zhǎng)些,但又不能超過1.12ms,否則如果該位為“0,讀到的已是下一位的高電平,因此取1.12ms+0.56ms/2=0.84ms最為可靠,一般取0.84ms左右均可。2根據(jù)碼的格式,應(yīng)該等待9ms的起始碼和4.5ms的結(jié)果碼完成后才能讀碼。四 電路框圖設(shè)計(jì)4.1 遙控發(fā)射單元的框圖設(shè)計(jì) 遙控發(fā)射單元由單片機(jī)最小系統(tǒng)和按鍵電路、紅外發(fā)射器電路等組成,遙控發(fā)射單元框圖如以下圖:電源電路STC89C52 單片機(jī)紅外發(fā)射器按鍵電路復(fù)位電路晶振電路圖4-1 紅外遙控單元發(fā)射框圖 4.2遙控接收單元的框圖設(shè)計(jì)

22、遙控接收單元由單片機(jī)最小系統(tǒng)和紅外接收器、控制對(duì)象電路等組成,遙控接收單元框圖如圖3-2所示:晶振電路STC89C52單片機(jī)電源液晶顯示器紅外接收器復(fù)位電路圖4-2紅外遙控接收單元框圖五 電路原理圖及程序流程圖5.1 遙控發(fā)射單元原理圖遙控發(fā)射單元由單片機(jī)最小系統(tǒng)和按鍵電路、紅外發(fā)射器電路等組成,遙控發(fā)射單元原理圖如圖5-1所示。圖5-1遙控發(fā)射單元原理圖5.2 遙控接收單元原理圖 遙控接收單元由單片機(jī)最小系統(tǒng)和紅外接收器、控制對(duì)象電路等組成,遙控接收單元原理圖如圖5-2所示。圖5-2 遙控接收單元原理圖5.3總PCB圖如圖5-3所示:圖5-3 總PCB圖5.4 紅外遙控程序流程圖1 程序開場(chǎng)

23、是對(duì)單片機(jī)進(jìn)展初始化設(shè)置,循環(huán)掃描判斷是否有鍵按下,如果有鍵按下就發(fā)射相應(yīng)的紅外信號(hào),遙控發(fā)射程序流程圖如圖5-4所示:開場(chǎng)初始化有鍵按下.查詢被按下的鍵發(fā)送紅外脈沖個(gè)數(shù)按鍵值YN圖5-4遙控發(fā)射程序流程圖2 程序開場(chǎng)是對(duì)單片機(jī)進(jìn)展初始化設(shè)置,循環(huán)掃描判斷是否有鍵按下,如果有鍵按下就發(fā)射相應(yīng)的紅外信號(hào),遙控發(fā)射程序流程圖如圖5-5所示,中斷延時(shí)有開場(chǎng)脈沖.接收紅外執(zhí)行相應(yīng)功能中斷返回YN5.5實(shí)物圖程序附錄1:/*名稱:紅外線遙控發(fā)射NEC編碼單片機(jī):STC89C52RC晶振:12M*/*include *include MY_SET.h*include LCD1602_6IO.h *defi

24、ne KEY_PORT P1*defineKEY_NULL 80sbit IR = P20; /發(fā)射引腳/sbit LED1=P20;sbit LED2=P21;sbit 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=0*12,0*05,0*1e,0*55,0*01,0*1b,0*03,0*6b,0*07,0*08,0*09,0*68,

25、0*22,0*E6,0*33,0*e2;/操作碼uint16 M = 0;*define m9 (65536-9000) /9mS*define m4_5 (65536-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(ui

26、nt8 *); /NEC編碼發(fā)送程序void Z0(uint8 temp); /單幀8位數(shù)據(jù)發(fā)送程序void TT0(bit BT,uint16 *); /38KHz載波發(fā)射 + 延時(shí)程序char keyscan();void delayk();/*函數(shù):主程序*/void main(void) uchar m; TMOD = 0*01; IE = 0*81; /允許總中斷中斷,使能 INT0 外部中斷 TCON = 0*01; /觸發(fā)方式為脈沖負(fù)邊沿觸發(fā) IRIN=1; /I/O口初始化 BEEP=1;IR = 1; delay1(10); /延時(shí) lcd_init(); /初始化LCD l

27、cd_pos(0); /設(shè)置顯示位置為第一行的第1個(gè)字符m = 0; while(cdis1m != 0) /顯示字符 lcd_wdat(cdis1m); m+; lcd_pos(0*40); /設(shè)置顯示位置為第二行第1個(gè)字符 m = 0; while(cdis2m != 0) lcd_wdat(cdis2m); /顯示字符 m+; while(1)if(LED4 = 0)IE = 0*00; elseIE = 0*81; SanZhuan();/*函數(shù):獨(dú)立鍵盤*/uint8 KEY(void) uint8 Key = 0*ff; if(KEY1 = 0) Key = 0; / LED1 =

28、 LED1; if(KEY2 = 0) Key = 1; LED2 = LED2; if(KEY3 = 0) Key = 2; LED3 = LED3; if(KEY4 = 0) Key = 3; LED3 = LED3; if(KEY5 = 0) LED4 = LED4; return Key; /返回鍵值/*函數(shù):散轉(zhuǎn)程序*/void SanZhuan() uint8 v; /TMOD = 0*01; /v = KEY(); /鍵盤檢測(cè) v = keyscan(); switch(v) case 0:ZZ(tab0);break; case 1:ZZ(tab1);break; case 2

29、:ZZ(tab2);break; case 3:ZZ(tab3);break; case 4:ZZ(tab4);break; 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 0*d7:ZZ(tab14);break

30、;/ case 0*e7:ZZ(tab15);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); /* 重復(fù)碼 */ while(KEY() != 0*FF) TT0(1,m9);

31、TT0(0,m2_25); TT0(1,m_56); TT0(0,m40);TT0(0,m56); /*函數(shù):?jiǎn)螏?位數(shù)據(jù)發(fā)送程序*/void Z0(uint8 temp) uint8 v; for (v=0;v= 1; /右移一位 /*函數(shù):38KHz載波發(fā)射 + 延時(shí)程序 入口:是否發(fā)射載波,延時(shí)約 * (uS)*/void TT0(bit BT,uint16 *) TH0 = *8; /輸入T0初始值 TL0 = *; TF0=0; /清0 TR0=1; /啟動(dòng)定時(shí)器0 if(BT = 0) while(!TF0); /BT=0時(shí),不發(fā)射38KHz載波只延時(shí);B else while(1

32、) /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)break; TR0=0; /關(guān)閉定時(shí)器0 TF0=0; /標(biāo)志位溢出則清0 IR =1; /載波停頓后,發(fā)射端口常態(tài)為高/*函數(shù) :外部中斷函數(shù) */void IR_IN(void) interrupt 0 /外

33、部中斷效勞程序 unsigned char j,k,N=0; E*0 = 0; delay(15); if (IRIN=1) E*0 =1; return; /確認(rèn)IR信號(hào)出現(xiàn) while (!IRIN) /等IR變?yōu)楦唠娖剑^9ms的前導(dǎo)低電平信號(hào)。 delay(1); for (j=0;j4;j+) /收集四組數(shù)據(jù) for (k=0;k=30) E*0=1; return; /0.14ms計(jì)數(shù)過長(zhǎng)自動(dòng)離開。 /高電平計(jì)數(shù)完畢 IRj=IRj 1; /數(shù)據(jù)最高位補(bǔ)“0 if (N=8) IRj = IRj | 0*80; /數(shù)據(jù)最高位補(bǔ)“1 N=0; /end for k /end for

34、 j if (IR2!=IR3)/按位取反 E*0=1; return; IR5=IR2 & 0*0F; /取鍵碼的低四位IR6=IR2 4; /右移4次,高四位變?yōu)榈退奈?if(IR59) IR5=IR5+0*37; else IR5=IR5+0*30; if(IR69) IR6=IR6+0*37; else IR6=IR6+0*30; lcd_pos(0*4b); lcd_wdat(IR6); /第一位數(shù)顯示 lcd_pos(0*4c); lcd_wdat(IR5); /第二位數(shù)顯示 Y0=0; switch(IR2) case 0*09: Y0=0*01; break; case 0*1

35、D: Y0=0*02; break; case 0*1F: Y0=0*03; break; case 0*0D: Y0=0*04; break; case 0*19: Y0=0*05; break; case 0*1B: Y0=0*06; break; case 0*11: Y0=0*07; break; case 0*15: Y0=0*08; break; case 0*17: Y0=0*09; break; default:break; /case 0*13: RELAY=1; break; / case 0*14: RELAY=1; break; / case 0*51: RELAY=0

36、; break; tabM = IR2;M = (M+1)%4; beep(); E*0 = 1; char keyscan()char temp,key;KEY_PORT = 0*7f;temp = KEY_PORT;temp = KEY_PORT & 0*0f;if(temp != 0*0f)delayk();if(temp != 0*0f)temp = KEY_PORT;switch(temp)case 0*7e: key = A;break;/Acase 0*7d: key = B;break;/Bcase 0*7b: key = C;break;/Ccase 0*77: key =

37、D;break;/Dwhile(temp != 0*0f)temp = KEY_PORT & 0*0f;P1 = key;return key;KEY_PORT = 0*bf;temp = KEY_PORT;temp = KEY_PORT & 0*0f;if(temp != 0*0f)delayk();if(temp != 0*0f)temp = KEY_PORT;switch(temp)case 0*be: key = 3;break;/3case 0*bd: key = 6;break;/6case 0*bb: key = 9;break;/9case 0*b7: key = *;brea

38、k;/*while(temp != 0*0f)temp = KEY_PORT & 0*0f;/P1 = key;return key;KEY_PORT = 0*df;temp = KEY_PORT;temp = KEY_PORT & 0*0f;if(temp != 0*0f)delayk();if(temp != 0*0f)temp = KEY_PORT;switch(temp)case 0*de: key = 2;break;/2case 0*dd: key = 5;break;/5case 0*db: key = 8;break;/8case 0*d7: key = 0;break;/0w

39、hile(temp != 0*0f)temp = KEY_PORT & 0*0f;/P1 = key;return key;KEY_PORT = 0*ef;temp = KEY_PORT;temp = KEY_PORT & 0*0f;if(temp != 0*0f)delayk();if(temp != 0*0f)temp = KEY_PORT;switch(temp)case 0*ee: key = 1;break;/1case 0*ed: key = 4;break;/4case 0*eb: key = 7;break;/7case 0*e7: key = *;break;/*while(

40、temp != 0*0f)temp = KEY_PORT & 0*0f;/P1 = key;return key; /beep=1;return KEY_NULL;/返回一個(gè)與鍵盤不相關(guān)的值void delayk()int *,y;for(*=0; *10; *+)for(y=0; y1000; y+);附錄2:*include /包含單片機(jī)存放器的頭文件*include /包含_nop_()函數(shù)定義的頭文件sbit IR=P32; /將IR位定義為P3.2引腳sbit RS=P20; /存放器選擇位,將RS位定義為P2.0引腳sbit RW=P21; /讀寫選擇位,將RW位定義為P2.1引腳

41、sbit E=P22; /使能信號(hào)位,將E位定義為P2.2引腳sbit BF=P07; /忙碌標(biāo)志位,將BF位定義為P0.7引腳sbit BEEP = P36; /蜂鳴器控制端口P36 unsigned char flag;unsigned char code string = HELLO WORLD; unsigned char a4; /儲(chǔ)存用戶碼、用戶反碼與鍵數(shù)據(jù)碼、鍵數(shù)據(jù)反碼unsigned int LowTime,HighTime; /儲(chǔ)存高、低電平的寬度 /*函數(shù)功能:延時(shí)1ms*/void delay1ms() unsigned char i,j; for(i=0;i10;i+)

42、 for(j=0;j33;j+) ; /*函數(shù)功能:延時(shí)假設(shè)干毫秒*/ void delay(unsigned char n) unsigned char i;for(i=0;in;i+) delay1ms(); void beep()/蜂鳴器響一聲函數(shù) unsigned char i; for (i=0;i100;i+) delay1ms(); BEEP=!BEEP; /BEEP取反 BEEP=1; /關(guān)閉蜂鳴器 delay(250); /延時(shí) /*函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)返回值:result。result=1,忙碌;result=0,不忙*/ unsigned char BusyT

43、est(void) bit result;RS=0; /根據(jù)規(guī)定,RS為低電平,RW為高電平時(shí),可以讀狀態(tài) RW=1; E=1; /E=1,才允許讀寫 _nop_(); /空操作 _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反響時(shí)間 result=BF; /將忙碌標(biāo)志電平賦給resultE=0; return result; /*函數(shù)功能:將模式設(shè)置指令或顯示地址寫入液晶模塊*/void WriteInstruction (unsigned char dictate) while(BusyTest()=1); /如果忙就等待 RS=0; /根據(jù)規(guī)定,RS和

44、R/W同時(shí)為低電平時(shí),可以寫入指令 RW=0; E=0; /E置低電平(根據(jù)表8-6,寫指令時(shí),E為高脈沖 _nop_(); _nop_(); /空操作兩個(gè)機(jī)器周期,給硬件反響時(shí)間 P0=dictate; /將數(shù)據(jù)送入P0口,即寫入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反響時(shí)間 E=1; /E置高電平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反響時(shí)間 E=0; /當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開場(chǎng) /*函數(shù)功能:指定字符顯示的實(shí)際地址*/ void Wri

45、teAddress(unsigned char *) WriteInstruction(*|0*80); /顯示位置確實(shí)定方法規(guī)定為80H+地址碼* /*函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII碼)寫入液晶模塊*/ void WriteData(unsigned char y) while(BusyTest()=1); RS=1; /RS為高電平,RW為低電平時(shí),可以寫入數(shù)據(jù) RW=0; E=0; /E置低電平(根據(jù)表8-6,寫指令時(shí),E為高脈沖, / 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置0 P0=y; /將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊 _nop_(); _nop_(); _nop_(

46、); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反響時(shí)間 E=1; /E置高電平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反響時(shí)間 E=0; /當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開場(chǎng)執(zhí)行命令 /*函數(shù)功能:對(duì)LCD的顯示模式進(jìn)展初始化設(shè)置*/void LcdInitiate(void) delay(15); /延時(shí)15ms,首次寫指令時(shí)應(yīng)給LCD一段較長(zhǎng)的反響時(shí)間 WriteInstruction(0*38); /顯示模式設(shè)置:162顯示,57點(diǎn)陣8位數(shù)據(jù)接口delay(5); /延時(shí)5msWriteInstruction(0*

47、38);delay(5);WriteInstruction(0*38);delay(5);WriteInstruction(0*0C); /顯示模式設(shè)置:顯示開,有光標(biāo),光標(biāo)閃爍delay(5);WriteInstruction(0*06); /顯示模式設(shè)置:光標(biāo)右移,字符不移delay(5);WriteInstruction(0*01); /清屏幕指令,將以前的顯示容去除delay(5); /*函數(shù)功能:對(duì)4個(gè)字節(jié)的用戶碼和鍵數(shù)據(jù)碼進(jìn)展解碼說明:解碼正確,返回1,否則返回0*/bit DeCode(void) unsigned char i,j;unsigned char temp; /儲(chǔ)存解碼出的數(shù)據(jù)for(i=0;i4;i+) /連續(xù)讀取4個(gè)用戶碼和鍵數(shù)據(jù)碼 for(j=0;j1; /temp中的各數(shù)據(jù)位右移一位 TH0=0; /定時(shí)器清0 TL0=0; /定時(shí)器清0 TR0=1; /開啟定時(shí)器T0 while(IR=0) /如果是低電平就等待 TR0=0; /關(guān)閉定時(shí)器T0 LowTime=TH0*256+TL0; /保存低電平寬度 TH0=0; /定時(shí)器清0 TL

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論