开篇前言:小车这一块,以下是我个人认为要解释的部分。
1–.波特率-------这是一个用来两个东西之间传输数据的,属于电子类专业名词,我们这次学习小车,添加的模块例如蓝牙和超声波,都需要数据传输,所以代码中会定义这个东西。
2–.我这次整理的是每个模块单独使用,如果想做一个整合的小车,就是把我以下整理的代码合到一块,单独烧录的话,单片机会自动覆盖上一个代码,所以在模块学习完后,还是建议大家可以试试,自己做出来的真的好玩。
3–.小车这一块,我会把我都个人理解写出来,希望能帮助到大家的学习,如果有什么错误,也希望大家指出来,一块学习!
1.智能小车的整体模块框架:
单片机最小系统—L298N模块连接—电池—开关—电机
电池提供能量,最小系统编录代码,通过L298N进行一个转换,用以驱动电机进行反应输出,然后再这个框架上进行蓝牙,红外,超声波,循迹的添加。
2.L298N:
连接:12v连接电池盒正极,电源地接地,5v连接VCC,两个马达输出连接小车电机
3.蓝牙:
1+.蓝牙模块上的VCC接51单片机上的VCC,GND接51单片机上的GND
2+.蓝牙模块上的TXD与RXD分别接单片机上的RXD与TXD,即输出连接接收,接收连接输出。(单片机给蓝牙模块说悄悄话,你往左走,蓝牙模块照做了,然后给单片机说我走完了,求夸!)
3+代码中,蓝牙主要是为了方便手机连接,然后让小车前进forward(),后退 back(),向左 left(),向右right(),停下stop()。这里一般是下载一个手机蓝牙助手(应用商店里就有哦!)
4+.代码
(下方代码部分串口,建议配合图片一起观看)
#include <REGX52.H> //头文件
sbit AIN1 = P1^1; //定义L298N上的四个接口,方便电机驱动
sbit AIN2 = P1^2;
sbit AIN3 = P1^3;
sbit AIN4 = P1^4;
int fx = 0; //定义一个变量
void turnleft() //向左
{
AIN1 = 1 ; //右边电机转动,左边不动,以下同理
AIN2 = 0 ; //左右控制的接口需要自行调试
AIN3 = 0 ;
AIN4 = 1 ;
}
void turnright()
{
AIN1 = 0 ;
AIN2 = 1 ;
AIN3 = 1 ;
AIN4 = 0 ;
}
void run() {
AIN1 = 1 ;
AIN2 = 0 ;
AIN3 = 1 ;
AIN4 = 0 ;
}
void stop(){
AIN1 = 0 ;
AIN2 = 0 ;
AIN3 = 0 ;
AIN4 = 0 ;
}
void back(){
AIN1 = 0 ;
AIN2 = 1 ;
AIN3 = 0 ;
AIN4 = 1 ;
}
void timer() //定时器
{
PCON = 0x00; //单片机上管脚名的全称
TMOD=0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1=1; //开启串口
REN=1; //允许接收
SM0=0;
SM1=1; //串口
EA=1; //中断
ES=1;
}
void runtimer() //运行计时器
interrupt 4
{
char receive_data; //定义数据接收
if(RI == 1) //赋值,if语句
{
RI = 0;
receive_data = SBUF; //SBUF单片机数据存储处,读取存储
if(receive_data == 'w') //蓝牙助手上显示的指令“w”,以下同理
{
fx = 1 ;
}
else if(receive_data == 's')
{
fx = 2 ;
}
else if(receive_data == 'a')
{
fx = 3 ;
}
else if(receive_data == 'd')
{
fx = 4 ;
}
else if(receive_data == 'x')
{
fx = 0 ;
}
}
}
void main() //定义主函数,运用上边描述的fx
{
timer();
while(1)
{
if ( fx == 1 )
{
run() ;
} else if