文章目录
- 接线
- 电机控制模块接线(需要额外电源)
- 单片机接线
- 实物图
- 代码相关
- 目录树
- .c文件
- main.c
- Serial.c(不会参考我写的串口文章)
- CarTurn.c(车的相关操作)
- delay.c
- .h文件
- reg51.h(keil软件自带)
- String.h(自带)
- Serial.h(串口一些函数申明)
- delay.h(延时函数申明)
- CarTurn.h(控制小车的一些函数申明)
- 制作过程以及运行结果
- 结束
接线
电机控制模块接线(需要额外电源)
四个绿色帽子,分为俩组(上面俩个紧挨,下面俩个紧挨),每组俩个紧挨,每组对应电机正负极接即可(后续可以通过代码调试这个无所谓)
VCC接外电源,GND接外电源负极(不要接错,非常容易让模块爆掉)
然后A-1A,A-1B对应控制一组电机供电,另一组也一样
我接的P0.0——P0.3口。
单片机接线
串口4针脚对应蓝牙模块四针脚。
单片机GND需要与外电源共地(信号传送准确)
实物图
代码相关
目录树
.c文件
main.c
#include <reg51.h>
#include "Serial.h"
#include "delay.h"
#include "CarTurn.h"void main()
{Init_Serial(); //串口初始化while(1){Car_Stop(); //让小车停止}
}
Serial.c(不会参考我写的串口文章)
#include <reg51.h>
#include <string.h>
#include "Serial.h"
#include "CarTurn.h"
#include "delay.h"char Serial_Str[12] = {'\0'};static int Serial_i = 0;//初始化串口
void Init_Serial()
{TMOD = 0x20; //定时器1,模式8位重装PCON = 0x80; //波特率加倍SCON = 0x50; //串口模式1,可以接受消息TH1 = 0xFA; //9600波特率TL0 = 0xFA;TR1 = 1; //开启定时器1ES = 1; //开启串口中断EA = 1; //开启总中断
}void SendByte(char dat) //发送一位数据
{SBUF = dat;while(!TI);TI = 0;
}void SendString(char *dat) //发送字符串
{ while(*dat != '\0'){SendByte(*dat);dat++;}
}void Serial_Operate() interrupt 4
{if(TI);if(RI){RI = 0;if(SBUF == 'M'){Serial_i = 0;}Serial_Str[Serial_i++] = SBUF;if(Serial_Str[0]=='M' && Serial_Str[1] == '0'){Car_Advance();delay(10);}if(Serial_Str[0]=='M' && Serial_Str[1] == '1'){Car_BackOff();delay(10);}if(Serial_Str[0]=='M' && Serial_Str[1] == '2'){Car_Left();delay(10);}if(Serial_Str[0]=='M' && Serial_Str[1] == '3'){Car_Right();delay(10);}if(Serial_i == 12) Serial_i = 0;}
}
CarTurn.c(车的相关操作)
#include <reg51.h>
#include "CarTurn.h"sbit Car_A1 = P0^0;
sbit Car_A2 = P0^1;sbit Car_B1 = P0^2;
sbit Car_B2 = P0^3;void Car_Right() //右转
{Car_A1 = 0;Car_A2 = 1;Car_B1 = 1;Car_B2 = 0;
}void Car_Left() //左转
{Car_A1 = 1;Car_A2 = 0;Car_B1 = 0;Car_B2 = 1;
}void Car_Advance() //前进
{Car_A1 = 0;Car_A2 = 1;Car_B1 = 0;Car_B2 = 1;
}void Car_BackOff() //后退
{Car_A1 = 1;Car_A2 = 0;Car_B1 = 1;Car_B2 = 0;
}void Car_Stop()
{Car_A1 = 0;Car_A2 = 0;Car_B1 = 0;Car_B2 = 0;
}
delay.c
void delay(unsigned int ms)
{unsigned int i,j;for(i=0;i<ms;i++)for(j=0;j<115;j++);
}
.h文件
reg51.h(keil软件自带)
/*--------------------------------------------------------------------------
REG51.HHeader file for generic 80C51 and 80C31 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/#ifndef __REG51_H__
#define __REG51_H__/* BYTE Register */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;/* BIT Register */
/* PSW */
sbit CY = 0xD7;
sbit AC = 0xD6;
sbit F0 = 0xD5;
sbit RS1 = 0xD4;
sbit RS0 = 0xD3;
sbit OV = 0xD2;
sbit P = 0xD0;/* TCON */
sbit TF1 = 0x8F;
sbit TR1 = 0x8E;
sbit TF0 = 0x8D;
sbit TR0 = 0x8C;
sbit IE1 = 0x8B;
sbit IT1 = 0x8A;
sbit IE0 = 0x89;
sbit IT0 = 0x88;/* IE */
sbit EA = 0xAF;
sbit ES = 0xAC;
sbit ET1 = 0xAB;
sbit EX1 = 0xAA;
sbit ET0 = 0xA9;
sbit EX0 = 0xA8;/* IP */
sbit PS = 0xBC;
sbit PT1 = 0xBB;
sbit PX1 = 0xBA;
sbit PT0 = 0xB9;
sbit PX0 = 0xB8;/* P3 */
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;/* SCON */
sbit SM0 = 0x9F;
sbit SM1 = 0x9E;
sbit SM2 = 0x9D;
sbit REN = 0x9C;
sbit TB8 = 0x9B;
sbit RB8 = 0x9A;
sbit TI = 0x99;
sbit RI = 0x98;#endif
String.h(自带)
/*--------------------------------------------------------------------------
STRING.HString functions.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/#ifndef __STRING_H__
#define __STRING_H__#ifndef _SIZE_T#define _SIZE_Ttypedef unsigned int size_t;
#endif#ifndef NULL#define NULL ((void *) 0L)
#endif#pragma SAVE
#pragma REGPARMS
extern char *strcat (char *s1, char *s2);
extern char *strncat (char *s1, char *s2, int n);extern char strcmp (char *s1, char *s2);
extern char strncmp (char *s1, char *s2, int n);extern char *strcpy (char *s1, char *s2);
extern char *strncpy (char *s1, char *s2, int n);extern int strlen (char *);extern char *strchr (const char *s, char c);
extern int strpos (const char *s, char c);
extern char *strrchr (const char *s, char c);
extern int strrpos (const char *s, char c);extern int strspn (char *s, char *set);
extern int strcspn (char *s, char *set);
extern char *strpbrk (char *s, char *set);
extern char *strrpbrk (char *s, char *set);
extern char *strstr (char *s, char *sub);
extern char *strtok (char *str, const char *set);extern char memcmp (void *s1, void *s2, int n);
extern void *memcpy (void *s1, void *s2, int n);
extern void *memchr (void *s, char val, int n);
extern void *memccpy (void *s1, void *s2, char val, int n);
extern void *memmove (void *s1, void *s2, int n);
extern void *memset (void *s, char val, int n);
#pragma RESTORE#endif
Serial.h(串口一些函数申明)
#ifndef _SERIAL_H_
#define _SERIAL_H_void Init_Serial();void SendByte(char dat);void SendString(char *dat);//void ClearString();//char *RecvString();#endif
delay.h(延时函数申明)
#ifndef _DELAY_H_
#define _DELAY_H_
void delay(unsigned int ms);
#endif
CarTurn.h(控制小车的一些函数申明)
#ifndef _CARTURN_H_
#define _CARTURN_H_void Car_Right(); //右转
void Car_Left(); //左转
void Car_Advance(); //前进
void Car_BackOff(); //后退
void Car_Stop(); //停止
#endif
制作过程以及运行结果
视频等待上传……
基于51单片机做的蓝牙小车项目
结束
如果对你有帮助,点赞支持一下吧
转载联系作者。