请教几个关于红外发射接收模块的问题,电路图如下

请教几个关于红外发射接收模块的问题,电路图如下,第1张

你好:

——★1、LM 393 为电压比较器线路,原理是:当+(同向输入端)电位比-(反向输入端)电位高时,LM 393 输出高电平;而-端电位比+端电位高时,LM 393 输出低电平。

——★2、当光耦之间没有物体时,光耦内部的三极管导通、但存在一定的电压降,LM 393 +端也就有一定的电位。电位器的作用就是调整 LM 393 反向输入端的基准电压的,可以调整灵敏度。

——★3、LM 393 同向端的 10 K 电阻,实际上是光耦内三极管的集电极电阻,光耦导通时同名端电位降低、光耦截止时同名端电位升高 与反向端相比较,就可以输出相应的高、低电平了。

1> 准备一根手机耳机线

2> 准备一支两脚红外接收管

3> 将手机耳机线的GND端接红外管的正极,MIC端接红外管负极

4> 将耳机线另一端插手机耳机孔上,开启手机录音软件(例如RecForge)

5> 用家用的红外遥控器对着红外接收管按

6> 在手机录音的波形观察界面,可以看到信号波形

以此为原理,通过手机编程解析录制好的波形音频,可以完成信号的解析

给你一个PIC写的接收红外遥控器的程序。

//

//mcu: PIC16F883

//author:

//data:

//ver: 10

//

#include <pich>

#include <pic16f887h>

#include "mainh"

// 函数声明部份

void interrupt IRQ_TEST(void);

void fun_intset(void);

void set_port(void);

void fun_timerset(void);

void delay_10us(void);

void delay_130us(void);

void test_remote(void);

// 主函数

void main()

{

set_port();

fun_timerset();

fun_intset();

delay_10ms();

ram_ini();

GIE=1;

while(1)

{

asm("clrwd");

test_remote();

}

}

//端口I/O定义子程序

void set_port()

{

ANSEL =0X00; //porta io port

ANSELH=0X00; //portb io port

//TRISX BIT=1, PORTX AS INPUT

TRISA = 0x0F; //RA0-RA3 INPUT ,RA4-RA5 OUTPUT

TRISB = 0x07; //RB0 PASS0, RB1-RB2 INPUT ,RB3-RB6 OUTPUT

TRISC = 0x0F;

// TRISC = 0x03; //RC0-RC1 INPUT,RC5-RC6 OUTPUT , RC3 RC4 EEPROM SCL SDA

PORTC=0;

PORTA=0XFF;

// WPUB=0XFF;

PORTB=0X07;

}

//中断子程序

void interrupt IRQ_TEST(void)

{

if(T0IF) //Timer0中断服务子程序

{

TMR0=0xce;

T0IF=0;

timer_100us++; //100us

}

if(INTF==1)

{

INTF=0;

timer_rec=timer_100us;

timer_100us=0;

flag_rec_remote=1;

}

}

//定时器0初始化设置子程序

void fun_timerset()

{

//Timer0初始化设置

PSA=0;//Timer0 使用预分频器

//Timer0选择分频率为1:2

PS0=0;PS1=0;PS2=0;

//内部时钟定时方式,定时时间:200uS,误差:0uS

T0CS=0;

// TMR0=0x9b;

TMR0=0xce; //100us

}

/

//定时器2初始化设置子程序

void fun_timer2set()

{

//Timer2初始化设置

//timer2使用预分频率1:1

T2CKPS0=0;T2CKPS1=0;

//timer2使用后分频率1:1

TOUTPS0=0;

TOUTPS1=0;

TOUTPS2=0;

TOUTPS3=0;

//定时器2定时时间为:200uS,误差:0uS

TMR2=0x38;

TMR2ON=1;

}

/

//中断允许设置子程序

void fun_intset()

