2482|1

62

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

红外的取值问题。 [复制链接]

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

#include
#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       {
         m=0;
        f=1;
  return;
      }       //找到启始码
   if(f==1)
      {
        if(Tc>Inum1&&Tc     {
   Im[m/8]=Im[m/8]>>1|0x80; m++;
       }
      if(Tc>Inum2&&Tc         {
         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 把这个看懂了应该就明白了。  详情 回复 发表于 2010-3-22 14:35
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

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

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表