新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51單片機紅外編碼解碼的C語言程序

        基于51單片機紅外編碼解碼的C語言程序

        作者: 時間:2016-11-23 來源:網絡 收藏
        當學習鍵按下后,紅外接收頭便可將接受到的信號存儲到單片機中。在接受到通用遙控器發出的信號后,如果按下發射鍵,單片機將調出剛剛儲存的信息,通過紅外發射頭發射出和遙控器一樣的信號來達到控制的作用。

        #include
        #include
        #define uchar unsigned char
        #define uint unsigned int

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

        sbit studylamp=P2^7;
        sbit lamp=P2^6;
        sbit studykey=P3^2;
        sbit remotein=P1^1;
        sbit remoteout=P1^0;
        sbit txkey=P2^0;

        uint i,j,m=255,n,k,s;
        uchar idata remotedata[206];
        uint head;
        uint remdata;


        //一毫秒延時程序
        delay1ms(uint t)
        {
        for(i=0;i for(i=0;j<120;j++);
        }

        //初始化函數
        clearmen()
        {
        studylamp=1;
        lamp=1;
        remoteout=0;
        remotein=1;
        for(i=0;i<206;i++)
        {
        remotedata[i]=0x00;
        }
        IE=0x00;
        IP=0x01;
        TMOD=0x22;
        PCON=0X00;
        TH1=0xf3;
        TL1=0xf3;
        IT0=1;
        EX0=1;
        EA=1;
        }

        //鍵功能函數
        void key_tx()
        {
        if(txkey==0)
        {
        delay1ms(1);
        if(txkey==0)
        {
        while(txkey==0);
        ET1=1;TR1=1;
        for(i=head;i>0;i--);
        remoteout=0;ET1=0;TR1=0;
        n=0;
        while(1)
        {
        lamp=0;
        studylamp=1;
        if(remotedata[n]==0x00)
        {
        delay1ms(10);break;
        }
        for(i=remotedata[n];i>0;i--)
        {
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();
        }
        n++;
        ET1=1;TR1=1;
        for(i=remotedata[n];i>0;i--);
        remoteout=0;ET1=0;TR1=0;n++;
        }
        }
        }
        }

        //主函數
        void main()
        {
        clearmen(); //初始化
        while(1)
        {
        key_tx(); //按鍵掃描
        }
        }

        //40KHz發生器
        void time_intt1(void) interrupt 3
        {
        remoteout=~remoteout;
        }


        //外中斷0
        void intt0(void) interrupt 0
        {
        ET1=0;TR1=0;EX0=0;EA=0;
        head=0;
        while(studykey==0);
        studylamp=0;lamp=1;
        while(remotein==1);
        head=0;
        while(remotein==0)
        {
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        head++;
        }
        n=0;remdata=0x0000;
        while(1)
        {
        while(remotein==1)
        {
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        remdata++;
        }
        if(remdata>m) //高電平>5毫秒退出
        {remotedata[n]=0x00;EX0=1;EA=1;goto end;}
        remotedata[n]=remdata;n++;
        remdata=0x0000;
        while(remotein==0)
        {
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        remdata++;
        }
        remotedata[n]=remdata;
        n++;
        remdata=0x00;
        }
        end: lamp=0;studylamp=0;
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 林口县| 桃园县| 同德县| 沾化县| 沅江市| 进贤县| 泽普县| 偃师市| 大兴区| 连江县| 黄龙县| 无极县| 保康县| 横山县| 松桃| 安吉县| 岑巩县| 宝鸡市| 外汇| 社会| 松桃| 辰溪县| 南充市| 六安市| 高安市| 呼图壁县| 托克逊县| 陇川县| 光山县| 昔阳县| 井研县| 霸州市| 宜章县| 肃宁县| 安溪县| 名山县| 海林市| 建德市| 双流县| 察哈| 博客|