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

📄 ir_receive.c

📁 智能家居系统。。。包括PS2键盘
💻 C
字号:
#include <REG52.H>
#include <intrins.h>

#define uchar unsigned char
sbit	IR_Pin=P3^3;

extern uchar inbuf1[];
//extern uchar read_flagg;
extern uchar	Ir_Over;

uchar	Ir_Count=0;
uchar	Ir_Over;
uchar	Ir_Data;
uchar 	ti,temp=0;
uchar 	DAT[]={0,0,0,0};

void delay_2us(unsigned char);
void delay_1ms();
void Init();
/*********蜂鸣器函数调用声明********/
//void ok_beep();
/********串口通讯函数调用声明*******/
void send_string_com(unsigned char *str,unsigned char strlen); //向串口发送一个字符串
void send_char_com(unsigned char ch);

void	IR()	interrupt	2
{
	EX0=0;	EX1=0;		//关外部中断
	Ir_Data=1;
	for (ti=0;ti<4;ti++)				//延时,跳过引导码的低电平
	{
		delay_1ms();
		if	(IR_Pin)	
		{
			Ir_Data=0;
			break;
		}
	}
	if (Ir_Data)
	{
		while(IR_Pin==0);
		for (ti=0;ti<4;ti++)				//延时,跳过引导码高电平
		{
			delay_1ms();
			if (IR_Pin==0) 
			{
				Ir_Data=0;
				break;
			}
		}
		if (Ir_Data)
		{
			while (IR_Pin);					//等待低电平
			for (temp=0;temp<4;temp++)		//存放四个字节
				for (Ir_Count=0;Ir_Count<8;Ir_Count++)			//8位
				{
					delay_2us(100);			//延时200us,跳过低电平时间
					while (IR_Pin==0);
					delay_2us(200);			//延时800us
					delay_2us(200);
					DAT[temp]>>=1;
					if (IR_Pin)	DAT[temp] |= 0x80;
					while(IR_Pin);
				}
			if (DAT[0]==DAT[1]&&DAT[2]!=DAT[3]) Ir_Over=1;
			for (ti=0;ti<118;ti++)	delay_1ms();
		}
	}	
	EX0=1;EX1=1;	//开外部中断
}

void Init_IR()
{
	Ir_Over=0;
	IT1=1;
	EX1=1;
	EA=1;
}

void IR_Receive_function()
{
	unsigned i=0,k=0;
		if (Ir_Over)	
		{
			EX0=0;	EX1=0;		//关外部中断
			if (DAT[0]==DAT[1]&&DAT[2]!=DAT[3])
			{
				switch (DAT[3])
				{
					case 0xFB:	break;   //光电监测
					case 0XE8:	if(inbuf1[19]=='1')inbuf1[19]='0';else inbuf1[19]='1';break;
					case 0XE9:	if(inbuf1[20]=='1')inbuf1[20]='0';else inbuf1[20]='1';break;
					case 0XEA:	if(inbuf1[21]=='1')inbuf1[21]='0';else inbuf1[21]='1';break;
					case 0XEC:	if(inbuf1[22]=='1')inbuf1[22]='0';else inbuf1[22]='1';break;
					case 0XED:	if(inbuf1[23]=='1')inbuf1[23]='0';else inbuf1[23]='1';break;
					case 0XEE:	if(inbuf1[24]=='1')inbuf1[24]='0';else inbuf1[24]='1';break;
					case 0XF0:	if(inbuf1[25]=='1')inbuf1[25]='0';else inbuf1[25]='1';break;
					case 0XF1:	if(inbuf1[26]=='1')inbuf1[26]='0';else inbuf1[26]='1';break;
					case 0XF2:	break;
					case 0XF4:	break;
					case 0XF5:	break;
					case 0XF6:	break;
					default:	break;
				}	
			}
			Ir_Over=0;
			EX0=1;EX1=1;	//开外部中断
		}
}

⌨️ 快捷键说明

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