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

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 利用AVR的輸入捕捉進行紅外解碼

            利用AVR的輸入捕捉進行紅外解碼

            作者: 時間:2016-12-03 來源:網(wǎng)絡 收藏
            使用AVR輸入捕捉可以對組碼進行有效地區(qū)分,這里是對紅外接收頭接收到遙控器的碼型進行解碼,也可以擴展到其他的應用領域。

            關于紅外的基本知識參看下面的參考文章。需要說明的是紅外的數(shù)據(jù)端口電源最好加10uf濾波電容,然后數(shù)據(jù)引腳加上1K限流電阻。

            本文引用地址:http://www.biyoush.com/article/201612/325120.htm

            硬件平臺:ATMega16-16PU 紅外接收頭4338 康佳遙控器

            編譯器: IAR For AVR

            代碼:

            /*================START==================*/

            #include
            #include
            #include

            /**********************************************************
            變量聲明
            **********************************************************/

            unsigned int Receive_NewData = 0;
            unsigned int Receive_OldData = 0;
            unsigned int Calc_num = 0;
            unsigned int Temp;
            unsigned char Num;
            unsigned char buffer[5]={0};

            /**********************************************************
            定時器1 捕獲定時器初始化
            **********************************************************/
            void Timer1_Init(void)
            {
            TCCR1A = 0x00;
            // Input Capture on Falling Edge
            TCCR1B = (1< // Timer(s)/Counter(s) Interrupt(s) initialization
            TIMSK = (1<}
            /**********************************************************
            開始捕獲
            **********************************************************/
            void main(void)
            {
            Timer1_Init();
            _SEI();// Global enable interrupts
            while(1){;}
            }
            /**********************************************************
            定時器1 捕獲中斷 中斷服務程序
            **********************************************************/
            #pragma vector=TIMER1_CAPT_vect//定時器1 輸入捕獲中斷
            __interrupt void OldTimer1_capt_isr(void)
            // Timer 1 input capture interrupt service routine
            {
            unsigned char i,j;
            Receive_NewData = ICR1; //得到新的數(shù)據(jù)
            Temp = Receive_NewData - Receive_OldData ;//用這一次的數(shù)據(jù)減去上一次的數(shù)據(jù),得到本次捕捉時間
            Receive_OldData = Receive_NewData ;//更新數(shù)據(jù)到 Receive_OldData

            if(Temp>100 && Temp<150)// ‘0 ’ 信號
            {
            Num = 0;
            }
            else if(Temp>230 && Temp<280)// ‘1 ’ 信號
            {
            Num = 1;
            }
            else if(Temp>1300 && Temp<1800)// ‘ hearder ’信號
            {
            Calc_num = 0;
            Num = 2;
            }
            else//干擾信號
            {
            return ;
            }

            //將二進制碼轉(zhuǎn)換成十六進制

            //按下的按鍵鍵值碼型應為 1001 1000 1000 0011 0011 1011 (1110 1100 0001 0011 )11
            for(i=0;i<5;i++)
            {
            if((Calc_num>8*i) && (Calc_num<(8*i+8)))
            {
            buffer[i]=buffer[i] | Num;
            buffer[i]<<=1;
            }
            else if(Calc_num==(8*i+8))
            {
            buffer[i]=buffer[i] | Num;
            }
            }


            Calc_num++; //計數(shù)變量


            if(Calc_num>41)
            {
            Calc_num=0;
            for(j=0;j<5;j++)
            {
            buffer[j]=0;
            }
            }

            }

            /*================END==================*/

            粗體部分是下面代碼總結(jié)的:

            /*
            if((Calc_num>0) && (Calc_num<8))
            {
            buffer[0]=buffer[0] | Num;
            buffer[0]<<=1;
            }
            else if(Calc_num==8)
            {
            buffer[0]=buffer[0] | Num;
            }
            //-------------

            if((Calc_num>8) && (Calc_num<16))
            {
            buffer[1]=buffer[1] | Num;
            buffer[1]<<=1;
            }
            else if(Calc_num==16)
            {
            buffer[1]=buffer[1] | Num;
            }
            //-------------
            if((Calc_num>16) && (Calc_num<24))
            {
            buffer[2]=buffer[2] | Num;
            buffer[2]<<=1;
            }
            else if(Calc_num==24)
            {
            buffer[2]=buffer[2] | Num;
            }
            //-------------
            if((Calc_num>24) && (Calc_num<32))
            {
            buffer[3]=buffer[3] | Num;
            buffer[3]<<=1;
            }
            else if(Calc_num==32)
            {
            buffer[3]=buffer[3] | Num;
            }
            //-------------
            if((Calc_num>32) && (Calc_num<40))
            {
            buffer[4]=buffer[4] | Num;
            buffer[4]<<=1;
            }
            else if(Calc_num==40)
            {
            buffer[4]=buffer[4] | Num;
            }

            */
            //-------------



            評論


            技術專區(qū)

            關閉