51紅外遙控解碼實(shí)例分析-技術(shù)方案_第1頁(yè)
51紅外遙控解碼實(shí)例分析-技術(shù)方案_第2頁(yè)
51紅外遙控解碼實(shí)例分析-技術(shù)方案_第3頁(yè)
51紅外遙控解碼實(shí)例分析-技術(shù)方案_第4頁(yè)
51紅外遙控解碼實(shí)例分析-技術(shù)方案_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

精品文檔-下載后可編輯紅外遙控解碼實(shí)例分析-技術(shù)方案

 紅外遙控在生產(chǎn)和生活中應(yīng)用越來(lái)越廣泛,不同的紅外遙控芯片有不同的發(fā)碼協(xié)議,但一般都是由引導(dǎo)碼,系統(tǒng)碼,鍵碼三部分組成.引導(dǎo)碼是告訴接收機(jī)準(zhǔn)備接收紅外遙控碼.系統(tǒng)碼是識(shí)別碼,不同的遙控芯片有不同的誤別碼,以免搞錯(cuò).

遙控器上不同的按鍵有不同的鍵碼,系統(tǒng)碼和鍵碼都是16位碼,8位正碼,8位反碼.如SC6122的系統(tǒng)碼是FF00,FF和00互為反碼,鍵碼1為EF10也是互為反碼.

SC6122的引導(dǎo)碼為低電平為9000微秒,高電平為4500微秒.當(dāng)然高電平不可能為9000微秒,在8000微秒到10000微秒都看作是正常范圍,低電平在4000-5000之間都看作是正常范圍.引導(dǎo)碼后的32位編碼(16位系統(tǒng)碼和16位鍵碼)不管高低電平,載波時(shí)間都是560微秒,但低電平持續(xù)時(shí)間是1125微秒,高電平持續(xù)時(shí)間是2250微秒,所以低電平除去載波時(shí)間大約是560微秒,高電平除去載波時(shí)間大約是1680微秒.低電平也有一個(gè)波動(dòng)范圍,在400-700之間都看作是正常的,具體多少可以通過(guò)示波器測(cè)量出來(lái).高電平也有一個(gè)波動(dòng)范圍,在400-2000之間都看作是正常的,具體多少也是根據(jù)經(jīng)驗(yàn).當(dāng)然范圍越寬,捕捉紅外線的范圍也越寬,越.在捕捉到有高低電平之間,在560-1680之間取一個(gè)中間值1120微秒,認(rèn)為小于1120微秒是低電平,大于1120微秒是高電平.

下面有兩個(gè)經(jīng)過(guò)實(shí)踐能在實(shí)驗(yàn)板上顯示鍵碼的程序,一個(gè)是匯編寫(xiě)的,一個(gè)是用C寫(xiě)的,與大家一起探討遙控器.

以下程序能在LCD上顯示系統(tǒng)碼和鍵碼,按不同的按鍵,系統(tǒng)碼不變,變的是鍵碼.有不懂的地方可以在留言本上留言.

RSEQUP2.5                ;這幾個(gè)是LCD引腳.

RWEQUP2.6 

EEQUP2.7 

IRREQUP3.3               ;紅外接收的輸出接P3.3.

BUFEQU30H;30H-33H保存解碼結(jié)果

;=============================================

ORG0000H

AJMPMAIN

;=============================================

ORG0030H

MAIN:

MOVSP,#70H;堆棧指針設(shè)到70H的地方

ACALLINIT_LCD                                   ;初始化LCD

MOVR7,#10

ACALLDELAY_MS

MOVDPTR,#MSG1

CALLDISPLAY_LINE1                       ;在行顯示Test8:IRReader

MOVDPTR,#MSG2

CALLDISPLAY_LINE2                       ;在第二行顯示  

MAIN_LOOP:

JBIRR,$;等待接收頭信號(hào)為低

ACALLGET_LOW;測(cè)量引導(dǎo)脈沖低電平

CLRC

MOVA,R7

SUBBA,#(8000/50);SC6122的引導(dǎo)脈沖低電平為9000US,我們只要測(cè)到低電平的值在8000-10000US范圍內(nèi)就認(rèn)為合格的.

JCMAIN_LOOP;如果小于8000US,不對(duì),重新等待接收

CLRC

MOVA,R7

SUBBA,#(10000/50)

JNCMAIN_LOOP

ACALLGET_HIGH;測(cè)量引導(dǎo)脈沖高電平

CLRC

MOVA,R7

