新聞中心

EEPW首頁 > 模擬技術(shù) > 設(shè)計應用 > 最簡單的51單片機紅外遙控解碼程序

最簡單的51單片機紅外遙控解碼程序

作者: 時間:2012-03-28 來源:網(wǎng)絡(luò) 收藏

用單片機進行解碼,對大多數(shù)初學者來說是很麻煩的一個問題。下面介紹本人自編的解碼的C51程序,自認為是可能是史上最簡的。此程序是針對uPD6121系列的遙控器的取碼程序,解碼值在Im[2]中,當IrOK=1時解碼有效。

  /* */

  /* 適用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

紅外遙控器相關(guān)文章:紅外遙控器原理

萬能遙控器相關(guān)文章:萬能遙控器代碼


51單片機相關(guān)文章:51單片機教程


單片機相關(guān)文章:單片機教程


單片機相關(guān)文章:單片機視頻教程


單片機相關(guān)文章:單片機工作原理


晶振相關(guān)文章:晶振原理

上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