TA的每日心情 | 奋斗 2017-7-4 08:55 |
---|
签到天数: 234 天 连续签到: 1 天 [LV.7]常住居民III
|
红外解码程序,只能执行一次,再按其它按键就没用了,请教
/*************************************************
引导码:9ms低电平,4.5ms高电平
频宽0.56ms周期1.12ms表示0
频宽1.68ms周期2.24ms表示1
晶振11.059MHz*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//sbit D=P2^6;
//sbit W=P2^7;
sbit IR=P3^2;//红外接口
uchar IR_OK=0,IRdata[4];
uint time_H,time_L;
//uchar table[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0-9
void Init()
{
TMOD=0x01;//0000 0001定时器T0工作方式1
TH0=0x00;
TL0=0x00;//定时器T0赋初值
EX0=1;//INTO中断允许
IT0=1;//INTO中断下降沿触发
EA=1;//开启总中断
}
void main()
{
Init();
while(1)
{
if(IR_OK==1)
{
switch(IRdata[2])
{
case 0x0c1=0xfe;break;
case 0x181=0xfd;break;
case 0x5e1=0xfb;break;
case 0x081=0xf7;break;
case 0x1c1=0xef;break;
case 0x5a1=0xdf;break;
case 0x421=0xbf;break;
case 0x521=0x7f;break;
case 0x4a1=0x00;break;
case 0x161=0xff;break;
default:break;
}
IR_OK=0;
}
}
}
/********************************************
9.5ms=8755,8.5ms=7833
5ms=5608,4ms=3686
0.5ms=460,0.7ms=645
1.5ms=1383,1.75ms=1612
********************************************/
void IR_INT0() interrupt 0
{
uchar IR_tmp=0,i,j;
EX0=0;//关闭INT0中断,只解析当前发过来的码
TH0=0;
TL0=0;
TR0=1;
while(IR==0);
TR0=0;
time_L=TH0*256+TL0;//计算引导码低电平时间
TH0=0;
TL0=0;
TR0=1;
while(IR==1);
TR0=0;
time_H=TH0*256+TL0;//计算引导码高电平时间
if(time_L>7833&&time_L<8755&&time_H>3686&&time_H<5608)
{
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
while(IR==0);//只检测高电平时间即可,滤掉低电平
TH0=0;
TL0=0;
TR0=1;
while(IR==1);
TR0=0;
time_H=TH0*256+TL0;
IR_tmp=IR_tmp>>1;
if(time_H>645&&time_H<1612)
{
IR_tmp|=0x80;
}
}
IRdata[i]=IR_tmp;
}
if(IRdata[2]!=~IRdata[3])
{
EX0=1;
return;
}
else
{
IR_OK=1;
EX0=1;
}
}
}
|
评分
-
查看全部评分
|