{

T0IE=1;//Tiemr0中断允许

INTEDG=0; //RB0 FALLAGE INTERRUPT

INTE=1;

INTF=0;

}

void ram_ini(void)

{

}

//------------------------------------------------------------

//

void delay_10us(void)

{

NOP;

NOP;

NOP;

NOP;

NOP;

NOP;

}

void delay_130us(void)

{

uchar i;

for(i=0;i<13;i++)

{

NOP;

NOP;

NOP;

}

}

void delay_10ms(void)

{

unsigned int i;

for(i=0;i<1000;i++)

{

NOP;

NOP;

NOP;

NOP;

NOP;

}

}

void test_remote(void)

{

uchar rec_ok,i;

if(flag_rec_remote==1)

{

flag_rec_remote=0;

// remote_buf[rec_byte]=timer_rec; //test use

// rec_byte++; //test use

// return; //test use

if(flag_rec_head==0)

{

if(timer_rec>=90&&timer_rec<=140) //135

{

flag_rec_head=1;

rec_byte=0;

rec_bit=0;

rec_buf=0;

return;

}

}

else

{

if(timer_rec>=8&&timer_rec<=12) //112

{

rec_buf=(rec_buf>>1);

rec_buf=rec_buf&0x7f;

}

else if(timer_rec>=18&&timer_rec<=22) //22

{

rec_buf=(rec_buf>>1);

rec_buf=rec_buf|0x80;

}

else if(timer_rec>=90&&timer_rec<=140)

{

flag_rec_head=1;

rec_byte=0;

rec_bit=0;

rec_buf=0;

return;

}

else

{

flag_rec_head=0;

rec_byte=0;

rec_bit=0;

rec_buf=0;

return;

}

}

if(flag_rec_head==1)

{

rec_bit++;

if(rec_bit==8)

{

remote_buf[rec_byte]=rec_buf;

rec_byte++;

rec_bit=0;

if(rec_byte==4)

{

NOP;

NOP;

NOP;

NOP;

rec_byte=0;

rec_bit=0;

rec_buf=0;

flag_rec_head=0;

}

}

}

}

}

