查看: 2090|回复: 0

红外解码程序,只能执行一次

[复制链接]
  • TA的每日心情
    奋斗
    2017-7-4 08:55
  • 签到天数: 234 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-7-21 22:18:44 | 显示全部楼层 |阅读模式
    分享到:
    红外解码程序,只能执行一次,再按其它按键就没用了,请教
    /*************************************************
    引导码:9ms低电平,4.5ms高电平
    频宽0.56ms周期1.12ms表示0
    频宽1.68ms周期2.24ms表示1
    晶振11.059MHz*/
    #include <reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    //sbit D=P2^6;
    //sbit W=P2^7;
    sbit IR=P3^2;//红外接口
    uchar IR_OK=0,IRdata[4];
    uint time_H,time_L;

    //uchar table[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};        //0-9

    void Init()
    {
               TMOD=0x01;//0000 0001定时器T0工作方式1
            TH0=0x00;
            TL0=0x00;//定时器T0赋初值
            EX0=1;//INTO中断允许
            IT0=1;//INTO中断下降沿触发
            EA=1;//开启总中断
    }

    void main()
    {
       Init();
       while(1)
       {
        if(IR_OK==1)
            {
           
           
         switch(IRdata[2])
             {
                case 0x0c1=0xfe;break;
                case 0x181=0xfd;break;
                case 0x5e1=0xfb;break;
                    case 0x081=0xf7;break;
                    case 0x1c1=0xef;break;
                    case 0x5a1=0xdf;break;
                case 0x421=0xbf;break;
                case 0x521=0x7f;break;
                    case 0x4a1=0x00;break;
                    case 0x161=0xff;break;
                    default:break;
             }
             IR_OK=0;
       }
    }
    }

    /********************************************
    9.5ms=8755,8.5ms=7833
    5ms=5608,4ms=3686
    0.5ms=460,0.7ms=645
    1.5ms=1383,1.75ms=1612
    ********************************************/
    void IR_INT0() interrupt 0
    {
        uchar IR_tmp=0,i,j;
            EX0=0;//关闭INT0中断,只解析当前发过来的码
            TH0=0;
            TL0=0;
            TR0=1;
        while(IR==0);
            TR0=0;
            time_L=TH0*256+TL0;//计算引导码低电平时间

            TH0=0;
            TL0=0;
            TR0=1;
            while(IR==1);
            TR0=0;
            time_H=TH0*256+TL0;//计算引导码高电平时间
            if(time_L>7833&&time_L<8755&&time_H>3686&&time_H<5608)
            {
                for(i=0;i<4;i++)
                    {
                       for(j=0;j<8;j++)
                       {
                           while(IR==0);//只检测高电平时间即可,滤掉低电平
                               TH0=0;
                               TL0=0;
                               TR0=1;
                               while(IR==1);
                               TR0=0;
                               time_H=TH0*256+TL0;
                               IR_tmp=IR_tmp>>1;
                               if(time_H>645&&time_H<1612)
                               {
                                  IR_tmp|=0x80;
                               }
                       }
                       IRdata[i]=IR_tmp;
                    }
               if(IRdata[2]!=~IRdata[3])
               {
                  EX0=1;
                      return;
               }
               else
               {
                  IR_OK=1;
                      EX0=1;
               }
            }
    }


    评分

    参与人数 1与非币 +5 收起 理由
    loveeeboard + 5 三周年铜板双倍!

    查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 15:57 , Processed in 0.122565 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.