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

📄 send.c

📁 红外发送程序!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
💻 C
字号:
#include <reg52.h>
#include <intrins.h>
 sbit P3_4=P3^2;
 sbit P3_2=P3^4;
 sbit P2_0=P2^0;
 sbit P2_1=P2^4;
 sbit P2_7=P2^7;
 sbit P2_2=P2^2;
 sbit P2_5=P2^5;
 unsigned int endcount; //终止延时计数
 static unsigned char Flag;      //红外发送标志
 unsigned char iraddr1;  //十六位地址的第一个字节
 unsigned char iraddr2;  //十六位地址的第二个字节
 unsigned char iraddr3;
 unsigned char iraddr4;
 void SendIRdata(char p_irdata1,char p_irdata2,char p_irdata3);
 void delay_send();
 void delay1_send();
 char getkey()
 {   
     if(!P2_0)
	 {
	 	delay_send();
		if(!P2_0)return 1; 
	 }                    //last
     if(!P2_1)
	 {
	 	delay_send();
		if(!P2_1)return 2; 
	 }             //next
     if(!P2_2)
	 {
	 	delay_send();
		if(!P2_2)return 3; 
	 }             //sound+
     if(!P2_5)
	 {
	 	delay_send();
	  	if(!P2_5)return 4; 
	 }             //sound-
     return 0;
  }

  void main(void)
  {
    char key=0;
    while(1){	
        key=getkey();
		P3_4 = 1;
//		key=1;
        if(key==1)SendIRdata(0x01,0xfd,0xca);//last
        if(key==2)SendIRdata(0x01,0xfd,0xd2);//next
        if(key==3)SendIRdata(0x01,0xfd,0xc1);//sound+
        if(key==4)SendIRdata(0x01,0xfd,0x99);//sound-
		if(key!=0)delay1_send();

    }
  }
  void SendIRdata(char p_irdata1,char p_irdata2,char p_irdata3)
  {
    int i;
	iraddr1=p_irdata1;
	iraddr2=p_irdata2;
    iraddr3=p_irdata3;
	iraddr4=~p_irdata3;
    endcount=350;
	P3_4=0;
	while(endcount!=0)
	{
		_nop_();
		endcount--;
		
		P2_7=~P2_7;
	}
    //发送4.5ms的结果码
    endcount=350;
	P3_4=1;
    while(endcount!=0)
	{ 
		_nop_();
		endcount--;
		P3_2=~P3_2;
	}
    //发送十六位地址的前八位
    //irdata=iraddr1;
    for(i=0;i<8;i++)
    {
       //先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平) 字串6 
	   P3_4=0;
       endcount=47;
       while(endcount!=0)
		{
			_nop_();
			endcount--;
			P2_7=~P2_7;
		}				
      //停止发送红外信号(即编码中的高电平)
       if(iraddr1&0x01==1)  //判断二进制数个位为1还是0
       {
         endcount=127;  //1为宽的高电平
       }
      else
       {
       	 endcount=47;   //0为窄的高电平
       }
		P3_4=1;
      while(endcount!=0)
	  { 
		_nop_();
		endcount--;
		P3_2=~P3_2;
	  }
	  iraddr1=iraddr1>>1;
    }

	for(i=0;i<8;i++)
    {
		P3_4=0;
       //先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平) 字串6 
       endcount=47;
       while(endcount!=0)
		{
			_nop_();
			endcount--;
			P2_7=~P2_7;
		}				
      //停止发送红外信号(即编码中的高电平)
       if(iraddr2&0x01==1)  //判断二进制数个位为1还是0
       {
         endcount=127;  //1为宽的高电平
       }
      else
       {
       	 endcount=47;   //0为窄的高电平
       }
		P3_4=1;
      while(endcount!=0)
	  { 
		_nop_();
		endcount--;
		P3_2=~P3_2;
	  }
	  iraddr2=iraddr2>>1;
    }

	for(i=0;i<8;i++)
    {
    	P3_4=0;   
	//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平) 字串6 
       endcount=47;
       while(endcount!=0)
		{
			_nop_();
			endcount--;
			P2_7=~P2_7;
		}				
      //停止发送红外信号(即编码中的高电平)
       if(iraddr3&0x01==1)  //判断二进制数个位为1还是0
       {
         endcount=127;  //1为宽的高电平
       }
      else
       {
       	 endcount=47;   //0为窄的高电平
       }
	   P3_4=1;
      while(endcount!=0)
	  { 
		_nop_();
		endcount--;
		P3_2=~P3_2;
	  }
	  iraddr3=iraddr3>>1;
    }

	for(i=0;i<8;i++)
    {
       P3_4=0;
		//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平) 字串6 
       endcount=47;
       while(endcount!=0)
		{
			_nop_();
			endcount--;
			P2_7=~P2_7;
		}				
      //停止发送红外信号(即编码中的高电平)
       if(iraddr4&0x01==1)  //判断二进制数个位为1还是0
       {
         endcount=127;  //1为宽的高电平
       }
      else
       {
       	 endcount=47;   //0为窄的高电平
       }
	   P3_4=1;
      while(endcount!=0)
	  { 
		_nop_();
		endcount--;
		P3_2=~P3_2;
	  }
	  iraddr4=iraddr4>>1;
    }
    endcount=47;
	P3_4=0;
	while(endcount!=0)
	{
		_nop_();
		endcount--;
		P2_7=~P2_7;
	}	
	P3_4=1;
  }

  void delay_send()
  {
    char i,j;
    for(i=20;i>0;i--)
    {
      for(j=200;j>100;j--);
      
    }
}
void delay1_send()
{
	unsigned int j;
//	for(i=0;i<3;i++)       //3*177=531uS
		for(j=0;j<32767;j++);

}

⌨️ 快捷键说明

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