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

📄 ir_send.c

📁 大家好
💻 C
字号:
//红外发送程序

#include <reg52.h>

#define uchar unsigned char
#define uint  unsigned int 

#define send0 send_pulse_565 ();	send_space_1685	();
#define send1 send_pulse_565 ();	send_space_560 	();

uchar SYS_DATA=0x49;					//系统码

sbit OUT=P3^7;


void send_bit   (uchar one_bit);		//发送一位字节
void send_data  (uchar one_data);		//发送一个数据
										//包括一个起始标志 一个系统码及其反码 一个数据码(one_data)及其反码	

char code disp[]={0x28,0x7E,0xA2,0x62,0x74,0x61,0x21,0x7A,0x20,0x60,0x30,0x25,0xA7,0x26,0xA1,0xB1};
char i1=0,i2=0,i3=0,i4=0,i5=0,i6=0,i7=0,i8=0; //显示缓冲 


void delay(uchar t)
{ char a;
  while(t--)
  for(a=255;a>0;a--);  }

void display(uchar t)
{while(t--)
 {P0=disp[i1];
  P2=0x7f;
  delay(1);
  P2=0xff;
  P0=disp[i2];
  P2=0xbf;
  delay(1);
  P2=0xff;
  P0=disp[i3];
  P2=0xdf;
  delay(1);
  P2=0xff;
  P0=disp[i4];
  P2=0xef;
  delay(1);
  P2=0xff;
  P0=disp[i5];
  P2=0xf7;
  delay(1);
  P2=0xff;
  P0=disp[i6];
  P2=0xfb;
  delay(1);
  P2=0xff;
  P0=disp[i7];
  P2=0xfd;
  delay(1);
  P2=0xff;
  P0=disp[i8];
  P2=0xfe;
  delay(1);
  P2=0xff;} }

void send_pulse_9000 (void)				//9ms脉宽
{
	TH0=0xdc;
	TL0=0xff;
	TR0=1;
	TR1=1;
	while(TR0);
	TR1=0;	
	OUT=1;
						}


void send_space_4500 (void)				//4.5ms间隔
{	
	OUT=1;
	TH0=0xee;
	TL0=0x7f;
	TR0=1;
	while(TR0);
	OUT=1;
						}

void send_pulse_565 (void)				//0.565ms脉宽
{
	TH0=0xfd;
	TL0=0xee;
	TR0=1;
	TR1=1;
	while(TR0);
	TR1=0;	
	OUT=1;
						}



void send_space_1685 (void)				//1.685ms间隔
{	
	OUT=1;
	TH0=0xf9;
	TL0=0x7f;
	TR0=1;
	while(TR0);
	OUT=1;
						}


void send_space_560 (void)				//0.56ms间隔
{	
	OUT=1;
	TH0=0xfd;
	TL0=0xea;
	TR0=1;
	while(TR0);
	OUT=1;
						}





void send_bit	(uchar one_bit)
{
	uchar i;
	uchar key_num=0x01;
	for(i=0;i<8;i++)
	{
		send_pulse_565 ();							//先发0.565毫秒脉宽
		
		if( (one_bit&key_num)==1 )
			send_space_1685 ();						//先发低位 某位是1则延时1.685ms
		else	
			send_space_560();						//如果是0则延时0.56ms
		one_bit=one_bit>>1;							//one_bit右移一位
		
										}
												}



void send_data (uchar one_data)
{
	uint t=1000;
	send_pulse_9000();					//起始码 9ms的脉宽 考虑到误差
	send_space_4500();					//4.5ms的间隔	
	send_bit (SYS_DATA);				//发系统码
	send_bit (~SYS_DATA);				//发系统码的反码
	send_bit (one_data);				//发数据码
	send_bit (~one_data);				//发数据码的反码
	TR1=1;
	while(t--);
	TR1=0;	
	OUT=1;
														}

	
	
void main(void)
{
	uchar c=0x77;
	uint t=65535;
	TMOD=0x21;							//T0产生精确时间的延时或脉宽 16位
										//T1产生38kHz方波	         8位自动重装
	TH1=0xf3;
	TL1=0xf3;
	IE=0x8a;
   	delay(255);
	display(100);
	delay(255);
	display(100);
	while(1)
	{
		send_data(c);
							}
									}


void time0 (void) interrupt 1
{
	TR0=0;
	TR1=0;
			}
	
void time1 (void) interrupt 3			//T1用来产生38kHz方波
{
	OUT=~OUT;
				}

⌨️ 快捷键说明

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