• <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>

    怎么利用STC89C52單片機進行紅外遙控解碼

    良多伴侶在操縱單片機DIY的時辰,都有接觸過紅外線遙控,有時辰出格想本身界說遙控的某個按鍵來節制單片機做特心猿意馬的輸出,好比節制一個LED,或者一個繼電器,進而節制外部電路,例如家里的電燈,今天我給大師一個方式,輕松獲取通用紅外遙控器的鍵碼值,下面我們起頭吧

    東西/原料

    • 電腦
    • 單片機最小系統版(帶紅外領受頭的)
    • USB轉TTL下載器一個
    • MP3遙控器一個
    • keil軟件
    • 電腦串口調試助手

    方式/步調

    1. 1

      起首,我們將單片機和USB轉TTL下載器用杜邦線準確地毗連起來,并插入電腦的USB口,看到最小系統版的電源指示燈亮起,申明板子通電正常

    2. 2

      接下來打開電腦上的keil,并新建一個工程,定名為“紅外遙控解碼測試”

    3. 3

      工程成立好今后,為工程添加一個C文件,雙擊打開C文件,復制下面的代碼粘貼上去


      #include <REG52.H>

      #define uchar unsigned char //宏界說



      #define uint unsigned int

      #define uchar unsigned char

      sbit IRIN=P3^2;//紅外線接口

      sbit d=P2^0;//解碼指示


      uchar IRCOM[7],a;

      bit Flag;


      void delay(uchar x);//紅外線用延遲 

      void fasong()

      {

       

       if(Flag==1)

         {   ES=0;//封閉串口

             Flag=0;//發送一次

             SBUF=IRCOM[2];//把a發送給本家兒機

             

             while(!TI);//當TI為1的時辰,也就是期待數據發送竣事

              TI=0;//軟件清零

              ES=1;//打開串口

         }


      }

      void main (){


       SM0=0;//體例1

       SM1=1; 

             REN = 1;//REN=1許可串行接管狀況,串口工作模式1               

          TMOD|= 0x20;//按時器工作體例2                    

      PCON|= 0x80;//波特率提高一倍                                                          

      TH1=0xFA; 

          TL1=0xFA;//9600波特率 ,按倍頻算        

      TR1  = 1;                                                             

      ES   = 1;   //開串口間斷                  

      EA   = 1;  // 開總間斷 

         EX0 =1;//外部間斷0許可      

             IRIN=1;

      while(1)   

        { fasong();}

       

      }


      /****************************************************

                     串口間斷程序

      ******************************************************/

      void ser ()interrupt 4 

      {

       //if(RI == 1)        //RI接管間斷標記

      // {

        RI = 0;     //斷根RI接管間斷標記 

      a =SBUF;  //SUBF接管/發送緩沖器 

        Flag=1;

          

       //}

      }

      void IR_IN(void) interrupt 0//紅外間斷辦事程序   

      {

        unsigned char j,k,N=0;

           EX0 = 0;   

      delay(15);

      if (IRIN==1) 

           { EX0 =1;

         return;

        }                        

        while (!IRIN)           

          {delay(1);}


       for (j=0;j<4;j++)       

       { 

        for (k=0;k<8;k++)       

        {

         while (IRIN)            

           {delay(1);}

          while (!IRIN)         

           {delay(1);}

           while (IRIN)         

            {

          delay(1);

          N++;           

          if (N>=30)

      { EX0=1;

      return;}                 

            }                                       

           IRCOM[j]=IRCOM[j] >> 1;                 

           if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} 

           N=0;

        }

       }  

         if (IRCOM[2]!=~IRCOM[3])

         { EX0=1;

           return; }


         IRCOM[5]=IRCOM[2] & 0x0F;     

         IRCOM[6]=IRCOM[2] >> 4;     


         if(IRCOM[5]>9)

          { IRCOM[5]=IRCOM[5]+0x37;}

         else

        IRCOM[5]=IRCOM[5]+0x30;


         if(IRCOM[6]>9)

          { IRCOM[6]=IRCOM[6]+0x37;}

         else

        IRCOM[6]=IRCOM[6]+0x30;

             d=~d;

             Flag=1;

            EX0 = 1; 

      void delay(unsigned char x)    

      {

       unsigned char i;

        while(x--)

       {

        for (i = 0; i<14; i++) {}

       }

      }

    4. 4

      從頭編譯程序,程序沒有錯誤之后進行下一步,第二張圖中“0錯誤,0警告”申明程序沒問題

    5. 5

      打開程序下載軟件,下載程序進單片機,顯示下載當作功今后,進行下一步

    6. 6

      打開電腦串口調試助手,按照圖中的設置數據設置一下參數,注重端口跟下載的端口是一樣的,選好本身的端口,我這里是COM4,你們的電腦紛歧心猿意馬是

    7. 7

      下面拿出紅外遙控器,然后把串口助手中的端口打開,打開之后,按鈕釀成“封閉串口”,而前面的燈會釀成紅色,暗示串口打開當作功,進行下一步

    8. 8

      按挨次瞄準單片機板子上的紅外領受頭別離按遙控器上的ON,OFF,2H,4H,8H。之后你會發現串口調試助手上顯示了代碼,1,2,3,4,5號按鍵別離對應的代碼為12 ,1E ,04 ,06, 1B (當然你們用的遙控器紛歧樣,代碼也會分歧),那么就可以進行下一步

    9. 9

      在程序中點竄想要節制的參數,共同單片機外部電路,就可以實現分歧的功能啦

      在紅外間斷辦事程序中插手下面這段節制代碼,就可以實現了

          switch(IRCOM[2])

      {

         case 0x12: d=0; break;

          }

      此中case暗示按鍵的值,這里暗示用“ON”這個按鍵節制一個燈

    10. 10

      今天就到這里,教程先告一段落了,我們下次再會

    • 發表于 2019-09-03 20:01
    • 閱讀 ( 663 )
    • 分類:其他類型

    你可能感興趣的文章

    相關問題

    0 條評論

    請先 登錄 后評論
    admin
    admin

    0 篇文章

    作家榜 ?

    1. xiaonan123 189 文章
    2. 湯依妹兒 97 文章
    3. luogf229 46 文章
    4. jy02406749 45 文章
    5. 小凡 34 文章
    6. Daisy萌 32 文章
    7. 我的QQ3117863681 24 文章
    8. 華志健 23 文章

    聯系我們:uytrv@hotmail.com 問答工具
  • <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>
    久久久久精品国产麻豆