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

单片机红外

发布时间:2022-01-22 10:46:27

A. 用单片机如何作红外线的接收

你好,我研究过红外线,网上有卖红外一体化接收头的,大概8毛钱一个,它有三个引脚,分别是电源、地、还有信号端。信号端接单片机外部中断0或外部中断1,我编过相应的程序,用红外遥控控制数码管的显示,按几号键显示几。

B. 红外传感器怎么接到单片机上

将该传感器的输出端口的信号,经过电路的处理后,达到单片机工作电压范围时,可有两种方法实现于单片机的连接。
方法一:将处理后的信息接在51或52系列单片机的P3.2或P3.3口的外部中断端口,对中断定时器的IE=0X81或IE=0X84;TCON=0X01或TCON=0X04,在中断子程序中可以读数据进行处理显示;
方法二;同上,将处理后的数据端口,接到普通的端口,即,该端口做基本的输出用的情况不需要对端口强拉高,而,做输入用时要对基本端口拉高,然后利用相关程序处理显示即可。

C. 如何用单片机控制红外对管检测物体,详细点,有图最好

这个很简单:你既然是对管,那么,当有物体通过您的对管之间时,就挡住了您的红外接收器通过发射器发过来的光,这样接收端就产生信号变化,您检测到这个信号变化就+1就可以了。这样就知道多少个物体过去啦。

D. 红外传感器和单片机之间怎么连接

红外传感器和单片机之间的连接方法:

红外传感器绝大部分都是通过测引脚电压换算成距离。所以一般红外都有三根引脚,VCC和GND肯定会接噻,然后信号线接到你开启单片机的ADC通道对应的引脚,读该引脚的电平换算成距离。

红外传感器如果是数据信号,有几个脚,就用单片机几个脚连接,然后根据输出信号的时序写程序读。如果是模拟信号,就得用到A/D转换电路。

(4)单片机红外扩展阅读:

红外传感器的相关要求规定:

1、红外线传感器利用远红外线范围的感度做为人体检出用,红外线的波长比可见光长而比电波短。红外线只由热的物体放射出来,凡是存在于自然界的物体,如人类、火、冰等等全部都会射出红外线,只是其波长因其物体的温度而有差异而已。

2、利用红外辐射的热效应,探测器的敏感元件吸收辐射能后引起温度升高,进而使某些有关物理参数发生变化,通过测量物理参数的变化来确定探测器所吸收的红外辐射。

3、红外传感器已经在现代化的生产实践中发挥着它的巨大作用,随着探测设备和其他部分的技术的提高,红外传感器能够拥有更多的性能和更好的灵敏度。

E. 单片机红外

虽然你的程序写的很工整,但是你的编程思路不对。
1.你的显示函数,很明显你用的是动态扫描,但是你却用单个数码管的控制方法。当然有可能你的电路跟我预计的不同,所以把线路图一块发上来。
2.中断函数,写的问题比较大,首先中断函数里不要有处理的内容,还有在中断函数函数中定义的变量是不能保持的,再有不知道你为什么一直在用while判断一个变量,中断函数会自动判断外部端口的变化的,你只需要加入中断变化响应后的代码就可以

F. c51单片机红外NEC编码解码!

这个程序太简单了,我之前写过红外发射程序的,接收程序也很简单,你这个项目我2个小时都能帮你解决,但是89C52单片机发射38K不准需要把晶振加大,提高单片机的运行速度。
你的项目只要主机A发射红外协议后面加一个地址,单片机B接收的时候全部进入接收状态,判接收的地址是否符合对于单片机B的地址,如果地址符合,那就先回应一个数据例如:55FF55,主机接收到55FF55后后面开始接收数据,把接收到的数据直接写入单片机内EEPRM里面!

G. 单片机红外脉冲程序

