/******************************************* * 程序描述:红外遥控RC5码解码程序,经串口发送 * 目标cpu:lpc932 * 晶振:11.0592M * 硬件描述:一体化接收头接P20.指示LED接P26 * 编译器:KEIL 7.05 * 日期:2005/9/24 * 作者:刘玉宏(liu1234) *******************************************/ #i nclude <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才可以. ---------------------------------------------*/ |
文章评论(0条评论)
登录后参与讨论