?? [紅外傳輸]紅外遙控rc5碼解碼程序.txt
字號:
[紅外傳輸]紅外遙控RC5碼解碼程序
劉玉宏 發表于 2005-9-24 22:13:00
/*******************************************
* 程序描述:紅外遙控RC5碼解碼程序,經串口發送
* 目標cpu:lpc932
* 晶振:11.0592M
* 硬件描述:一體化接收頭接P20.指示LED接P26
* 編譯器:KEIL 7.05
* 日期:2005/9/24
* 作者:劉玉宏(liu1234)
*******************************************/
#include <REG932.H>
// 波特率發生器的初值(115200波特率)XTAL 11.0592M
#define BRGR1_DATA 00
#define BRGR0_DATA 0x50
sbit WAY_0 = P2^0;
sbit LED_RECIEVE= P2^6;
unsigned char bdata buffer;//發往串口的緩沖器
sbit way0=buffer^0;
unsigned char irtype; //RC5一幀的各段的標志
unsigned char count; //紅外接收位寄存器
unsigned char end; //紅外一幀接收結束標志
void t0_service(void) interrupt 1 using 1
{
//第一次進入中斷,為定時1/4位的時間445us
//以后則定時一位時間1.778ms進入中斷
way0=~WAY_0; //一體化解碼后,有載頻的部分變為低電平
TH0=0xD9;//1.778ms
TL0=0x98;
//TH0=0xDb;//lg
//TL0=0xf8;
count++;
if((irtype==0)&&(count==3)) //起始碼部分2個1和翻轉位
{
TI=0;
SBUF=buffer;
count=0;
irtype=1;
buffer=0;
}
else if((irtype==1)&&(count==5)) //5位地址
{
TI=0;
SBUF=buffer;
count=0;
irtype=2;
buffer=0;
}
else if((irtype==2)&&(count==6)) //6位命令
{
TI=0;
SBUF=buffer;
count=0;
irtype=3;
buffer=0;
}
else if(irtype==3) //等最后半位結束,實際延時1位時間
{
TI=0;
count=0;
irtype=0;
buffer=0;
end=1;
TR0=0; //解碼結束,定時器停止
return;
}
buffer=buffer<<1;
}
void main(void)
{
P2M1=0X41; //P2口上拉設置(輸入輸出方向)
P2M2=0X40;
WAY_0=1; //輸入首先寫1
P1M1=0X00; //串口方向設置,目的同上
P1M2=0X00;
SCON=0x40;
//設置串口波特率:Fosc / ((BRGR1,BRGR0)+16)
BRGCON=0x00; // 關波特率發生器
BRGR1=BRGR1_DATA;
BRGR0=BRGR0_DATA;
BRGCON=0x03; // 打開串口波特率發生器,使用串口波特率發生器
TMOD|=0x01; //t0方式1
IEN0|=0x82; //允許T0中斷
IP0|=0X02; //高優先級
IP0H|=0X02;
while(1)
{
buffer=0;
irtype=0;
count=0;
end=0;
TH0=0xf6;//445us
TL0=0x63;//下幀第一段開始作準備
//TH0=0xf8;//lg
//TL0=0xfa;
while (WAY_0);//等待低電平,一幀的開始
TR0=1; //開始定時,紅外接收
LED_RECIEVE=0;//led點亮
while(!end); //等一幀解碼結束
LED_RECIEVE=1;//熄滅led
}
}
/*
實測數據
連按音量+ 06 00 10 06 00 10 06 00 10 06 00 10
放開后再按音量+ 07 00 10 07 00 10 07 00 10
06/07正是翻轉碼的作用
我家LG電視遙控器實測碼
待機=0c;圖像增強=13;靜音=0d;i/ii=23;音響增強=24
0-9=00-09;tv/av=28;菜單=3b;確定=25;節目=20/21;
音量=11/10;橙鍵=37;音響模式=16;綠鍵=26;光程眼=12;
圖像模式=0E;畫面比率=33;快速回看=32;睡眠關機=26;
節目清單=34;
-------------------------------------------
同維電視卡遙控器
-/--=0a;搜索=1e;微調=2b/2c;存儲=29;屏顯=0f;
自動搜索=26;對比度=1c/1d;色彩=14/15;
亮度=12/13;刪除=38;制式=2d;其余同上
-------------------------------------------
非常奇怪的是LG遙控器的晶振原來是3.645,我換為3.58
電視正常遙控,而我的程序無法正確解碼,定時時間要縮短大約
120us才可以.
---------------------------------------------
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -