51单片机蓝牙循迹小车

51单片机蓝牙循迹小车

文章目录

    • 51单片机蓝牙循迹小车
  • 前言
  • 一、蓝牙模块、电机驱动模块、红外驱动模块的使用
  • 二、使用步骤
    • 1.中断方式初始化
    • 2.中断子程序
    • 2.电机驱动
  • 总结


前言

基于蓝牙串口通信遥控小车,在程序中对红外感应端口进行监测,在蓝牙的控制,并在程序的判断下执行小车的运动方式。

提示:以下是本篇文章正文内容,下面案例可供参考

一、蓝牙模块、电机驱动模块、红外驱动模块的使用

1、使用HC-06蓝牙模块与单片机进行通信,手机下载SPP蓝牙串口助手,设置好相应的传输信息即可。
51单片机蓝牙循迹小车_第1张图片

2、对于电机驱动模块和红外驱动模块选择了比较低端的,若使用其他的驱动模块修改相应端口即可。51单片机蓝牙循迹小车_第2张图片

二、使用步骤

1.中断方式初始化

代码如下(示例):

void init()
{	
	SCON=0X50;		
	TMOD=0X20;			
	PCON=0X00;		
	TH1=0Xfd;		    
	TL1=0Xfd; 
	TR1= 1;					
	ES = 1;        
   EA = 1;         
}

2.中断子程序

在CPU接受中断申请后进入中断子程序,根据接收到的SBUF寄存器内的数据设置运动方式标志flag。
代码如下(示例):

void run(void) interrupt 4
{
	uchar rd;	
	EA = 0;
	if(RI == 1) 
	{ 
		RI=0; 
		rd = SBUF;
		switch(rd)
		{
			case 1:
				flag=1;
			  break;
			case 2:
				flag=2;
				break;
			case 3:
				LED7 = 0;
				flag=3;
				break;
			case 4:
				LED8 = 0;
				flag=4;
				break;
			case 5:
				all_full();
				flag=5;
			break;
			case 0:
				all_full();
				flag=0;
			break;

		}			
	}		
		EA = 1;
}

2.电机驱动

根据在中断中设置的运动方式标志flag,判断小车是前进、后退、左转、右转、停止还是进行循迹;

代码如下(示例):

void xunji()
{
	if(flag==0)
	{
		stop();
	}else if(flag==1)
	{
		forward();
	}else if(flag==2)
	{
		back();
	}else if(flag==3)
	{
		left();
	}else if(flag==4)
	{
		right();
	}else if(flag==5)
	{
		if(IN1==1)
		{
			right();
		}else if(IN2==1)
					{
						left();
					}else
					{
						forward();
					}
	}
		

}

总结

蓝牙循迹小车用到的单片机资源不断,程序逻辑结构较为简单,以供大家参考。

整体代码如下:



#include

#define uchar unsigned char
#define uint  unsigned int


//电机驱动端口
sbit R1=P1^0;
sbit R2=P1^1;
sbit L1=P1^2;
sbit L2=P1^3;

//接红外探测器器的端口
sbit IN1=P1^4;
sbit IN2=P1^5;

sbit LED7 = P1^6;
sbit LED8 = P1^7;

int flag;//小车运动方式标志
//信号的全灭
void all_full()
{
	LED7 = 1;
	LED8 = 1;
	}
//小车直行
void forward()
{
		R1=1;
		R2=0;
		L1=0;
		L2=1;
}
//小车左转
void right()
{
	R1=0;
	R2=1;
	L1=0;
	L2=1;
}
//小车右转
void left()
{
	R1=1;
	R2=0;
	L1=1;
	L2=0;
}
//小车后退
void back()
{
	R1=0;
	R2=1;
	L1=1;
	L2=0;
}
//小车停止
void stop()
{
	R1=0;
	R2=0;
	L1=0;
	L2=0;
}
//根据蓝牙接收的信息判断小车状态
void xunji()
{
	if(flag==0)
	{
		stop();
	}else if(flag==1)
	{
		forward();
	}else if(flag==2)
	{
		back();
	}else if(flag==3)
	{
		left();
	}else if(flag==4)
	{
		right();
	}else if(flag==5)
	{
		if(IN1==1)
		{
			right();
		}else if(IN2==1)
					{
						left();
					}else
					{
						forward();
					}
	}
		

}
//中断子程序
void run(void) interrupt 4
{
	uchar rd;	
	EA = 0;
	if(RI == 1) 
	{ 
		RI=0; 
		rd = SBUF;
		switch(rd)
		{
			case 1:
				flag=1;
			  break;
			case 2:
				flag=2;
				break;
			case 3:
				LED7 = 0;
				flag=3;
				break;
			case 4:
				LED8 = 0;
				flag=4;
				break;
			case 5:
				all_full();
				flag=5;
			break;
			case 0:
				all_full();
				flag=0;
			break;

		}			
	}		
		EA = 1;
}
//串口初始化
void init()
{	
	SCON=0X50;		
	TMOD=0X20;			
	PCON=0X00;		
	TH1=0Xfd;		    
	TL1=0Xfd; 
	TR1= 1;					
	ES = 1;        
   EA = 1;         
}


void main()
{
	init();	
	while(1)
	{
		xunji();
	}
}

你可能感兴趣的:(笔记,单片机,蓝牙)