微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于红外解码的

关于红外解码的

时间:10-02 整理:3721RD 点击:

目的  通过遥控器控制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;
}

总是有一个错误~~~~~~~~~~

大哥 不能沉啊  

这么多人怎么就没人光顾我呢?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top