SUBBA,#(4000/50)

JCMAIN_LOOP                   ;如果小于4000US,不對(duì),重新等待接收

CLRC

MOVA,R7

SUBBA,#(5000/50)

JNCMAIN_LOOP                       ;如果大于5000US,不對(duì),重新等待接收

MOVR0,#BUF;

MOVR5,#8;SC6122發(fā)的碼有32位,我們用4個(gè)字節(jié)來(lái)存放,每個(gè)字節(jié)有8位

IR_NEXT:

CALLGET_LOW

CLRC

MOVA,R7

SUBBA,#(300/50);300US

JCMAIN_LOOP                               ;低電平小于300微秒認(rèn)為不對(duì),重新接收

CLRC

MOVA,R7

SUBBA,#(800/50);800US

JNCMAIN_LOOP                               ;低電平大于800微秒認(rèn)為不對(duì),重新接收

ACALLGET_HIGH

CLRC

MOVA,R7

SUBBA,#(300/50);300US

JCMAIN_LOOP                               ;高電平小于300微秒認(rèn)為不對(duì),重新接收

CLRC

MOVA,R7

SUBBA,#(2000/50);2000US

JNCMAIN_LOOP                                    ;高電平大于2000微秒認(rèn)為不對(duì),重新接收

CLRC

MOVA,R7

SUBBA,#(1120/50);                           ;跟中間值1120進(jìn)行比較

RRCA

MOV@R0,A                                   ;通過(guò)CY移到間接地址R0中去

DJNZR5,IR_NEXT                                   ;8位移完了嗎

MOVR5,#8

INCR0

MOVA,R0

XRLA,#(BUF+4)

JNZIR_NEXT;如果不到4個(gè)字節(jié),接收下一個(gè)

MOVDPTR,#MSG_6122

ACALLDISPLAY_LINE1;顯示格式名稱(chēng)

ACALLDISPLAY_IR_CODE;顯示碼

AJMPMAIN_LOOP

;============================================ 

MSG1:DB"Test8:IRReader"

MSG2:DB""

MSG_6122:DB"Format:SC6122"

;============================================

;轉(zhuǎn)為ASCII碼在LCD在顯示

TO_ASCII:

CJNEA,#0AH,TO_ASCII_1

TO_ASCII_1:

JCTO_ASCII_2;小于10

ADDA,#(A-10)

RET

TO_ASCII_2:

ADDA,#0

RET

;============================================

DISPLAY_IR_CODE:

MOVA,#0C0H;顯示在第二行

ACALLSEND_COMMAND_BYTE;設(shè)置DDRAM地址

MOVR0,#BUF

DISPLAY_IR_CODE_NEXT:

MOVA,@R0

SWAPA

ANLA,#0FH                           ;分離出高字節(jié)

ACALLTO_ASCII                               ;轉(zhuǎn)為ASCII碼

ACALLSEND_DATA_BYTE                            ;顯示 

MOVA,@R0

ANLA,#0FH                           ;分離出低字節(jié)

ACALLTO_ASCII                                ;轉(zhuǎn)為ASCII碼

ACALLSEND_DATA_BYTE                           ;顯示 

MOVA,#

ACALLSEND_DATA_BYTE                               ;顯示空格

INCR0

MOVA,R0

XRLA,#(BUF+4)

JNZDISPLAY_IR_CODE_NEXT

MOVR0,#8;第2行共有20個(gè)字符,前面顯示用了12個(gè),再用8個(gè)空格填滿(mǎn)

DISPLAY_IR_CODE_B:

MOVA,#

ACALLSEND_DATA_BYTE

DJNZR0,DISPLAY_IR_CODE_B

RET

;============================================

;測(cè)量低電平時(shí)間,50US采樣,R7加1,比如低電平時(shí)間為9000US,測(cè)得R7的結(jié)果為180(0B4H)

;OUTPUT:R7

GET_LOW:

MOVR7,#00H

GET_LOW_NEXT:

MOVR6,#20;在晶振為11.0592M時(shí),延50US需要46個(gè)機(jī)器周期,

DJNZR6,$;這條指令執(zhí)行需要2個(gè)機(jī)器周期

JBIRR,GET_LOW_RTN;接收頭為高電平,結(jié)束測(cè)量

INCR7

MOVA,R7

JNZGET_LOW_NEXT;看R7是否有溢出

GET_LOW_RTN:

RET

;============================================

