新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于8952單片機的紅外解碼(TC9012F編碼)

        基于8952單片機的紅外解碼(TC9012F編碼)

        作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
        紅外操作免去了和機器接觸。第一是方便,第二也很自然的可以將用戶與管理著分離(使用功能在遙控上,調(diào)試功能在機器上)。所以免不了在自己的電子鐘設(shè)計中加入了紅外。加的多,學(xué)得也多嘛。

        雖然重點在后面,但是先上個程序

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

        參考總結(jié)后,第一次參考?xì)w納出源程序如下:

        #include
        #include
        #include
        ////////////////////////////////////////////////

        sbit ir=P3^2;//紅外接口標(biāo)志

        ////////////////////////////////////////////

        unsigned char irtime;//電平寬度(以定時器來記錄)
        bit irpro_ok,irok;
        unsigned char ircord[4];
        unsigned char irdata[33];

        //////////////////////////////////////////////

        void ir_work(void);
        void ircordpro(void);

        //////////////////////////////////////////////////////////////////

        void tim0_isr (void) interrupt 1 using 1//定時器0中斷服務(wù)函數(shù)
        {
        irtime++;
        }

        ///////////////////////////////////////////////////////////////////////
        void ex0_isr (void) interrupt 0 using 0//外部中斷0服務(wù)函數(shù)
        {
        unsigned char i;
        bit startflag;

        if(startflag)
        {
        TR0=0;
        if(irtime<38&&irtime>=34)//引導(dǎo)碼判斷(9MS)
        i=0;
        TR0=1;
        //確認(rèn)為引導(dǎo)碼,初始為新的32位編碼開始
        irdata[i]=irtime;//i=0是引導(dǎo)碼,后面是其余碼。每次記錄的是每次高低電平一起的脈沖寬度。
        //收到到一個碼算一次中斷,中斷結(jié)束前清零寬度計時
        irtime=0;
        i++;
        if(i==33)
        {
        irok=1;
        i=0;
        }
        }
        //第一次進入中斷開啟startflag,用于第二次進入中斷計時比對
        else
        {irtime=0;startflag=1;}

        }

        ////////////////////////////////////////////////////////////////////
        void TIM0init(void)//定時器0初始化
        {

        TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
        TH0=0;//reload value
        TL0=0;//initial value
        ET0=1;//開中斷
        TR0=1;
        }
        ///////////////////////////////////////////////////////////////////
        void EX0init(void)
        {
        IT0 = 1;
        EX0 = 1;
        EA = 1;
        }
        void ir_work(void)//紅外鍵值散轉(zhuǎn)程序
        {

        switch(ircord[2])//判斷第三個數(shù)碼值(數(shù)據(jù)碼,后面是反碼,前面是引導(dǎo)碼和地址碼)
        {
        case 0:P1=0x00;break;//1 LED顯示相應(yīng)的按鍵值
        case 1:P1=0xfe;break;//2
        case 2:P1=0xfd;break;//3
        }


        上一頁 1 2 下一頁

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 景泰县| 宝鸡市| 台前县| 公安县| 新宁县| 丹东市| 林周县| 鄂州市| 昆明市| 行唐县| 迁西县| 红原县| 昭通市| 广平县| 财经| 昆山市| 绍兴市| 繁昌县| 逊克县| 密山市| 宣武区| 西贡区| 蓝山县| 桐柏县| 苏尼特左旗| 彭水| 孟连| 荔浦县| 灌云县| 陕西省| 平江县| 天峻县| 高安市| 武定县| 阿拉善盟| 海丰县| 蒙山县| 安岳县| 泽普县| 花莲市| 拜泉县|