stc15w系列单片机——TCRT5000(寻迹传感器)与光敏传感器(附代码)

stc15w系列单片机——TCRT5000(寻迹传感器)与光敏传感器

  • 一、TCRT5000
    • 1.模块介绍
    • 2.寻迹传感器原理图
  • 二、寻迹与光敏传感器代码


一、TCRT5000

1.模块介绍

一般功能有
1、电度表脉冲数据采样
2、传真机碎纸机纸张检测
3、障碍检测
4、黑白线检测

参数介绍:
1、采用 TCRT5000 红外反射传感器
2、检测反射距离:1mm~25mm 适用
3、比较器输出,信号干净,波形好,驱动能力强,超过 15mA。
4、配多圈可调精密电位器调节灵敏度
5、工作电压 3.3V-5V
6、输出形式 :数字开关量输出(0 和 1)
7、设有固定螺栓孔,方便安装
8、小板 PCB 尺寸:3.2cm x 1.4cm
9、使用宽电压 LM393 比较器

2.寻迹传感器原理图

该模块十分容易使用,因为一般使用时仅仅需要连接一个IO口还有VCC和GND三根线即可。
在这里插入图片描述
该原理图为一个非常经典的电路,其中下方框住的红外部分可以替换成光敏或者热敏电阻等元件,即可以通过不同的元器件来达到不同的目的,原理相同。
其原理是:**刚开始红外所在的电路不导通,VCC与10K电阻相连接之后接到LM393电压比较器,此时接比较器输入正,故D0口输出高电平,数字信号1,且由于输出电路上并了一个1K电阻和开关指示灯,VCC与此时的输出均为高电平,指示灯不亮。直到检测到红外前方2.5cm(最大范围)有物体遮挡时才会使得红外所在电路导通,让LM393正输入接地,输出低电平0,灯亮。**这就是循迹的原理。

二、寻迹与光敏传感器代码

//串口可以不用,我只是写着玩,当两个传感器检测到遮挡或者光照不足时
#define 	MAIN_Fosc		24000000L	//定义主时钟

#include	"STC15F.H"	


unsigned char date;
#define uchar unsigned char
#define uint unsigned int
sbit Infrared_Sensor=P3^0;		//寻迹模块的IO口
sbit Light_Sensor=P5^4;			//光敏传感器的IO口


/* 函数申明 -----------------------------------------------*/
void Delay15ms();	//都是24MHz的,不同指令集下可能不太准确
void Delay500ms();
void Initial_com(void);		//串口初始化
void UART_SendByte(unsigned char Byte);		//发字符

/******************** 主函数 **************************/
void main(void)
{
	P0M1 = 0;	P0M0 = 0;	//设置为准双向口
	P1M1 = 0;	P1M0 = 0;	//设置为准双向口
	P2M1 = 0;	P2M0 = 0;	//设置为准双向口
	P3M1 = 0;	P3M0 = 0;	//设置为准双向口
	P4M1 = 0;	P4M0 = 0;	//设置为准双向口
	P5M1 = 0;	P5M0 = 0;	//设置为准双向口
	P6M1 = 0;	P6M0 = 0;	//设置为准双向口
	P7M1 = 0;	P7M0 = 0;	//设置为准双向口

	Initial_com();	//串口初始化
	while(1)
	{
		if(Infrared_Sensor==0)		//检测前方是否有遮挡
		{
			Delay15ms();	  //消抖动
			if(Infrared_Sensor==0)	  //有遮挡时,灯亮0.5s然后熄灭
			{
				P55 = 0;
				Delay500ms();
				P55 = 1;
				UART_SendByte(1);		//发个1
				Delay500ms();
			}
		}
		
		if(Light_Sensor==1)		//检测光线是否充足
		{
			Delay15ms();	  //消抖动
			if(Light_Sensor==1)	  //不充足时,灯亮0.5s然后熄灭
			{
				P55 = 0;
				Delay500ms();
				P55 = 1;
				UART_SendByte(2);		//发个2
				Delay500ms();
			}
		}
		 
		if(RI)	//接收到任意指令之后灯亮0.5s
		{
			date=SBUF;    
			P55 = 0;   
			Delay500ms();
			P55 = 1;
			RI=0;
		}
	}
}

void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI==0);
	TI=0;        
}

void Delay15ms()		//@24.000MHz
{
	unsigned char i, j, k;

	i = 2;
	j = 212;
	k = 132;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void Delay500ms()		//@24.000MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 46;
	j = 153;
	k = 245;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


//*****串口初始化函数***********

void Initial_com(void)		//9600
{
	EA=1;        //开总中断
	ES=1;        //允许串口中断
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0x8F;		//设置定时初始值
	TH1 = 0xFD;		//设置定时初始值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
}








过两天会上传MPU-6050加速度传感器的资料代码,非常感谢各位的观看。

  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知何人

万分感谢诸位观看

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值