一、简介
红外发射模块:电源3.3V或5V,经过发射管发射38KHz的红外信号,高电平驱动
红外接纳模块:电源3.3V或5V,可接纳红外信号,并解调成逻辑电平,低电平有用
二、电路图
红外发射电路图
红外接纳电路图
三、红外发射模块代码
#include
#include
#define uchar unsigned char
#define uint unsigned int
//管脚界说
sbit key = P2^0;
sbit out = P2^1;
//函数声明
void delayms(uchar aa); //红外发射延时
void khz(uchar aa); //发射38KHz
void IR_OUT(uchar num); //红外发射
void keyScan(); //读取键盘信息
//变量声明
uchar i, a, num1;
//———————–
//红外发射延时
//———————–
void delayms(uchar aa)
{
for(a=aa; a》0; a–)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
//———————–
//发射38KHz
//———————–
void khz(uchar aa)
{
for(a=aa;a》0;a–) //这个for句子能够得到精确的26.3波特率
{
out=0;
i=7;
while(i》0) i–; //38kHZ
out=1;
}
}
//———————–
//红外发射
//———————–
void IR_OUT(uchar num)
{
khz(116); //发射3ms 38khz
delayms(125);
for(num1=8; num1》0; num1–)
{
khz(40);
if(num&0x01)
delayms(93); //delay 1.5ms
else
delayms(65); //delay 1ms
num=num》》1;
}
khz(20);
}
//———————–
//读取键盘信息
//———————–
void keyScan()
{
if(key==0)
{
_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();
if(key==0)
IR_OUT(0xC0);
key = 1;
}
}
//———————–
//主函数
//———————–
void main()
{
key = 1;
while(1)
{
keyScan();
}
}
四、红外接纳模块代码
#include
#include
#define uchar unsigned char
#define uint unsigned int
//管脚界说
sbit in = P3^2; //红外中止接纳
//P2接静态数码管
//函数声明
void init(); //初始化函数
void delayms(uchar j); //延时函数
//变量声明
uchar i, num, a;
bit fleg;
//———————–
//初始化函数
//———————–
void init()
{
fleg = 1; //标志位
in = 1; //红外接纳
EA = 1; //中止设置
EX0 = 1;
IT0 = 1;
}
//———————–
//延时函数
//———————–
void delayms(uchar j)
{
for(i=j; i》0; i–)
{
_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();
}
}//———————–
//主函数
//———————–
void main()
{
init();
while(1);
}
//———————–
//接纳中止
//———————–
void sieasdf() interrupt 0
{
EX0 = 0;
for(a=5; a》0; a–)
{
delayms(35);//延时0.5ms 判别5次 5*0.5=2.5ms
if(in) fleg=0;
}
if(fleg)
{
delayms(72);//延时1ms 判别是不是高电平了
if(in)
{
delayms(115);//延时让它超越2ms; 2.5+1+1.623=5.123ms 开端读数据
delayms(118);//若偏移一位,能够去掉。
for(a=8; a》0; a–)
{
while(!in);
delayms(86);//延时1.188ms 判别IO凹凸,然后得0或1
num = num》》1;
if(in)
{
num = num|0x80;
delayms(31);//延时0.6ms 由于上面延时1.2ms+0.6 刚好越过1.5ms
}
}
P2 = num;
}
}
fleg = 1;
EX0 = 1;
}