片機(jī)設(shè)計的紅外線遙控器電路圖及工作原理_第1頁
片機(jī)設(shè)計的紅外線遙控器電路圖及工作原理_第2頁
片機(jī)設(shè)計的紅外線遙控器電路圖及工作原理_第3頁
片機(jī)設(shè)計的紅外線遙控器電路圖及工作原理_第4頁
片機(jī)設(shè)計的紅外線遙控器電路圖及工作原理_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、51單片機(jī)設(shè)計的紅外線遙控器電路圖及工作原理 你家里是否有一個電視機(jī)遙控器或者空調(diào)機(jī)遙控器呢?你是否也想讓它遙控其他的電器甚至讓它遙控您的電腦呢?那好,跟我一起做這個“紅外遙控解碼器”。 該小制作所需要的元件很少:單片機(jī)TA89C2051一只,RS232接口電平與TTL電平轉(zhuǎn)換心片MAX232CPE 一只,紅外接收管一只,晶振11.0592MHz,電解電容10uF4只,10uF一只,電阻1K1個,300歐姆左右1個,瓷片電容30P2個。發(fā)光二極管8個。價錢不足20元。電路圖及原理: 主控制單元是單片機(jī)AT89C2051,中斷口INT0跟紅外接受管U1相連,接收紅外信號的脈沖,8個發(fā)光二極管作為

2、顯示解碼輸出(也可以用來擴(kuò)展接其他控制電路),U3是跟電腦串行口RS232相連時的電平轉(zhuǎn)換心片,9、10腳分別與單片機(jī)的1、2腳相連,(1腳為串行接收,2腳為串行發(fā)送),MAX232CPE的7、8腳分別接電腦串行口的2(接收)腳、3(發(fā)送腳)。晶振采用11.0592MHz,這樣才能使得通訊的波特率達(dá)到9600b/s,電腦一般默認(rèn)值是9600b/s、8位數(shù)據(jù)位、1位停止位、無校驗位。 電路就這么簡單了,現(xiàn)在分析具體的編程過程吧。 如圖所示,panasonic遙控器的波形是這樣的(經(jīng)過反復(fù)測試的結(jié)果)。 開始位是以3.6ms低電平然后是3.6ms高電平,然后數(shù)據(jù)表示形式是0.9ms低電平0.9ms

3、高電平周期為1.8ms表示“0”, 0.9ms低電平 2.4ms高電平周期為3.3ms表示“1”,編寫程序時,以大于3.4ms小于3.8ms高電平為起始位,以大于2.2ms小于2.7ms高電平表示“1”,大于0.84ms小于1.11ms高電平表示“0”。因此,我們主要用單片機(jī)測量高電平的長短來確定是“1”還是“0”即可。定時器0的工作方式設(shè)置為方式1:mov tmod,#09h,這樣設(shè)置定時器0即是把GATE置1,16位計數(shù)器,最大計數(shù)值為2的16次方個機(jī)器周期,此方式由外中斷INT0控制,即INT0為高時才允許計數(shù)器計數(shù)。比如: jnb p3.2,$jb p3.2,$clr tr0這3條指令

4、就可以測量一個高電平,接下來讀取計數(shù)值TH0,TL0就可以分辨是起始位還是“1”或“0”。在確定碼表之前,您可以使用P0口的8個發(fā)光二極管來顯示編碼,16位編碼分兩次顯示:mov p0,keydataacall delay_1s ;/1ms延時子程序mov p0,keydata+1ljmp main根據(jù)P0相繼的兩次顯示的編碼,記錄每個按鍵的編碼,形成編碼表,即遙控器編碼的解碼完畢。碼表確定之后,以后接收到遙控器的編碼之后,就與碼表比較,找到匹配的碼項,并把該碼項對應(yīng)的順序號輸出到P0口,同時也把順序號向串行口輸出到電腦,電腦接收該數(shù)據(jù)后由串口軟件決定如何處理。 程序不長,下面是完整的程序和注

5、釋:(先看流程圖) keydata equ 30h ;/該地址和31H地址用來存放遙控器按鍵編碼。org 00hmain: mov keydata,#0 ;/ 清零 mov tmod ,#09h ;/設(shè)置定時0方式1,GATE=1 mov r7,#0 ;/計數(shù)器,用來計數(shù)是否滿8位 mov r6,#0 ;/計數(shù)器,用來計數(shù)是否滿2字節(jié)(解16位編碼) jb p3.2,$ ;/是否為低電平again: ;/如果為低,繼續(xù)往下面執(zhí)行 mov tl0,#0 ;/清零TL0 mov th0,#0 ;/清零TH0 setb tr0 ;/開啟定時器0 jnb p3.2,$ ;/等待高電平到來 jb p3.

6、2,$ ;/高電平到來,此時開始計數(shù) clr tr0 ;/高電平結(jié)束,停止計數(shù) mov a,th0 ;/讀取th0 值,TL0忽略不計 clr c ;/ subb a,#12 ;/ jc again ;/th014則大于3.8ms jc again ;/大于3.8ms,從新再檢測nextbit: ;/起始位找到了,然后下一位 mov tl0,#0 ;/ mov th0,#0 ;/ setb tr0 ;/啟動定時器 jnb p3.2,$ ;/等待高電平 jb p3.2,$ ;/高電平到來,此時開始計數(shù) clr tr0 ;/高電平結(jié)束,停止計數(shù) mov a,th0 ;/讀取計數(shù)值,TL0忽略不計

