新聞中心

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

最簡(jiǎn)單的51單片機(jī)紅外遙控解碼程序

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

用單片機(jī)進(jìn)行解碼,對(duì)大多數(shù)初學(xué)者來(lái)說(shuō)是很麻煩的一個(gè)問(wèn)題。下面介紹本人自編的解碼的C51程序,自認(rèn)為是可能是史上最簡(jiǎn)的。此程序是針對(duì)uPD6121系列的遙控器的取碼程序,解碼值在Im[2]中,當(dāng)IrOK=1時(shí)解碼有效。

  /* */

  /* 適用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時(shí)的取值,

  #define Imin 8000 //如用其它頻率的晶振時(shí),

  #define Inum 1450 //要改變相應(yīng)的取值。

  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; //提取中斷時(shí)間間隔時(shí)長(zhǎng)

  TH0=0; TL0=0; //定時(shí)中斷重新置零

  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++; //準(zhǔn)備讀下一碼

  }

  /*演示主程序*/

  void

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

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


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


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


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


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


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

上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

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

關(guān)閉