新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 小巧的uPD6121G紅外遙控解碼程序

        小巧的uPD6121G紅外遙控解碼程序

        作者: 時間:2016-11-25 來源:網絡 收藏
        網上有很多關于uPD6121G紅外遙控解碼程序,這些都寫的很長,看起來發暈.下載下來也多數不能用.以下程序是通過檢驗的程序,只要編譯后就可以正常使用.注意這里只是個解碼程序!如果你想增加其它功能請自己添加.此程序沒有解碼UPD6121的重復碼.

        以下程序使用:12MHZ晶振,AT89C52

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

        設計者:李國強
        晶振:12MHzAT89S51
        11年2月13號--2月24號編好

        #include
        #define uchar unsigned char
        #define uint unsigned int
        sbit in=P3^2;//紅外信號輸入
        sbit d0=P1^0;//測試用
        sbit d1=P1^1;//測試用
        uchar sj[4];//放置解碼數據
        uint jce;//計時
        bit biaoz;

        void main(void)
        {uchar iii=0;
        IT0=1;//負跳變觸發
        EX0=1;//開外部中斷0
        EA=1;//開總中斷
        biaoz=0;
        //EX0=0;
        //while(i<1250)++i;//調試用
        while(1)
        {
        while(biaoz)
        {iii=sj[2];
        //iii++;
        P1=iii;
        IE0=0;
        EX0=1;
        biaoz=0;
        }

        }

        }


        void zd() interrupt 0
        {
        uint su=0;
        uchar i=0,ii=0;
        EX0=0;
        while(!in)if(++su>850) break;//計算9ms紅外信號,進行干擾排除

        while(in)if(++su>2000) break;//計算4.5ms+9ms時間

        if((su>1120)&&(su<1130))//如沒錯誤進入信號收入
        {

        while(i<4)
        {
        while(ii<8)
        {su=0;//歸0后計時
        while(!in) if(++su>55) break;//(0.612ms)計算0和1的開始時間
        while(in) if(++su>160) break;//(1.767ms)計算時長為判斷0和1作準備
        if(su<120)sj[i]>>=1;//su小于120判斷為0
        if(su>155){sj[i]>>=1;sj[i]+=0x80;}//su大于155判斷為1
        ii++;

        while(in)if(++su>250) break;//(2.757ms)判斷為1后如沒有變低電平在此等待,防死循環
        if(su==250)ii=8;//防止死循環和錯誤數據

        }
        ii=0;//為下次循環作好準備
        i++;
        if(su==250)i=8;//防止死循環和錯誤數據
        }
        //P1=sj[2];//顯示解碼數據sj[2]//如果P1口有發光管就能看到解碼后的數據

        }
        if(i==4)biaoz=1;
        else
        {IE0=0;
        }EX0=1;
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 海晏县| 绍兴市| 西藏| 循化| 南通市| 灵武市| 灌云县| 舒城县| 白银市| 师宗县| 汝南县| 吉隆县| 化州市| 天等县| 九龙坡区| 永济市| 杭州市| 南华县| 盘锦市| 高淳县| 南安市| 如皋市| 双城市| 静海县| 襄汾县| 青神县| 湖州市| 海晏县| 潢川县| 保定市| 泸水县| 潍坊市| 刚察县| 贵溪市| 囊谦县| 红桥区| 兴城市| 长汀县| 茂名市| 阳江市| 壤塘县|