您的位置:控制工程论坛网论坛 » 教程与手册 » 红外遥控RC5码解码程序

xilinxue

xilinxue   |   当前状态:在线

总积分:16186  2025年可用积分:0

注册时间: 2008-06-26

最后登录时间: 2020-03-22

空间 发短消息加为好友

红外遥控RC5码解码程序

xilinxue  发表于 2008/11/5 19:27:28      1120 查看 2 回复  [上一主题]  [下一主题]

手机阅读

/*******************************************
* 程序描述:红外遥控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才可以.
---------------------------------------------
*/

1楼 0 0 回复
  • xmin111

    xmin111   |   当前状态:离线

    总积分:496  2025年可用积分:0

    注册时间: 2008-08-29

    最后登录时间: 2008-10-27

    空间 发短消息加为好友

    xmin111   发表于 2008/9/17 14:59:52

    2楼 回复本楼

    引用 xmin111 2008/9/17 14:59:52 发表于2楼的内容

  • xilinxue

    xilinxue   |   当前状态:在线

    总积分:16186  2025年可用积分:0

    注册时间: 2008-06-26

    最后登录时间: 2020-03-22

    空间 发短消息加为好友

    xilinxue   发表于 2008/11/5 19:27:28

       大家有什么问题可以拿出来讨论下,我很愿意和大家一起交流讨论的,希望大家一起进步,这个程序还不是很完善,请高手多多指点
    3楼 回复本楼

    引用 xilinxue 2008/11/5 19:27:28 发表于3楼的内容

总共 , 当前 /