在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

  • <dfn id="79stg"></dfn>
    <object id="79stg"><div id="79stg"><label id="79stg"></label></div></object>
    <ruby id="79stg"><dl id="79stg"><noscript id="79stg"></noscript></dl></ruby>

      新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于8952單片機的紅外解碼(TC9012F編碼)

      基于8952單片機的紅外解碼(TC9012F編碼)

      作者: 時間:2016-11-28 來源:網(wǎng)絡 收藏
      紅外操作免去了和機器接觸。第一是方便,第二也很自然的可以將用戶與管理著分離(使用功能在遙控上,調試功能在機器上)。所以免不了在自己的電子鐘設計中加入了紅外。加的多,學得也多嘛。

      雖然重點在后面,但是先上個程序

      本文引用地址:http://www.biyoush.com/article/201611/323082.htm

      參考總結后,第一次參考歸納出源程序如下:

      #include
      #include
      #include
      ////////////////////////////////////////////////

      sbit ir=P3^2;//紅外接口標志

      ////////////////////////////////////////////

      unsigned char irtime;//電平寬度(以定時器來記錄)
      bit irpro_ok,irok;
      unsigned char ircord[4];
      unsigned char irdata[33];

      //////////////////////////////////////////////

      void ir_work(void);
      void ircordpro(void);

      //////////////////////////////////////////////////////////////////

      void tim0_isr (void) interrupt 1 using 1//定時器0中斷服務函數(shù)
      {
      irtime++;
      }

      ///////////////////////////////////////////////////////////////////////
      void ex0_isr (void) interrupt 0 using 0//外部中斷0服務函數(shù)
      {
      unsigned char i;
      bit startflag;

      if(startflag)
      {
      TR0=0;
      if(irtime<38&&irtime>=34)//引導碼判斷(9MS)
      i=0;
      TR0=1;
      //確認為引導碼,初始為新的32位編碼開始
      irdata[i]=irtime;//i=0是引導碼,后面是其余碼。每次記錄的是每次高低電平一起的脈沖寬度。
      //收到到一個碼算一次中斷,中斷結束前清零寬度計時
      irtime=0;
      i++;
      if(i==33)
      {
      irok=1;
      i=0;
      }
      }
      //第一次進入中斷開啟startflag,用于第二次進入中斷計時比對
      else
      {irtime=0;startflag=1;}

      }

      ////////////////////////////////////////////////////////////////////
      void TIM0init(void)//定時器0初始化
      {

      TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
      TH0=0;//reload value
      TL0=0;//initial value
      ET0=1;//開中斷
      TR0=1;
      }
      ///////////////////////////////////////////////////////////////////
      void EX0init(void)
      {
      IT0 = 1;
      EX0 = 1;
      EA = 1;
      }
      void ir_work(void)//紅外鍵值散轉程序
      {

      switch(ircord[2])//判斷第三個數(shù)碼值(數(shù)據(jù)碼,后面是反碼,前面是引導碼和地址碼)
      {
      case 0:P1=0x00;break;//1 LED顯示相應的按鍵值
      case 1:P1=0xfe;break;//2
      case 2:P1=0xfd;break;//3
      }


      上一頁 1 2 下一頁

      評論


      技術專區(qū)

      關閉