关于红外解码的

2019-07-15 22:59发布

本帖最后由 wolfwyf 于 2013-8-17 09:34 编辑

目的  通过遥控器控制P0口的Led亮灭  红外接口P3。2
遥控器上面的码值是正确的  现在就是程序有有问题 无法正常解码 求高手们给看看~

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit IR=P3^2;
uint Low_time,High_Time;
unsigned char a[4];

bit De_Code(void)
{
        uchar i,j;
        uchar temp;
        for(i=0;i<4;i++)
        {
                for(j=0;j<8;j++)
                {
                        temp=temp>>1;        //右移一位


                        TH0=0;                  //低电平
                        TL0=0;
                        TR0=1;
                        while(IR==0);
                        TR0=0;
                        Low_Time=TH0*256+TL0;
                        

                        TH0=0;                         //高电平
                        TL0=0;
                        TR0=0;
                        while(IR==1);
                        TR0=0;
                        High_Time=TH0*256+TL0;
                        if((Low_Time<370)||(Low_Time>640))
                        {
                                return 0;
                        }
                        if((High_Time>420)&&(High_Time<620))
                        {
                                temp=temp&0x7f;
                        }
                        if((High_Time>1300)&&(High_Time<1800))
                        {
                                temp=temp|0x80;
                        }
                }
                a=temp;
        }
   return 1;   
}


void Car_Run()
{
        switch(a[3])
        {
                case(0x03):P0=0x55;break;
            case(0x1b):P0=0xaa;break;
                case(0x09):P0=0xdd;break;
                case(0x1f):P0=0x77;break;
                case(0x10):P0=0x99;break;
                case(0x01):P0=0x66;break;
                default:P0=0x00;
        }
}

void main()
{
        EA=1;
        EX0=1;
        ET0=1;
        IT0=1;
        TMOD=0x01;
        TR0=0;
        while(1);
}


void Int0(void) interrupt 0
{
        EX0=0;
        TH0=0;
        TL0=0;
        TR0=1;
        while(IR==0);
        TR0=0;
        Low_Time=TH0*256+TL0;



        TH0=0;
        TL0=0;
        TR0=1;
        while(IR==1);
        TR0=0;
        High_Time=TH0*256+TL0;
        if((Low_Time>7800)&&(Low_Time<8800)&&(High_Time>3600)&&(High_Time<4700))
        {
                if(De_Code()==1)
                {
                        Car_Run();        
                }
        }
        EX0=1;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
wolfwyf
1楼-- · 2019-07-16 01:59
 精彩回答 2  元偷偷看……
wolfwyf
2楼-- · 2019-07-16 03:20
大哥 不能沉啊  
wolfwyf
3楼-- · 2019-07-16 03:30
这么多人怎么就没人光顾我呢?

一周热门 更多>