;測(cè)量高電平時(shí)間,50US采樣,R7加1,比如高電平時(shí)間為4500US,測(cè)得R7的結(jié)果為90

;OUTPUT:R7

GET_HIGH:

MOVR7,#00H

GET_HIGH_NEXT:

MOVR6,#20;在晶振為11.0592M時(shí),延50US需要46個(gè)機(jī)器周期,

DJNZR6,$;這條指令執(zhí)行需要2個(gè)機(jī)器周期

JNBIRR,GET_HIGH_RTN;接收頭為低電平,結(jié)束測(cè)量

INCR7

MOVA,R7

JNZGET_HIGH_NEXT;看R7是否有溢出

GET_HIGH_RTN:

RET

;============================================

DELAY_MS:

MOVR6,#250

DELAY_MS_NEXT:

NOP

NOP

DJNZR6,DELAY_MS_NEXT

DJNZR7,DELAY_MS

RET

;============================================ 

;INPUT:R7

DELAY:

DJNZR7,$

RET

;============================================

;向LCD寫(xiě)一個(gè)命令字節(jié)

;INPUT:ACC

SEND_COMMAND_BYTE:

CLRRS

CLRRW

MOVP0,A

SETBE

NOP

NOP

NOP

NOP

NOP

NOP

CLRE

MOVR7,#100

ACALLDELAY

RET

;===============================================

;向LCD寫(xiě)一個(gè)數(shù)據(jù)字節(jié)

;INPUT:ACC

SEND_DATA_BYTE:

SETBRS

CLRRW

MOVP0,A

SETBE

NOP

NOP

NOP

NOP

NOP

NOP

CLRE

MOVR7,#100

ACALLDELAY

RET

;======================================================

;初始化LCD

INIT_LCD:

MOVA,#30H

ACALLSEND_COMMAND_BYTE

ACALLSEND_COMMAND_BYTE

ACALLSEND_COMMAND_BYTE

MOVA,#38H;設(shè)置工作方式

ACALLSEND_COMMAND_BYTE

MOVA,#0CH;顯示狀態(tài)設(shè)置

ACALLSEND_COMMAND_BYTE

MOVA,#01H;清屏

ACALLSEND_COMMAND_BYTE

MOVA,#06H;輸入方式設(shè)置

ACALLSEND_COMMAND_BYTE

RET

;=======================================================

;在行顯示

;INPUT:DPTR指向要顯示的內(nèi)容

DISPLAY_LINE1:

MOVA,#080H

DISPLAY_LINE1_A:

ACALLSEND_COMMAND_BYTE;設(shè)置DDRAM地址

MOVR6,#20

DISPLAY_LINE1_NEXT:

CLRA

MOVCA,@A+DPTR

ACALLSEND_DATA_BYTE

INCDPTR

DJNZR6,DISPLAY_LINE1_NEXT

MOVR7,#100

ACALLDELAY

RET

;=======================================================

;在第二行顯示

;INPUT:DPTR指向要顯示的內(nèi)容

DISPLAY_LINE2:

MOVA,#0C0H

AJMPDISPLAY_LINE1_A

;=======================================================

END

下面是一個(gè)用C寫(xiě)的遙控器程序.能在數(shù)碼管上顯示鍵碼.

#include<reg52.h>

#definec(x)(x*110592/120000) 

sbitIr_Pin=P3^3;

unsignedcharcodeLed_Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,

0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};                       //共陽(yáng)極數(shù)碼顯示碼0-F.

unsignedcharcodeLed_Sel[]={0xe,0xd,0xb,0x7};

unsignedcharLed_Buf[4];//顯示緩沖區(qū)

charLed_Index;                  //位選         

unsignedcharIr_Buf[4];//用于保存解碼結(jié)果

//==============================================================

//數(shù)碼管掃描

timer0()interrupt1using1

{

TL0=65536-1000;

TH0=(65536-1000)/256;//定時(shí)器0設(shè)定約1000us中斷,用于數(shù)碼管掃描

P0=0xff;

P2=Led_Sel[Led_Index];                           //位選

P0=Led_Tab[Led_Buf[Led_Index]];                   //段選

if(++Led_Index>3)Led_Index=0;                   //四個(gè)掃描完了,到個(gè)數(shù)碼管

}

//==============================================================

unsignedintIr_Get_Low()

{

TL1=0;

TH1=0;

TR1=1;

while(!Ir_Pin&&(TH1&0x80)==0);                

TR1=0;           

returnTH1*256+TL1;

}

//======

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論