首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

红外的取值有关问题

2012-02-29 
红外的取值问题。// 解码值在Im[2]中,当IrOK1时解码有效。/* 51单片机红外遥控解码程序 *///用遥控器对准红

红外的取值问题。
// 解码值在Im[2]中,当IrOK=1时解码有效。 
/* 51单片机红外遥控解码程序 */
//用遥控器对准红外接收头,按下遥控器按键,在数码管前两位上就会显示对应按键的编码

#include <reg52.h>
#define uchar unsigned char 
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar f;

#define Imax 14000 //此处为晶振为11.0592时的取值, 如用其它频率的晶振时,要改变相应的取值。
#define Imin 8000 //为引导码预高的最小值

#define Inum1 1450  
#define Inum2 700 
#define Inum3 3000 //以上三行怎么得到的 1450 750 3000的呢?

unsigned char Im[4]={0x00,0x00,0x00,0x00};
uchar show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;


void delay(uchar i)
{
  uchar j,k; 
  for(j=i;j>0;j--)
  for(k=125;k>0;k--);
}

void display()
{
  dula=0;
  P0=table[show[0]];
  dula=1;
  dula=0;
   
  wela=0;
  P0=0xfe;
  wela=1;
  wela=0;
  delay(5);
   
  P0=table[show[1]];
  dula=1;
  dula=0;
   
  P0=0xfd;
  wela=1;
  wela=0;
  delay(5);
}


//外部中断解码程序
void intersvr1(void) interrupt 2 using 1
{
 Tc=TH0*256+TL0; //提取中断时间间隔时长


  TH0=0; 
  TL0=0; //定时中断重新置零
 if((Tc>Imin)&&(Tc<Imax))  
  { 
  m=0;
  f=1;
  return;
  } //找到启始码
  if(f==1)
  {
  if(Tc>Inum1&&Tc<Inum3) //这行是什么意思呢,哪里是取0和1 啊  
  {
  Im[m/8]=Im[m/8]>>1|0x80; m++; 
  }
  if(Tc>Inum2&&Tc<Inum1) 
  {
  Im[m/8]=Im[m/8]>>1; m++; //取码
  }
  if(m==32) 
  {
  m=0;  
  f=0;
  if(Im[2]==~Im[3]) 
  {
  IrOK=1; 
  }
  else IrOK=0; //取码完成后判断读码是否正确
  }
  //准备读下一码
  }
 
}


/*演示主程序*/
void main(void)
{
  unsigned int a;
   
  m=0;
  f=0;
  EA=1;
 
  IT1=1;
  EX1=1;
 
  TMOD=0x11;  
  TH0=0;TL0=0;
  TR0=1;//ET0=1;

 while(1)
 {
 
  if(IrOK==1) 
  {
  show[1]=Im[2] & 0x0F; // 这两行是怎么的呢?
  show[0]=Im[2] >> 4;  
  IrOK=0;
   
  }
  for(a=100;a>0;a--)
  {
  display();
  }
 
 }
}问题如表示问号处。谁可以给我说说以脉宽为0. 56ms、周期为1. 12ms的组合表示二进制的“0”;以脉宽为1. 68ms、周期为2. 24ms的组合表示二进制的“1”。在程序那里可以看得到呢,?


#define Imin 8000 //为引导码预高的最小值

#define Inum1 1450  
#define Inum2 700 
#define Inum3 3000 //以上三行怎么得到的 1450 750 3000的呢?
谢谢啊

[解决办法]
红外遥控编码资料-磁动力网站
http://www.cdle.net/web/alldata/CDLE/cdle060001.htm
把这个看懂了应该就明白了。

热点排行