📄 ir_receive.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 + -