色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

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

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

          本文引用地址:http://cafeforensic.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中斷服務函數
          {
          irtime++;
          }

          ///////////////////////////////////////////////////////////////////////
          void ex0_isr (void) interrupt 0 using 0//外部中斷0服務函數
          {
          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])//判斷第三個數碼值(數據碼,后面是反碼,前面是引導碼和地址碼)
          {
          case 0:P1=0x00;break;//1 LED顯示相應的按鍵值
          case 1:P1=0xfe;break;//2
          case 2:P1=0xfd;break;//3
          }


          上一頁 1 2 下一頁

          評論


          技術專區(qū)

          關閉