基于51单片机蓝牙小车

article/2025/10/11 17:58:04

文章目录

  • 接线
    • 电机控制模块接线(需要额外电源)
    • 单片机接线
  • 实物图
  • 代码相关
    • 目录树
    • .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单片机做的蓝牙小车项目

结束

如果对你有帮助,点赞支持一下吧
转载联系作者。


http://chatgpt.dhexx.cn/article/vBKXhWIv.shtml

相关文章

51单片机 | 红外遥控实验

文章目录 一、红外遥控介绍1.红外线简介2.红外遥控的原理2.1 红外发射装置2.2 红外接收设备二、硬件设计三、软件设计1.红外初始化函数2.红外解码函数3.主函数四、实验现象这一节来介绍一种无线通信技术–红外遥控通信。我们开发板标配了一个一体化红外接收头和红外遥控器,我们…

基于51单片机手机电话拨号盘模拟proteus仿真

功能简介&#xff1a; 1.采用4X4矩阵键盘实现号码输入&#xff0c;并在LCD液晶上显示 2.按下enter键&#xff0c;显示calling…&#xff0c;并且蜂鸣器模拟电话拨号发声 3.按下*键&#xff0c;退格&#xff0c;按下#键&#xff0c;清楚电话号码 4.拨号过程中&#xff0c;长按#取…

51单片机 | 串口通信实验

文章目录 一、通信的基本概念1.串行通信与并行通信2. 异步通信与同步通信3.单工、半双工与全双工通信4.通信速率二、51单片机串口介绍1.串口通信介绍2.串口相关寄存器3.串口工作方式3.1 方式03.2 方式13.3 方式2和方式34.串口的使用方法三、硬件设计四、软件设计五、实验现象这…

keil c51+protues 实现简单密码锁

原理图 源码&#xff1a; 矩阵键盘key.c #include<reg51.h>sbit key1P1^0; sbit key2P1^1; sbit key3P1^2; sbit key4P1^3; sbit key5P1^4; sbit key6P1^5; sbit key7P1^6; sbit key8P1^7; sbit key9P3^0;void delay(unsigned int m){unsigned int n,k0;for(k0;k<…

51单片机智能小车蓝牙

材料&#xff1a; &#xff08;1&#xff09;51单片机开发板 &#xff08;2&#xff09;l298n电机驱动模块1个 &#xff08;3&#xff09;四个电机 &#xff08;4&#xff09;JDY-31蓝牙模块 一、组装 (1)L298N电机驱动模块与开发板接线如下图&#xff1a; (2)蓝牙接线&a…

51单片机通过ESP8266模块与手机进行通讯(单片机)

本文章内容已经弃用&#xff0c;最新内容请参考ESP8266系列ESP-01S模块的配置使用&#xff08;51单片机&#xff09; Step1:配置ESP8266 通过USB转TTL模块把ESP8266模块和电脑连接起来&#xff0c;如图 把ESP8266模块的VCC,GND,CH_PD,UTXD,URXD口分别接USB转TTL模块的3.3v,地,3…

C51单片机用esp8266点亮led灯(含源码)

大家好&#xff0c;我是一个单片机新手&#xff0c;也是一个兴趣者&#xff0c;我以前想用c51单片机用esp8266模块的热点控制led小灯的&#xff0c;实验&#xff0c;可是网上的资料很少&#xff0c;所以今天来给新生&#xff0c;老手也好&#xff0c;想出一个教程&#xff0c;希…

C51---PWM 脉冲宽度调制

1.PWM:脉冲宽度调制,它是通过一系列脉冲宽度进行调制&#xff0c;等效出所需要的波形&#xff08;包含形状以及幅值&#xff09;。对模拟信号电平进行数字编码。也就是说通过调节占空比的变化来调节信号、能量等的变化&#xff0c;占空比就是指在一个周期内&#xff0c;信号处于…

基于51单片机的手机电话拨号盘模拟proteus仿真

功能&#xff1a; 0.本项目采用STC89C52作为单片机系统的控制MCU 1.采用4X4矩阵键盘实现号码输入&#xff0c;并在LCD液晶上显示 2.按下enter键&#xff0c;显示calling…&#xff0c;并且蜂鸣器模拟电话拨号发声 3.按下*键&#xff0c;退格&#xff0c;按下#键&#xff0c;清楚…

基于51单片机的简易自动灌溉系统