//这一段是用来检测红外脉冲的低电平时间的
unsigned int Ir_Get_Low()
{
TL1=0; //清0计数器低8位
TH1=0; //清0计数器高8位
TR1=1; //打开计数器
while(!Ir_Pin && (TH1&0x80)==0); //如果IR管脚一直为低电平就一直在这里等待,让计数器一直计数
TR1=0; //管脚为高电平时关闭计数器
return TH1*256+TL1; //返回计数值,高8位乘256因为2的8次方为256

H. 51单片机 红外

你要检测什么东西。物体就用反射型光电开关或对射型的,要是人体就用人体红外开关

I. 单片机的红外发射模块怎么用。。

你是要搞解码,还是编码呢,如果是发送因该是编码
#include<reg52.h>
#include<INTRINS.H>
//定义硬件接口
#define KEY P1

#define Key_State_0 0
#define Key_State_1 1
#define Key_State_2 2

#define unlock 1
#define lock 0

sbit IR_OUT = P2^0;

unsigned char time_1ms_flag,display_flag,IR_data,IR_data_R;
bit key_debounce_flag,key_debounce,timer2_c_flag;
unsigned char key_state,key_debounce_C,key_num,key_num_temp,key_temp,key_R,key_attion;
void delay1s(void)
{
unsigned char a,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_();
}
void T2_INT(void)
{
RCAP2H=(0xFFFF-1000)/256;
RCAP2L=(0xFFFF-1000)%256;//12MHz晶振下定时1ms,自动重装
TH2=RCAP2H;
TL2=RCAP2L; //定时器2赋初值
//T2CON=0; //配置定时器2控制寄存器,这里其实不用配置,T2CON上电默认就是0,这里赋值只是为了演示这个寄存器的配置
//T2MOD=0; //配置定时器2工作模式寄存器,这里其实不用配置,T2MOD上电默认就是0,这里赋值只是为了演示这个寄存器的配置
//IE=0xA0; //1010 0000开总中断,开外定时器2中断,可按位操作:EA=1; ET2=1;
ET2=1;
TR2=1; //启动定时器2
EA = 1;
}
void delay4ms500us(void) //误差 0us
{
unsigned char a,b,c;
for(c=3;c>0;c--)
for(b=136;b>0;b--)
for(a=4;a>0;a--);
}
void delay560us(void) //误差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=2;b>0;b--)
for(a=137;a>0;a--);
}
void delay1ms690us(void) //误差 0us
{
unsigned char a,b;
for(b=241;b>0;b--)
for(a=2;a>0;a--);
}

void IR_CODE(void)
{
unsigned char j;
IR_data_R=~IR_data;
IR_OUT=1;
delay4ms500us();
delay4ms500us();
IR_OUT=0;
delay4ms500us();

for(j=0;j<16;j++)
{
IR_OUT=1;
delay560us();
IR_OUT=0;
delay560us();

}

for(j=0;j<8;j++)
{

if(IR_data&0x01)
{
IR_OUT=1;
delay560us();
IR_OUT=0;
delay1ms690us();
}
else
{
IR_OUT=1;
delay560us();
IR_OUT=0;
delay560us();

}
IR_data>>=1;
}
for(j=0;j<8;j++)
{

if(IR_data_R&0x01)
{
IR_OUT=1;
delay560us();
IR_OUT=0;
delay1ms690us();
}
else
{
IR_OUT=1;
delay560us();
IR_OUT=0;
delay560us();

}
IR_data_R>>=1;
}
}
void play_attion(void)
{
if(key_attion==16)
{
key_attion=0;
IR_data=0x0f;
IR_CODE();
}
if(key_attion==15)
{
key_attion=0;
IR_data=0x0e;
IR_CODE();
}
if(key_attion==14)
{
key_attion=0;
IR_data=0x0d;
IR_CODE();
}
if(key_attion==13)
{
key_attion=0;
IR_data=0x0c;
IR_CODE();
}
if(key_attion==12)
{
key_attion=0;
IR_data=0x0b;
IR_CODE();
}
if(key_attion==11)
{
key_attion=0;
IR_data=0x0a;
IR_CODE();
}
if(key_attion==10)
{
key_attion=0;
IR_data=0x09;
IR_CODE();
}
if(key_attion==9)
{
key_attion=0;
IR_data=0x08;
IR_CODE();
}
if(key_attion==8)
{
key_attion=0;
IR_data=0x07;
IR_CODE();
}
if(key_attion==7)
{
key_attion=0;
IR_data=0x06;
IR_CODE();
}
if(key_attion==6)
{
key_attion=0;
IR_data=0x05;
IR_CODE();
}
if(key_attion==5)
{
key_attion=0;
IR_data=0x04;
IR_CODE();
}
if(key_attion==4)
{
key_attion=0;
IR_data=0x03;
IR_CODE();
}
if(key_attion==3)
{
key_attion=0;
IR_data=0x02;
IR_CODE();
}
if(key_attion==2)
{
key_attion=0;
IR_data=0x01;
IR_CODE();
}
if(key_attion==1)
{
key_attion=0;
IR_data=0x00;
IR_CODE();
}
}

void main (void)
{
delay1s();
P1=0x0F;
T2_INT();
IR_OUT =0;
while(1)
{
play_attion();
}

}

