新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > C語言寫的紅外遙控解碼程序

        C語言寫的紅外遙控解碼程序

        作者: 時間:2012-11-06 來源:網絡 收藏

        #include "STC89C51RC.H"

        sbit DQ = P4^3;
        sbit SPK = P1^0;


        #include absacc.h>

        #define seg1 XBYTE[0xffec]
        #define seg2 XBYTE[0xffed]
        #define seg3 XBYTE[0xffee]
        #define seg4 XBYTE[0xffef]
        unsigned char IRMcode[4];

        unsigned char code ledmap[]=//共陰LED數碼管譯碼表
        {
        0x3f,0x06,0x5b,0x4f,0x66,//0,1,2,3,4,
        0x6d,0x7d,0x07,0x7f,0x6f,//5,6,7,8,9,
        0x77,0x7C,0x39,0x5E,0x79,//A,b,C,d,E,
        0x71,//F,
        };

        void delay(unsigned int);

        void main()
        {
        EA = 1;
        EX2 = 1;
        while(1)
        {

        if (IRMcode[2]==~IRMcode[3]){
        seg1 = ~ledmap[IRMcode[2]/100];
        seg2 = ~ledmap[IRMcode[2]/10%10];
        seg3 = ~ledmap[IRMcode[2]%10];
        seg4 = 0xff;//熄滅
        }
        }
        }

        void Sound(void)
        {
        SPK = 0;
        delay(10000);
        SPK = 1;
        }

        void IRMint(void) interrupt 6 using 2
        {
        unsigned char count;
        unsigned int count1;
        unsigned char i,j;
        EA = 0;
        count = 9;
        while(--count)
        {
        delay(100);//440us
        if(DQ){EA = 1;return;}
        }
        while(DQ==0);//通過引導碼余下的低電平
        //以上完成引導碼4.5ms的低電平檢測

        count = 9;
        count1 = 0;
        while(--count)
        {
        delay(100);//440us
        if(DQ==0){EA = 1;return;}
        }
        while(DQ==1)//通過引導碼余下的高電平
        {
        if(count1++>1000) {
        P1=0x55;EA = 1;return;}
        }
        //以上完成引導碼4.5ms的高電平檢測

        count1 = 0;
        for(j=0;j4;j++)//有效字節數設定
        {
        for(i=0;i8;i++)//字節bit數
        {
        while(DQ==0);//通過編碼低電平
        delay(200);//延時判斷編碼高電平維持長度
        IRMcode[j]=1;
        if(DQ)IRMcode[j]|=0x01;
        while(DQ==1){//通過編碼余下的高電平
        if(count1++>2000){EA = 1;return;}
        }
        }
        }

        Sound();
        EA = 1;
        }

        //通用延時函數
        //22.1184,10 = 48.4 us (5us+43.4)
        //22.1184,100 = 439 us (43.4*10+5)
        //22.1184,1000 = 4345 us(43.4*100+5)
        //22.1184,10000 = 43450 us(43.45*1000+5)
        void delay(unsigned int t)
        {
        while(--t);
        }

        c語言相關文章:c語言教程


        紅外遙控器相關文章:紅外遙控器原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 高青县| 南和县| 阆中市| 龙州县| 荥阳市| 理塘县| 行唐县| 肇源县| 都江堰市| 抚宁县| 铜鼓县| 济南市| 钦州市| 扶风县| 通州区| 偏关县| 丰顺县| 西林县| 清河县| 张家川| 巴塘县| 宜丰县| 沈阳市| 岫岩| 红河县| 安达市| 博客| 潮州市| 普兰店市| 大姚县| 铁岭市| 中方县| 麟游县| 大宁县| 舟山市| 仁寿县| 西充县| 保山市| 合川市| 湾仔区| 丰原市|