一、简介
红外发射模块:电源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;
}
3D打印配电房首次走进农村
类苹果化?荣耀Magic也走上这一条路
虚拟货币的监管哪一些方面有了加强
英飞凌推出全新IMD110 SmartDriver系列
铁电局域场增强低维材料光电探测器的研究与发展趋势
51单片机红外发射模块与红外接收模块的代码程序设计
硅橡胶电缆的主要性能有哪些?
PD快充的优势有哪些?
CRM/PLM/SCM/MES与ERP的联系与区别
无线充电器的缺点
如何将MCU与FPGA进行配对达到提高系统效率的目的
不懂!韩国23家加密货币交易所将进行自我监管,10家拒绝并宣布退出
SILICON LABS收购领先RTOS厂商MICRIUM
中药农药残留检测仪有什么作用
进博会专辑: 测试测量“黑科技”和半导体“芯”突破
这么多集成型 LCD 的 MSP430产品,哪一款才真正适合您?
基于FPGA+PC104实现新型防碰撞报警系统的数据处理功能
供应链深度分析 | 苹果MR Vision Pro将会带动哪些零部件出货?
雷诺公布一款机器人概念车 可为用户提供高端的出行体验
聊聊冬天对锂电池的影响