void timer2() interrupt 5
{
//!!!注意!!! 定时器2必须由软件对溢出标志位清零,硬件不能清零,这里与定时器0和定时器1不同!!!
TF2=0;
switch(key_state)
{
case Key_State_0:
if(KEY!=0x0F)
{
key_state = Key_State_1;
key_debounce_flag = unlock;
KEY=0x7F;
key_temp=KEY;
if(key_temp==0x7E){key_num_temp=4;}
if(key_temp==0x7D){key_num_temp=8;}
if(key_temp==0x7B){key_num_temp=12;}
if(key_temp==0x77){key_num_temp=16;}
KEY=0xBF;
key_temp=KEY;
if(key_temp==0xBE){key_num_temp=3;}
if(key_temp==0xBD){key_num_temp=7;}
if(key_temp==0xBB){key_num_temp=11;}
if(key_temp==0xB7){key_num_temp=15;}
KEY=0xDF;
key_temp=KEY;
if(key_temp==0xDE){key_num_temp=2;}
if(key_temp==0xDD){key_num_temp=6;}
if(key_temp==0xDB){key_num_temp=10;}
if(key_temp==0xD7){key_num_temp=14;}
KEY=0xEF;
key_temp=KEY;
if(key_temp==0xEE){key_num_temp=1;}
if(key_temp==0xED){key_num_temp=5;}
if(key_temp==0xEB){key_num_temp=9;}
if(key_temp==0xE7){key_num_temp=13;}
KEY=0x0F;
}
break;
case Key_State_1:
if(key_debounce==1)
{
key_debounce = 0;
KEY=0x7F;
key_temp=KEY;
if(key_temp==0x7E){key_num=4;}
if(key_temp==0x7D){key_num=8;}
if(key_temp==0x7B){key_num=12;}
if(key_temp==0x77){key_num=16;}
KEY=0xBF;
key_temp=KEY;
if(key_temp==0xBE){key_num=3;}
if(key_temp==0xBD){key_num=7;}
if(key_temp==0xBB){key_num=11;}
if(key_temp==0xB7){key_num=15;}
KEY=0xDF;
key_temp=KEY;
if(key_temp==0xDE){key_num=2;}
if(key_temp==0xDD){key_num=6;}
if(key_temp==0xDB){key_num=10;}
if(key_temp==0xD7){key_num=14;}
KEY=0xEF;
key_temp=KEY;
if(key_temp==0xEE){key_num=1;}
if(key_temp==0xED){key_num=5;}
if(key_temp==0xEB){key_num=9;}
if(key_temp==0xE7){key_num=13;}
KEY=0x0F;
if(key_num_temp==key_num)
{
key_state = Key_State_2;
key_R=key_num;
key_num=0;
key_num_temp=0;
}
else
{
key_state = Key_State_0;
}
}
break;
case Key_State_2:
{
if(KEY==0x0F)
{
key_state = Key_State_0;
key_attion=key_R;

/*
if(key_attion==12){out_flag=0;}
else
{
out_flag=1;
}out_flag=1;*/
//code

}
}
}
if(key_debounce_flag==unlock)
{
key_debounce_C++;
if(key_debounce_C==16)
{
key_debounce_C = 0;
key_debounce_flag = lock;
key_debounce = 1;
}
}
}

J. 51单片机怎么用红外线

--你是指红外遥控解码吧,给你一点提示,在单片机定义一个I/O口为红外遥控的输入端口,(红外遥控解码不一定要用到定时器和中断方式.具体方法有很多的,看场合选取)当然输入这个端口的信号是经过遥控接收电路处理过的一串数据,如TTL或者CMOS电平。再然后就是对这个输入信号进行处理,也就是解调出遥控码值出来,要解这个码,首先又要知道其波形如何,即是逻辑电平和时序等问题...

建议你还是先熟知一下各种IR的遥控协议,有挺多的,典型的有NEC,飞利浦等。说说NEC的也有两种,简单的一种就是有32位数据,前16bit为地址码,后16bit为遥控码值的正码与反码,地址码用于区分相同协议下不同的遥控所带来的干扰等,正码和反码用于解调后进行校验数据。不多说了,主要是找点相关资料研究研究就明白了。图片是一个32bitNEC的遥控波形,这个波形的地址码是807F,正码是0x12,如果看懂了,用MCU解遥控码就很容易了..

阅读全文

与单片机红外相关的资料

热点内容
游戏aoi算法 浏览:842
phpmysqlint 浏览:910
怎么从appstore商城买东西 浏览:182
大秀直播平台源码 浏览:418
java视屏 浏览:932
电脑中如何给程序加密 浏览:238
java排序容器 浏览:942
职称证书在哪个app下载 浏览:362
四九算法算男女 浏览:659
javawindows8 浏览:496
2021世界程序员节 浏览:484
php翼支付 浏览:882
盈通服务器ip地址 浏览:789
3des算法的c语言实现 浏览:873
网上怎样购买服务器地址 浏览:813
新氧app都在哪个城市 浏览:731
十二大加密货币图片 浏览:315
数据库日志自动压缩 浏览:929
手机表格文档用哪个app 浏览:77
找人开发app的公司怎么样 浏览:652