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

📄 hong_fa.c

📁 红外38k发射和接受代码
💻 C
字号:
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int 
#define key0 P0
#define key1 P2
//
sbit remoteout=P3^5;   //遥控输出口
//
uchar temp;//keyscan();
uint i,j;
uchar flag=0,key=0,keyvol;   //"flag"连发码发射标志位,"key"按键按下标志位
uchar code keyv[8]={1,2,4,8,16,32,64,128};
bit flag1;
//
/************100us延时程序********************/
delay(uint t)
{
	TMOD=0x22;
	TR0=1;
	while(t!=0)
	{
		TH0=0x9b;
		TL0=0x9b;
		while(TF0!=1);
		TF0=0;
		t--;
	}
	TR0=0;
}
//
/************初始化函数*************/
clearmen()
{
	remoteout=0; //关遥控输出
	IE=0x00;
	IP=0x01;
	TMOD=0x22;
	TH1=0xf3;	//定时方式2
	TL1=0xf3;	//38KHZ初值
	EA=1;
}
//
/**************连发码发射程序*************/
alltimesed()
{
	for(j=0;j<9;j++)
	{
		ET1=1;
		TR1=1;
		delay(90);
		ET1=0;
		TR1=0;
		remoteout=0;//38KHZ发9ms
		delay(30);//3ms的结束码
	}
}
//
/**************编码0发射程序**************/
sed0()
{
	ET1=1;
	TR1=1;
	delay(6);//发射0.6ms
	ET1=0;
	TR1=0;
	remoteout=0;
	delay(6);//"0"持续1.2ms
}
//
/*************编码1发射程序***************/
sed1()
{
	ET1=1;
	TR1=1;
	delay(6);
	ET1=0;
	TR1=0;
	remoteout=0;
	delay(18); //"1"持续2.4ms
}
//
/*******引导码,结果码,地址码编码函数******/
frocode()
{
	ET1=1;
	TR1=1;
	delay(90);//9ms的引导码
	ET1=0;
	TR1=0;
	remoteout=0;
	delay(45);//4.5ms的结果码
	sed0();sed0();sed0();sed1();
	sed1();sed1();sed1();sed1();//地址码高八位0x1f
	sed1();sed1();sed1();sed0();
	sed0();sed0();sed0();sed0();//地址码低八位0xe0
}
//
/*************按键后发射函数***************/
tx()
{
	if(flag==0)
	{
	//	switch(keyvol)
	switch(key)
		{
			case 0:{frocode();
					sed0();sed0();sed0();sed0();
					sed0();sed0();sed0();sed1();
					sed1();sed1();sed1();sed1();
					sed1();sed1();sed1();sed0();
					sed0();                           //key1数据码0x01
					delay(360);
					break;}
			case 1:{frocode();
					sed1();sed0();sed0();sed0();
					sed0();sed0();sed0();sed1();
					sed0();sed1();sed1();sed1();
					sed1();sed1();sed1();sed0();sed0();//key2数据码0x81
					delay(360);
					break;}
			case 2:{frocode();
					sed0();sed1();sed0();sed0();
					sed0();sed0();sed0();sed1();
					sed1();sed0();sed1();sed1();
					sed1();sed1();sed1();sed0();sed0();//key3数据码0x41
					delay(360);
					break;}
			case 3:{frocode();
					sed1();sed1();sed0();sed0();
					sed0();sed0();sed0();sed1();
					sed0();sed0();sed1();sed1();
					sed1();sed1();sed1();sed0();sed0();//key4数据码0xc1
					delay(360);
					break;}
			case 4:{frocode();
					sed0();sed0();sed1();sed0();
					sed0();sed0();sed0();sed1();
					sed1();sed1();sed0();sed1();
					sed1();sed1();sed1();sed0();sed0();//key5数据码0x21
					delay(360);
					break;}
			case 5:{frocode();
					sed1();sed0();sed1();sed0();
					sed0();sed0();sed0();sed1();
					sed0();sed1();sed0();sed1();
					sed1();sed1();sed1();sed0();sed0();//key6数据码0xa1
					delay(360);
					break;}
			case 6:{frocode();
					sed0();sed1();sed1();sed0();
					sed0();sed0();sed0();sed1();
					sed1();sed0();sed0();sed1();
					sed1();sed1();sed1();sed0();sed0();//key7数据码0x61
					delay(360);
					break;}
			case 7:{frocode();
					sed1();sed1();sed1();sed0();
					sed0();sed0();sed0();sed1();
					sed0();sed0();sed0();sed1();
					sed1();sed1();sed1();sed0();sed0();//key8数据码0xe1
					delay(360);
					break;}
			case 8:{frocode();
					sed0();sed0();sed0();sed1();
					sed0();sed0();sed0();sed1();
					sed1();sed1();sed1();sed0();
					sed1();sed1();sed1();sed0();sed0();//key9数据码0x11
					delay(360);
					break;}
			case 9:{frocode();
					sed1();sed0();sed0();sed1();
					sed0();sed0();sed0();sed1();
					sed0();sed1();sed1();sed0();
					sed1();sed1();sed1();sed0();sed0();//key10数据码0x91
					delay(360);
					break;}
			case 10:{frocode();
					sed0();sed1();sed0();sed1();
					sed0();sed0();sed0();sed1();
					sed1();sed0();sed1();sed0();
					sed1();sed1();sed1();sed0();sed0();//key11数据码0x51
					delay(360);
					break;}
			case 11:{frocode();
					sed1();sed1();sed0();sed1();
					sed0();sed0();sed0();sed1();
					sed0();sed0();sed1();sed0();
					sed1();sed1();sed1();sed0();sed0();//key12数据码0xd1
					delay(360);
					break;}
			case 12:{frocode();
					sed0();sed0();sed1();sed1();
					sed0();sed0();sed0();sed1();
					sed1();sed1();sed0();sed0();
					sed1();sed1();sed1();sed0();sed0();//key13数据码0x31
					delay(360);
					break;}
			case 13:{frocode();
					sed1();sed0();sed1();sed1();
					sed0();sed0();sed0();sed1();
					sed0();sed1();sed0();sed0();
					sed1();sed1();sed1();sed0();sed0();//key14数据码0xb1
					delay(360);
					break;}
			case 14:{frocode();
					sed0();sed1();sed1();sed1();
					sed0();sed0();sed0();sed1();
					sed1();sed0();sed0();sed0();
					sed1();sed1();sed1();sed0();sed0();//key15数据码0x71
					delay(360);
					break;}
			case 15:{frocode();
					sed1();sed1();sed1();sed1();
					sed0();sed0();sed0();sed1();
					sed0();sed0();sed0();sed0();
					sed1();sed1();sed1();sed0();sed0();//key16数据码0xf1
					delay(360);
					break;}
			case 16:{frocode();
					sed0();sed0();sed0();sed0();
					sed1();sed0();sed0();sed1();
					sed1();sed1();sed1();sed1();
					sed0();sed1();sed1();sed0();sed0();//key17数据码0x09
					delay(360);
					break;}
			case 17:{frocode();
					sed1();sed0();sed0();sed0();
					sed1();sed0();sed0();sed1();
					sed0();sed1();sed1();sed1();
					sed0();sed1();sed1();sed0();sed0();//key18数据码0x89
					delay(360);
					break;}
			case 18:{frocode();
					sed0();sed1();sed0();sed0();
					sed1();sed0();sed0();sed1();
					sed1();sed0();sed1();sed1();
					sed0();sed1();sed1();sed0();sed0();//key19数据码0x49
					delay(360);
					break;}
			case 19:{frocode();
					sed1();sed1();sed0();sed0();
					sed1();sed0();sed0();sed1();
					sed0();sed0();sed1();sed1();
					sed0();sed1();sed1();sed0();sed0();//key20数据码0xc9
					delay(360);
					break;}
			case 20:{frocode();
					sed0();sed0();sed1();sed0();
					sed1();sed0();sed0();sed1();
					sed1();sed1();sed0();sed1();
					sed0();sed1();sed1();sed0();sed0();//key21数据码0x29
					delay(360);
					break;}
			case 21:{frocode();
					sed1();sed0();sed1();sed0();
					sed1();sed0();sed0();sed1();
					sed0();sed1();sed0();sed1();
					sed0();sed1();sed1();sed0();sed0();//key22数据码0xa9
					delay(360);
					break;}
			case 22:{frocode();
					sed0();sed1();sed1();sed0();
					sed1();sed0();sed0();sed1();
					sed1();sed0();sed0();sed1();
					sed0();sed1();sed1();sed0();sed0();//key23数据码0x69
					delay(360);
					break;}
			case 23:{frocode();
					sed1();sed1();sed1();sed0();
					sed1();sed0();sed0();sed1();
					sed0();sed0();sed0();sed1();
					sed0();sed1();sed1();sed0();sed0();//key24数据码0xe9
					delay(360);
					break;}
			case 24:{frocode();
					sed0();sed0();sed0();sed1();
					sed1();sed0();sed0();sed1();
					sed1();sed1();sed1();sed0();
					sed0();sed1();sed1();sed0();sed0();//key25数据码0x19
					delay(360);
					break;}
			case 25:{frocode();
					sed1();sed0();sed0();sed1();
					sed1();sed0();sed0();sed1();
					sed0();sed1();sed1();sed0();
					sed0();sed1();sed1();sed0();sed0();//key26数据码0x99
					delay(360);
					break;}
			case 26:{frocode();
					sed0();sed1();sed0();sed1();
					sed1();sed0();sed0();sed1();
					sed1();sed0();sed1();sed0();
					sed0();sed1();sed1();sed0();sed0();//key27数据码0x59
					delay(360);
					break;}
			case 27:{frocode();
					sed1();sed1();sed0();sed1();
					sed1();sed0();sed0();sed1();
					sed0();sed0();sed1();sed0();
					sed0();sed1();sed1();sed0();sed0();//key28数据码0xd9
					delay(360);
					break;}
			case 28:{frocode();
					sed0();sed0();sed1();sed1();
					sed1();sed0();sed0();sed1();
					sed1();sed1();sed0();sed0();
					sed0();sed1();sed1();sed0();sed0();//key29数据码0x39
					delay(360);
					break;}
			case 29:{frocode();
					sed1();sed0();sed1();sed1();
					sed1();sed0();sed0();sed1();
					sed0();sed1();sed0();sed0();
					sed0();sed1();sed1();sed0();sed0();//key30数据码0xb9
					delay(360);
					break;}
			case 30:{frocode();
					sed0();sed1();sed1();sed1();
					sed1();sed0();sed0();sed1();
					sed1();sed0();sed0();sed0();
					sed0();sed1();sed1();sed0();sed0();//key31数据码0x79
					delay(360);
					break;}
			case 31:{frocode();
					sed1();sed1();sed1();sed1();
					sed1();sed0();sed0();sed1();
					sed0();sed0();sed0();sed0();
					sed0();sed1();sed1();sed0();sed0();//key32数据码0xf9
					delay(360);
					break;}
			default:break;
		}
	}
	if(flag==1)
	{
		alltimesed();
	}
}