基于51单片机的简易自动灌溉系统如下图所示。 系统的主要构成 主控核心&#xff1a;AT89C51. 显示器&#xff1a;LCD1602. 输入设备&#xff1a;独立按键&#xff08;4个&#xff09;. 水泵控制&#xff1a;继电器控制. 外部数据存储&#xff1a;EEPROM. 温湿度传感器&am…

51单片机期末课程作业之蓝牙、操控、测速、里程小车

文章底部附源码 课程设计报告 学 科&#xff1a; 单片机原理及应用 项 目&#xff1a; 里程记录仪 学 院&#xff1a; 专业、年级&#xff1a; 指导老师&#xff1a; 摘要 设计首先实现对…

【超详细】C51单片机与HC-05蓝牙模块实现手机点灯

此文记录HC05蓝牙模块在C51单片机上的学习历程 文章目录 一、硬件连接(1)配置模式下接线(2)正常模式下接线 二、配置模式操作三、正常模式四、使用蓝牙通过蓝牙调试app点灯1.单片机代码烧录与蓝牙连接2.蓝牙调试app配置 一、硬件连接 HC05一共有6个引脚&#xff0c;此实验一般…

【单片机】C51中的I2C操作-Proteus+Keil4+C语言实现

51单片机中I2C读写操作 开发板&#xff1a;普中51-单核-A2&#xff1b; I2C器件-EEPROM&#xff1a;AT24C02、FM24C02(仿真EEPROM); 仿真软件&#xff1a;proteus&#xff1b; 开发环境&#xff1a;Keil4&#xff1b; 参考资料&#xff1a;开发板所附视频&#xff1b; 如有错误…

51单片机 智能小车

主函数中extern char speed 是在整个工程中与别处的speed共用一个内存 sprintf字串格式化命令&#xff0c;主要功能是把格式化的数据写入某个字符串中。 一、小车组装、用面包板供电、单片机也可以用面包板供电&#xff0c;必须共地、分文件&#xff08;模块化编程&#xff09…

C51单片机 SIM900A 手机给门禁解锁 智能家居 【C程序代码已开源,更新至Ver4.0】...

为何要实施这个项目? 一般小区楼下,每幢都会有一个门禁系统, 可以使用钥匙打开门禁, 有的可以使用刷卡打开门禁, 有的可以使用密码打开门禁, 但是,长期下来,因为小区人多,锁的钥匙孔会被捅坏,物业修起来也很怠慢 使用密码按键解锁门禁,按键也会失灵 每家都会安装一个…

基于STC89C51单片机,CH340芯片的下载电路

前几天看到了卓晴公众号写的三篇关于STC系列单片机的下载电路&#xff0c;然后结合了其他的文章&#xff0c;对下载电路有了更加深入的了解&#xff0c;在这里我梳理一下自己的学习过程&#xff0c;附上完整的资料&#xff0c;方便日后查看&#xff0c;也方便有兴趣的同学交流讨…

C51单片机简易密码锁(课程设计)

已经过测试&#xff0c;全部可用。手机好像不能发博客&#xff0c;相册提取图片代码粘黏复制可用。 本密码锁用于开门关门。绿灯保持常亮状态&#xff0c;表示一直通电状态。如果处于开门状态&#xff0c;则红灯也会亮起。&#xff08;单片机上无法显示红绿灯&#xff0c;仿真…

51单片机的架构与原理(STC89C51)

前言 学习单片机&#xff0c;不管怎么学都是要走一些弯路的&#xff0c;有的人弯路走得多&#xff0c;有多人弯路走得少&#xff0c;有些人中途就放弃了&#xff0c;也有不少人成功上岸&#xff0c;掌握了各式各样的单片机、处理器。用51单片机来学习是最合适不过的&#xff0c…

C51单片机利用HC-05蓝牙模块实现手机点灯

蓝牙通信&#xff0c;实现手机端远程(15米)控制单片机&#xff0c;这听起来对于初学者的我来说&#xff0c;是那么不可思议&#xff0c;经过不断地实验&#xff0c;阅读其他大佬的文章&#xff0c;终于实现了。 在有基础的通信原理知识的前提下&#xff0c;知&#xff0c;HC-05…

基于C51单片机的ESP8266Wifi模块(ESP-01s)编程(详细)

1、模块简介 ESP-01S 是由安信可科技开发的 Wi-Fi 模块&#xff0c;该模块核心处理器为ESP8266。ESP8266 拥有完整的且自成体系的 Wi-Fi 网络功能&#xff0c;既能够独立应用&#xff0c;也可以作为从机搭载于其他主机 MCU 运行。当 ESP8266 独立应用时&#xff0c;能够直接从外…