导航:首页 > 操作系统 > 红外接收头单片机

红外接收头单片机

发布时间:2023-05-22 19:32:42

❶ 红外发射 单片机 红外接收

单片机一般都是 5V的,红外先导通电压一般在1.2V左右,你可以串一个220-560欧的电阻一灌流的方式连接在单片机任意一脚(如 P1.0)
接收头3只脚,一叫电源正,一脚电源负,一脚是信号脚直接接到单片机的 任意一脚(如 P3.2),这两个东西功率都很低的,接收头待机电流1毫安不到,接收的时候就10毫安左右。发射在电阻为220欧的时候电流也在20毫安不到,没有问题的。
但我需要提示你的是,同一单片机即发送又接受肯定不行的,因为程序做不了,不比串口哦!所以我建议你用两个来做(一个发,一个收),我用电视机遥控器来发送,单片机来接收,译码,用来控制别的东西,效果不错!!

❷ 单片机如何实现红外遥控

以下文件是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;i<4;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;j<4;j++)
{
for (k=0;k<8;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;i<100;i++)
{
delay(5);
BEEP=!BEEP;
}
BEEP=1;
}

void delay(unsigned char x)//x*0.14MS
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}

void delay1(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i<120; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}

❸ VS1838B红外接收头单片机编码原理是什么具体点的!

首先红外发射接收可以用串口。。
但是我先讲个比较简单的吧,刚开始你红外发射假设你发的是01010101(八位),以450us的低电平和900us的高电平代表“0”;以450us的低电平和1200us的高电平代表“1”;如果发01010101
波形这个你应该可以想象吧?
然后接收的话你用一个以38khz为载波的红外一体化接收头(如:1838);
载波是需要加在发射端的,这个先不讲;
先说接收吧,既然发送的一个0,那怎么去检测一个0呢?
就用一个外部中断加上一个定时器可以吧?(51一般都这么用。如果有捕捉中断的话如avr那就跟方便了,但原理一样),外部中断以下降沿触发;当这个下降沿来的时候开始用定时器计时,一直计时到下一个下降沿,前面说的,(以450us的低电平和900us的高电平代表“0”;以450us的低电平和1200us的高电平代表“1”)如果我检测到两个下降沿之间的时间是1350us那是不是就代表是0,如果是1650us就是1,剩下的就同理了~~~不管你发几位,都是一位发过来我就记录一位,都记录好就开始处理你先接收到0然后是1(01010101) 那我等到这个值后,是不是就代表一种编码? 你也可以是00000000,或者11111111,你发射接收明白了就可以控制了。。。

❹ VS1838B红外接收头单片机编码原理是什么具体点的!

接收红外遥控信号,并进行翻转放大
比如遥控发送
4.5ms高4.5低作为头码,0.56高+0.565低为0;0.56高+1.69低为1
则VS1838B接收输出为
4.5ms低+4.5高作为头码,0.56低+0.565高为0;0.56低+1.69高为1
判断时间长短区分01就OK了

阅读全文

与红外接收头单片机相关的资料

热点内容
c编译器是系统软件吗 浏览:692
获取服务器内网地址 浏览:534
新手妈妈如何带新生儿APP 浏览:155
java日程管理 浏览:374
高清视频链接加密 浏览:405
新买的阿里云服务器怎么配置 浏览:610
在线编译器为什么刷新还在 浏览:209
云服务器系统盘可以装数据库 浏览:904
php绘制图形 浏览:585
支付服务器异常怎么办 浏览:74
java拨号 浏览:864
er5200如何设置虚拟服务器 浏览:569
网络中心服务器叫什么 浏览:456
isplay单片机下载器 浏览:480
怎么查看服务器地址和端口 浏览:184
加密朋克ai 浏览:155
新云服务器怎样添加d盘 浏览:669
php查看对象 浏览:75
程序员女孩跳舞视频 浏览:554
linux默认java 浏览:426