爱点网

I Click Web.Com

51单片机 红外遥控 范例代码 可用

如果需要了解红外遥控的原理请点击 -> 红外遥控原理

为方便使用,我的范例代码是只提供 .h .c ,使用这种方式也方便进行代码替换,使你得主代码区域不会太过于复杂。我只会简单在最后写一个使用的范例,我不会将整个功能的代码放上来,因为你的作品功能只有自己知道,我如果整个实现都写出来,只会误导到你。

=========================Infrared.h =========================

#ifndef __IR_H__
#define __IR_H__
#include<reg52.h>
#include<intrins.h>

sbit IRIN = P3^2;     //红外接收器数据口INT0
extern unsigned char IRCOM[7];

//初始化红外遥控接收
void IR_Init(void);

#endif

========================= Infrared.c =========================

#include "Infrared.h"
unsigned char IRCOM[7];

void delay(unsigned char x)    //x*0.14MS
{
	unsigned char i;
	while(x--)
	{
		for (i = 0; i<13; i++) {}
	}
}


void IR_Init(void)
{
	IRIN=1;                    //I/O口初始化
	IE=0x81;                 //允许总中断中断,使能 INT0 外部中断
	TCON=0x01;               //触发方式为脉冲负边沿触发
}




void IR_IN() interrupt 0
{
	unsigned char j,k,N=0;
	EX0 = 0;   

	delay(15);
	if (IRIN==1) 
	{ 
		EX0 =1;
		return;
	} 
	           //确认IR信号出现
	while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
		delay(1);
	
	for (j=0;j<4;j++)         //收集四组数据
	{ 
		for (k=0;k<8;k++)        //每组数据有8位
		{
			while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
			{delay(1);}
			while (!IRIN)          //等 IR 变为高电平
				delay(1);
			while (IRIN)           //计算IR高电平时长
			{
				delay(1);
				N++;           
				if (N>=30)
				{ 
					EX0=1;
					return;
				}                  //0.14ms计数过长自动离开。
			}                        //高电平计数完毕                
			IRCOM[j]=IRCOM[j] >> 1;     //数据最高位补“0”
			if(N>=8)
			{
				IRCOM[j] = IRCOM[j] | 0x80;		  //数据最高位补“1”
			}  
			N=0;
		}
	}
	
	if(IRCOM[2]!=~IRCOM[3])
	{ 
		EX0=1;
		read_temp_flag = 0;

		return; 
	}
	//IRCOM[5]和IRCOM[6]只是将操作码拆成高四位和低四位,可以不予理会
	IRCOM[5]=IRCOM[2] &amp; 0x0F;     //取键码的低四位
	IRCOM[6]=IRCOM[2] >> 4;       //右移4次,高四位变为低四位
	 }

	EX0 = 1; 

}

========================= main.c =========================

#include "Infrared.h"

void main()
{
  lcd1602_display(IRCOM[2]);//此处我只是象征性的使用,IRCOM[2]代表的就是接收到的操作码
  //另外,在使用这个作为按键的时候,记得在使用的时候需要将IRCOM[2]内的数值进行清零,否则你会发现系统为什么一直重复按下这个键
}

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注