文章目录:
- 1、我用单片机编程,怎样知道一个红外遥控器的每个按键的代码,或者怎样操作?
- 2、51单片机红外遥控接收如何接收重复码实现重复操作?最好有源码参考
- 3、怎么获得红外遥遥控器按键代码
- 4、基于51单片机红外遥控代码(C语言)
我用单片机编程,怎样知道一个红外遥控器的每个按键的代码,或者怎样操作?
单片机UART接个红外接收。另外还要做个遥控器,也用单片机UART接个红外发射。用遥控器的单片机做按键编码,发射不同的数据到串口,例如0x01是开,0xfe是关。
然后接收的单片机做UART数据解码,接收到0X01就做开操作,0XFE做关操作。
51单片机红外遥控接收如何接收重复码实现重复操作?最好有源码参考
只要按住红外遥控器的按键,就不停地发射,单片机到会收重复码了。如果红外遥控器不发射,单片机又怎么能收到重复码呢?
你这有点像去服装店理发一样。
怎么获得红外遥遥控器按键代码
可以用示波器直接在红外发射管上直接抓,这样是带载波的。
也可以用示波器在接收头上抓,这样是解调不带载波的。
没有示波器就要用单片机写个程序,在接收头后面把代码解出来。
基于51单片机红外遥控代码(C语言)
以下文件是51单片机实现遥控解码,通过数码管显示键码的程序,P0口驱动数码管段选,p2.6和p2.7为数码管位选,接收头连到P3.2口。此程序以通过验证,可以直接编译使用,另外还有一个继电器和蜂鸣器的控制,不用可以屏蔽掉。
;********************************************************************************
;* 描述: *
;* 遥控键值读取器 *
;* 数码管显示, P0口为数码管的数据口 *
;* *
;********************************************************************************
;遥控键值解码-数码管显示 *
;********************************************************************************/
#include reg51.h
#include intrins.h
void IR_SHOW();
void delay(unsigned char x);//x*0.14MS
void delay1(unsigned char ms);
void beep();
sbit IRIN = P3^2;
sbit BEEP = P3^7;
sbit RELAY= P1^3;
sbit GEWEI= P2^7;
sbit SHIWEI= P2^6;
unsigned char IRCOM[8];
unsigned char code table[16] =
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
main()
{
IE = 0x81; //允许总中断中断,使能 INT0 外部中断
TCON = 0x1; //触发方式为脉冲负边沿触发
delay(1);
IRIN=1;
BEEP=1;
RELAY=1;
for(;;)
{
IR_SHOW();
}
} //end main
void IR_IN() interrupt 0 using 0
{
unsigned char i,j,k,N=0;
EA = 0;
I1:
for (i=0;i4;i++)
{
if (IRIN==0) break;
if (i==3) {EA =1;return;}
}
delay(20);
if (IRIN==1) goto I1; //确认IR信号出现
while (!IRIN) //等 IR 变为高电平
{delay(1);}
for (j=0;j4;j++)
{
for (k=0;k8;k++)
{
while (IRIN) //等 IR 变为低电平
{delay(1);}
while (!IRIN) //等 IR 变为高电平
{delay(1);}
while (IRIN) //计算IR高电平时长
{
delay(1);
N++;
if (N=30) {EA=1;return;}
}
IRCOM[j]=IRCOM[j] 1;
if (N=8) {IRCOM[j] = IRCOM[j] | 0x80;}
N=0;
}//end for k
}//end for j
if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}
IRCOM[5]=IRCOM[2] 0x0F;
IRCOM[6]=IRCOM[2] 0xF0;
IRCOM[6]=IRCOM[6] 4;
beep();
EA = 1;
}
void IR_SHOW()
{
P0 = table[IRCOM[5]];
GEWEI = 0;
SHIWEI = 1;
delay1(4);
P0 = table[IRCOM[6]];
SHIWEI = 0;
GEWEI = 1;
delay1(4);
}
void beep()
{
unsigned char i;
for (i=0;i100;i++)
{
delay(5);
BEEP=!BEEP;
}
BEEP=1;
}
void delay(unsigned char x)//x*0.14MS
{
unsigned char i;
while(x--)
{
for (i = 0; i13; i++) {}
}
}
void delay1(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i120; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
ed char x);//x*0.14MSvoid delay1(unsigned char ms);void beep();sbit IRIN = P3^2;sbit BEEP = P3^7;sbit RELAY= P1^3;sbit GEWE
}//end for k }//end for j if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;} IRCOM[5]=IRCOM[2] 0x0F; IRCOM[6]=I
for (i = 0; i13; i++) {} }}void delay1(unsigned char ms){ unsigned char i; while(ms--) { for(i =