求51单片机红外遥控器(电视遥控或者机顶盒的红外遥控器)解码C程序!可以用的程序加财富值至少20个

2025-04-07 23:41:37
推荐回答(2个)
回答1:

实物

原理图


#include
#include
sbit relay = P3^7;
sbit relay1 = P1^2;
bit test_bit,send_bit;
unsigned char test,data_1;
unsigned char data_H[16]={0};
unsigned char code data_c[5]={0x34,0x0f,0x10,0x10,0x10};
void delay2s(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=127;c>0;c--)
        for(b=235;b>0;b--)
            for(a=32;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}

void MCUInit(void)
{
    TMOD = 0x21;
    TH0 = 0x00;
    TL0 = 0x00;
    EA = 1;
    SCON = 0x50;
    TH1 = 0xF3;
    TL1 = TH1;
    PCON = 0x00;
    ES = 1;
    TR1 = 1;
    EX0=1;
    IT0=1;
    relay = 0;
    relay1 = 0;
}

void SendOneByte(unsigned char c)
{
    SBUF = c;
    while(!TI);
    TI = 0;
}

void main(void)
{
    
    MCUInit();
    while(1)
    {
        if(send_bit==1)
        {

        send_bit=0;
        SendOneByte(0x55);
        SendOneByte(data_H[1]);
        SendOneByte(data_H[2]);
            if(data_c[0]==data_H[1])
            {    
                if(data_c[1]==data_H[2])
                {
                SendOneByte(0xbb);relay=~relay;relay1=~relay1;
                }
            }
        data_H[1]=0;data_H[2]=0;data_H[3]=0;data_H[4]=0;data_H[5]=0;
        EA=1;
        }
        delay2s();
        test=0;
    }
}

void EX0Interrupt(void) interrupt 0
{
    test++;

    TR0=1;
    data_H[test-1]=TH0;
    TH0=0;
    TL0=0;
    
    SendOneByte(data_H[test-1]);
    if(test==16)
    {test=0;TR0=0;send_bit=1;EA=0;
            SendOneByte(0xaa);
    }
}

回答2:

我 来 完成 吧