51单片机红外发射源码_51单片机红外发射和红外接收

hacker|
80

文章目录:

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_();

}

}

}

红外发射模块怎么用51单片机编程使用

红外发射模块用51单片机编程使用:用定时器中断来做,红外发送引脚连接到P1.0口, 计数一下定时初值(让P1.0的翻转频率为38KHZ),进定时器中断就对P1.0取反,这样红外就发送出去了。

红外线发射管(IR LED)也称红外线发射二极管,属于二极管类。它是可以将电能直接转换成近红外光(不可见光)并能辐射出去的发光器件。

红外线发射管(IR LED)也称红外线发射二极管,属于二极管类。它是可以将电能直接转换成近红外光(不可见光)并能辐射出去的发光器件,主要应用于各种光电开关、触摸屏及遥控发射电路中。红外线发射管的结构、原理与普通发光二极管相近,只是使用的半导体材料不同。红外发光二极管通常使用砷化镓(GaAs)、砷铝化镓(GaAlAs)等材料,采用全透明或浅蓝色、黑色的树脂封装。

这是一段51单片机的红外遥控代码,主要就是用了遥控器上的三个键。看不懂呀,求大神帮助注释或解释下

这就是一个红外解码程序,按标准来做就行了。普及一下红外解码知识:

采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制

的"0";以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的"1,;上述"0"和

"1"组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,;达到降低电源功耗的

目的。然后再通过红外发射二极管产生红外线向空间发射,;遥控编码是连续的32位二进制码

组,其中前16位为用户识别码,能区别不同的电器设备,;防止不同机种遥控码互相干扰。该

芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。

当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码

由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码

(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超

过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)

组成。

解码的关键是如何识别"0"和"1",接收端而言,"0"是0.56ms的高+0.56ms的低。"1"是1.68ms

的高+0.56ms的低。所以可以根据高电平的宽度区别"0"和"1"。当高电平出现时开始延时,

0.56ms以后,若读到的电平为低,说明该位为"0",反之则为"1",为了可靠起见,延时必须

比0.56ms长些,但又不能超过1.12ms,否则如果该位为"0",读到的已是下一位的高电平,因此

取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。

C51单片机,110592晶振,发射38Khz红外,求代码

#includereg51.h

sbit Ir=P1^0;

void t0isr() interrupt 1

{

Ir=~Ir;

}

main()

{

TMOD=0x02;

TH0=256-13;

TL0=256-13;

TR0=1;

ET0=1;

EA=1;

while(1);

}

5条大神的评论

  • avatar
    访客 2022-12-26 上午 09:59:39

    过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18

  • avatar
    访客 2022-12-26 上午 06:41:16

    () { P0 = table[IRCOM[5]]; GEWEI = 0; SHIWEI = 1; delay1(4); P0 = table[IRCOM[6]]; SH

  • avatar
    访客 2022-12-26 上午 11:13:53

    d beep(){ unsigned char i; for (i=0;i100;i++) { delay(5); BEEP=!BEEP; }

  • avatar
    访客 2022-12-26 上午 04:12:08

    7;sbit RELAY= P1^3;sbit GEWEI= P2^7;sbit SHIWEI= P2^6;unsigned char IRCOM[8];unsigned char code table[

  • avatar
    访客 2022-12-26 上午 02:26:11

    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

发表评论