在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設(shè)計應(yīng)用 > 紅外解碼原理及程序

            紅外解碼原理及程序

            作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
            //----------------------------------------------------------------------------------------------------------------------------------------------

            //紅外解碼原理基本簡介:當發(fā)射鍵按下后,就會發(fā)射出33位遙控編碼,按下的鍵不同,發(fā)射出的編碼不同;
            //33位數(shù)據(jù)中。第一位是起始碼,告訴接收器準備開始接收。后面的32位時數(shù)據(jù),最開始發(fā)送出去的是操控碼,用于不同遙控器的識別。同一各遙控器
            //所有按鍵的操控碼都相同;發(fā)送時,先發(fā)低位,再發(fā)高位;接下來的數(shù)據(jù)是操控碼的反碼,用于驗證操控碼,同樣也是低位在前,高位在后;接下來
            //的就是數(shù)據(jù)了,數(shù)據(jù)石油8位2進制的數(shù)構(gòu)成,同樣低位在前,高位在后。最后的8位數(shù)據(jù)時前面數(shù)據(jù)的反碼,用于數(shù)據(jù)的校對;
            //在解碼時最關(guān)鍵的是怎樣識別發(fā)送過來的0和1;遙控編碼,是用38kHZ的載波發(fā)送的;通常, ”0“用0.56ms的低電平和0.56ms的高電平組合而成,脈沖寬度
            //位1.12ms;”1“是用0.56ms的低電平和1.69ms的高電平組合而成,脈沖寬度為2.25ms。這頁就位我們提供了一種方法來識別0和1,即判別脈沖寬度;這頁就是
            //本程序所用到的方法;其次,比較關(guān)鍵的是,如何識別起始位;通常用9ms的低電平和4.5ms的高電平組合成起始位,因而同樣可以用判別脈沖寬度的方法來識
            //別起始位;
            //------------------------------------------------------------------------------------------------------------------------------------------------

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



            #include//包含頭文件;

            //--------------------------------------------------------------------
            //重新聲明變量標識符;
            //--------------------------------------------------------------------
            #defineucharunsignedchar
            #defineuintunsignedint
            #defineulongunsignedlongint

            sbitout=P3^2;//端口定義;


            ucharadd=0,_add=0,tdata=0,_tdata=0;//分別為 操控碼,操控反碼,數(shù)據(jù),數(shù)據(jù)反碼;
            ucharadd_up=0,add_down=0,_add_up=0,_add_down=0,tdata_up=0,tdata_down=0,_tdata_up=0,_tdata_down=0;//up代表高4位,down代表低4位;
            ucharnum=0;//用于判斷接收數(shù)據(jù)的位數(shù),判斷終止位;
            ulongbitdata=0x00000000;//用于存放接收到的32位二進制數(shù);

            bitfinish_flag=0;//結(jié)束標志;
            bitstart_flag=0;//開始標志;
            bittime=1;//數(shù)據(jù)與開始標志識別;
            bitdata_start=0;//數(shù)據(jù)開始標志;

            ucharcodetable[]={
            0x28,/*0*/
            0x7E,/*1*/
            0xA2,/*2*/
            0x62,/*3*/
            0x74,/*4*/
            0x61,/*5*/
            0x21,/*6*/
            0x7A,/*7*/
            0x20,/*8*/
            0x60,/*9*/
            0x30,/*A*/
            0x25,/*b*/
            0xA9,/*C*/
            0x26,/*d*/
            0xA1,/*E*/
            0xB1 /*F*/
            };

            //------------------------------------------------------------------------------------------------------
            //所用到函數(shù)的聲明;
            //------------------------------------------------------------------------------------------------------
            voiddisplay(uchart);
            voidinitial();
            bitstart_check(uchardata1,uchardata2);
            bittrans_to_bit(uchardata1,uchardata2);
            voidtrans_bitdata_to_data();
            voidtrans_data();
            bitdata_check();
            voidinterrupt0();
            voiddisplay(uchart);

            //-------------------------------------------------------------------------------------------------
            //函數(shù)名稱:delay();
            //入口參數(shù):uchar n;
            //功能:延時;

            //-------------------------------------------------------------------------------------------------


            voiddelay(ucharn)
            {
            while(n--);
            }

            //-------------------------------------------------------------------------------------------------
            //函數(shù)名稱:initial();
            //入口參數(shù):無;
            //功能:初始化;

            //-------------------------------------------------------------------------------------------------

            voidinitial()
            {
            EA=1;//開總中斷;
            EX0=1;//開外部中斷0;
            IT0=1;//外部0中斷方式位下降沿中斷;
            TMOD=0x01;//定時器0,工作方式1;
            TH0=0x00;//置初值;
            TL0=0x00;
            time=1;
            num=0;
            data_start=0;
            start_flag=0;
            finish_flag=0;
            }

            //-------------------------------------------------------------------------------------------------
            //函數(shù)名稱:start_check();
            //入口參數(shù):uchar data1,uchar data2;
            //出口參數(shù)類型:bit;
            //功能:開始位判斷;
            //-------------------------------------------------------------------------------------------------
            bitstart_check(uchardata1,uchardata2)
            {
            uinti;
            i=data1*256+data2;
            if(i>7500&&i<14500)
            return1;
            else
            return0;
            }


            //-------------------------------------------------------------------------------------------------
            //函數(shù)名稱:trans_to_bit();
            //入口參數(shù):uchar data1,uchar data2;
            //出口參數(shù)類型:bit;
            //功能:將定時器的值轉(zhuǎn)化位2進制數(shù)0和1;

            //-------------------------------------------------------------------------------------------------

            bittrans_to_bit(uchardata1,uchardata2)
            {
            uint i;
            i=data1*256+data2;
            if(i>1200&&i<2300)
            return1;
            else
            return0;
            }

            //-------------------------------------------------------------------------------------------------
            //函數(shù)名稱:trans_bitdata_to_data();
            //入口參數(shù):無;
            //出口參數(shù)類型:void;
            //功能:分離出操控碼,操控反碼,數(shù)據(jù),數(shù)據(jù)反碼;;

            //-------------------------------------------------------------------------------------------------

            voidtrans_bitdata_to_data()
            {
            add=(uchar)(bitdata&0x000000ff);
            _add=(uchar)((bitdata&0x0000ff00)>>8);
            tdata=(uchar)((bitdata&0x00ff0000)>>16);
            _tdata=(uchar)((bitdata&0xff000000)>>24);
            }


            //-------------------------------------------------------------------------------------------------
            //函數(shù)名稱:trans_data();
            //入口參數(shù):無;
            //出口參數(shù)類型:void;
            //功能:分離出操控碼,操控反碼,數(shù)據(jù),數(shù)據(jù)反碼的高4位和低4位;
            //-------------------------------------------------------------------------------------------------
            voidtrans_data()
            {
            add_up=(add&0xf0)/16;
            add_down=add&0x0f;
            _add_up=(_add&0xf0)/16;
            _add_down=_add&0x0f;
            tdata_up=(tdata&0xf0)/16;
            tdata_down=tdata&0x0f;
            _tdata_up=(_tdata&0xf0)/16;
            _tdata_down=_tdata&0x0f;

            }

            //-------------------------------------------------------------------------------------------------
            //函數(shù)名稱:data_check();
            //入口參數(shù):無;
            //出口參數(shù)類型:bit;
            //功能:檢驗所得數(shù)據(jù)的正確性;
            //-------------------------------------------------------------------------------------------------
            bitdata_check()
            {
            if((add==~_add)&&(tdata==~_tdata))
            return1;
            else
            return0;
            }

            //-------------------------------------------------------------------------------------------------
            //函數(shù)名稱:interrupt0();
            //入口參數(shù):無;
            //出口參數(shù)類型:void;
            //功能:外部中斷0;

            //-------------------------------------------------------------------------------------------------

            voidinterrupt0()interrupt0
            {
            ucharTH0_BUF,TL0_BUF;//定時器數(shù)據(jù)緩存;
            if(!time&&data_start)//判斷起始位是否有效,為第二次中斷時;
            {
            TR0=0;//關(guān)定時器0;
            if(start_check(TH0,TL0))
            {start_flag=1;data_start=0;TH0=0x00;TL0=0x00;TR0=1;}//若起始位有效,置位開始標志位start_flag,定時器重新定時;
            else//若起始位無效,初始化,等待下個起始位;
            initial();
            }

            else if(!time&&start_flag)//起始位有效,則在第二次中斷時接收數(shù)據(jù);
            {
            TR0=0;
            TH0_BUF=TH0;
            TL0_BUF=TL0;
            TH0=0x00;
            TL0=0x00;
            TR0=1;
            bitdata=bitdata>>1;//先移位,后賦值;
            if(trans_to_bit(TH0_BUF,TL0_BUF))
            bitdata=bitdata|0x80000000;
            else
            ;
            if(num>=31)//接收完成,完成標志finish_flag置位;
            finish_flag=1;
            else
            num++;
            }
            elseif(time)//第一此中斷,開定時器;
            {
            time=!time;
            TR0=1;
            data_start=1;
            }
            }


            //-------------------------------------------------------------------------------------------------
            //函數(shù)名稱:display();
            //入口參數(shù):uchar t;
            //出口參數(shù)類型:void;
            //功能:顯示函數(shù);

            //-------------------------------------------------------------------------------------------------
            voiddisplay(uchart)
            {
            while(t--)
            {
            P0=0x00;
            P2=0xfe;
            P0=table[add_up];
            delay(10);
            P0=0x00;
            P2=0xfd;
            P0=table[add_down];
            delay(10);
            P0=0x00;
            P2=0xfb;
            P0=table[_add_up];
            delay(10);
            P0=0x00;
            P2=0xf7;
            P0=table[_add_down];
            delay(10);
            P0=0x00;
            P2=0xef;
            P0=table[tdata_up];
            delay(10);
            P0=0x00;
            P2=0xdf;
            P0=table[tdata_down];
            delay(10);
            P0=0x00;
            P2=0xbf;
            P0=table[_tdata_up];
            delay(10);
            P0=0x00;
            P2=0x7f;
            P0=table[_tdata_down];
            delay(10);
            }
            }


            //----------------------------------------------------------------------------------------------
            //主函數(shù)入口;
            //----------------------------------------------------------------------------------------------

            main()
            {
            initial();//初始化;
            while(1)
            {
            display(1);
            if(finish_flag)//完成后,進行數(shù)據(jù)處理;
            {
            initial();//初始化,準備接收第二次;
            trans_bitdata_to_data();
            if(data_check())//判斷接收數(shù)據(jù)是否正確,如果正確,則顯示,否則丟棄;
            trans_data();
            }
            }
            }



            關(guān)鍵詞: 紅外解碼原理及程

            評論


            技術(shù)專區(qū)

            關(guān)閉