最简单的51单片机红外遥控解码程序

时间:2012-03-28来源:网络

用单片机进行红外遥控解码,对大多数初学者来说是很麻烦的一个问题。下面介绍本人自编的红外遥控解码的C51程序,自认为是可能是史上最简的。此程序是针对uPD6121系列的遥控器的取码程序,解码值在Im[2]中,当IrOK=1时解码有效。

  /* 51单片机红外遥控解码程序 */

  /* 适用uPD6121系列 */

  #include

  #define DIGPORT P2

  #define WORDPORT P0

  unsigned char code LED_num[]={0x3f,0x18,0x76,0x7c,0x59,0x6d,0x6f,0x38,0x7f,0x7d};

  #define Imax 14000 //此处为晶振为11.0592时的取值,

  #define Imin 8000 //如用其它频率的晶振时,

  #define Inum 1450 //要改变相应的取值。

  unsigned char Im[]={0x00,0x00,0x00,0x00};

  unsigned long m,Tc;

  unsigned char i,IrOK;

  void DelayMy(unsigned int t){

  while(--t);

  }

  void Display_LED(unsigned long num)

  {

  unsigned int ii;

  unsigned int jj=0;

  unsigned long aa,bb;

  unsigned int xx[8]={0,0,0,0,0,0,0,0};

  do {

  bb=num/10;

  aa=num-bb*10;

  xx[jj]=aa;

  num=bb;jj++;

  }

  while(num>0);

  DIGPORT=0x80;

  for(ii=0;ii8;ii++) {

  WORDPORT=LED_num[xx[ii]];

  DelayMy(60);

  DIGPORT=DIGPORT>>1;

  };

  WORDPORT=0;

  }

  //外部中断解码程序

  void intersvr1(void) interrupt 2 using 1

  {

  Tc=TH0*256+TL0; //提取中断时间间隔时长

  TH0=0; TL0=0; //定时中断重新置零

  if((Tc>Imin)(Tc

  if(Tc>Inum) Im[m/8]=Im[m/8]>>1|0x80; else Im[m/8]=Im[m/8]>>1; //取码

  if(m==32) if((Im[2]|0x01)==~Im[3]) IrOK=1; else IrOK=0; //取码完成后判断读码是否正确

  m++; //准备读下一码

  }

  /*演示主程序*/

  void

1 2

关键词: 51单片机 红外遥控 解码程序

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版