7、clr c ;/ subb a,#8 ;/th0和8比較 jc next ;/若 2.7ms,則放棄,從新檢測 mov a,keydata ;/ 符合大于2.2ms 小于2.7ms,即為“1” setb c ;/C = 1 rrc a ;/把1移位進(jìn)A mov keydata,a ;/保存 inc r7 ;/計數(shù)器加1 cjne r7,#8,nextbit ;/是否滿8位 inc r6 ;/計數(shù)加1 cjne r6,#2,last8 ;/是否滿兩字節(jié) sjmp seach ;/不滿兩字節(jié),再新采集last8: ;/滿1字節(jié),再接下來第二字節(jié) mov keydata+1,a ;/把第一字節(jié)編碼數(shù)

8、據(jù)保存到31h里 mov r7,#0 ;/計數(shù)器R7清零 sjmp nextbit ;/繼續(xù)采集數(shù)據(jù)next: ;/小于2.2ms時轉(zhuǎn)到這里 mov a,th0 ;/讀取計數(shù)值TH0 swap a ;/高4位與低4位對換 mov r1,a ;/保存到R1 anl tl0,#0f0h ;/取TL0高4位,低4位忽略不計 mov a,tl0 ;/ clr c ;/ rrc a ;/ rrc a ;/ rrc a ;/ rrc a ;/ add a,r1 ;/ mov r1,a ;/ subb a,#30 ;/以上幾行是把TH0的低4位和TL0的高4位合并為1字節(jié)作為計數(shù)值 jc nextbit ;

9、 /判斷是否 64表示采樣值 1.11ms 放棄 mov a,keydata ;/否則 ,符合位“0” clr c ;/C = 0 rrc a ;/把零右移進(jìn)A mov keydata,a ;/保存 inc r7 ;/計數(shù)器加1 cjne r7,#8,nextbit ;/是否滿8位 inc r6 ;/計數(shù)器加1 cjne r6,#2,last_8 ;/是第一字節(jié)已經(jīng)滿 sjmp seach ;/last_8: ;/如果為第二字節(jié) mov keydata+1,a ;/則保存第一字節(jié)到31h mov r7,#0 ;/清零R7 sjmp nextbit ;/seach: ;/匹配按鍵編碼 mov r

10、0,#-2 ;/按鍵編碼字節(jié)個數(shù)計數(shù)器 mov r1,#-1 ;/按鍵順序計數(shù)器seach1: ;/ inc r0 ;/seach2: ;/ inc r0 ;/ inc r1 ;/ cjne r1,#29,compare ;/是否R1=29 sjmp exit0 ;/compare: ;/開始匹配 mov a,r0 ;/ mov dptr,#keycode ;/地址指針指向碼表首址 movc a,a+dptr ;/取碼 cjne a,keydata,seach1 ;/比較 inc r0 ;/R0+1,再比較下一字節(jié)(每個按鍵編碼為2字節(jié)) mov a,r0 ;/ ;mov dptr,#keyc

11、ode ;/ movc a,a+dptr ;/比較 cjne a,keydata+1,seach2 ;/是否匹配,不匹配則繼續(xù)跟下一字節(jié)比較 mov p1,r1 ;/如果匹配,把按鍵順序號輸出到p1send: ;/ mov tmod,#20h ; /設(shè)置timer 1,mode 2 mov tl1,#0fdh ;/設(shè)置定時器初值 mov th1,#0fdh ;/ mov scon,#01010000b;/以上設(shè)置,即設(shè)置串口波特率系數(shù)為:9600,8,1,0 setb tr1 ;/啟動定時器1loop_s: ;/ mov sbuf,r1 ;/把R1(按鍵順序號)輸出到串口 jnb ti,$ ;

12、/等待是否發(fā)送完畢 clr ti ;/發(fā)送完畢,清零TIexit0: ;/ljmp main ;/循環(huán)keycode: ;/每兩字節(jié)代表一個按鍵的編碼db 11111000b,00000000b, 11111100b,00000000b, 11111001b,11000000bdb 11111100b,11000000b, 11111010b,00000000b, 11111010b,00100000bdb 11111010b,01000000b, 11111010b,01100000b, 11111010b,10000000bdb 11111010b,10100000b, 11111010b

13、,11000000b, 11111010b,11100000bdb 11111011b,00000000b, 11111011b,00100000b, 11111011b,01000000bdb 11111011b,01100000b, 11111111b,01100000b, 11111111b,10100000bdb 10001100b,10001110b, 10001101b,11101110b, 10001100b,10101110bdb 10001101b,11001110b, 11111000b,11100000b, 11111100b,10000000bdb 11111100b,01000000b, 11111001b,10100000b, 11111100b,10100000bdb 11111100b,01100000b end-各種遙控器編碼不同,如果你采用的是其他遙控器,修改幾個參數(shù)即可(當(dāng)然按鍵的編碼表肯定不同了),即計數(shù)器的值不同,不過有的遙控器有機(jī)器碼(機(jī)器碼每個按鍵都是一樣的),此時可以跳過機(jī)器碼的采集。最后有一點想提一下的是,剛開始不知道遙控器的編碼是比較麻煩的,筆者在“雙龍

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論