/*****************键功能函数***************/
/*keywork()
{
	keyvol=0x00;
	key0=0xff;
	key1=0xf0;
	if(key0!=0xff)
	{
		delay(360);//按键超过36ms开始判断按键值
		if(key0!=0xff)
		{
			key=1;
			key1=0xfe;
			if(key0!=0xff)
			{
				for(i=0;i<8;i++)
				{
					if(~key0==keyv[i])
					{
						keyvol=i;
						flag=0;
					}
				}
			}
			key1=0xfd;
			if(key0!=0xff)
			{
				for(i=0;i<8;i++)
				{
					if(~key0==keyv[i])
					{
						keyvol=i+8;
						flag=0;
					}
				}
			}
			key1=0xfb;
			if(key0!=0xff)
			{
				for(i=0;i<8;i++)
				{
					if(~key0==keyv[i])
					{
						keyvol=i+16;
						flag=0;
					}
				}
			}
			key1=0xf7;
			if(key0!=0xff)
			{
				for(i=0;i<8;i++)
				{
					if(~key0==keyv[i])
					{
						keyvol=i+24;
						flag=0;
					}
				}
			}
			delay(360);//当键按下超过108ms,发射连发码
			if(key0!=0xff)
			{
				delay(360);
				if(key0!=0xff)
				{
					flag=1;
			     }
			}
		}
		while(key0!=0xff);
	}
}	   */
//
//
void keyscan()
{
	P1=0xfe;
	temp=P1;
	temp&=0xf0;
	if(temp!=0xf0)
	{
		delay(20);
		if(temp!=0xf0)
		{
			flag1=1;
			switch(temp)
			{
				case 0xe0: key=0;break;
				case 0xd0: key=1;break;
				case 0xb0: key=2;break;
				case 0x70: key=3;break;
	
			} 

		}		
	}
	P1=0xfd;
	temp=P1;
	temp&=0xf0;
	if(temp!=0xf0)
	{
		delay(20);
		if(temp!=0xf0)
		{
			flag1=1;
			switch(temp)
			{
				case 0xe0: key=4;break;
				case 0xd0: key=5;break;
				case 0xb0: key=6;break;
				case 0x70: key=7;break;
	
			} 
		}		
	}
    P1=0xfb;
	temp=P1;
	temp&=0xf0;
	if(temp!=0xf0)
	{
		delay(20);
		 if(temp!=0xf0)
		 {
		 	flag1=1;
			switch(temp)
			{
				case 0xe0: key=8;break;
				case 0xd0: key=9;break;
				case 0xb0: key=10;break;
				case 0x70: key=11;break;
	
			} 	
		}	
	}
	P1=0xf7;
	temp=P1;
	temp&=0xf0;
	if(temp!=0xf0)
	{
		delay(20); 
		if(temp!=0xf0)
		{
			flag1=1;
			switch(temp)
			{
				case 0xe0: key=12;break;
				case 0xd0: key=13;break;
				case 0xb0: key=14;break;
				case 0x70: key=15;break;
	
			} 
		}		
	}
	 



}

/***************主函数****************/
main()
{

	while(1)
	{
		/*keywork();
		if(key==1)
		{
			tx();
		}
		key=0; */


		if(flag1==1)
		{
			tx();
		}
	
		flag1=0;
	}
}
/****************38KHz发生器******************/
void time_intt1(void) interrupt 3
{
	remoteout=~remoteout;
}
//
//
/*************************END************************/


⌨️ 快捷键说明

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