一、原理图
上面为红外接受原理图,下面为红外发射原理图
引脚:发射IR_T:P3.5; 接收IR_R:P3.6
原理:当红外接收传感器接收到38KHz的红外脉冲时,返回一个低电平
二、设计目标和思路
目标:需要两个电路板,一个电路板用于发送,另一个用于接收。按下KEY1每100毫秒发送红外信号一次。接收方在接收到红外信号后,L0会发光。
思路:红外接收头被设计为只能接受一定频率范围内的红外线脉冲,接在P3.6的红外线接收头可将收到的38kHz的脉冲转换成低电平,使P3.6的输入为0;接收头没收到脉冲时,会持续输出高电平,使P3.6输入为1。因此,发送一方利用接在P3.5的红外发光二极管发出38kHz的红外脉冲即能让接收一方的接收头收到;接收方判断P3.6的电平决定是否点亮LED灯。
三、程序实现
变量定义:定义红外发射/接收引脚别名
#include <STC15F2K60S2.H>
#define uchar unsigned char
/*---------引脚别名定义---------*/
sbit sbtLedSel = P2 ^ 3; //LED灯与数码管显示切换
sbit sbtKey1 = P3 ^ 2; //按键1 对应外部中断
sbit sbtGetIr = P3 ^ 6; //P3.6连接红外接收头
sbit sbtPutIr = P3 ^ 5; //P3.5连接红外线发光二极管
uchar ucPutIrFlagN = 1; //标记位,标记是否发送脉冲。0:发送、 1:不发送
Init()函数:设置T1定时器与中断
void InitT0() //定时器T0初始化
{
AUXR |= 0x80; //1T
TMOD &= 0xF0; //清除之前的设置
TMOD |= 0x02; //设置为8位自动重装
TL0 = 0x70; //定时器初始值
TH0 = 0x70; //自动重装置
TF0 = 0; //清除TF0标记
TR0 = 1; //T0开始运行
}
}
中断函数:翻转引脚电平,发出红外脉冲
void T0_Processs() interrupt 1
{
if( ucPutIrFlagN == 0 ) //如果ucPutIrFlagN=0
sbtPutIr = ~sbtPutIr; //P3.5根据定时器中断的频率产生翻转(频率设为38kHz)
else
sbtPutIr = 0; //不发射
}
main()函数:控制LED灯的亮,控制发出红外线的频率,每秒发射五次
void main()
{
//设置推挽输出
P0M0 = 0XFF;
P0M1 = 0X00;
P2M0 = 0XFF;
P2M1 = 0X00;
P0 = 0; //初始化P0
sbtLedSel = 1; //选择LED发光
InitT0();
ET0 = 1; //打开定时器T0中断
EA = 1; //打开总中断
while( 1 )
{
P0 = !sbtGetIr; //P0显示值
while( !sbtKey1 ) //如果sbtKey1保存按下
{
ucPutIrFlagN = 0; //发射红外线脉冲
Delay();
ucPutIrFlagN = 1; //不发射红外线脉冲
Delay();
}
}
}
以上就是关于红外测试的内容啦~
完结,cheers ! ??