新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于MSP430的紅外遙控器解碼

        基于MSP430的紅外遙控器解碼

        作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏

        void delay_1ms(unsigned int nValue)//delay 1ms at 8M
        {
        unsigned int nCount;
        unsigned int ii;
        unsigned int jj;
        nCount = 1592;
        for(ii = nValue;ii > 0;ii--)
        {
        for(jj = nCount;jj > 0;jj--)
        _NOP();
        }
        }

        本文引用地址:http://www.104case.com/article/201611/322781.htm

        void delay_5us(unsigned int nValue)//delay 5us at 8M
        {
        unsigned int ii;
        for(ii = nValue;ii > 0;ii--)
        {
        _NOP();_NOP();_NOP();_NOP();
        _NOP();_NOP();_NOP();_NOP();
        _NOP();_NOP();_NOP();_NOP();
        _NOP();_NOP();_NOP();_NOP();
        }
        }


        int main( void )
        {


        WDTCTL = WDTPW + WDTHOLD; //關(guān)閉看門狗


        InitSys(); //初始化
        delay_1ms(1);
        for(;;)
        display();



        }



        /*****************************************************************************
        系統(tǒng)初始化
        ******************************************************************************/
        void InitSys()
        {
        unsigned int i;


        BCSCTL1 &= ~XT2OFF;

        do
        {
        IFG1 &= ~ OFIFG ;
        for ( i = 0 ; i < 100 ; i ++ )
        _NOP();
        }


        while ( IFG1&OFIFG != 0 );
        BCSCTL2 |= SELM_2 + SELS ;



        P1IE=BIT0; //P1.0中斷功能打開
        P1IES|=BIT0; //P1.0下降沿觸發(fā)中斷
        IR_DIR_IN; //PI.0設(shè)置為輸入

        duan_out; //P2設(shè)置為輸出

        _EINT(); //打開全局中斷控制
        }
        /*****************************************************************************
        端口1中斷函數(shù)
        ******************************************************************************/
        #pragma vector="PORT1"_VECTOR
        __interrupt void Port1()
        {
        char i,j,k,n=0;
        if((P1IFG&BIT0) == BIT0)
        {
        P1IFG &= ~BIT0; //清除P1.0中斷標(biāo)志
        P1IE &=~BIT0; //關(guān)閉P1.0中斷功能
        I1:
        for (i=0;i<4;i++)
        {
        if (IRIN==0) break;
        if (i==3) {P1IE|=BIT0;return;}
        }
        delay(20);
        if (IRIN==1) goto I1; //確認(rèn)IR信號(hào)出現(xiàn)
        while(!IRIN); //等待IR變?yōu)楦唠娖?br />
        for (j=0;j<4;j++)
        {
        for (k=0;k<8;k++)
        {
        while (IRIN) //等 IR 變?yōu)榈碗娖?br /> {delay_5us(28);}
        while (!IRIN) //等 IR 變?yōu)楦唠娖?br /> {delay_5us(28);}
        while (IRIN) //計(jì)算IR高電平時(shí)長(zhǎng)
        {
        delay_5us(28);
        n++;
        if (n>=30){P1IE|=BIT0;return;}
        }
        dat[j]=dat[j] >> 1;
        if (n>=11) {dat[j] = dat[j]|0x80;}
        n="0";
        }
        }
        if (dat[2]!=~dat[3]) {P1IE|=BIT0;return;}//此句剛開始可以屏蔽,見(jiàn)到效果后再嘗試打開校驗(yàn)
        dat[5]=dat[2] & 0x0F;
        dat[6]=dat[2] & 0xF0;
        dat[6]=dat[6] >> 4;
        //beep();
        P1IE|=BIT0;
        }
        }


        void display()
        {
        wei1_1;wei2_0;
        duan="seg"[dat[5]];
        delay_1ms(1);
        wei2_1;wei1_0;
        duan="seg"[dat[6]];
        delay_1ms(1);
        }


        上一頁(yè) 1 2 下一頁(yè)

        關(guān)鍵詞: MSP430紅外遙控器解

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 读书| 方正县| 武定县| 乳山市| 大英县| 五原县| 新源县| 明水县| 年辖:市辖区| 尤溪县| 塔城市| 霍邱县| 四川省| 桐乡市| 龙海市| 烟台市| 甘孜县| 铜梁县| 彭山县| 筠连县| 大冶市| 建瓯市| 绥化市| 黔西| 志丹县| 万宁市| 孟津县| 保德县| 类乌齐县| 甘孜| 新绛县| 富民县| 樟树市| 保亭| 威海市| 格尔木市| 南丹县| 石景山区| 通江县| 甘谷县| 建平县|