⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 红外编码.c

📁 我自己编码的一个空调红外编码程序,使用的是C语言的精确定时
💻 C
字号:
#include <AT89x51.H>
 bit OP;
 unsigned  count;
 unsigned  endcount;
 unsigned char flag;
char iraddr1;
char iraddr2;
 
void sendirdata(char p_irdata);
void delay(void);

main()
     {int i;
      count=0;
      flag=0;
      OP=0;
      P3_7=1;
 
//	  EA=0;
      TMOD=0X12;
//      ET0=1;
      TH0=0Xf3;
      TL0=0Xf3;
//      TR0=1;
//	  TR1=1;
      TCON=0X50;
	  IE=0X9F;
 
      iraddr1=3;
      iraddr2=252;


      for(i=0;i<3;i++)
        {
        delay();
         sendirdata(12);
		 
         }
	  	 
	  while(1);
     }
	 
/***********************************************************/	 
void timeint(void)  interrupt 1
      {
     
       count++;

     if(flag==1)
       {
        P3_7=~P3_7;
        }
     else{P3_7=1;}
       
       }
/*********************************************************************/	
 void sendirdata (char p_irdata)
     {
      int i;
	  
      char irdata=p_irdata;
//发送9ms的起始码 
      TR0=0;
      endcount=340;//340*13=00us
      flag=1;
      count=0;
	  TR0=1;
      do{}while(count<endcount);
//发送4.5ms的结果码
      endcount=165;//117 
      flag=0;
      count=0;
      do{}while(count<endcount);
//发送十六地址的前八位
      irdata=iraddr1;
      for(i=0;i<8;i++)
//先发送0.56ms的38kHz的红外波  
          { endcount=20;
            flag=1;
            count=0;
            do{}while(count<endcount);
     
           if(irdata-(irdata/2)*2)
              {
               endcount=70;//41
               }
          else
              {endcount=20;//15
              }
              flag=0;
              count=0;
          do{}while(count<endcount);
     
          irdata=irdata>>1;
          }
      irdata=iraddr2;
      for(i=0;i<8;i++)
            {
             endcount=20;
             flag=1;
             count=0;
             do{}while(count<endcount);
             if(irdata-(irdata/2)*2)
              {
               endcount=70;//41
              }
             else
              {
               endcount=20;//15
               }
             flag=0;
             count=0;
             do{}while (count<endcount);
        
            irdata=irdata>>1;
			 }
		
       //发送八位数据
       irdata=p_irdata;
       for(i=0;i<8;i++)
           {
            endcount=20;
            flag=1;
            count=0;
        do{}while(count<endcount);
    
        if(irdata-(irdata/2)*2)
            {endcount=70;//41
             }   
         else
             {endcount=20;//15
             }
         flag=0;
         count=0;
        do{}while(count<endcount);
        
        irdata=irdata>>1;
            }
//发送八位数据的反码
      irdata=~p_irdata;
      for(i=0;i<8;i++)
            {
             endcount=20;
             flag=1;
             count=0;
             do{}while(count<endcount);
    
             if(irdata-(irdata/2)*2)
                   {endcount=70;//41
                    }   
            else
                   {endcount=20;//15
                    }
            flag=0;
            count=0;
            do{}while(count<endcount);
        
            irdata=irdata>>1;
             }
        endcount=20;
        flag=1;
        count=0;
         do{}while(count<endcount);
        flag=0;
      }
/*************************************************************/
     void delay(void)
      {
       int i,j;
       for(i=0;i<4;i++)
           {
           for(j=0;j<1;j++)
                     {}
           }
       }


    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -