• 專注電子技術學習與研究
    當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

    紅外遙控器單片機編碼程序加詳解

    作者:佚名   來源:不詳   點擊數:  更新時間:2014年08月17日   【字體:

     

     
     
    void IR_IN() interrupt 0 using 0   //采用12MHz晶振
    {
      unsigned char j,k,N=0;
         EX0 = 0;   //初始化,關閉外中斷
      delay(15);
      if (IRIN==1) //沒有脈沖到來高電平
         { EX0 =1;   //默認狀態下開中斷,尋找9ms引導脈沖
        return;
       }
                               //確認IR信號出現
      while (!IRIN)            //等IR變為高電平,跳過9ms的前導低電平信號。
        {delay(1);}      //單片機接收電平與遙控器電平完全相反,delay(1)延時0.14ms
     
     for (j=0;j<4;j++)         //收集四組數據
     {
      for (k=0;k<8;k++)        //每組數據有8位
      {
       while (IRIN)            //等 IR 變為低電平,跳過4.5ms的前導高電平信號。
         {delay(1);}
        while (!IRIN)          //等 IR 變為高電平(0.56ms)
         {delay(1);}
         while (IRIN)           //計算IR高電平時長
          {
        delay(1);
        N++;          
        if (N>=14)    //大于1.685ms高電平長度,為了保證可靠性N=14
      { EX0=1;    //(2.25/0.14=16,1.685/0.14=12,0.565/0.14=4)
      return;}                  //0.14ms計數過長自動離開,重新判斷。
          }                        //高電平計數完畢               
         IRCOM[j]=IRCOM[j] >> 1;                  //數據最高位補“0”
         if (N>=6) {IRCOM[j] = IRCOM[j] | 0x80;}  //大于0.565ms高電平長度,N=6,7,8(1.685/2)都行,判斷為“1”,數據最高位補“1”
         N=0;
      }//end for k
     }//end for j
      
       if (IRCOM[2]!=~IRCOM[3])     數據碼與數據反碼相反,繼續執行,否則,數據出錯。返回,重新判斷。
       { EX0=1;
         return; }
     
       IRCOM[5]=IRCOM[2] & 0x0F;     //取鍵碼的低四位
       IRCOM[6]=IRCOM[2] >> 4;       //右移4次,高四位變為低四位
     
       if(IRCOM[5]>9)
        { IRCOM[5]=IRCOM[5]+0x37;}    //轉換成相應的ASCII碼,送1602顯示。
       else
       IRCOM[5]=IRCOM[5]+0x30;
     
       if(IRCOM[6]>9)
        { IRCOM[6]=IRCOM[6]+0x37;}
       else
       IRCOM[6]=IRCOM[6]+0x30;
     
         lcd_pos(0x4b);            
         lcd_wdat(IRCOM[6]);        //第一位數顯示
         lcd_pos(0x4c);              
         lcd_wdat(IRCOM[5]);        //第二位數顯示
     
         beep();
         EX0 = 1;      //開中斷,繼續判斷
    }
     
    關閉窗口
    亚洲一区二区制服在线|在绩专区欧美自拍日韩|青春娱乐网97超碰人人射|在线观看国产网址你懂的