#include\x0d\#include\x0d\#define uchar unsigned char\x0d\#define uint unsigned int\x0d\sbit lcden = P2^7;\x0d\sbit lcdrs = P2^6;\x0d\sbit lcdwr = P2^5;\x0d\sbit IR = P3^2;\x0d\uchar IRCOM[6];//数组,用于存储红外编码\x0d\uchar code table1[] = "remote control";\x0d\uchar code table2[] = "CODE:";\x0d\void delayms(uchar x)// 延时x014ms\x0d\{\x0d\uchar i;\x0d\while(x--)\x0d\for(i=0;i//延时xms\x0d\{\x0d\uchar i,j;\x0d\for(i=x;i>0;i--)\x0d\for(j=110;j>0;j--);\x0d\}\x0d\/LCD部分/\x0d\void write_com(uchar com)\x0d\{\x0d\lcden = 0;\x0d\lcdrs = 0;\x0d\lcdwr = 0;\x0d\P0 = com;\x0d\delay(5);\x0d\lcden = 1;\x0d\delay(5);\x0d\lcden = 0;//别忘了lcden拉低\x0d\}\x0d\void write_date(uchar date)\x0d\{\x0d\lcden = 0;\x0d\lcdrs = 1;\x0d\lcdwr = 0;\x0d\P0 = date;\x0d\delay(5);\x0d\lcden = 1;\x0d\delay(5);\x0d\lcden = 0;\x0d\}\x0d\void lcd_init(void)\x0d\{\x0d\lcden = 0;\x0d\lcdrs = 0;\x0d\lcdwr = 0;\x0d\delay(5);\x0d\write_com(0x38);\x0d\write_com(0x0c);\x0d\write_com(0x06);\x0d\write_com(0x01);\x0d\}\x0d\/main()/\x0d\void main(void)\x0d\{\x0d\uchar count=0;\x0d\IR = 1;\x0d\lcd_init();\x0d\write_com(0x80);\x0d\while(table1[count]!='\0')\x0d\{\x0d\write_date(table1[count]);\x0d\count++;\x0d\delay(5);\x0d\}\x0d\count = 0;\x0d\write_com(0x80+0x40);\x0d\while(table2[count]!='\0')\x0d\{\x0d\write_date(table2[count]);\x0d\count++;\x0d\delay(5);\x0d\}\x0d\\x0d\IE = 0x81; //开中断\x0d\TCON = 0x01;//脉冲负边沿触发\x0d\while(1);\x0d\\x0d\}\x0d\/红外中断/\x0d\void IR_time() interrupt 0 \x0d\{\x0d\uchar i,j,TimeNum=0;//TimeNum用来计IR高电平次数 从而判断是0还是1\x0d\EX0 = 0; //关闭中断\x0d\delayms(5);\x0d\if(1 == IR)\x0d\{\x0d\EX0 = 1;\x0d\return;\x0d\}\x0d\while(!IR) //跳过9ms前导低电平\x0d\delayms(1);\x0d\for(i=0;i{\x0d\for(j=0;j{\x0d\while(IR) //跳过45ms的前导高电平\x0d\delayms(1);\x0d\while(!IR) //跳过056ms的低电平\x0d\delayms(1);\x0d\\x0d\while(IR) \x0d\{\x0d\TimeNum++; //计时高电平时间从而判断读取的是0还是1\x0d\delayms(1);\x0d\}\x0d\if(TimeNum>=30)//按键按下时间过长 跳过\x0d\{\x0d\EX0 = 1;\x0d\return;\x0d\}\x0d\IRCOM[i] = IRCOM[i]>>1;\x0d\if(TimeNum >= 8) //8014ms 这时读取的是1;\x0d\{\x0d\IRCOM[i] = IRCOM[i]|0x80;\x0d\}\x0d\TimeNum = 0;\x0d\}\x0d\}\x0d\if(IRCOM[2]!=~IRCOM[3])//判断八位数据和八位数据反码是否相等\x0d\{\x0d\EX0 = 1;\x0d\return;\x0d\}\x0d\IRCOM[4] = IRCOM[2]&0x0f;//取低四位\x0d\IRCOM[5] = IRCOM[2]>>4; //IRCOM[5]取IRCOM[2]高四位\x0d\if(IRCOM[4] > 9) //转换成字符\x0d\{\x0d\IRCOM[4] = IRCOM[4] + 0x37;\x0d\}\x0d\else\x0d\IRCOM[4] = IRCOM[4] + 0x30;\x0d\if(IRCOM[5] > 9)\x0d\{\x0d\IRCOM[5] = IRCOM[5] + 0x37;\x0d\}\x0d\else\x0d\IRCOM[5] = IRCOM[5] + 0x30;\x0d\delay(5);\x0d\write_com(0x80 + 0x40 + 5);\x0d\write_date(IRCOM[5]);\x0d\write_date(IRCOM[4]);\x0d\EX0 = 1; //重新开启外部中断\x0d\}

红外发射、接收模块,三根线定义为电源、地、信号。

方法一:红外模块的信号可直接接ESP8266的IO脚,利用esp8266模块的MCU对红外模块进行控制接收,此方法硬件成本低,连接简单,但需要对ESP8266模块进行二次编程开发;

方法二:利用你熟悉的单片机,把ESP8266与红外模块连接起来。好处是可以利用你熟悉的环境进行编程解决,缺点是硬件成本加大。

个人建议使用方法一,懂单片机开发的人,对esp8266二次开发也容易上手。

以上就是关于请教几个关于红外发射接收模块的问题,电路图如下全部的内容,包括:请教几个关于红外发射接收模块的问题,电路图如下、怎么自己做38红外接收模块、单片机控制红外程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9293004.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存