程序描述:红外遥控RC5码解码程序,经串口发送

源代码在线查看: [红外传输]红外遥控rc5码解码程序.txt

软件大小: 3 K
上传用户: hqbbsw
关键词: RC5 程序 串口发送 红外遥控
下载地址: 免注册下载 普通下载 VIP

相关代码

				 [红外传输]红外遥控RC5码解码程序
				刘玉宏 发表于 2005-9-24 22:13:00  
				/*******************************************
				* 程序描述:红外遥控RC5码解码程序,经串口发送
				* 目标cpu:lpc932
				* 晶振:11.0592M
				* 硬件描述:一体化接收头接P20.指示LED接P26
				* 编译器:KEIL 7.05
				* 日期:2005/9/24
				* 作者:刘玉宏(liu1234)
				*******************************************/
				
				#include 
				
				// 波特率发生器的初值(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				}
				
				
				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才可以.
				---------------------------------------------
				*/
							

相关资源