材料:
(1)51单片机开发板
(2)l298n电机驱动模块1个
(3)四个电机
(4)JDY-31蓝牙模块
一、组装
(1)L298N电机驱动模块与开发板接线如下图:
(2)蓝牙接线:
VCC接51单片机开发板的5v,GND接51单片机开发板的GND,TXD接51单片机开发板的P30引脚,RXD接51单片机开发板的P31引脚,烧录程序的时候要先把P30,P31两个引脚先拔掉,不然会被占用导致烧录不了程序。
二、烧录问题
烧录程序的时候要先把蓝牙P30,P31两个引脚先拔掉,不然会被占用导致烧录不了程序。
代码:
#include "reg52.h"typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;//定义电机控制管脚
sbit MOTOA=P1^0;
sbit MOTOB=P1^1; //右电机
sbit MOTOC=P1^2;
sbit MOTOD=P1^3; //左电机void delay10us(void)
{unsigned char a,b;for(b=1;b>0;b--)for(a=2;a>0;a--);
}void delay_10us(u16 us)
{while(us--);
}void delay_ms(u16 ms)
{u16 i,j;for(i=ms;i>0;i--)for(j=110;j>0;j--);
}void Car_ForwardRun(void)//前进
{MOTOA=1;MOTOB=0;MOTOC=1;MOTOD=0;
}
void Car_BackwardRun(void)//后退
{MOTOA=0;MOTOB=1;MOTOC=0;MOTOD=1;
}
void Car_StopRun(void)//停止
{MOTOA=0;MOTOB=0;MOTOC=0;MOTOD=0;
}
void Car_LeftRun(void)//左转
{MOTOA=1;MOTOB=0;MOTOC=0;MOTOD=1;
}
void Car_RightRun(void)//右转
{ MOTOA=0;MOTOB=1;MOTOC=1;MOTOD=0;
}#define RELOAD_COUNT 0xFA //宏定义波特率发生器的载入值 9600void UART_Init(void)
{SCON=0X50; //设置为工作方式1TMOD=0X20; //设置计数器工作方式2PCON=0X80; //波特率加倍TH1=RELOAD_COUNT; //计数器初始值设置TL1=TH1;ES=1; //打开接收中断EA=1; //打开总中断TR1=1; //打开计数器
}void UART_SendByte(u8 dat)
{ES=0; //关闭串口中断TI=0; //清发送完毕中断请求标志位SBUF=dat; //发送while(TI==0); //等待发送完毕TI=0; //清发送完毕中断请求标志位ES=1; //允许串口中断
}//定义蓝牙APP中控制按键的键值
#define BLUETOOTH_FORWARD 0x10
#define BLUETOOTH_BACKWARD 0x11
#define BLUETOOTH_LEFT 0x20
#define BLUETOOTH_RIGHT 0x21
#define BLUETOOTH_STOP 0x30void BlueTooth_Init(void)
{UART_Init();
}void BlueTooth_SendData(u8 dat)
{UART_SendByte(dat);
}#define USART_MAX_RECV_LEN 1
u8 USART_RX_BUF[USART_MAX_RECV_LEN];void Uart() interrupt 4
{if(RI){USART_RX_BUF[0]=SBUF;RI = 0;//清除接收中断标志位}
}//主函数
void main()
{BlueTooth_Init();while(1){ switch(USART_RX_BUF[0]){case 1: Car_ForwardRun();break;case 2: Car_BackwardRun();break;case 3: Car_LeftRun();break;case 4: Car_RightRun();break;case 5: Car_StopRun();break;}}
}
4、手机端调试软件
APP:SPP蓝牙串口
说明:
首先要点十六进制,如果前,后,左,右方向不对的话就把1,2,3,4调换一下,或者改程序,还可以改硬件电机的接线