1.基本发收与接送
2.NEC编码
遥控器键码值
3.51单片机外部中断
4.基本发送与接收
5.代码
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include <INTRINS.H>
unsigned int irtime;
unsigned char irstate;
unsigned char irdata[4];
unsigned char irpdata;
unsigned char irdataflag;
unsigned char irrepeatflag;
unsigned char iraddress;
unsigned char ircommand;
void Delay1us() //@11.0592MHz
{
_nop_();
_nop_();
_nop_();
}
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
void timer0(void)//设置定时器
{
TMOD&=0xF0;
TMOD|=0x01;
TL0=0x18;
TH0=0xFC;
TF0=0;
TR0=0;
}
void timer0set(unsigned int value)//设置定时器初值
{
TH0=value/256;
TL0=value%256;
}
unsigned int timer0get(void)//获取时间
{
unsigned int t=TH0*256+TL0;
return t;
}
void timer0run(unsigned char flag)//设置定时器启停
{
TR0=flag;
}
void int0init(void)//外部中断
{
IT0=1;
IE0=0;
EX0=1;
EA=1;
PX0=1;
}
unsigned char irgetdataflag(void)
{
if(irdataflag)
{
irdataflag=0;
return 1;
}
return 0;
}
unsigned char irgetrepeatflag(void)
{
if(irrepeatflag)
{
irrepeatflag=0;
return 1;
}
return 0;
}
unsigned char irgetaddress(void)
{
return iraddress;
}
unsigned char irgetcommand(void)
{
return ircommand;
}
void irinit(void)
{
timer0();
int0init();
}
unsigned int time;
void main()
{
timer0();
int0init();
LCD_Init();
LCD_ShowString(1,1,"A");
// timer0set(0);
// timer0run(1);
// Delay1ms();
// //Delay1ms();
//
// time=timer0get();
// LCD_ShowNum(1,3,time,10);
while(1)
{
}
}
void int0roueine(void) interrupt 0
{
if(irstate==0)
{
timer0set(0);
timer0run(1);
irstate=1;
irtime=timer0get();
LCD_ShowNum(1,3,irtime,8);
}
else if(irstate==1)
{
//timer0run(0);
irtime=timer0get();
timer0set(0);
LCD_ShowNum(2,1,irtime,8);
if((irtime>13500-500)&&(irtime<13500+500))
{
irstate=2;
}
else if((irtime>11250-500)&&(irtime<11250+500))
{
irrepeatflag=1;
timer0run(0);
irstate=0;
}
else
{
irstate=1;
}
}
else if(irstate==2)
{
irtime=timer0get();
timer0set(0);
if(irtime>1120-500&&irtime<1120+500)
{
irdata[irpdata/8]&=~(0x01<<irpdata%8);
irpdata++;
}
else
{
irpdata=0;
irstate=1;
}
if(irpdata>=32)
{
irpdata=0;
if(irdata[0]==~irdata[1]&&irdata[2]==~irdata[3])
{
irdataflag=1;
iraddress=irdata[0];
ircommand=irdata[2];
irdataflag=1;
}
timer0run(0);
irstate=0;
}
}
}