51单片机 蓝牙小车

一、蓝牙小车

  1. 小车
    1.1 两个直流电机
    1.2驱动板
    1.3 电池
    1.4 单片机系统板
    2.蓝牙

    HC-05 是一款市面上非常常见的经典蓝牙串口通信模块,支持主从模式切换,广泛用于无线数据传输和嵌入式开发,采购时可根据需求选择不同品牌和型号 。‌‌‌

这模块能干啥

HC-05 主要是用来代替串口线,让两个设备之间不用插线就能传数据。

‌无线透传‌:它把串口数据变成蓝牙信号发出去,对方收到后再变回串口数据,就像有一根看不见的线连着 。

‌主从都能当‌:既可以当主机主动连别人,也能当从机被别人连,两个 HC-05 之间也能直接对话 。

‌适用场景‌:常用来做手机控制小车、智能家居遥控、单片机之间传数据等,有效距离大概 10 米左右 。‌‌‌

买回来怎么接

接线比较简单,但要注意电压和引脚对应,接错了可能烧模块或通信失败。

‌引脚功能‌:模块通常有 6 个引脚,常用的是 VCC(电源)、GND(地)、TXD(发送)、RXD(接收),还有 STATE(状态指示)和 KEY(配置用)。‌‌‌

‌电源电压‌:工作电压一般是 3.6V 到 6V,但核心芯片是 3.3V 的,如果用 5V 供电最好加个降压电路,或者直接接 3.3V 更稳妥 。‌‌‌

‌信号线接法‌:

‌交叉连接‌:模块的 TXD 接单片机的 RXD,模块的 RXD 接单片机的 TXD,千万别接反了 。

‌电平匹配‌:如果单片机是 5V 电平,建议在模块 RXD 引脚串个 1k 左右的电阻,防止电压太高损坏模块 。‌‌‌

二、写程序

参考单片机串口交互的程序

https://blog.csdn.net/ganhui13000/article/details/134644689?spm=1011.2415.3001.5331

main.c

c 复制代码
#include <reg52.h>
#include "string.h" 
#include "motor.h"

unsigned char ta[]={"123你好?\r\n"};//
unsigned char ta_temp[10];
unsigned char temp=0,i=0;
bit flag_rx=0;

void uart_init()
{
	SM0=0;
	SM1=1;	
	PCON=0; //SMOD=0
	
	TMOD=0X20;
	TH1=TL1=256-3;
	TR1=1;
	
	REN=1;
			
}

void string(unsigned char *p)
{

	while(*p!=0)
	{
			SBUF=*p;
			while(TI!=1);//等待发送完成
			TI=0;
		    p++;
	
	}
	
}

void main()
{
	//出口初始化
	uart_init();
	
//	SBUF='A';
//	while(TI!=1);//等待发送完成
//	TI=0;
//	SBUF='B';//发送新的数据
//	while(TI!=1);
//	TI=0;
//	
//	string("单片机好玩吗?\r\n");
//	string(ta);

	ES=1;//串口分开关
	EA=1;//总开关
	
	while(1)
	{
		
//		while(RI!=1);//等待接收完成
//		temp=SBUF;//读取数据
//		P2=temp;
//		RI=0;//清除标志位
		
				// 判断 字符串  ta 与ta_temp 是否相等
		if(flag_rx==1)
		{
	
			flag_rx=0;
            
            if(temp=='G'){//up 

                    qianjin();
                    P2=~0X10;
            
            } else if(temp=='K'){//DOWN
            
                houtui();
                 P2=~0X01;
        
            }
            else if(temp=='H'){//L
            
                    zuozhuan();
                    P2=~0X02;
        
            }
            else if(temp=='J'){//R
            
                    P2=~0X04;
                youzhuan();
        
        
            }
            else{  //I
            
                     P2=~0X08;
                stop();
            }
            
            SBUF=temp;
            while(TI!=1);//等待发送完成
            TI=0;
			
		//	string(ta_temp);
			
		}
	}
}

void uart()interrupt 4
{
	if(RI==1)
	{
		temp=SBUF;
		//ta_temp[i]=temp;
		RI=0;
		//i++;
		if(temp=='G'||temp=='H'||temp=='I'||temp=='J'||temp=='K' )
		{
			flag_rx=1;
			//i=0;
			//temp=0;
		}
	}
	if(TI==1)
	{
	
	}
	
	
	

}

motor.h

c 复制代码
#include <reg52.h>

sbit P00=P0^0;//电机1
sbit P01=P0^1;//电机1
sbit P02=P0^2;//电机2
sbit P03=P0^3;//电机2

sbit key=P3^3;

void qianjin();

void houtui();

void zuozhuan();

void youzhuan();

void stop();

void delay(unsigned int ms);

unsigned char keynum=0;

/////////////////////////////////////////////////////////////////////
/*void main()
{

    
    key=1;
    while(1)
    {
        if(key==0)
        {
            
            delay(1000);
            if(key==0)
            {  
                    
               keynum++;
                    if(keynum==6) keynum=0;
            }
            while(key==0);
        
        
        }
        
        if(keynum==1) {qianjin();}
         if(keynum==2) {houtui();}
          if(keynum==3) {zuozhuan();}
           if(keynum==4) {youzhuan();}
            if(keynum==5) {stop();}
          
              
           
    }
}*/
// 功能是延时
//无返回值
//ms的范围  0-65535  测试过1代表2us
void delay(unsigned int ms)
{
    while(ms--);
}

void qianjin()
{

    P00=1;  P01 =0;
    P02=1;  P03 =0;
}
void houtui()
{

    P00=0;  P01 =1;
    P02=0;  P03 =1;
}

void zuozhuan()
{
    P00=0;  P01 =1;
    P02=0;  P03 =0;

}

void youzhuan()
{
    P00=0;  P01 =0;
    P02=0;  P03 =1;

}

void stop()
{

    P00=0;  P01 =0;
    P02=0;  P03 =0;
}

三、手把收教学视频

20260616_103042蓝牙51单片机小车

B站视频

https://www.bilibili.com/video/BV1ukjT61EEN/?vd_source=2f51b53d36c7b878a5128c37eb2800a4