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

📄 红外学习.c

📁 单片机模拟红外信号
💻 C
字号:
/*uchar=1us/次				uint=2us/次
0.56MS=560US=51*11US		while()=11us/次
0.84ms=840us=76*11us
9MS=9000US=818*11US
4.5MS=4500US=409*11US
4MS=4000US=363*11US */
#include<reg51.h>
#define uchar unsigned char
#define	uint unsigned int
sbit ir=P3^2;
sbit deng1=P1^0;
sbit deng2=P1^1;
sbit deng3=P1^2;
bit  ir_byte;
delayus(uint z)
{
while(z--);
}

//功能:接收红外波形,并分地址,数据与数据反码
void ir_data()
{
	uchar i,ir_date,ir_buck;
	uint ir_add;	
	while(ir==1)								//有信号进入 
	{
		while(ir!=0);	
		delayus(450);		
		while(ir==0)							//延时9MS判断是否为起始信号
		{
			delayus(50);										
		for(i=0;i<16;i++)
			{				
			    while(ir!=1);	
				while(ir!=0);	
				delayus(90);					//延时0.84MS判断为高电平还是低电? 							
												
				if(ir==0)
				ir_byte=1;					
				else
				ir_byte=0;
				
				if(ir_byte)
				ir_add=(ir_add>>1)|0x8000;
				else
				ir_add>>=1;
			}					
				
			
		for(i=0;i<8;i++)
			{
				while(ir!=1);	
				while(ir!=0);	
				delayus(90);						//延时0.84MS判断为高电平还是低电? 							
												
				if(ir==0)
				ir_byte=1;					
				else
				ir_byte=0;
				
				if(ir_byte)
				ir_date=(ir_date>>1)|0x80;
				else
				ir_date>>=1;						//数据码 
			}
		

		for(i=0;i<8;i++)
			{
				while(ir!=1);	
				while(ir!=0);	
				delayus(90);						//延时0.84MS判断为高电平还是低电? 							
												
				if(ir==0)
				ir_byte=1;					
				else
				ir_byte=0;
				
				if(ir_byte)
				ir_buck=(ir_buck>>1)|0x80;
				else
				ir_buck>>=1;						//数据反码
			}
			
			if(ir_date!=(~ir_buck))				//校验
			deng1=0;				
		/*
			while(add==0xf0f0)
					deng1=0;
			//	while(date==0xf0)
			//		deng2=0;
			//	while(date1==0xf0)
			//		deng3=0;*/
			
		}
	}							
}

main()
{	
	while(1)
	{
		ir_data();
		
	}
}


⌨️ 快捷键说明

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