lwlzhjcblwl 发表于 2011-4-20 12:37:34

我将电视遥控器的红外编码放到单片机stc89c52中,电视机没有反应,请帮忙查看一下代码中

http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_632404EV22ZS.png
电视遥控器2号键发射后被红外一体化接收头接收到的32位38 c7 02 fd (原文件名:QQ截图电视遥控器发射.png)

http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_632405X2BIL0.png
相应的通过单片机发射的38 c7 02 fd (原文件名:QQ截图单片机发射a.png)

贴上程序的编码过程
#include<reg52.h>

sbit OP=P3^3;
static unsigned int count,z;
static unsigned int endcount;
static unsigned char flag;
unsigned chariraddr1=0x38;
unsigned chariraddr2=0x02;


void delay(int j)
{
        while(j--);
}


void int0() interrupt 1
{
        TH0=0xe6;
        TL0=0xe6;
        count++;
        if(flag==1)OP=~OP;
        else OP=0;
}


void SendIRdata()
{
        int i;
        unsigned char irdata ;
        endcount=242;//发送9ms的起始码
//        endcount=223;
        flag=1;
        count=0;
        do{}while(count<endcount);
       
        endcount=122; //发送4.5ms的结果码
//        endcount=117;
        flag=0;
        count=0;
        do{}while(count<endcount);
           irdata=iraddr1;//发送十六位地址的前八位
        for(i=0;i<8;i++)
        {
           endcount=17;//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
           //endcount=10;
                flag=1;
           count=0;
           do{}while(count<endcount);
            //if(irdata-(irdata/2)*2)//判断二进制数个位为1还是0
                if(irdata%2==1)
            {
              endcount=38;//1为宽的高电平
                        //endcount=41;
            }
            else
            {
                   endcount=17;   //0为窄的高电平
               
            }
            flag=0;
            count=0;
            do{}while(count<endcount);
            irdata=irdata>>1;
        }


        irdata=~iraddr1;//发送十六位地址的后八位
        for(i=0;i<8;i++)
        {
           endcount=17;
           flag=1;
           count=0;
           do{}while(count<endcount);
           //if(irdata-(irdata/2)*2)
           if(irdata%2==1)
                {
              endcount=38;
           }
           else
           {
                       endcount=17;
           }
           flag=0;
           count=0;
           do{}while(count<endcount);
           irdata=irdata>>1;
        }
       
        irdata=iraddr2;//发送八位数据
        for(i=0;i<8;i++)
        {
           endcount=13;
           flag=1;
           count=0;
           do{}while(count<endcount);
           if(irdata%2==1)
           {
                 endcount=42;
           }
           else
           {
                       endcount=13;
           }
           flag=0;
           count=0;
           do{}while(count<endcount);
           irdata=irdata>>1;
        }

        irdata=~iraddr2;//发送八位数据的反码
        for(i=0;i<8;i++)
        {
           endcount=13;
           flag=1;
           count=0;
           do{}while(count<endcount);
           if(irdata%2==1)
           {
                 endcount=42;
           }
           else
           {
                       endcount=13;
           }
           flag=0;
           count=0;
           do{}while(count<endcount);
           irdata=irdata>>1;
        }
        endcount=13;
        flag=1;
        count=0;
        do{}while(count<endcount);
       

        endcount=1084;
        flag=0;
        count=0;
        do{}while(count<endcount);
       
        endcount=244;
        flag=1;
        count=0;
        do{}while(count<endcount);
       
        endcount=61;
        flag=0;
        count=0;
        do{}while(count<endcount);
       
        endcount=17;
        flag=1;
        count=0;
        do{}while(count<endcount);
       
       
        flag=0;
       
       
                               
}



void main()
{
       
        OP=0;
        //TH0=0xe6;
        //TL0=0xe6;
        TH0=0xe6;
        TL0=0xe6;
        TMOD=0x02;   
        TR0=1;
        ET0=1;
        EA=1;
       
       
        while(1)
        {       
                P0=0x00;
                SendIRdata();
                for(z=0;z<5;z++)delay(30000);
        }       
}
页: [1]
查看完整版本: 我将电视遥控器的红外编码放到单片机stc89c52中,电视机没有反应,请帮忙查看一下代码中